Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 국비지원취업
- OPENPATH
- 내일배움캠프
- 디자인강의
- 오블완
- 티스토리챌린지
- 환급챌린지
- 내일배움카드
- 오픈패스
- 백엔드개발자
- UXUI기초정복
- 객체지향
- 패스트캠퍼스
- UXUIPrimary
- 백엔드
- 디자인교육
- baekjoon
- 디자인챌린지
- 백엔드 부트캠프
- 오픈챌린지
- Be
- KDT
- 국비지원교육
- 부트캠프
- mysql
- Spring
- 국비지원
- Java
- UXUI챌린지
- 백준
Archives
- Today
- Total
군만두의 IT 공부 일지
[스터디7] 06. REST 서비스 구현 본문
목차
10장. REST 서비스 구현
이 장에서 다룰 내용
- REST 서비스 이해하기
- REST 엔드포인트 구현하기
- HTTP 응답으로 서버가 클라이언트로 전송하는 데이터 관리하기
- HTTP 요청 본문(body)에서 클라이언트가 보낸 데이터 가져오기
- 엔드포인트 수준에서 예외 관리하기
10.1 REST 서비스를 이용한 앱 간 데이터 교환
- REST 엔드포인트:
- 스프링에서 HTTP 메서드와 경로에 매핑된 컨트롤러 액션이다.
- 스프링 MVC 디스패처 서블릿이 뷰를 찾지 않는다는 것이 다르다.
- 서버는 컨트롤러의 액션이 반환하는 것을 클라이언트에 대한 HTTP 응답으로 직접 전송한다.
- REST 엔드포인트의 통신 문제:
- 컨트롤러 작업이 완료되는 데 오랜 시간이 소요된다면 엔드포인트에 대한 HTTP 호출이 타임아웃(timeout)되어 통신이 중단될 수 있다.
- HTTP 요청으로 한 번의 호출에 대량의 데이터를 전송하면 호출이 타임아웃되어 통신이 중단될 수 있다.
- 백엔드 컴포넌트로 노출된 엔드포인트에 대한 동시 호출이 과도하면 앱은 지나치게 많은 부하를 받아 실패할 수 있다.
- 네트워크는 HTTP 호출을 지원하지만, 네트워크 때문에 REST 엔드포인트 호출이 실패할 가능성은 항상 존재한다.
10.2 REST 엔드포인트 구현
간단한 웹 컨트롤러를 REST 컨트롤러로 변환하여 REST 웹 서비스를 구현하는 방법은 다음과 같다.
- 컨트롤러 클래스에 @Controller 스테레오타입 애너테이션을 추가한다. 스프링 컨텍스트에서 클래스의 인스턴스가 빈이 되고 스프링 MVC는 이 애너테이션이 메서드를 특정 HTTP 경로에 매핑하는 컨트롤러라고 인식한다.
- @GetMapping 애너테이션을 사용하여 액션 경로와 HTTP 메서드를 지정한다.
- @ResponseBody 애너테이션을 사용한다. 컨트롤러의 액션이 뷰 이름이 아니라 HTTP 응답으로 직접 전송된 데이터를 반환한다는 것을 디스패치 서블릿에 알려 준다.
// @ResponseBody 애너테이션이 중복된 코드
package com.example.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello!";
}
@GetMapping("/ciao")
@ResponseBody
public String ciao() {
return "Ciao!";
}
}
- @RestController을 사용하여 컨트롤러의 모든 액션이 REST 엔드포인트라고 스프링에 지시할 수 있다. @ResponseBody 애너테이션을 반복하지 않아도 된다.
// 코드 중복을 피하는 @RestController 애너테이션 사용하기
package com.example.controllers;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello!";
}
@GetMapping("/ciao")
public String ciao() {
return "Ciao!";
}
}
- 엔드포인트를 호출하는 도구:
- 포스트맨(Postman): 멋진 GUI를 제공하며 사용하기 편하다.
- cURL: GUI가 없는 경우(예: SSH로 가상 머신에 연결하거나 배치 스크립트를 작성할 때)에 유용한 명령줄 도구다.
기본적으로 스프링 부트 앱은 8080번 포트에서 액세스할 수 있도록 톰캣 서블릿 컨테이너를 구성한다.
curl http://localhost:8080/hello
▲ cURL
이 글은 『스프링 교과서』 책을 학습한 내용을 정리한 것입니다.
'프로그래밍 > Java' 카테고리의 다른 글
[스터디8] 06. 열거 타입과 애너테이션 (3) | 2025.06.07 |
---|---|
[스터디7] 07. REST 엔드포인트 사용 (1) | 2025.06.04 |
[스터디7] 05. 스프링 웹 스코프 (0) | 2025.05.15 |
[스터디7] 04. 스프링 부트와 스프링 MVC 이해 (0) | 2025.05.06 |
[스터디7] 03. 스프링 컨텍스트: 빈의 스코프 및 수명 주기 (0) | 2025.04.29 |
Comments