본문 바로가기
SPRING

[Spring] REST API 맛보기

by 킹명주 2022. 7. 4.

앞의 게시물에서 스프링을 사용하기 위한 환경을 구축했다. 그럼 이제 실행이 성공적으로 되는지 테스트를 해야겠다!

그래서 제일 무난한 REST API를 통해 스프링이 정상 작동하는지 보자!!

 

Spring Project 생성

https://start.spring.io/

spring을 사용하기 위해 위 사이트에 접속한다. 그리고 jdk 11을 다운받았다면 다음과 같이 설정해준다.

가장 처음 Project에서 Maven, Gradle 중에 선택해야 한다.

둘은 빌드 관리 도구로 Maven으로 설정하게 되면 porm.xml에서 의존성, 라이브러리 등을 선언하여 관리한다.

반면 Gradle은 groovy 언어로 선언하여 관리하는데 안드로이드에서 주로 사용했었다. 둘 중에 고민하다 구글링했을 때 자료가 많은 것은 Maven이였지만 요즘 대세가 Gradle이므로 무지성으로 Gradle을 선택했다. 차이점은 아마 구글링해보면 정확하게 알 수 있다.

 

그리고 그 밑에는 자신이 원하는 metadata와 java version을 선택하면 끝이다. 오른쪽은 dependencies를 추가하는 것인데, 하나씩 코딩하는 것보다 자신이 필요한 것을 오른쪽 상단의 ADD를 통해 손쉽게 추가할 수 있다. Rest API를 맛보기 위해 Spring Web 하나만 추가하여 진행했다.


프로젝트 OPEN

위의 사이트에서 GENERATE를 눌렀다면 이제 이를 Intellij에서 열기만 하면 된다.

open을 눌러서 자신이 다운받았던 프로젝트의 폴더를 선택하게 되면 아래와 같이 정상적으로 수행되는 것을 확인할 수 있다.


실행

src/main/java/com.example.demo를 열게 되면 우리가 만든 이름으로 DemoApplication이라는 파일을 확인할 수 있다. 이 파일이 프로젝트를 실행하는 것이라고 생각하면 된다. 다음과 같이 진행해서 오류가 안난다면 스프링 구동은 성공한 것이다.

 

아무것도 설정하지 않았다면 8080 포트로 시작되는 것을 확인할 수 있다.


REST API

REST API 구축에 앞서 REST API를 간단하게 정의해보자.

API는 많이 들어보았을 것이다. 말 그대로 Application Programming Interface으로 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것이다.

 

그렇다면 REST API는 무엇일까?

REST 기반의 API를 의미한다. 여기서 REST는 Representational State Transfer의 약자로 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다. HTTP URI을 통해 자원을 명시하고, HTTP Method인 POST, GET, PUT, DELETE 를 통해 해당 자원에 대한 CRUD (Create, Read, Update, Delete)를 적용하는 것을 의미한다.

 

실습을 위해 간략하게만 개념에 대해 설명해보았는데 구글링하면 상세하게 REST API가 무엇이고 CRUD 등의 개념을 확인할 수 있다.

이제 진짜 간단한 Rest API를 실험해보고자 한다. 포스트맨이나 다른 api test tool을 사용하지 않고 web에서 결과를 출력하는 형태로 실험해보자!

 

1. controller package 생성

api에 관해서 control 할 수 있는 controller를 만든다.

2. Java Class 생성

controller 패키지 내부에 핸들링할 수 있는 java class를 하나 생성한다.

3.REST API 구축

아래와 같이 코드를 작성하고 왼쪽 웹에서 실험을 진행해본다. 

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestDemo {
    @GetMapping("/")
    public String Test(){
        return "Hello World";
    }
}

각 요소에 대해 간략하게 설명하자면 

@RestController

  • @Controller과 @ResponseBody를 합친 것으로 뷰에 표시될 데이터가 있는 Model 객체를 만들고 올바른 뷰를 선택하는 일을 담당하고  HTTP Response Body에 데이터를 담아 요청을 완료할 수 있으므로 반드시 명시해주어야 한다.

 

 

@GetMapping("/")

  • HTTP Method 중 GET을 사용하는 것이다. "/"의 경우 홈 화면을 의미하고 이는 사용자가 /user, /test 등의 url로 변경할 수 있다.

 

 

public String Test(){

    return "Hello World"

}

  • public String Test()의 경우 Get 요청 시 parameter를 받지 않고 String을 반환하겠다는 의미이다.
  • return "Hello World" 는 말 그대로 Hello World를 반환한다.

 

+추가

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestDemo {
    @GetMapping("/")
    public String Test(@RequestParam(value="id")String id){
        return id+"님이 접속하셨습니다.";
    }
}

파라미터를 어떻게 받아올지 궁금하신분도 있을 것이다. 그래서 추가로 코드를 작성해보았다.

@RequestParam(value="id")는 front에서 key를 id=~~ 로 할당해서 보내주어야 한다. 다음은 실험 결과이다.