👩‍🏫 Study/스프링부트 강의

[1. 스프링 입문] 스프링 웹 개발 기초

개발진스 2023. 10. 1. 17:32
728x90

1. 프로젝트 생성 

 

Spring Web : 웹프로젝트 만들 때 사용하고 아파치톰캣 컨테이너 내장

Thymeleaf : HTML을 화면에 출력하는 템플릿엔진 중 하나

 

프로젝트 폴더는 다음과 같다. 

  • idea : 인텔리제이 설정파일 
  • src : 하위에 main, test이 나뉘어져있음(요새 트렌드) 
  • src/main/java : 실제 자바 소스 
  • src/main/resources : 자바파일 제외한 설정 파일 등 
  • build.gradle : gradle 설정파일

 

설정파일인 build.gradle 파일을 클릭하면 아래와 같이 구성된다.

  • implementation : 항상 적용되는 라이브러리 
  • testImplementation : 테스트 코드를 수행할 때만 적용되는 라이브러리(jUnit5이 default dependency) 
  • respositories : gradle이 라이브러리를 다운 받는 원격저장소(default로 mavenCentral. 특정 URL을 넣을 수도 있음)

 

2. 라이브러리 살펴보기

 

핵심 라이브러리는 다음과 같다. 

 

스프링부트 라이브러리 

  • spring-boot-starter-web 
    • spring-boot-starter-tomcat : 톰캣 
    • spring-webmvc : 스프링 웹 MVC 
  • spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진(View) 
  • spring-boot-starter(공통) : 스프링부트 + 스프링코어 + 로깅 
    • spring-boot 
      • spring-core 
    • spring-boot-starter-logging : slf4j는 인터페이스이고 logback은 구현체 
      • logback, slf4j

 

테스트 라이브러리

  • spring-boot-starter-test
    • junit: 테스트 프레임워크
    • mockito: 목 라이브러리
    • assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
    • spring-test: 스프링 통합 테스트 지원

 

External Libraries를 클릭해보면 수많은 라이브러리들이 dependencies되어 있다. 

Gradle은 사용할 dependencies를 알아서 관리해주기 때문에 필요한 라이브러리들이 있으면 모두 관리가 된다. 

gradle을 클릭하면 관리되는 dependencies를 확인할 수 있다.

 

3.  View 환경설정 라이브러리 살펴보기

 

기본적인 welcome view page를 만들려면 resources/static하위에 index.html을 만들어주면 된다. 기본 localhost:8080으로 접속하면 스프링은 static 하위에 index.html을 먼저 찾는다. 

thymeleaf 템플릿엔진으로 만든 view page를 띄우기 위해서 Controller를 만들고 resources/templates 하위에 Controller 메소드의 return명 + .html을 이름으로 만들어주면 된다. 

 

4. 정적 컨텐츠

 

resources/static 하위에 html파일을 생성하면 동적인 동작은 없는 단순한 html 컨텐츠를 반환해준다. 하위에 hello-static.html을 만들었다면, localhost:8080/hello-static.html로 접근할 수 있다.

그리고 클라이언트가 요청시, 1순위로 컨트롤러에 hello-static.html 관련 컨트롤러 메소드가 있는지 찾는다. 없으면 2순위로 resources: static/hello-static.html을 찾는다.

 

5. MVC와 템플릿 엔진 

MVC : Model(비지니스로직 관리), View(화면), Controller(서버)

 

@RequestParam의 required는 true가 default이기 때문에 따로 설정을 안 했다면 값이 있어야 한다. hello-mvc @GetMapping("hello-mvc") 컨트롤러를 만들고 localhost:8080/hello-mvc?name=spring으로 요청을 보낸다면 아래와 같은 프로세스로 동작한다.

 

6. API

 

정적컨텐츠 방식을 제외한 웹개발 방식은 위에서 설명한 MVC와 템플릿 엔진 방식과 API방식으로 크게 2가지라고 볼 수 있다. 템플릿엔진 방식을 사용하면 데이터를 VIewResolver를 통해 HTML로 내려주지만 API 방식을 사용하면 HttpMessageConverter가 작동하여 String,JSON 등의 형식으로 데이터만 http body에 담아 내려주게 된다.

 

 

위의 코드에서 보듯이 API방식을 사용하려면 @ResponseBody 어노테이션을 사용한다.

이 어노테이션을 사용하면 데이터를 http body에 담아 보낸다. 컨트롤러 전체를 API방식으로 사용하려면 컨트롤러에 @RestController 어노테이션을 사용하면 된다.

이 어노테이션을 사용하면 @ResponseBody 어노테이션을 붙이지 않아도 http의 바디부에 데이터를 넣어 보낼 수 있다.

 

특히 객체(Object)를 API방식으로 리턴할 때 JSON형식으로 리턴한다고 했는데, 기본적으로 MappingJackson2HttpMessageConverter가 작동한다. json형식으로 만들어주는 라이브러리가 몇 개 있는데 그 중 하나가 Jackson이고 구글사의 GSON이 있다. 스프링은 내부적으로 Jackson 라이브러리를 디폴트로 채택하고 있다.

 

데이터를 XML등으로 return받고 싶으면 http Accept 헤더와 서버의 컨트롤러 반환타입정보를 조합해서 HttpMessageConverter를 바꿀 수 있다.

 

 

@ResponseBody 사용 원리

 

@ResponseBody 를 사용 

  • HTTP의 BODY에 문자 내용을 직접 반환 
  • viewResolver 대신에 HttpMessageConverter 가 동작 
  • 기본 문자처리: StringHttpMessageConverter 
  • 기본 객체처리: MappingJackson2HttpMessageConverter 
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

 

 

 

 

 

 

728x90