[스프링 부트 핵심 가이드] 정리 2주차

AmeriKano·2023년 5월 27일
0

책 링크

매주 스프링 부트 핵심 가이드 를 읽으며 이전에 궁금했거나, 새롭게 알게 된 내용들을 정리할 예정이다.
(이번 주는 4~5장을 읽었다.)


메이븐의 생명주기

maven은 자바 기반 프로젝트를 빌드하고 관리하는 데 사용하는 도구이다. pom.xml 파일에 라이브러리를 추가하면 그 라이브러리와 해당 라이브러리에 필요한 라이브러리까지 전부 내려받아 관리가 가능하다. 현재는 그래들(gradle) 로 전환되는 추세이긴 하지만 아직은 메이븐을 활용한 프로젝트가 많다.


메이븐의 생명주기는 크게 기본(Default), 클린(Clean), 사이트(Site) 생명주기의 3가지로 구분된다. 각 생명주기에는 단계가 존재하고 특정 단계를 수행하기 위해서는 이전 단계를 마쳐야 한다.

API 개발

기본적으로 컨트롤러 클래스를 만들고 클래스 위에 @RestController 어노태이션을 붙여줘 컨트롤러임을 스프링에게 알려준다. 그 다음 클래스에 @RequestMapping 을 붙여주면 내부 메소드에서 사용할 공통 URL을 설정할 수 있다.

@RequestMapping으로 구현하기

메소드에 @RequestMapping 어노태이션을 다른 설정 없이 선언하면 모든 HTTP 요청을 받을 수 있으나, 특정 요청만 받으려면 별도 설정이 필요하다. 스프링의 버전이 업데이트되면서 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 등 이름에서부터 명시된 어노태이션을 사용하므로 특별히 활용해야 하는 경우가 아니라면 @RequestMapping 은 사용하지 않는다.

GET 메소드

GET 메소드에 매개 변수를 전달하는 방법은 크게 URL 자체에 값을 담거나 쿼리 문자열을 명시하는 방법이 있다. 각각 메소드에 @PathVariable 을 포함하거나 @RequestParam 을 포함하는 방식으로 구현이 가능하다.

@PathVariable을 활용한 GET 메소드

// 일반적인 방법
@GetMapping("/api/{value}")
public String getValue(@PathVariable String value) {
	return value;
}

// URL 매핑과 메소드 매개변수의 이름이 다른 경우
@GetMapping("/api/{value}")
public String getValue(@PathVariable("value") String val) {
	return val;
}

@RequestParam을 활용한 GET 메소드

// http://localhost:8080/request?value1=Hello&value2=World
@GetMapping("/request")
public String getRequest(@RequestParam String value1, @RequestParam String value2) {
	return "value1: " + value1 + "value2: " + value2;
}

// 값이 정해져 있지 않다면 Map 객체 활용 가능
@GetMapping("/request")
public String getValue(@RequestParam Map<String, String> parameterMap) {
	...
}

POST 메소드

POST 메소드에서는 저장하고자 하는 값이나 리소스를 HTTP 바디(body) 에 담아 전달한다.
바디는 다수의 환경에서 JSON 형식으로 전달해준다.

@RequestBody를 활용한 POST 메소드

// 바디에 어떤 값이 들어올지 특정하기 어려울 경우 Map 객체 사용
@PostMapping("/request")
public String postRequest(@RequestBody Map<String, Object> requestBody) {
	...
}

// DTO(Data Transfer Object) 가 있다면 DTO 활용 가능
// DTO의 멤버 변수를 바디의 키와 매핑
@PostMapping("/request")
public String postRequest(@RequestBody PersonDto personDto) {
	...
}

이외에 PUT, DELETE 도 유사한 구조를 가지고 있으며 각각 수정과 삭제의 기능을 한다는 점이 차이가 있다.

RequestEntity와 ResponseEntity

각각 요청과 응답 객체를 더욱 편하게 생성해줄 수 있는 객체이다. 모든 HTTP 메소드에서 사용 가능하며, 헤더와 바디 이외에 HTTP 응답 코드도 지정해 줄 수 있다.

// DTO를 활용
@DeleteMapping("/request")
public ResponseEntity<PersonDto> postRequest(@RequestBody PersonDto personDto) {
	return ResponseEntity
    	.status(HttpStatus.OK)
        .body(personDto);
}

Swagger

API 명세 문서를 만들어주는 라이브러리이다. 컨트롤러에 있는 메소드에 추가적으로 어노태이션을 달아주면 Swagger가 자동으로 문서를 만들어주는데, Spring 버전별로(2.x.x 이거나 3.x.x) 어노태이션에 차이가 있으므로 유의해야 한다.

Logback

서버에서 발생하는 로그를 파일로 저장할 때 사용하는 라이브러리이다. 에러, 경고, 디버그 등 다양한 로그 레벨을 설정하여 종류별로 관리할 수 있으며, 자체적으로 로그 파일 압축, 로그 파일 보관 기간 설정 등 다양한 기능을 지원한다.

profile
똑똑한 사람이 되게 해주세요

0개의 댓글