Layered Architecture 구조별 테스트 작성법
Persistence, Business, Presentation 계층의 역할과 계층별 테스트 전략, @DataJpaTest·@WebMvcTest 활용법을 정리합니다.
Persistence, Business, Presentation 계층의 역할과 계층별 테스트 전략, @DataJpaTest·@WebMvcTest 활용법을 정리합니다.
Mockito의 @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 애노테이션의 차이와 단위·통합 테스트에서의 활용법을 예제 코드로 정리합니다.
실무 프로젝트 전반에 REQUIRES_NEW가 남용되던 원인을 프록시 패턴과 롤백 시점 이해 부족에서 찾아 분석한 경험을 공유합니다.
Spring이 @Component, @Service 같은 어노테이션을 인식하는 원리와 Target, Retention 등 메타 어노테이션의 의미를 정리합니다.
같은 서비스 안에서 @Transactional 메서드를 자기 호출해 롤백이 안 되는 문제를 실제 운영 코드에서 겪고 해결한 과정을 기록합니다.
@Transactional 안에서 try ~ catch로 예외를 감쌀 때 롤백이 동작하지 않는 원인을 TransactionAspectSupport 내부 동작으로 분석하고 해결 방법을 정리합니다.
Spring이 제공하는 HTTP 클라이언트 RestTemplate의 개념과 주요 메서드, 실전 사용 예시를 정리합니다.
여러 개의 트랜잭션 매니저 빈이 등록된 환경에서 테스트 코드가 NoUniqueBeanDefinitionException을 던진 원인과 해결 과정을 정리합니다.
순수 JPA로 기본 CRUD 리포지토리를 만들어본 뒤, 스프링 데이터 JPA의 공통 인터페이스 JpaRepository로 대체하는 과정을 정리합니다.
스프링 데이터 JPA 공통 인터페이스 구현체 SimpleJpaRepository의 동작과 save() 메서드의 신규 엔티티 판단 로직을 정리합니다.
클린 코드 학습을 11장까지 진행한 상황을 돌아보고, Spring 기초를 보완한 뒤 12장부터 이어가겠다는 계획을 정리합니다.
지연 로딩과 즉시 로딩의 동작 차이를 프록시 조회 관점에서 정리하고, 실무에서 지연 로딩을 써야 하는 이유를 짚습니다.
회원 도메인과 메모리 기반 리포지토리를 인터페이스로 설계하고, JUnit으로 저장/조회 기능을 검증하는 과정을 정리합니다.
회원가입 중복 검증 로직을 담은 Service 계층을 구현하고, given-when-then 패턴으로 정상 케이스와 예외 케이스를 테스트합니다.
Thymeleaf로 홈, 회원 등록 폼, 회원 목록 화면을 구성하고 HomeController에서 등록·조회 요청을 처리하는 과정을 정리합니다.
순수 JDBC로 MemberRepository를 구현하고, SpringConfig의 빈 설정만 바꿔서 메모리 저장소를 DB로 교체하는 과정을 정리합니다.
JPA 엔티티 매핑과 EntityManager 기반 리포지토리를 구현하고, SpringConfig의 빈 설정만 바꿔 JDBC 구현체를 JPA로 교체하는 과정을 정리합니다.
중복이 있던 AppConfig를 리팩터링해 역할과 구현이 한눈에 드러나도록 정리하고, 그 과정에서 지켜지는 SOLID 원칙을 살펴봅니다.
순수 자바 코드로 작성했던 AppConfig를 @Configuration과 @Bean으로 전환해 스프링 컨테이너에 빈을 등록하는 과정을 정리합니다.
스프링 컨테이너의 최상위 인터페이스인 BeanFactory와, 이를 상속해 다양한 부가 기능을 제공하는 ApplicationContext의 역할을 정리합니다.
자바 코드 대신 XML로 스프링 빈을 설정하는 방법과, 다양한 설정 형식을 가능하게 하는 BeanDefinition 추상화를 정리합니다.
AppConfig가 여러 번 호출되어도 싱글톤이 보장되는 이유를 @Configuration과 CGLIB 바이트코드 조작을 통해 분석합니다.
수정자 주입 대신 생성자 주입을 권장하는 이유와, 롬복의 @RequiredArgsConstructor로 생성자 코드를 줄이는 방법을 정리합니다.
스프링에서 @Autowired로 조회한 빈이 2개 이상일 때 발생하는 충돌을 필드명 매칭, @Qualifier, @Primary로 해결하는 방법을 정리합니다.
문자열 기반 @Qualifier의 오타 위험을 없애기 위해 전용 애노테이션을 직접 만들어 타입 안전하게 의존관계를 주입하는 방법을 정리합니다.
스프링 빈을 자동 등록과 수동 등록 중 어떤 기준으로 선택해야 하는지, 업무 로직과 기술 지원 로직을 나누어 정리합니다.
스프링 빈의 생명주기와 초기화·소멸 콜백을 인터페이스, 설정 정보, @PostConstruct/@PreDestroy 세 가지 방식으로 비교해 정리합니다.
싱글톤과 프로토타입 빈 스코프의 차이를 살펴보고, 싱글톤 빈이 프로토타입 빈을 주입받을 때 발생하는 문제를 예제로 정리합니다.
싱글톤 빈이 프로토타입 빈을 매번 새로 받아 쓰지 못하는 문제를 ObjectProvider로 해결하는 방법을 정리합니다.
웹 스코프와 request 스코프의 동작 방식을 살펴보고, ObjectProvider와 CGLIB 프록시로 스코프 문제를 해결하는 방법을 정리합니다.
@Component 애노테이션이 붙은 클래스를 스프링 빈으로 자동 등록하고, 생성자를 통해 의존관계를 자동으로 주입받는 컴포넌트 스캔 방식을 정리합니다.
아직 데이터베이스가 정해지지 않은 상황에서 SpringConfig 자바 클래스로 스프링 빈을 직접 등록하는 방법을 정리합니다.
H2 데이터베이스를 설치하고 build.gradle과 application.properties를 설정해 스프링 프로젝트와 연동하는 과정을 정리합니다.
@SpringBootTest와 @Transactional로 회원 서비스의 회원가입, 중복 검증, 조회 기능을 통합 테스트하는 과정을 정리합니다.
JpaRepository를 상속하는 인터페이스만으로 리포지토리 구현체를 자동 생성하는 스프링 데이터 JPA 사용법을 정리합니다.