01 Java 'new'에서 Spring 자동 주입으로: 의존성 관리의 전환 수동 객체 조립과 Spring의 자동 Bean 조립이 같은 의존성 주입 문제를 다르게 처리한다는 점을 이해한다. KT AIVLE School
Backend
Spring Boot와 JPA, REST API 계층 구조를 따라가는 백엔드 산문
- 원고
- 27
- 8월 25일-9월 24일
- 0편
01 Java 'new'에서 Spring 자동 주입으로: 의존성 관리의 전환 수동 객체 조립과 Spring의 자동 Bean 조립이 같은 의존성 주입 문제를 다르게 처리한다는 점을 이해한다.
02 IoC, 컨테이너, Bean: 스프링 핵심 개념 이해하기 IoC는 관리 주체의 이동이고, 컨테이너는 관리 공간이며, Bean은 그 안에서 관리되는 객체라는 관계를 이해한다.
03 DI와 생성자 주입 패턴: Spring의 마법 너머 설계의 진리 DI는 객체가 필요한 의존성을 외부에서 받는 구조이고, 생성자 주입이 그 구조를 가장 명확하게 드러낸다는 점을 이해한다.
04 Spring Boot의 자동 설정 이해 Spring Boot가 프레임워크 자체를 바꾼 것이 아니라 시작 설정과 기본 구성을 줄여주는 층이라는 점을 이해한다.
05 Initializr, Gradle, Dependencies로 스프링 프로젝트 시작하기 Initializr는 프로젝트 뼈대를 만들고, Gradle은 의존성을 받아오며, Dependencies는 필요한 Spring 기능을 선택하는 자리라는 점을 이해한다.
06 Spring Boot 첫 실행, 막연함 끝! Spring Boot 프로젝트의 실행 입구, 설정 파일, 의존성 파일, 패키지 구조가 어떤 책임을 나누는지 이해한다.
07 MVC 역할 분리: 웹 요청 처리를 위한 설계의 지혜 웹 요청과 응답 흐름에서 Controller가 입구를 맡고, Model/View가 서로 다른 책임을 맡는 이유를 이해한다.
08 Spring MVC의 숨겨진 흐름: 요청이 응답이 되기까지 DispatcherServlet이 요청을 받아 적절한 Controller와 View/응답 처리로 연결하는 앞단 조정자라는 점을 이해한다.
09 Layered Architecture와 Book 도메인 구조: 패키지는 단순 정리가 아니다 Controller, Service, Repository, DB가 요청을 단계적으로 넘기며 책임을 나눈다는 구조를 이해한다.
10 REST에서 자원, Method, Status Code 나누기 REST에서 자원 이름, 행위, 처리 결과를 URI, HTTP Method, Status Code로 분리해 표현한다는 점을 이해한다.
11 Spring @RestController와 JSON 응답: '자동'의 비밀을 풀다 @RestController, @GetMapping, @PathVariable, @RequestParam, Jackson 직렬화가 요청과 응답을 연결하는 방식을 이해한다.
12 JDBC의 반복에서 JPA로 넘어가기 JDBC의 반복 코드와 객체-관계 불일치를 보고, JPA가 Entity를 통해 DB 접근을 추상화하는 이유를 이해한다.
13 H2, JPA 의존성, Datasource 설정 이해하기 애플리케이션이 DB에 접속하려면 의존성, 접속 정보, JPA 설정이 함께 맞아야 한다는 점을 이해한다.
14 JPA Entity: 당신의 Java 객체가 데이터베이스에서 살아 숨 쉬는 이유 @Entity, @Id, @GeneratedValue, @Column, 기본 생성자가 JPA의 객체 추적과 테이블 매핑에 왜 필요한지 이해한다.
15 Lombok으로 Entity 반복 코드 줄이기 Lombok은 런타임 마법이 아니라 컴파일 시점 보일러플레이트 생성이며, Entity의 의미를 바꾸지 않는다는 점을 이해한다.
16 ddl-auto와 테이블 자동 생성: '자동'의 비밀 파헤치기 ddl-auto 설정이 Entity 정의를 바탕으로 DB 스키마 생성/검증 방식을 결정한다는 점을 이해한다.
17 Postman으로 API 요청의 모든 것을 실험하기 HTTP Method, URL, Body, Send, 응답 확인을 분리해서 API를 직접 실험하는 감각을 익힌다.
18 JpaRepository: 구현 없는 메서드의 비밀 Spring Data JPA가 Repository 인터페이스 상속 정보를 바탕으로 CRUD 구현을 제공한다는 점을 이해한다.
19 Controller와 Repository 연결: 실제 DB 데이터 활용 Repository 주입 후 findAll, deleteById, count, existsById가 Controller 요청 뒤에서 DB 작업으로 연결되는 흐름을 이해한다.
20 Spring Data JPA 쿼리 메서드 이름 규칙 해독하기 Spring Data JPA 쿼리 메서드가 이름 규칙을 해석해 검색 조건과 정렬 조건을 만든다는 점을 이해한다.
21 페이징, 정렬, save, @Query: 더 이상 findAll에 의존하지 않는 데이터 처리 조회량 제어, 정렬 기준, save의 INSERT/UPDATE 구분, 복잡한 쿼리 직접 작성의 역할을 구분한다.
22 Controller와 Service: 단순한 폴더가 아닌 책임의 분리 계층 분리가 단순 폴더 정리가 아니라 요청 처리와 비즈니스 판단의 책임 분리라는 점을 이해한다.
23 Optional에서 사용자 정의 예외로 바꾸기: '의미 있는 실패'의 가치 예외 이름이 실패 원인을 표현하고, Service 계층이 도메인에 맞는 실패를 만들어야 한다는 점을 이해한다.
24 성공의 그림자: HTTP 응답 코드로 API 의도 밝히기 GET 조회, POST 생성, @RequestBody 변환, @Valid 검증, ResponseEntity와 201 Created의 역할을 구분한다.
25 PATCH 부분 수정과 DELETE 응답 설계 PATCH는 일부 필드 변경을 표현하고, DELETE는 삭제 성공을 204 No Content로 표현한다는 점을 이해한다.
26 @Transactional과 readOnly 옵션: DB 일관성과 성능 최적화 @Transactional이 여러 DB 작업을 하나의 성공/실패 단위로 보호하고, readOnly=true가 조회 작업을 구분한다는 점을 이해한다.
27 GlobalExceptionHandler: Controller의 try-catch를 넘어선 전역 예외 처리 @RestControllerAdvice와 @ExceptionHandler가 예외를 일관된 HTTP 응답으로 바꾸는 구조를 이해한다.