티스토리 뷰
반응형
1. 컨트롤러 및 매핑 관련 함수 (Annotations)
요청을 받고 응답을 반환하는 엔드포인트를 정의할 때 사용하는 핵심 함수(애노테이션)들입니다.
- @RestController: 해당 클래스가 REST API를 처리하는 컨트롤러임을 선언합니다. @Controller와 @ResponseBody가 결합된 형태입니다.
- @RequestMapping("/api/v1"): 공통으로 사용되는 URL 경로를 클래스 레벨에서 지정합니다.
- @GetMapping("{id}"): HTTP GET 요청을 처리합니다. (조회)
- @PostMapping: HTTP POST 요청을 처리합니다. (생성)
- @PutMapping("{id}"): HTTP PUT 요청을 처리합니다. (전체 수정)
- @PatchMapping("{id}"): HTTP PATCH 요청을 처리합니다. (부분 수정)
- @DeleteMapping("{id}"): HTTP DELETE 요청을 처리합니다. (삭제)
2. 요청 데이터 파싱 함수
클라이언트가 전송한 데이터(파라미터, 본문, 헤더 등)를 자바 객체나 변수로 바인딩할 때 사용합니다.
- @PathVariable: URL 경로에 포함된 변수를 가져옵니다. (예: /users/{id} -> userId)
- @RequestParam: Query Parameter나 폼 데이터를 가져옵니다. (예: /users?page=1&size=10)
- @RequestBody: HTTP 요청의 본문(Body, 주로 JSON)을 자바 객체로 변환합니다.
- @RequestHeader: HTTP 요청 헤더의 값을 가져옵니다. (예: 인증 토큰 등)
- @Valid: 입력값 검증(Validation)을 수행할 때 사용합니다.
3. 응답 제어 관련 함수 (ResponseEntity)
HTTP 상태 코드, 헤더, 본문을 세밀하게 제어하여 응답할 때 사용하는 클래스입니다.
- ResponseEntity.ok(body): 성공(200 OK) 응답과 데이터 반환.
- ResponseEntity.status(HttpStatus.CREATED).body(body): 리소스 생성 성공(201 Created) 응답 반환.
- ResponseEntity.badRequest().body(error): 잘못된 요청(400 Bad Request) 응답 반환.
- ResponseEntity.notFound().build(): 리소스를 찾지 못함(404 Not Found) 응답 반환.
4. 외부 API 호출을 위한 클라이언트 함수
Spring Boot에서 다른 서버의 REST API를 호출할 때 사용하는 도구입니다.
- RestClient (Spring 6 / Spring Boot 3.2+ 권장):
- 최근 표준으로 권장되는 동기식 HTTP 클라이언트입니다.
- 예시: restClient.get().uri("/users/{id}", id).retrieve().body(User.class);
- WebClient (Spring WebFlux):
- 비동기/논블로킹(Reactive) 방식의 HTTP 호출이 필요할 때 사용합니다.
- RestTemplate (Legacy):
- 기존에 많이 쓰이던 방식이지만, 향후 유지보수를 위해 점진적으로 RestClient로 전환되는 추세입니다.
5. 예외 처리를 위한 함수
API 전역에서 발생하는 에러를 깔끔하게 처리하기 위한 함수들입니다.
- @RestControllerAdvice: 전역 예외 처리를 담당하는 클래스를 지정합니다.
- @ExceptionHandler(Exception.class): 특정 예외 타입이 발생했을 때 실행될 메서드를 지정합니다.
6. JSON 직렬화/역직렬화 함수 (Jackson)
자바 객체와 JSON 문자열 간의 변환을 제어할 때 주로 사용하는 라이브러리(Jackson)의 설정입니다.
- @JsonProperty("field_name"): JSON 키 이름과 자바 필드 이름이 다를 때 매핑합니다.
- @JsonIgnore: 특정 필드가 JSON 변환에서 제외되도록 합니다.
- @JsonFormat(pattern = "yyyy-MM-dd"): 날짜 및 시간 데이터의 포맷을 지정합니다.
7. DTO 필드에 검증 애노테이션 선언
클라이언트가 보내는 요청 데이터(JSON Body 등)를 받는 DTO 클래스에 원하는 검증 규칙을 애노테이션으로 붙입니다. (주로 jakarta.validation.constraints 패키지 제공)
- @NotNull: null을 허용하지 않습니다.
- @NotEmpty: null과 빈 문자열("")을 허용하지 않습니다.
- @NotBlank: null, 빈 문자열, 공백만 있는 문자열(" ")을 허용하지 않습니다.
- @Size(min, max): 문자열이나 컬렉션의 크기/길이를 제한합니다.
- @Min(value) / @Max(value): 숫자의 최솟값과 최댓값을 지정합니다.
- @Email: 이메일 형식인지 검증합니다.
- @Pattern(regexp): 정규식 패턴에 일치하는지 검증합니다.
Java
public class UserCreateRequest {
@NotBlank(message = "이름은 필수입니다.")
private String name;
@Email(message = "올바른 이메일 형식이 아닙니다.")
private String email;
@Min(value = 18, message = "나이는 18세 이상이어야 합니다.")
private int age;
}
8. 컨트롤러에서 @Valid 적용하기
요청을 받는 컨트롤러의 메서드 파라미터 앞에 @Valid (또는 @Validated)를 붙여줍니다.
Java
@RestController
@RequestMapping("/api/users")
public class UserController {
@PostMapping
public ResponseEntity<String> createUser(@RequestBody @Valid UserCreateRequest request) {
// 검증을 통과한 경우에만 이 코드가 실행됩니다.
return ResponseEntity.ok("회원 생성 성공");
}
}
동작 방식: 클라이언트가 유효하지 않은 데이터를 보내면, Spring은 내부적으로 MethodArgumentNotValidException 예외를 발생시키고 요청을 차단합니다.
9. 검증 실패 예외 처리하기 (@RestControllerAdvice)
검증에 실패했을 때 클라이언트에게 친절한 에러 메시지를 전달하려면 전역 예외 처리기를 작성해야 합니다.
Java
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
// 발생한 모든 에러 필드와 메시지를 추출
ex.getBindingResult().getAllErrors().forEach(error -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
return ResponseEntity.badRequest().body(errors);
}
}
반응형
'배움 > JAVA' 카테고리의 다른 글
| [Spring Batch] 대용량 정산 시스템 구축하기 (MyBatis Cursor + Chunk 기반 처리) (0) | 2026.08.20 |
|---|---|
| [JavaScript] 순수 내장 기능(fetch + async/await)으로 GET, POST 비동기 통신 정리 (0) | 2026.07.03 |
| Spring Boot REST API 샘플 (0) | 2026.06.24 |
| 소켓통신 테스트 (0) | 2026.05.21 |
| Eclipse JAVA, Gradle, JPA 설정 (0) | 2025.06.27 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- eclipse
- 비동기
- swagger
- ob_get_contents
- php
- wsl
- uniqid
- Laravel
- privatechannel
- laravel 11
- facades
- jp:a
- mysql
- reflectionclass
- 설정
- laravel 테스트
- flask
- curl_multi_init
- OpenAI GPT
- 단축키
- laravel 12
- eloquent
- array_combine
- ubuntu
- 설치
- PYTHON
- 명령어
- fromArray
- call_user_func
- WSL2
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함
