이번 유닛에서는 드디어 Spring Boot에 대해서 학습하는 시간을 가졌다. 많이는 들어봤지만 내가 직접 사용해보진 않아서 Spring Boot라는 단어만 익숙하지 개념에 대해서는 전혀 몰랐다. 이번 유닛에서는 http 요청에 대한 Spring Boot 어노테이션 사용법과 기본 개념에 대해서 학습했다. 학습했던 것들의 정리와 느낀 점들을 다시 풀어보겠다.
스프링 프레임워크를 사용하는 프로젝트를 아주 간편하게 설정할 수 있는 스프링 프레임워크의 서브 프로젝트, 스프링을 더 쉽게 이용할 수 있도록 해 주는 스프링 프레임워크 모듈.
스프링에서는 초기 설정이 매우 복잡하고 귀찮았지만, 스프링 부트는 이런 초기 설정을 간단하게 해준다.
Spring Boot makes it easy to create stand-alone
Most Spring Boot applications need very little Spring configuration.
웹 컨테이너를 내장하고 있어 최소한의 설정으로 쉽게 어플리케이션을 만들 수 있다.
자바에서는 @어노테이션 이름
의 형식으로 특정 클래스, 메소드, 변수의 맨 위에 어노테이션(Annotation)을 달아줄 수 있다. 스프링 프로젝트 코드에서도 @SpringBootApplication
라는 어노테이션을 확인할 수 있다.
어노테이션 자바 코드에 선언해주면 컴파일러나 런타임이 돌아가면서 주석을 해석하고, 각 선언에 맞는 처리를 자동으로 해준다. 자바, 스프링에서 기본적으로 제공하는 어노테이션도 있고, 필요에 따라 직접 선언하여 사용할 수도 있다.
@SpringBootApplication : @Configuration
, @EnableAutoConfiguration
, @ComponentScan
등의 annotation을 합친 것. 주로 메인 클래스 위에 사용한다.
@EnableAutoConfiguration : 미리 설정해놓은 자바 설정 파일들을 빈으로 등록해준다.
@ComponentScan : @Component
어노테이션이 붙어있는 클래스들을 찾아서 빈으로 등록해준다.
@Component : 선언된 클래스를 빈으로 등록한다.
@Controller : Spring MVC의 Controller로 사용되는 클래스를 선언할 때 사용한다.
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping : http 메소드 어노테이션으로, API를 작성할 때 사용한다.
@Autowired : 의존성 주입에 사용. 스프링 컨테이너에 등록된 빈을 주입받게 해준다.
@Service : 비즈니스 로직이 들어가는 클래스임을 명시해준다.
@Repository : 데이터베이스에 접근하는 클래스인 DAO(Data Access Object)에 특화된 어노테이션이다.
@Configuration : 설정을 위한 어노테이션으로. 이 어노테이션을 붙인 클래스 안에 @Bean
어노테이션으로 빈을 직접 설정해줄 수 있다.
@Bean : 리턴하는 객체를 빈으로 등록합니다.
Spring에서 HTTP 요청을 수행할 때 이 어노테이션을 사용한다. 컨트롤러로 사용할 클래스를 생성하고, 그 클래스 바로 위에 @Controller
어노테이션을 사용하여 해당 클래스가 컨트롤러임을 명시해준 다음, 클라이언트로부터 들어노는 요청의 종류에 따라 어떤 처리를 해줄지 작성해준다.
위와 같이 해주면 클라이언트에서 요청이 들어왔을 때 @Controller
가 붙어있는 클래스의 내용을 기준으로 요청을 처리한다.
이 때 클래스 위에 컨트롤러를 사용하는 경우가 3가지가 있다.
@Controller
만 쓸 때 : View만 리턴되는 경우 -> 모듈 객체를 받을 때@Controller
와 @ResponseBody
: JSON, Raw로 받을 때는 같이 써야한다.@RestController
: JSON, Raw를 받을 때 쓴다.(Controller와 ResponseBody가 내부에 이미 구현돼있다.)@ResponseBody
GET 요청은 주로 데이터를 조회하거나 짧은 데이터를 전달할 때 사용된다. 스프링에서 HTTP GET 요청을 수행할 때 @GetMapping
어노테이션을 선언해서 사용한다.
Controller 클래스 안에 메소드를 작성할 때 url과 함께 @GetMapping
어노테이션을 달아주면 작성해준 url에 GET 메소드로 요청이 들어왔을 때 해당 메소드를 사용해서 요청을 처리하게 된다.
// @RequestParam 사용방식 @GetMapping(value = "/user") // user?name = "" public ArrayList getUserData(@RequestParam("name") String name){ ... } // @PathVariable 사용방식 @GetMapping(value = "/user/{name}") // /user/jogi public ArrayList getUserData(@PathVariable("name") String name){ ... }
required
속성이 존재하는데 직접 적어주지 않으면, true값이다. true면 필수고, false면 선택사항이다. 또한 값이 들어오지 않았을 때 보내줄 기본 값도 defaultValue
속성으로 설정해줄 수 있다.서버로 데이터를 전달할 때, POST 요청을 사용하여 데이터를 전송한다. POST를 사용하면 Body를 통해 데이터를 전달받을 수 있기 때문에 데이터를 저장할 때 주로 사용한다. 스프링에서 POST 요청을 수행하려면 @PostMapping
어노테이션을 사용한다.
@PostMapping(value = "/login") public String CreateLoginData(@RequestBody(required = true) LoginDTO data){}
RequestsBody
@PutMapping
을 사용한다. PUT요청을 처리한다는 것을 제외하면 다른 어노테이션과 같은 역할을 한다.@PutMapping(value = "/login") public String UpdateLoginData( @RequestParam(required = true) String name, @RequestBody(required = true) LoginDTO data ){}
@DeleteMapping(value = "/login") public String DeleteLoginData(@RequestParam(required = true) String id){}
Spring을 다뤄보는 것은 처음이라 처음은 역시나 어색했다. 하지만 실습과제를 진행하면서 POSTMAN을 확인해보면서 작동과정을 보니 꽤 이해를 할 수 있었다. 해당 유닛에서는 HTTP 요청에 대한 처리에 대한 실습을 했는데, 해당 어노테이션에 어떤 값들을 쓸 수 있고, 옵션으로 어떤 것을 해야할 지 알 수 있었던 것 같다. 아직은 할 만 하지만 어려워질테니 더욱더 열심히 할 필요가 있겠다.