
전체 글

[Spring] 영속성 컨텍스트와 @Transactional 어노테이션
들어가기에 앞서 스프링 Todo List 프로젝트 중 JPA의 Dirty Checking 기능이 작동하지 않아 이유에 대해 함께 프로젝트를 진행 중이던 팀원에게 물어보니, @Transactional을 Update Service에 붙이지 않아서 Dirty Check가 이루어지지 않았다는 사실을 알려주었다. 단순히 @Transactional은 오류 발생 시 롤백을 위함으로 알고 있던 나에게는 충격으로 다가왔다. 그렇기에 @Transactional 어노테이션에 대해 제대로 정리를 해야겠다는 생각을 하게 되었다. @Transactional과 영속성 컨텍스트에 대해 알아보기 전에 먼저 JPA의 Dirty Checking 기능에 대해 알아보겠다. JPA Dirty Checking JPA는 Entity Manager..

[Spring] Open-In-View란?
Open-In-View는 Open-Session-In-View 또는 Open-EntityManager-In-View라고 불리기도 한다. Default값은 true이며, 이 경우에는 영속성 컨텍스트가 트랜잭션 범위를 넘어선 레이어까지 살아있다. API에서는 클라이언트에게 응답될 때까지, View에서는 View가 렌더링될 때까지 영속성 컨텍스트가 살아있다. 아래처럼 application.properties에서 false로 설정해주었다면, 영속성 컨텐스트는 트랜잭션을 종료할 때 같이 닫히게 된다. spring.jpa.open-in-view=false 위 그림은 OSIV(Open-Session-In-View)가 True일 때를 보여준다. 위 그림은 OSIV(Open-Session-In-View)가 False일 ..
[ToDo List using JPA] 1. CRUD와 JPA란?
CRUD란 ToDo List를 만들기에 앞서 CRUD에 대한 개념을 알아보고자 한다. CRUD는 컴퓨터 소프트웨어가 데이터를 다루는 가장 기본적인 방법 4가지를 의미한다. 각각 Create, Read, Update, Delete의 앞글자를 묶어서 일컫는 말이다. 1. Create (생성) 새로운 데이터를 생성하고, DB의 테이블에 이를 저장하는 것이다. SQL문의 Insert에 해당한다. 2. Read (읽기) DB의 테이블에 저장된 데이터를 읽어오는 것이다. SQL문의 Select에 해당한다. 3. Update (갱신) DB의 테이블에 저장 되어있는 데이터를 변경하는 것이다. SQL문의 Update에 해당한다. 4. Delete (삭제) DB의 테이블에 저장된 데이터를 삭제하는 것이다. SQL문의 De..

(스프링 기본) 9. 빈 스코프
이 글은 김영한 님의 스프링 핵심 원리 - 기본편 강좌 수강 후 정리한 글입니다. https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 빈 스코프란? 스코프는 빈이 존재할 수 있는 범위를 뜻한다. 스프링이 지원하는 빈 스코프들은 다음과 같다. 1. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 2. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하..

(스프링 기본) 8. 빈 생명 주기 콜백
이 글은 김영한 님의 스프링 핵심 원리 - 기본편 강좌 수강 후 정리한 글입니다. https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 빈 생명 주기 콜백 시작 스프링을 통해 객체의 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아보자. 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자. 이 NetworkClient는 애플리케이션 시작 시점에 connect()를 호출해서 연결을 맺어두어야 하고, 애플리케이션이 ..

(스프링 기본) 7. 의존관계 자동 주입
이 글은 김영한 님의 스프링 핵심 원리 - 기본편 강좌 수강 후 정리한 글입니다. https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 다양한 의존관계 주입 방법 의존관계 주입 방법에는 4가지가 존재한다. 생성자 주입 수정자 주입 (setter 주입) 필드 주입 일반 메서드 주입 ● 생성자 주입 이름에서 알 수 있듯이 생성자를 통해서 의존관계를 주입받는다. 생성자 호출 시점에 딱 한 번 실행되는 것이 보장되기 때문에, 불변이나 필수 의존관계..

(스프링 기본) 6. 컴포넌트 스캔
이 글은 김영한 님의 스프링 핵심 원리 - 기본편 강좌 수강 후 정리한 글입니다. https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지는 자바 코드의 @Bean을 활용하여 설정 정보에 직접 등록할 빈을 나열하였다. 만약 빈의 개수가 매우 많아지면 이 작업은 너무 귀찮고, 누락의 위험성 또한 존재한다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔을 제공한..

(스프링 기본) 5. 싱글톤 컨테이너
이 글은 김영한 님의 스프링 핵심 원리 - 기본편 강좌 수강 후 정리한 글입니다. https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 웹 애플리케이션과 싱글톤 스프링은 태생부터 기업용 온라인 서비스를 지원하기 위해 탄생하였다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 일반 애플리케이션 개발도 충분히 가능하다. 보통 웹 애플리케이션은 위 그림처럼 여러 고객이 동시에 요청을 한다. 만약 세 명의 클라이언트가 동시에 ..

(스프링 기본) 4. 스프링 컨테이너와 스프링 빈
이 글은 김영한 님의 스프링 핵심 원리 - 기본편 강좌 수강 후 정리한 글입니다. https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 스프링 컨테이너 생성 스프링 컨테이너가 생성되는 과정을 알아보겠다. ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext는..

(스프링 기본) 3. 스프링 핵심 원리 이해 2 - 객체 지향 원리 적용
이 글은 김영한 님의 스프링 핵심 원리 - 기본편 강좌 수강 후 정리한 글입니다. (https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard) 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 새로운 할인 정책 개발 저번에 개발한 할인 정책이 정말 객체지향 설계 원칙을 잘 준수했는지 확인해보자. 이번에는 고정 금액 할인이 아닌 정률(%) 할인 정책을 추가할 것이다. 1. RateDiscountPolicy 추가 저번에 고정 금액 할인 정책인 FixDiscountPolicy를 구현했으므로 이번엔 ..