SpringBoot란?
Spring framework 기반 프로젝트를 복잡한 설정없이 쉽고 빠르게 만들어주는 라이브러리.
Spring Boot의 AutoConfigure(자동구성)기능을 통해 많은설정들이 자동화 되기 시작했다.
SpringBoot의 장점
1. 라이브러리 관리 자동화
: SpringBoot Starter 라이브러리를 등록해서 라이브러리 의존성을 간단히 관리할 수 있다.
2. 라이브러리 버전 자동관리
: 기존 Spring 라이브러리는 버전을 직접 입력해야 했지만, SpringBoot는 pom.xml에 스프링 부트 버전을 입력해놓으면 Spring 라이브러리 뿐만 아니라 third party라이브러리들도 호환되는 버전으로 알아서 다운로드 및 관리를 제공한다.
3. 설정 자동화
: 스프링 부트는 @EnableAutoConfiguration 어노테이션을 선언해서 스프링에서 자주 사용했던 설정들을 자동으로 등록한다.
4. 내장Tomcat.
: 스프링 부트는 WAS인 Tomcat을 내장하고 있어 @SpringBootApplication 어노테이션이 선언되어 있는 클래스의 mail()메소드를 실행하는 것만으로 서버를 구동시킬 수 있다.
내장 톰캣을 사용하기 위한 별도 설정없이 web starter 의존성만 추가해주면 된다.
5. 독립적으로 실행가능함 JAR
: 웹 프로젝트라면 war파일로 패키징 작업이 필요하지만, Spring Boot는 내장 톰캣을 지원하기 때문에 jar 파일로 패키징하여 웹 애플리케이션을 실행시킬 수 있다.
Annotation 이란?
Annotation(@)은 사전적 의미로 주석이라는 뜻이다.자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다.즉 프로그램에게 추가적인 정보를 제공해주는 메타데이터(데이터를 위한 데이터)라고 볼 수 있다.
Annotation의 용도
- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
- 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공
- 실행(런타임) 시 특정 기능을 실행하도록 정보를 제공
Annotation의 사용 순서
- Annotation을 정의한다.
- Class에 Annotation을 배치한다.
- 코드가 실행되는 중에 Reflection을 이용하여 추가 정보를 획득하여 기능을 실시한다.
* Reflection : 프로그램이 실행 중에 자신의 구조와 동작을 검사, 조사하고 수정하는 것.
@Annotation 종류
@Controller
: Spring의 Controller를 의미한다. Spring MVC에서 Controller클래스에 쓰인다.
@RestController
: Spring에서 Controller 중 View로 응답하지 않는, Controller를 의미한다. method의 반환 결과를 JSON 형태로 반환한다.
이 Annotation이 적혀있는 Controller의 method는 HttpResponse로 바로 응답이 가능하다.
@ResponseBody 역할을 자동적으로 해주는 Annotation이다.
@Controller + @ResponseBody를 사용하면 @ResponseBody를 모든 메소드에서 적용한다.
* @Controller 와 @RestController 의 차이
- @Controller
API와 view를 동시에 사용하는 경우에 사용한다.
대신 API 서비스로 사용하는 경우는 @ResponseBody를 사용하여 객체를 반환한다.
view(화면) return이 주목적이다. - @RestController
view가 필요없는 API만 지원하는 서비스에서 사용한다.
Spring 4.0.1부터 제공되며 @RequestMapping 메서드가 기본적으로 @ResponseBody 의미를 가정한다.
data(json, xml 등) return이 주목적이다.
즉, @RestController = @Controller + @ResponseBody 이다.
@GetMapping
: Http Get Method에 해당하는 단축 표현으로 서버의 리소스를 조회할 때 사용한다. (Get 방식으로만 접근가능)
@PostMapping
: Http Post Method에 해당하는 단축 표현으로 서버에 리소스를 등록(저장)할 때 사용한다. (Post 방식으로만 접근가능)
@RequestBody
: 요청이 온 데이터 Http Body(JSON이나 XML형식)를 바로 Class나 model로 매핑하기 위한 Annotation이다.
POST나 PUT, PATCH로 요청을 받을때에, 요청에서 넘어온 body 값들을 자바 타입으로 파싱해준다.
@RequestHeader
: Request의 header값을 가져올 수 있으며, 메소드의 파라미터에 사용한다.
자동으로 HTTP 요청의 헤더 항목중에서 어노테이션이 명시한 value값에 해당하는 항목을 메소드의 파라미터 변수에 매핑해준다.
@RequestParam
: 요청 URL Query Parameter에서 가져와 매핑해주며 method의 파라미터에 사용된다.
괄호 안에 입력 값을 따로 넣지 않으면, HTTP 요청 parameter 중에서 method의 파라미터명과 일치하는 값을 가져온다.
HTTP GET 요청에 대해 매칭되는 request parameter 값이 자동으로 들어가며, url 뒤에 붙는 parameter 값을 가져올 때 사용한다.
@ResponseBody
: HttpMessageConverter를 이용하여 JSON 혹은 xml 로 요청에 응답할수 있게 해주는 Annotation이다.
view가 아닌 JSON 형식의 값을 응답할 때 사용하는 Annotation으로 문자열을 리턴하면 그 값을 http response header가 아닌 response body에 들어간다.
이미 RestController Annotation이 붙어 있다면, 사용하지 않아도 된다.
Lombok 이란?
Java 라이브러리로 반복되는 getter, setter, toString, 생성자 정의 등의 반복 메서드 작성코드를 줄여주는 코드 다이어트 라이브러리이다.
여러가지 @annotation을 제공하고 이를 기반으로 반복 소스코드를 컴파일 과정에서 생성해주는 방식으로 동작하는 라이브러리다.
Controller란?
Controller은 주로 사용자의 요청을 처리하고 난 후 정해진 뷰에 객체를 넘겨주는 역할을한다.
스프링에서 controller를 쓰기위한 annotation으로 @Controller와 @RestController가 있다.
댓글