내일배움캠프 Spring 심화 강의

박재성·2024년 12월 30일
0

1. Spring 심화 강의 1주차 정리

1-1. HttpMessageConverter

역할 및 사용처

  • 역할

    • HTTP 요청/응답 본문 데이터를 객체로 변환하거나 객체를 본문에 변환하여 삽입하는 역할.
  • 사용처

    • HTTP 요청
    • @RequestBody
    • HttpEntity<>
    • RequestEntity<>
    • HTTP 응답
    • @ResponseBody
    • HttpEntity<>
    • ResponseEntity<>
  • 우선순위
    1. byte[] (바이너리 데이터)
    2. String (문자열 데이터)
    3. JSON (객체 데이터)

1-2. Spring 내부 구조

  • ArgumentResolver
  • HTTP 요청 데이터를 컨트롤러 메서드의 파라미터에 맞게 변환하는 인터페이스.
  • ReturnValueHandler
  • 컨트롤러 메서드가 반환한 값을 HTTP 응답에 적합한 형식으로 변환하는 인터페이스.

1-3. Converter와 Formatter

Converter

  • 특정 타입을 다른 타입으로 변환하는 데 사용하는 인터페이스.
  • 예: String → Integer, Date → LocalDateTime.

Formatter

  • 데이터를 특정 포맷에 맞춰 변환하거나 포맷팅 처리.
  • 예: 날짜, 숫자 포맷 지정.

ConversionService

  • 역할
    • Converter와 Formatter를 통합 관리하는 어댑터 패턴 기반의 서비스.
    • @RequestParam, @ModelAttribute, @PathVariable 등에서 활용.
  • 확장 방법
    • 직접 구현한 Converter나 Formatter를 등록하여 사용 가능.

WebMvcConfigurer

  • Spring MVC 설정을 확장하기 위한 인터페이스.
  • Converter와 Formatter를 설정을 통해 추가할 수 있음.

1-4. HttpMessageConverter vs ConversionService

HttpMessageConverter

  • 역할:
    • HTTP 요청 본문(RequestBody)을 객체로 변환.
    • 객체를 HTTP 응답 본문(ResponseBody)에 삽입.
    • JSON 변환: Jackson 라이브러리 사용.
    • 관련 애노테이션: @JsonFormat, Deserializer.

ConversionService

  • 역할:
    • 주로 요청 파라미터를 변환.
    • HttpMessageConverter와는 독립적으로 동작.

1-5. Spring의 핵심

  • Spring의 대부분 기능은 인터페이스 기반 설계.
  • 기본 제공 구현체가 다양하며, 개발자는 이를 잘 활용하면 대부분의 요구 사항을 해결 가능.
  • 필요한 경우, 내부 구조를 이해하고 특정 인터페이스를 확장하여 프로젝트에 적용 가능.

2. Spring 심화 강의 2주차 정리

2-1. 연관관계 매핑

1:N 단방향

  • 주 엔티티가 외래키를 관리.
  • 성능상 단점: 추가적인 Update SQL 실행 필요.

1:N 양방향

  • 양방향으로 설정해 유지보수성을 높임.

2-2. 상속관계 매핑

JOINED 전략

  • 장점: 테이블 정규화, 저장 공간 효율적 사용
  • 단점: 조회 시 JOIN 사용으로 성능 저하 가능.

2-3. Proxy와 지연 로딩

Lazy Loading

  • 실제 데이터가 필요할 때 데이터베이스 조회.

Eager Loading

  • 관련 데이터까지 한 번에 로드.

2-4. 영속성 전이 (Cascade)

Cascade 설정

  • 특정 엔티티 작업 시 연관된 엔티티에도 동일 작업 적용.

고아 객체 관리

  • 부모와 연관이 끊긴 객체를 자동 삭제.

2-5. 트랜잭션 전파

REQUIRED (기본 값)

  • 기존 트랜잭션 사용, 없으면 새로 생성.

3. Spring 심화 강의 3주차 정리

3-1. Bean 생명주기

생명주기와 콜백

  • Spring은 Bean의 생성, 관리, 소멸을 자동으로 처리.
  • @PostConstruct와 @PreDestroy를 사용해 초기화 및 종료 메서드 호출 가능.

초기화와 소멸

  • 초기화: Bean 생성 후 의존성 주입 및 리소스 준비 작업.
  • 소멸: 리소스 정리 및 연결 해제.

3-2. API 예외처리

@ExceptionHandler

  • 특정 컨트롤러 내에서 발생한 예외를 처리.
  • 각 메서드에 예외 처리 로직 추가 가능.

@ControllerAdvice

  • 애플리케이션 전역에서 예외 처리.
  • 모든 컨트롤러에 공통 예외 처리 로직 적용 가능.

3-3. JPQL

JPQL 특징

  • 객체를 대상으로 쿼리 작성.
  • 데이터베이스 독립적.

동적 쿼리

  • 실행 시 조건에 따라 변하는 SQL 생성.
  • 문자열 조합 방식으로 가독성 낮음.

3-4. fetch join

기본 개념

  • 연관된 엔티티를 한 번의 SQL로 로드.
  • N+1 문제를 해결하는 데 유용.

Collection fetch join

  • @OneToMany 컬렉션 조회 시 데이터 중복 방지.
  • 페이징 처리 시 메모리에서 수행됨.

3-5. Spring Data JPA와 JPQL

@Query Annotation

  • JPQL을 사용하여 복잡한 조회 로직 구현.
  • 파라미터 바인딩으로 SQL 인젝션 방지.

프로필 활용

  • @PostConstruct로 초기 데이터 설정.
  • 환경별 설정 관리 가능.

0개의 댓글

관련 채용 정보