5장: API를 작성하는 다양한 방법
5-2 GET API 만들기
GET API는 웹 애플리케이션 서버에서 값을 가져올 때 사용하는 API이다.
5-2-1 @RequestMapping으로 구현하기
@RequestMapping 어노테이션을 별다른 설정 없이 선언하면 HTTP의 모든 요청을 받는다. 어노테이션의 method 요소의 값을 설정하여 요청 형식을 설정한 값으로만 설정할 수 있다.
HTTP 메서드
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
5-2-3 @PathVariable을 활용한 GET 메서드 구현
@PathVariable을 명시하여 @GetMapping 어노테이션과 @PathVariable에 지정된 변수의 이름을 동일하게 맞추어 값을 받는다.
5-2-4 @RequestParam을 활용한 GET 메서드 구현
URL 경로에 값을 담아 요청을 보내는 것이 아니라 쿼리 형식으로 값을 전달하는 것이다.
매개 변수의 항목이 일정하지 않을 수 있어 Map 객체로 받는 것이 효율적이다.
5-2-5 DTO 객체를 활요한 GET 메서드 구현
DTO는 Data Transfer Object의 약자로, 다른 레이어 간의 데이터 교환에 활용된다. 즉, 각 클래스 및 인터페이스를 호출하면서 전달하는 매개변수로 사용되는 데이터 객체이다.
5-3 POST API 만들기
POST API는 저장하고자 하는 리소스나 값을 HTTP 바디(body)에 담아 서버에 전달하는 방식이다.
5-3-1 @RequestMapping으로 구현하기
RequestMetod를 POST로 설정하는 부분 이외에는 GET API와 동일하다.
5-3-2 @RequestBody를 활용한 POST 메서드 구현
POST 요청에서는 리소스를 담기 위해 HTTP Body에 값을 넣어 전송한다.
Body 영역에 작성되는 값은 일반적으로 JSON(JavaScript Object Notation) 형식으로 전송된다.
DTO의 멤버 변수를 요청 메시지의 키와 매핑해 값을 가져온다.
5-4 PUT API 만들기
POST API와 구현이 거의 동일하다.
5-4-2 ResponseEntity를 활용한 PUT 메서드 구현
스프링 프레임워크의 HttpEntity라는 클래스를 이용하여 헤더(Header)와 Body로 구성된 HTTP 요청과 응답을 구성하는 역할을 수행한다.
이 클래스는 PUT이외의 메서드에서도 사용할 수 있는 클래스다.
5-5 DELETE API 만들기
보통 간단한 값을 받기 때문에 GET 메서드와 같이 URI에 값을 넣어 요청을 받는 형식으로 구현한다.
5-6 [한걸음 더] REST API 명세를 문서화하는 방법 - Swagger
API를 개발하면 명세를 관리해야 한다. 명세란 해당 API가 어떤 로직을 수행하는지 설명하고 이 로직을 수행하기 위해 어떤 값을 요청하며, 이에 따른 응답값으로는 무엇을 받을 수 있는지를 정리한 자료이다.
5-7 [한걸음 더] 로깅 라이브러리 - Logback
로깅(logging)이란 애플리에키션이 동작하는 동안 시스템의 상태나 동작 정보를 시간순으로 기록하는 것을 의미한다.
로깅은 개발 영역 중 '비기능 요구사항'에 속하나 디버깅하거나 개발 이후 발생한 문제를 해결할 때 원인을 분석하는 데 꼭 필요한 요소이다.
Logback의 특징
- 크게 5개의 로그 레벨(TRACE, DEBUG, INFO, WARN, ERROR)을 설정할 수 있다.
- ERROR: 로직 수행 중에 시스템에 심각한 문제가 발생해서 애플리케이션의 작동이 불가능한 경우를 의미한다.
-WARN: 시스템 에러의 원인이 될 수 있는 경고 레벨을 의미한다.
-INFO: 애플리케이션의 상태 변경과 같은 정보 전달을 위해 사용된다.
-DEBUG: 애플리케이션의 디버깅을 위한 메시지를 표시하는 레벨을 의미한다.
-TRACE: DEBUG 레벨보다 더 상세한 메시지를 표현하기 위한 레벨을 의미한다. - 실제 운영 환경과 개발 환경에서 각각 다른 출력 레벨을 설정해서 로그를 확인할 수 있다.
- Logback의 설정 파일을 일정 시간마다 스캔해서 애플리케이션을 재가동하지 않아도 설정을 변경할 수 있다.
- 별도의 프로그램 지원 없이도 자체적으로 로그 파일을 압축할 수 있다.
- 저장된 로그 파일에 대한 보관 기간 등을 설정해서 관리할 수 있다.
5-7-1 Logback 설정
설정 파일은 리소스 폴더 안에 생성한다. 스프링 부트에서는 logback-spring.xml 파일을 참조한다.
Appender 영역
Appender 영역은 로그의 형태를 설정하고 어떤 방법으로 출력할지를 설정하는 곳이다. Appender 자체는 하나의 인터페이스를 의미하며, 하위에 여러 구현체가 존제한다.
Appender의 대표적인 구현체
- ConsoleAppender: 콘솔에 로그를 출력
- FileAppender: 파일에 로그를 저장
- RollingFileAppender: 여러 개의 파일을 순회하면서 로그를 저장
- SMTPAppender: 메일로 로그를 전송
- DBAppender: 데이터베이스에 로그를 저장
대표적인 패턴
패턴 | 의미 |
%Logger{length} | 로거의 이름 |
%-5level | 로그레벨, -5는 출력 고정폭의 값 |
%msg(%message) | 로그 메시지 |
%d | 로그 기록 시간 |
%p | 로깅 레벨 |
%F | 로깅이 발생한 애플리케이션 파일명 |
%M | 로깅이 발생한 메서드 이름 |
%I | 로깅이 발생한 호출지의 정보 |
%thread | 현재 스레드명 |
%t | 로깅이 발생한 스레드명 |
%c | 로깅이 발생한 카테고리 |
%C | 로깅이 발생한 클래스명 |
%m | 로그메시지 |
%n | 줄바꿈 |
%r | 애플리케이션 실행 후 로깅이 발생한 시점까지의 시간 |
%L | 로깅이 발생한 호출 지점의 라인수 |
Root 영역
Root 영역에서 Appender를 참조해서 로깅 레벨을 설정한다.
'Zerobase > 북 스터디' 카테고리의 다른 글
스프링 부트 핵심 가이드(장정우 지음) ch.8 (0) | 2023.07.16 |
---|---|
스프링 부트 핵심 가이드(장정우 지음) ch.6 (0) | 2023.07.09 |
스프링 부트 핵심 가이드(장정우 지음) ch.4 (0) | 2023.07.02 |
스프링 부트 핵심 가이드(장정우 지음) ch.2 (0) | 2023.06.25 |
스프링 부트 핵심 가이드(장정우 지음) ch.1 (0) | 2023.06.25 |