내일배움캠프 TIL 8일차 - 하루 시작 전 한번 씩 읽기

정광훈(단기심화_9기)·2026년 9월 9일

TIL (Today I Learned)

목록 보기
117/127
post-thumbnail

[Spring Boot] 개발 전 매일 읽는 백엔드 핵심 개념 & 코드 흐름 요약집

실제 코드를 작성하기 전 머릿속에 흐름을 잡고,
헷갈리기 쉬운 핵심 개념과 어노테이션을 점검하기 위한 데일리 핸드북입니다.


1. 요청부터 응답까지: 전체 코드 실행 흐름

[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 사이에서 도메인 데이터 영속 목적으로 사용

2. 필수 어노테이션 핵심 정리

  • @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)
      → 서버가 만든 HTML을 그대로 전달
    • @RestController: HTML이 아니라 JSON 데이터만 던져주는 방식
      → 화면은 프론트엔드(React 등)가 그 JSON을 받아서 따로 그림
  • @RequestMapping: URL 요청을 컨트롤러 내부의 특정 메서드와 매핑.
    (메서드별 전용: @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 등)

  • @Transactional: 메서드 내 모든 DB 작업을 하나의 단위로 묶어 처리.
    작업 중 하나라도 예외가 발생하면 전체 롤백(취소)하여 DB 데이터 정합성을 보장.


3. Bean Validation (@Valid)

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 발생
    ...
}

4. 아키텍처 & 핵심 개념 치트시트

개념핵심 정의 및 사용하는 이유
무상태 (Stateless)서버가 클라이언트의 이전 요청 상태(세션 등)를 메모리에 보관하지 않는 방식. 상태를 DB에만 영속화함으로써, 서버 인스턴스를 자유롭게 확장(Scale-out)해도 데이터 불일치 문제가 발생하지 않음
ORM프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블을 자동 매핑하는 기술. 특정 DB(MySQL, PostgreSQL 등)의 문법에 종속되지 않고 추상화된 자바 코드로 데이터 제어 가능
JpaRepositoryORM 기반으로 기본적인 CRUD 및 페이징 코드를 이미 구현해 둔 Spring Data JPA 인터페이스
더티 체킹 (Dirty Checking)트랜잭션 내에서 조회한 Entity의 필드가 변경되면, 트랜잭션 종료 시점에 변경 사항을 감지하여 자동으로 UPDATE 쿼리를 실행하는 JPA 기능
API프로그램 간에 정해진 규칙에 따라 데이터를 주고받을 수 있도록 약속한 규격 및 인터페이스
RESTful API명확한 URI(명사), 올바른 HTTP Method, 표준 상태 코드, 그리고 무상태성을 종합적으로 준수하는 API 설계 아키텍처
ResponseEntityHTTP 응답 상태 코드, 헤더, 응답 본문(Body)을 유연하게 제어하기 위해 사용하는 스프링의 응답 래퍼 객체
// ResponseEntity 활용 예시 (201 Created 응답)
return ResponseEntity.status(HttpStatus.CREATED).body(createdDto);
profile
내배캠 Unity_9기 / 게임 서버 단기 심화_9기

0개의 댓글