스프링부트 강의 정리 (인프런)

ilko·2023년 8월 17일

IDE - c언어를 할 때는 vim과 vscode만 썼지만 이번 기회에 자바할 때 많이 쓰는 IDE인 IntelliJ를 써본다.

프레임워크/ 언어 - 이번 42해커톤 백엔드에서는 자바와 스프링부트를 활용해서 서버를 구성할 것 이기 때문에 인프런의 스프링부트 강의를 듣는다.

JAVA - 강의와 같은 환경을 위해 java11 JDK 설치했다.

spring boot - 요즘은 쉽게 https://start.spring.io/ 페이지에서 스프링 설정을 구성할 수 있다고 한다. 과거에는 일일이 타이핑이나 복사 해야하는 귀찮은 구성 파일(ex: .gitignore)들을 자동으로 만들어서 압축파일로 내려받으면 된다. gradle - java 조합으로 간다.

라이브러리 - 강의에서 스트링부트 설정 할 때 thymeleaf(html 만들어 주는), web, (자동으로 들어 온)test 라이브러리가 있다.

  • External Libraries 디렉을 보면 엄청 많은 라이브러리가 땡겨져 있다.(톰캣, 아파치, 스프링부트 관련 등) -> 기본적으로 웹 하려면 이만큼의 라이브러리.... 그치 당연하지.
  • gradle 에서는 라이브러리들 끼리 의존성을 해결해줘서 되게 좋다.
    • 우측 상단 쪽에 코끼리(gradle)아이콘을 누르면 디펜던시를 확인 할 수 있다.(나중에 웹서브 과제에서 C++과 http 1(?)프로토콜로 엔진엑스를 구현해야 하는데 ..미리 써보면 좋겠지.)
  • 정리하자면

    이런식 ..

프로젝트 환경설정

  • 스프링에서 wellcome page는 index.html을 먼저 찾는다.
    • main-> resources-> static 폴더에 index.html파일 만들고 서버 실행하고 접속해보면 뜬다.
  • thymeleaf라는 템플렛 엔진을 사용할거다.
  • hello.spring폴더에 패키지 만들고 컨트롤러 만듬.
  • ...타임리프 템플릿엔진 동작 플로우.->
    • 템플릿엔진이 url엔드포인트를 컨트롤러로 잡아주는건가 신기하네. 문자열과 매칭되는 url를 GET요청-> 반환값으로 판단 하는듯? 되게 편리하네.

빌드하고 실행파일 만들기

  • 강의대로 ./gradlew build 명령어를 입력했지만 되지 않았다.
    • $JAVA_HOME 환경변수 문제인 것 같아서 파워쉘에서 setx 명령어로 환경변수 동기화(?)를 해줬지만 안돼서 보아하니.. 윈도우에 깔았더라도 wsl에서 사용하려면 apt install로 다시 설치를 해야했다.(생각해보면 다른 운영체제인데 당연한거다.)
  • 빌드해서 생긴 build 폴더를 타고 들어가서 있는 .jar 확장자 파일을 java -jar "파일" 명령어로 실행하니 서버가 켜졌다.
  • 옛날에는 톰캣에 넣고 아주 복잡한 과정이 있었지만 지금은 편해진거라고 하신다.
  • .gradlew clean 명령어로 빌드폴더 날릴 수 있음.

스프링 웹 개발 기초

  • 정적 컨텐츠 -> 서버에서 뭐 하는거없이 파일을 전달하는 것.
  • MVC와 템플릿 엔진 -> 복잡한 과정을 구조화한 설계 방법. html을 그대로 주는게 아니라 프로그래밍해서 동적으로 움직이게 해줌.
  • API -> 보통 json형식으로 데이터 리턴한다는 말인듯? 결국엔 함수의 반환값이나 데이터들을 어떻게 활용하는지 알려주는 설명서?
  • 정적 컨텐츠 ->resources/static 폴더안에 만든다. 뭐 말 그대로 static 정적 컨텐츠라 따로 프로그래밍 되는게 아니라 띄우는 홈페이지.(에러 페이지를 많이 넣나?)(컨트롤러가 항상 필요가 없는 부분인가?)
  • MVC -> 유지보수/ 구현을 직관적으로 분리해서 하기위한 방법. 마치 c할 때 비슷한 함수끼리 묶어서 소스파일로 나누는 느낌. )보이는 부분, 동작하는 부분, 데이터 갖다주는 부분
  • 템플릿 엔진 -> 파라미터를 url에 담아서 주면 템플릿 엔진이 html파일을 바꿔줌.(현재는 thymeleaf)
  • API -> 정적 컨텐츠를 제외하면 html로 내리냐, api방식으로 데이터를 바로 내리냐의 차이.
    -> @ResponseBody 어노테이션: http 바디부분에 이 데이터를 직접 넣어주겠다. (return 값으로 넣어주나벼) -> view 없이 그냥 돌아감. 문자열 그대로 들어감. 그래서 프론트에 넘겨주는건가.
    -> 객체(예를 들어 json)를 리턴 할 수도 있음.
  • getter and setter -> 자바빈 규약. -> 프로퍼티 접근 방식.

*비즈니스 요구사항 정리

-> 구현

테스트 케이스

  • 보통 main 메서드 또는 컨트롤러로 했겠지만 단점이 많아서 JUnit이라는 프레임워크를 사용해서 간단하게 테스트 해볼 수 있다.
profile
아직은

1개의 댓글

comment-user-thumbnail
2023년 8월 17일

많은 것을 배웠습니다, 감사합니다.

답글 달기