[Spring Boot] Java RESTful API 만들어서 GET, POST 호출 해보기
이전 글에서 이클립스(Eclipse)를 설치하고
Spring Boot 설정 및 프로젝트 생성까지 해봤는데
이번에는 Java, Gradle 빌드 기반으로
RESTful API를 한번 만들어 보겠다.
그전에 간략하게
REST란 무엇인가에 대한 설명을 하자면
REST
REpresentational State Transfer의 약자로, 분산형 하이퍼미디어 시스템을 위한 아키텍처
REST 아키텍처의 구성요소
1. 자원 (Resource) - URI
- 모든 자원은 고유의 ID가 있고, HTTP URI로 표현한다.
- 클라이언트는 URI를 이용해서 자원을 지정하고 해당 자원을 조작하기 위해 서버로 요청한다.
2. 행위 (Verb) - Method
- HTTP 프로토콜의 Method를 사용하고 GET/POST/PUT/PATCH/DLEETE 메소드가 있다.
3. 표현(Representation)
- 클라이언트와 서버가 데이터를 주고 받을 때 JSON, XML, TEXT 등이 있다.
클라이언트는 특정 자원을 조작하기 위해
URI를 이용해서 자원을 지정하면
서버는 클라이언트가 지정한 자원을 조작하며
클라이언트는 서버로부터 자원의 상태를 응답받는다.
REST 아키텍처의 6가지 특징
1. 통일된 인터페이스 (Uniform Interface)
- 자원에 대한 요청이 통일되어 있어 HTTP 표준 프로토콜에 따른다면 언어나 기술에 종속되지 않는다.
2. 무상태 (Stateless)
- HTTP 프로토콜과 동일하게 무상태의 특성이 있다.
3. 캐시 처리 가능 (Cacheable)
- HTTP가 가진 캐싱 기능을 적용할 수 있다.
- 대량의 요청을 효율적으로 처리할 수 있다.
4. 계층화 (Layered System)
- 보안, 로드밸런싱, 암호화 등 계층을 추가하여 구조 변경이 가능하다.
- API Gateway, Proxy 사용이 가능하다.
5. 클라이언트-서버 구조 (Client-Server)
- 서버와 클라이언트로 구분되어 있고 각 역할이 명확하고 서로 간의 의존성이 줄어든다.
6. 자체 표현 구조
- 자체 표현 구조로 되어 있어 메소드 자체가 무슨 행위를 하는지 알 수 있다.
REST 장점
- 클라이언트-서버 구조이고 무상태(Stateless) 특징에 따라서 클라이언트의 Context를 유지할 필요가 없다.
- 응답 데이터의 표현을 JSON, XML 등 원하는 언어로 표현이 가능하다.
- 웹의 기술과 HTTP 프로토콜의 인프라를 그대로 사용하기 때문에 별도의 작업이 들어가지 않는다.
REST 단점
- 설계 가이드만 있을 뿐 표준이 없다.
- 쉽게 사용이 가능하지만 메소드 형태가 제한적이다.
간단하게 REST의 구성요소와
장단점에 대해 알아보았으니
이제 RESTful API를 실제로 구현해보자!
1. Spring Boot Starter 추가하기
1-1. Starter에서 Spring Web dependency 추가하기
프로젝트를 생성할 때
Starter Project Dependencies를 선택할 수 있다.
검색창에 "web"이라고 검색하면
Web영역 하위에 Spring Web을
체크해주면 된다.
상단에 build.gradle에 체크해주고
Finish 버튼을 눌러 완료하게 되면
spring-boot-starter-web이 추가되었다.
만약 이미 생성한 프로젝트라면
프로젝트 마우스 우클릭해서
Spring > Add Starters 클릭하면 된다.
build.gradle 파일을 열어
직접 dependency를 추가할 수도 있다.
이제 아주 간단하게
웹 개발 환경이 구성되었다..😊
2. RESTful API 만들기
2-1. Controller, Service 생성하기
기본적으로 MVC 모델로 진행하며
폴더 구조는 간단하게
아래와 같이 구성했다.
DemoController.java 파일을 생성하고
상단에 @RestController만 붙여주면
Controller 생성 완료!
package com.example.demo.api.controller;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
}
Service도 생성해보자.
마찬가지로 상단에 @Service만 붙여주면
Service 생성 완료!
package com.example.demo.api.service;
import org.springframework.stereotype.Service;
@Service
public class DemoService {
}
2-2. Controller에 GET, POST 방식으로 API 만들기
우선 서버가 정상적으로 실행이 되고 있는지
확인 차 간단한 문자열 반환하는 GET API를 만들어봤다.
DemoController.java에 아래와 같이 코드 추가하면 된다.
package com.example.demo.api.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/demo")
public String demo () {
return "demo";
}
}
서버 실행은 프로젝트 마우스 우클릭
Run As > Spring Boot App 클릭하면
실행 가능하다.
서버를 실행해서
브라우저를 이용해서 접속하거나
postman을 사용해서 호출하게 되면
demo라고 잘 반환하고 있다.
(기본적으로 포트는 8080)
이번엔 Cotroller에서
Service를 한번 호출해보자.
2-3. Service 호출하기
DemoService를 @Autowired를 통해
의존성 주입해주고
Get, Post 메소드를 호출하면
DemoService를 호출해서 문자열을
받아오도록 한다.
package com.example.demo.api.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.api.service.DemoService;
@RestController
public class DemoController {
@Autowired
private DemoService demoService;
@GetMapping("/demo")
public String getDemo () {
String demo = demoService.getDemo();
return demo;
}
@PostMapping("/demo")
public String postDemo () {
String demo = demoService.getDemo();
return demo;
}
}
DemoService에 getDemo 메소드를 만들어 주고
"service demo!" 문자열을 반환한다.
package com.example.demo.api.service;
import org.springframework.stereotype.Service;
@Service
public class DemoService {
public String getDemo() {
return "service demo!";
}
}
3. GET, POST 방식으로 RESTful API 호출하기
역시나 GET, POST 방식으로 호출했을 때
"service demo!" 문구가 잘 노출되는 것을
확인할 수 있다.
세세한 설명 없이
RESTful API 만들고 호출하는
GET, POST API를 만들어 봤다.
이외에도 PUT, DELETE, PATCH 등등 많이 있는데
각 상황에 맞게 만들어서 호출하면 된다.
'개발 이야기 > Spring Boot' 카테고리의 다른 글
[Spring Boot] CORS Filter 설정하기 (CORS 오류 해결방법) - Java (0) | 2023.07.11 |
---|---|
[Spring Boot] 이클립스(Eclipse) 설치 및 스프링 부트(Spring Boot) 사용하기 (0) | 2022.11.30 |
댓글
이 글 공유하기
다른 글
-
[Spring Boot] CORS Filter 설정하기 (CORS 오류 해결방법) - Java
[Spring Boot] CORS Filter 설정하기 (CORS 오류 해결방법) - Java
2023.07.11 -
[Spring Boot] 이클립스(Eclipse) 설치 및 스프링 부트(Spring Boot) 사용하기
[Spring Boot] 이클립스(Eclipse) 설치 및 스프링 부트(Spring Boot) 사용하기
2022.11.30