JPA 영속성 컨텍스트와 엔티티 상태 관리 — 마법 같은 동작의 원리
·
JPA
들어가며JPA를 사용하면 데이터베이스를 객체지향적으로 다룰 수 있을 뿐만 아니라 반복적인 SQL 작성 시간을 줄여 비즈니스 로직 개발에 더욱 몰입할 수 있습니다. 하지만 내부적으로 엔티티가 어떻게 관리되고 동작하는지 정확히 모른 채 사용한다면 복잡한 비즈니스 상황에서 의도치 않은 쿼리가 발생하거나 데이터 정합성이 깨지는 결과를 초래할 수 있스빈다. 결국 JPA를 '잘' 쓰기 위해서는 내부적으로 엔티티가 어덯게 관리되고 동작하는지 잘 알고 있어야 합니다.이번 글에서는 JPA의 핵심 중의 핵심인 영속성 컨텍스트(Persistence Context)의 개념과 엔티티의 상태 관리에 대해 다루어 보겠습니다.1. 영속성 컨텍스트란 무엇인가?영속성 컨텍스트(Persistence Context) 는 한 마디로 ..
Spring AOP 완전 정리 — Aspect, Pointcut, @Around, 내부 동작 원리까지
·
스프링
들어가며 토비의 스프링을 읽으며 스프링 내부 동작을 공부하다가 AOP라는 개념을 알게 되었습니다. 특히 Transactional, 로깅, 보안 처리 같은 기능이 어떻게 핵심 비즈니스 로직과 분리되어 동작하는지 궁금해지면서 AOP의 개념을 다시 정리하게 되었습니다. 이번 글에서는 AOP의 전체 구조를 기준으로, AOP, Aspect, Pointcut(AspectJ 표현식), Advice, @Around, Target, 그리고 AspectJ 문법까지 정리해보겠습니다0. AOP란 무엇인가AOP(Aspect Oriented Programming)는 횡단 관심사(Cross-Cutting Concern)를 핵심 비즈니스 로직과 분리하기 위한 프로그래밍 패러다임입니다.로깅, 트랜잭션, 보안, 캐싱과 같은 기능은 애플..
스프링에서 스코프(Scope)란 무엇인가?
·
스프링
0. 들어가며최근에 스프링을 기초부터 공부하면서 저는 @Component나 @Service 같은 어노테이션을 사용하는 것은 익숙했지만 빈이 언제 생성되고 언제 소멸되는지, 즉 객체의 생명주기에 대해서는 전혀 모르고 있었다는 것을 깨달았습니다.“이 객체가 얼마나 오래 살아야 하는가?”“누가 이 객체를 관리할 책임이 있는가?”를 명확히 아는 것이 매우 중요합니다. 이를 관리해주는 것이 바로 스코프(Scope) 개념입니다. 스코프를 이해하면 IOC 컨테이너가 빈을 어떻게 관리하는지 그리고 싱글톤과 프로토타입, 웹 스코프가 왜 존재하는지 자연스럽게 이해할 수 있습니다.이번 글에서는 제가 공부하면서 정리한 내용을 바탕으로 스프링에서 지원하는 대표적인 스코프각 스코프가 IOC 컨테이너와 어떻게 연결되어 관리..
스프링을 스프링답게 만드는 진짜 이유: IoC·AOP·PSA 삼각형의 정체
·
스프링
0. 들어가며 스프링은 자바 기반의 오픈소스 프레임워크입니다.그리고 스프링은 단순히 편리한 기능을 제공하는 프레임워크가 아니라 자바로 객체지향 프로그래밍을 더 잘 할 수 있도록 도와주는 프레임워크입니다. 그 이유는 스프링의 뼈대에 IoC/DI, AOP, PSA, 그리고 POJO라는 핵심 개념들이 있기 때문입니다.이 개념들은 각각 독립적인 기능처럼 보이지만 결국 공통된 목적을 가지고 있습니다.바로 객체가 자신의 역할과 책임에만 집중할 수 있도록 만드는 것입니다. 그래서 스프링을 제대로 이해하기 위해서는 어노테이션이나 사용법을 익히는 것보다이른바 ‘스프링 삼각형’ 이라 불리는 IoC/DI, AOP, PSA 그리고 POJO를 먼저 이해하는 것이 중요하다고 느꼈습니다. 이 글은 「토비의 스프링」을 읽으며 스프..
@Data 사용을 지양해야 하는 이유
·
스프링
@Data@Data는 Lombok에서 제공하는 어노테이션이다.한 줄로 여러 기능을 자동으로 생성해 준다.@Data = @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor포함된 기능@Getter: 모든 필드의 getter 생성@Setter: 모든 필드의 setter 생성@ToString: toString() 메서드 생성@EqualsAndHashCode: equals(), hashCode() 메서드 생성@RequiredArgsConstructor: final 필드 또는 @NonNull 붙은 필드 생성자 생성왜 @Data 를 쓰면 안좋은가?1.모든 필드에 대해 Getter/Setter 생성캡슐화 원칙에 어긋난다.-Sette..