
실제 코드를 작성하기 전 머릿속에 흐름을 잡고,
헷갈리기 쉬운 핵심 개념과 어노테이션을 점검하기 위한 데일리 핸드북입니다.
[Client]
│ 1. JSON 요청 전송
▼
[Controller]
│ 2. JSON ──(역직렬화)──> Request DTO 변환 수신
▼
[Service]
│ 3. DTO 확인 후 Repository 호출 ──> DB에서 Entity 조회
│ 4. DTO에 담긴 새 데이터로 Entity 수정
▼
[Repository]
│ 5. 수정된 Entity를 DB에 반영 (저장 / 더티 체킹)
▼
[Service]
│ 6. 변경된 Entity의 값을 꺼내어 Response DTO로 조립
▼
[Controller]
│ 7. Response DTO 반환
▼
[Spring Framework]
│ 8. Response DTO ──(직렬화)──> JSON 자동 변환
▼
[Client] (최종 JSON 응답 수신)
📌 데이터 변환의 핵심 경계선
- DTO: 클라이언트 ⇄ 컨트롤러 사이에서 데이터 교환 목적으로 변환
- Entity: 서비스 ⇄ 레포지토리 ⇄ DB 사이에서 도메인 데이터 영속 목적으로 사용
@PathVariable: URL 경로에 포함된 고정 식별자 추출 (예: /posts/{id} → /posts/1).
@RequestParam(Query String)과의 차이:@PathVariable(경로 변수)는 리소스를 식별하는 필수값,@RequestParam쿼리 파라미터(?id=123)는 정렬·필터링 등을 위한 선택적 조건값.@RequestBody: HTTP 요청 본문(Body)에 담긴 JSON 데이터를 자바 객체(DTO)로 변환할 때 선언.
@RestController: @Controller + @ResponseBody.
@Controller: 화면(HTML 파일)을 찾아서 브라우저에 보여주는 방식 (MVC의 View)@RestController: HTML이 아니라 JSON 데이터만 던져주는 방식@RequestMapping: URL 요청을 컨트롤러 내부의 특정 메서드와 매핑.
(메서드별 전용: @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 등)
@Transactional: 메서드 내 모든 DB 작업을 하나의 단위로 묶어 처리.
작업 중 하나라도 예외가 발생하면 전체 롤백(취소)하여 DB 데이터 정합성을 보장.
DTO 필드에 어노테이션을 붙여 값의 유효성을 자동으로 검증하는 표준 기술입니다.
@Valid를 붙여야 실제로 검증이 작동합니다.
public class CreateRequest {
@NotBlank
@Size(min = 2, max = 12)
private String playerName;
}
// 컨트롤러에서 검증 실행
@PostMapping("/games")
public ResponseEntity<Void> createGame(@Valid @RequestBody CreateRequest request) {
// 메서드 진입 전 자동 검사 → 위반 시 400 Bad Request 발생
...
}
| 개념 | 핵심 정의 및 사용하는 이유 |
|---|---|
| 무상태 (Stateless) | 서버가 클라이언트의 이전 요청 상태(세션 등)를 메모리에 보관하지 않는 방식. 상태를 DB에만 영속화함으로써, 서버 인스턴스를 자유롭게 확장(Scale-out)해도 데이터 불일치 문제가 발생하지 않음 |
| ORM | 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블을 자동 매핑하는 기술. 특정 DB(MySQL, PostgreSQL 등)의 문법에 종속되지 않고 추상화된 자바 코드로 데이터 제어 가능 |
| JpaRepository | ORM 기반으로 기본적인 CRUD 및 페이징 코드를 이미 구현해 둔 Spring Data JPA 인터페이스 |
| 더티 체킹 (Dirty Checking) | 트랜잭션 내에서 조회한 Entity의 필드가 변경되면, 트랜잭션 종료 시점에 변경 사항을 감지하여 자동으로 UPDATE 쿼리를 실행하는 JPA 기능 |
| API | 프로그램 간에 정해진 규칙에 따라 데이터를 주고받을 수 있도록 약속한 규격 및 인터페이스 |
| RESTful API | 명확한 URI(명사), 올바른 HTTP Method, 표준 상태 코드, 그리고 무상태성을 종합적으로 준수하는 API 설계 아키텍처 |
| ResponseEntity | HTTP 응답 상태 코드, 헤더, 응답 본문(Body)을 유연하게 제어하기 위해 사용하는 스프링의 응답 래퍼 객체 |
// ResponseEntity 활용 예시 (201 Created 응답)
return ResponseEntity.status(HttpStatus.CREATED).body(createdDto);