lustella-123.log
로그인
lustella-123.log
로그인
내일배움캠프 Spring 심화 강의
박재성
·
2024년 12월 30일
팔로우
0
Spring
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로 초기 데이터 설정.
환경별 설정 관리 가능.
박재성
팔로우
이전 포스트
2개 이상의 PathVariable
다음 포스트
application.properties 부재로 인한 오류 해결 과정
0개의 댓글
댓글 작성
관련 채용 정보