plugins {
id 'java'
id 'org.springframework.boot' version '3.2.5'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.5'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
Health check API란?
보통 서버 애플리케이션을 구축하면 잘 동작하는지 확인하기 위한 Test API를 만들고, 이를 health check API라고 부른다.
com.example.TodayILearnServer.controller
controller 패키지를 새로 생성한다.HealthCheckController
class 파일을 생성한다.package com.example.TodayILearnServer.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/health")
public class HealthCheckController {
@GetMapping("/v1")
public Map<String, String> healthCheck() {
// response를 만드는 방식
Map<String, String> response = new HashMap<>();
response.put("status", "OK");
return response;
}
}
API 여러 방법으로 설계해보기
response를 만드는 방식에 따라 여러 API를 만들어보자.
1. ResponseEntity
활용
@GetMapping("/v2")
public ResponseEntity<String> healthCheckV2() {
return ResponseEntity.ok("v2 OK");
}
@GetMapping("/v5")
public ResponseEntity<Map<String, String>> healthCheckV5() {
Map<String, String> response = new HashMap<>();
response.put("status", "v5 OK");
return ResponseEntity.ok(response);
}
2. API 응답 객체
사용자 정의해 사용하기
// API 응답 객체 정의
@Data
// lombok으로 사용할 수 있는 Data 어노테이션(getter/setter, 기본 생성자, toString())
// 여기서는 @Getter만 사용해도 작동함.
public class HealthCheckResponse {
private static final String STATUS = "OK";
private String status;
public HealthCheckResponse() {
this.status = STATUS;
}
}
// Controller.java
...
@GetMapping("/v6")
public ResponseEntity<HealthCheckResponse> healthCheckV6() {
return ResponseEntity.ok(new HealthCheckResponse());
}
3. String을 return
string을 반환하는 경우 plain/text 라는 media type으로 응답된다.
HealthCheck API와 같은 간단한 API의 경우 이런 식으로 간단하게 구현해 확인하면 좋을 것 같다.
@GetMapping("/v3")
public String healthCheckV3() {
return "v3 OK";
}
// Person.java
@Builder
@AllArgsConstructor
public class Person {
private String lastName;
private String firstName;
}
// Controller.java
...
@GetMapping("/v4")
public String healthCheckV4() {
Person person = new Person("HA", "JIEUN");
Person person2 = Person.builder() // Builder 패턴 적용
.lastName("HA")
.firstName("JIEUN")
.build();
return "v4 OK";
}
응답은 순서대로 다음과 같다.
{
"status": "v1 OK"
}
v2 OK
v3 OK
v4 OK
{
"status": "v5 OK"
}
{
"status": "OK"
}
참고자료
Spring boot Starter Web
[Java] 빌더 패턴(Builder Pattern)을 사용해야 하는 이유