해당 게시글은 아래 스택을 이용하여 구현할 예정 입니다.
- Spring boot
- Spring Security + JWT
- JPA
1. Spring Boot 생성
먼저 Spring Boot Project를 생성하기 위하여 아래의 사이트에 접속한다.
위의 사이트에 들어가면 Spring boot 프로젝트를 생성하기 위한 사이트가 나오는 데, 아래의 설정에 맞추어서 셋팅하거나 본인이 하고 싶은 것이 있으면 수정을 한 후에 GENERATE 버튼을 클릭하면 압축 폴더가 다운로드 받아지며, 해당 폴더를 인텔리제이로 열어주자
- Project(Package 모듈) : Gradle
- Language : Java
- Spring boot Version : 2.7.8 (SNAPSHOT이 붙은 버전은 아직 안정화 버전이 아니다.)
- Packaging(빌드 파일 타입) : Jar
- JDK : 11
- Dependencies : Spring Web, Lombok (나머지는 추후에 추가)
이렇게 나오면 Spring boot Project 생성에 성공한 것이며, 일단 간단하게 Common Package를 만들어 그 안에 Common Controller를 만들어서 테스트를 해보자.
package com.example.todos.common.controllrer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CommonController {
@GetMapping()
public String test(){
return "Hello World!";
}
}
이제 Spring boot를 사용하게 되면, @가 달린 문법을 많이 볼 수 있는 데 이것을 Annotation이라고 한다. Spring been에 등록하기 위해서 사용되거나 URL Mapping 등 다양한 편리한 기능을 제공하게 되는 데, 먼저 @RestController와 @GetMapping에 대해서 알아보도록 하자.
2. Spring Annotation
(1) @Controller? @RestController?
먼저 Spring을 해본 사람이라면 @Controller를 본 사람도 있고, @RestController를 본 사람도 있을 것이다. 쉽게 생각하면 된다.@Controller는 Spring을 MVC 패턴으로 이용하는 등의 경우에서 View를 반환하기 위해서 사용하는 반면에 @RestController는 Json 형태의 데이터를 반환하는 역할을 한다. 우리는 View를 구성하지 않고 API Server로 구축을 할 것이기에, @RestController만 사용할 예정이다.
- @Controller : MVC 패턴을 위한 View를 반환하는 역할
- @RestController : Json 형태의 Data를 반환하는 역할
(2) @RequestMapping, @GetMapping
Mapping에 대해서 이해를 할려면 먼저 서버에 대한 간단한 이해가 필요하다! API 서버란 무엇인가? 단순하게 생각하면 Client의 요청에 따라서 원하는 데이터를 반환해주는 프로그램이라고 생각하면 된다. 하지만 한 프로그램에 대해 여러가지의 요청이 있을텐데, Client는 서버에 요청을 보낼 때 어디에 보낼지와 어떻게 보낼지를 정하여 요청을 보내는 데 이 때 서버는 어디에 어떻게 오면 해당 요청을 처리하겠다라는 프로그램이 되어있어야한다.
이 때 어디로 보낼 지는 URL, 어떻게 보낼지는 HTTP Method를 의미한다. 서버는 요청이 들어올 때 URL과 Method가 어떤 것이 들어오냐에 따라 작성해둔 프로그램을 Mapping을 시켜야하는 데, 이 때 사용하는 것이 URL를 Mapping 시키는 @RequestMapping과 Http Method와 URL를 Mapping 시키는 @GetMapping, @PostMapping과 같은 것을 사용한다.
한 번 예시로 작성을 해보자.
package com.example.todos.common.controllrer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CommonController {
// @RequestMapping은 매개변수에 URL과 Http Method를 인자로 받는다.
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(){
return "Hello World!";
}
// @GetMapping은 URL를 인자로 받아 /test2에 접근하는 Get 요청을 test2와 Mapping 한다.
@GetMapping(value = "/test2")
public String test2(){
return "Hello World!";
}
}
위의 코드를 보면 @RequestMapping과 @GetMapping은 같은 역할을 수행하기에 나는 주로 가독성이 좋은 @GetMapping을 사용하는 편이지만 @RequestMapping은 Controller에 전체적으로 URL를 아래와 같이 Mapping 할 수 있기에 별도로 사용한다.
package com.example.todos.common.controllrer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/common") // CommonController의 모든 Method는 /common아래에서 Mapping이 된다.
public class CommonController {
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(){
return "Hello World!";
}
@GetMapping(value = "/test2")
public String test2(){
return "Hello World!";
}
}
자 이제 Spring boot를 실행하고 Postman을 이용하여 API를 Test 해보자. Spring boot를 실행하면 기본으로 8080 Port를 배정 받기에 아래와 같이 요청을 보내면 잘 응답이 오는 것을 확인할 수 있다.
'B.E > Spring' 카테고리의 다른 글
[Spring] Spring을 이용한 Todo Crud 구현하기(2) - Jpa 셋팅 및 DB 연결 (0) | 2023.02.13 |
---|---|
[Spring] Spring DI에 대해서 알아보자. (0) | 2022.11.18 |
Templatee Engine, Mustache 문법 (0) | 2022.11.17 |
[Spring] MyBatis에 대해 알아보자. (0) | 2022.11.10 |
[Spring] 싱글톤 패턴 (0) | 2022.08.29 |