[JSCODE] Spring Boot 프로젝트 생성하기

노을·2023년 3월 14일
0

JSCODE

목록 보기
2/7

공부 자료

✅ @Controller와 @RestController의 차이

문득 @Controller@RestController의 차이를 정확히 알고 있나?라는 생각이 들어 찾아보게 되었다.

@RestController = @Controller + @ResponseBody

@Controller : 컨트롤러가 viewName을 반환하면, viewResolver가 그에 해당하는 뷰를 찾는다.




@RestController : 컨트롤러가 데이터를 반환하면, viewResolver 말고 Converter가 동작한다. 클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해 Converter가 선택된다. 데이터를 해당하는 타입(ex. string, json..)으로 Serialize 해준다.

참고한 글 : [Spring] @Controller와 @RestController 차이


✅ intelliJ가 아닌 jar파일로 빌드하고 실행하기

jar파일로 빌드하는 걸 해보는 이유는 배포할 때 이 jar파일을 넘기면 된다고만 생각했는데 모그님이 더 자세히 이유를 말해주셔서 그대로 받아 적겠다!

우리가 개발하는 스프링부트 프로젝트를 빌드하면 위와 같은 하나의 jar파일로 압축이 됩니다. ‘배포’를 한다는건 만들어진 jar파일을 내 로컬 컴퓨터가 아닌 서버에 올려서 실행한다는 것입니다.
저 jar파일만 배포하면 스프링부트 프로젝트 전체가 실행 가능한거죠!

./gradlew build를 하면 build 폴더에 libs가 폴더가 생긴다.
그럼 libs 폴더 안에 있는 jar 파일을 실행하면 된다. (-plain.jar가 아닌 jar 파일)
java -jar [jar파일명].jar


✅ 문자열 리턴하는 GET api 생성하기

@GetMapping("api/test")
public String test(){
  log.info("test success");
  return "test";
}

요청 URL : http://localhost:8080/api/test


✅ query parameter로 입력받은 값을 리턴하는 GET api 생성하기

@GetMapping("api/name")
public String getName(@RequestParam String name) {
  log.info("getName={}", name);
  return name;
}

요청 URL : http://localhost:8080/api/name?name=노을


✅ (심화) lombok 의존성 추가하고 로그 찍어보기

 implementation 'org.projectlombok:lombok'

build.gradlelombok 의존성을 추가한다.

Enable annotation processing 을 체크해준다!


lombok 플러그인을 설치해준다.

나는 컴파일 에러가 발생해서

annotationProcessor('org.projectlombok:lombok')

를 추가해줬더니 잘 돌아갔다.


⭐ 로그를 사용하는 이유

System.out.println() 으로 콘솔에 찍어도 되지만,
log를 사용하면 스레드 정보나 클래스 이름 같은 부가 정보를 함계 볼 수 있고 출력모양을 조정할 수 있다. 그리고 로그레벨에 맞게 개발 서버에는 모든 로그를 출력하고, 운영서버에서는 출력하지 않게 할 수 있다.성능도 System.out.println() 보다 좋고, 콘솔 뿐만 아니라 따로 파일에 저장할 수 있다.

우리는 로그 라이브러리를 중에서 Slf4j를 쓴 것이다. (lombok으로 편리하게 사용함!)

참고로 로그 레벨은 다음과 같다.

TRACE > DEBUG > INFO > WARN > ERROR > FATAL

INFO로 셋팅하면, INFO, WARN, ERROR, FATAL은 기록된다.

FATAL : 아주 심각한 에러가 발생한 상태를 나타낸다.
ERROR : 어떠한 요청을 처리하는 중 문제가 발생한 상태를 나타낸다. 프로그램 동작에 큰 문제가 발생했다는 것으로 즉시 문제를 조사해야 하는 것 (DB를 사용할 수 없는 상태, 중요 에러가 나오는 상황)
WARN : 프로그램의 실행에는 문제가 없지만, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타낸다. WARN에서도 2가지의 부분에선 종료가 일어남
명확한 문제 : 현재 데이터를 사용 불가, 캐시값 사용 등
잠재적 문제 : 개발 모드로 프로그램 시작, 관리자 콘솔 비밀번호가 보호되지 않고 접속 등
INFO : 어떠한 상태 변경과 같은 정보성 메시지를 나타낸다.
DEBUG : 개발시 디버그 용도로 사용하는 메시지를 나타낸다.
TRACE : 디버그 레벨이 너무 광범위한 것을 해결하기 위해서 좀 더 상세한 이벤트를 나타낸다.

출처 : [Web] Logging Level(로그 레벨) 이란?


✅ 블로그 글 쓰기

  • 배운 내용, 깨달은 점
    • @RestController는 json을 리턴할 때 쓰고 @Controller는 뷰를 리턴할 때 쓴다고만 알고 있었는데 핸들러 매퍼, 디스패처 서블릿과 같이 구조의 차이를 알게 되었다.
    • jar파일로 빌드하고 실행하는 과정을 이전보다 자세히 알게 되었다.
  • 어려웠던 점, 반성하고 싶은 점 / 개선할 방법
    • 인텔리제이 ultimate 버전에서는 그냥 spring boot 프로젝트를 생성할 수 있다는 것을 처음 알게 되었다. 항상 comunity 버전을 써서 intializr 들어가서 압출 풀었는데,,, 다시 한번 귀찮아서 ultimate 버전 안 설치한 나를 반성한다...ㅎㅎㅎ
  • 궁금한 점
    • 궁금한 점은 없고 모그님 멘토링 항상 잘해주셔서 감사합니다! 그리고 너무 예뻐요..❤
profile
진짜를 알면 곁가지를 몰라도 된다

0개의 댓글

관련 채용 정보