Tech Blog of Pinomaker

 

 

해당 게시글은 아래 스택을 이용하여 구현할 예정 입니다.

  • Spring boot
  • Spring Security + JWT
  • JPA

1. Spring Boot 생성

먼저 Spring Boot Project를 생성하기 위하여 아래의 사이트에 접속한다.

 

https://start.spring.io/

위의 사이트에 들어가면 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를 배정 받기에 아래와 같이 요청을 보내면 잘 응답이 오는 것을 확인할 수 있다.

profile

Tech Blog of Pinomaker

@pinomaker

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!