SEB[Spring Boot]

Jogi's 코딩 일기장·2021년 8월 9일
0

이번 유닛에서는 드디어 Spring Boot에 대해서 학습하는 시간을 가졌다. 많이는 들어봤지만 내가 직접 사용해보진 않아서 Spring Boot라는 단어만 익숙하지 개념에 대해서는 전혀 몰랐다. 이번 유닛에서는 http 요청에 대한 Spring Boot 어노테이션 사용법과 기본 개념에 대해서 학습했다. 학습했던 것들의 정리와 느낀 점들을 다시 풀어보겠다.

Spring Boot란?

  • 스프링 프레임워크를 사용하는 프로젝트를 아주 간편하게 설정할 수 있는 스프링 프레임워크의 서브 프로젝트, 스프링을 더 쉽게 이용할 수 있도록 해 주는 스프링 프레임워크 모듈.

  • 스프링에서는 초기 설정이 매우 복잡하고 귀찮았지만, 스프링 부트는 이런 초기 설정을 간단하게 해준다.

  • Spring Boot makes it easy to create stand-alone

    • 단독 실행가능한 스프링 애플리케이션을 생성한다.
  • Most Spring Boot applications need very little Spring configuration.

    • Spring Boot는 최소한의 쵝 스프링 구성으로 가능한 한 빨리 시작하고 실행할 수 있도록 설계됐다.
  • 웹 컨테이너를 내장하고 있어 최소한의 설정으로 쉽게 어플리케이션을 만들 수 있다.

Spring 어노테이션

자바에서는 @어노테이션 이름 의 형식으로 특정 클래스, 메소드, 변수의 맨 위에 어노테이션(Annotation)을 달아줄 수 있다. 스프링 프로젝트 코드에서도 @SpringBootApplication 라는 어노테이션을 확인할 수 있다.

어노테이션 자바 코드에 선언해주면 컴파일러나 런타임이 돌아가면서 주석을 해석하고, 각 선언에 맞는 처리를 자동으로 해준다. 자바, 스프링에서 기본적으로 제공하는 어노테이션도 있고, 필요에 따라 직접 선언하여 사용할 수도 있다.

Spring 주요 어노테이션

  • @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 : 리턴하는 객체를 빈으로 등록합니다.

@Controller

  • Spring에서 HTTP 요청을 수행할 때 이 어노테이션을 사용한다. 컨트롤러로 사용할 클래스를 생성하고, 그 클래스 바로 위에 @Controller 어노테이션을 사용하여 해당 클래스가 컨트롤러임을 명시해준 다음, 클라이언트로부터 들어노는 요청의 종류에 따라 어떤 처리를 해줄지 작성해준다.

  • 위와 같이 해주면 클라이언트에서 요청이 들어왔을 때 @Controller가 붙어있는 클래스의 내용을 기준으로 요청을 처리한다.

  • 이 때 클래스 위에 컨트롤러를 사용하는 경우가 3가지가 있다.

    1. @Controller만 쓸 때 : View만 리턴되는 경우 -> 모듈 객체를 받을 때
    2. @Controller@ResponseBody : JSON, Raw로 받을 때는 같이 써야한다.
    3. @RestController : JSON, Raw를 받을 때 쓴다.(Controller와 ResponseBody가 내부에 이미 구현돼있다.)
  • @ResponseBody

    • 컨트롤러가 클라이언트의 요청을 처리해서 응답해줄 때, 리턴하는 형식이 자바 객체라면, 클라이언트는 응답을 이해하지 못한다. 그래서 응답을 공용어 형태인 JSON으로 바꿔주는 역할을 하는 어노테이션이다.

@GetMapping

  • 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 속성으로 설정해줄 수 있다.

@PostMapping

  • 서버로 데이터를 전달할 때, POST 요청을 사용하여 데이터를 전송한다. POST를 사용하면 Body를 통해 데이터를 전달받을 수 있기 때문에 데이터를 저장할 때 주로 사용한다. 스프링에서 POST 요청을 수행하려면 @PostMapping 어노테이션을 사용한다.

    @PostMapping(value = "/login")
    public String CreateLoginData(@RequestBody(required = true) LoginDTO data){}
  • RequestsBody

    • 클라이언트에서 요청을 받아올 때 HTTP Requset에서 Request Body부분을 JSON을 자바 객체로 바꿔주는 어노테이션이다.

@PutMapping

  • 데이터 업데이트를 할 때, 주로 사용되는 PUT 요청은 @PutMapping을 사용한다. PUT요청을 처리한다는 것을 제외하면 다른 어노테이션과 같은 역할을 한다.
    @PutMapping(value = "/login")
    public String UpdateLoginData( @RequestParam(required = true) String name,
    				@RequestBody(required = true) LoginDTO data ){}

@DeleteMapping

  • DELETE 요청을 처리하는 어노테이션이다.
    @DeleteMapping(value = "/login")
    public String DeleteLoginData(@RequestParam(required = true) String id){}

느낀점

Spring을 다뤄보는 것은 처음이라 처음은 역시나 어색했다. 하지만 실습과제를 진행하면서 POSTMAN을 확인해보면서 작동과정을 보니 꽤 이해를 할 수 있었다. 해당 유닛에서는 HTTP 요청에 대한 처리에 대한 실습을 했는데, 해당 어노테이션에 어떤 값들을 쓸 수 있고, 옵션으로 어떤 것을 해야할 지 알 수 있었던 것 같다. 아직은 할 만 하지만 어려워질테니 더욱더 열심히 할 필요가 있겠다.

Reference

  • 코드스테이츠 강의자료
profile
프로그래머로서의 한걸음

0개의 댓글