Spring Model
-
이번 포스트에서는 @Repository에 대해서 살펴보자. @Repository 용도@Repository는 묵시적인 빈 등록을 위해서 사용되는 stereo type annotation으로 통상 Repository(DAO) 역할을 하는 빈에 선언한다.@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Repository { @AliasFor(annotation = Component.class) String value() default "";}통상 stereo 타입 annotation은 분류하기 위해서 사용하는데 @Repository는 좀 특별한 기능을 가지고 있다. docs에서 Re..
@Repository의 역할이번 포스트에서는 @Repository에 대해서 살펴보자. @Repository 용도@Repository는 묵시적인 빈 등록을 위해서 사용되는 stereo type annotation으로 통상 Repository(DAO) 역할을 하는 빈에 선언한다.@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Repository { @AliasFor(annotation = Component.class) String value() default "";}통상 stereo 타입 annotation은 분류하기 위해서 사용하는데 @Repository는 좀 특별한 기능을 가지고 있다. docs에서 Re..
2024.03.22 -
이번 포스트에서는 Connection Pool에 대해 살펴보자. Connection Pool 개념과 필요성"Connection Pool"이란 말 그대로 DB에 접속하기 위한 Connection들이 놀고 있는 수영장(Pool)이다.DB에 접속하기 위해서는 Connection이라는 리소스가 필요하다. 이 리소스는 특정 요청이 지속적으로 점유하게 되면 리소스 누수가 발생할 수 있기 때문에, 사용 후에는 반드시 종료해서 다른 요청이 사용할 수 있게 해야 한다. 그런데 일반적으로 DB는 네트워크 저~멀리 있기 때문에 매번 접속하는데 상당한 비용이 든다. 따라서 한번 쓰고 종료하는것은 매우 비효율적이다.이런 문제를 해결하기 위해서 Connection Pool 개념이 등장했다. Connection Pool은 Co..
Connection Pool이번 포스트에서는 Connection Pool에 대해 살펴보자. Connection Pool 개념과 필요성"Connection Pool"이란 말 그대로 DB에 접속하기 위한 Connection들이 놀고 있는 수영장(Pool)이다.DB에 접속하기 위해서는 Connection이라는 리소스가 필요하다. 이 리소스는 특정 요청이 지속적으로 점유하게 되면 리소스 누수가 발생할 수 있기 때문에, 사용 후에는 반드시 종료해서 다른 요청이 사용할 수 있게 해야 한다. 그런데 일반적으로 DB는 네트워크 저~멀리 있기 때문에 매번 접속하는데 상당한 비용이 든다. 따라서 한번 쓰고 종료하는것은 매우 비효율적이다.이런 문제를 해결하기 위해서 Connection Pool 개념이 등장했다. Connection Pool은 Co..
2024.03.22 -
이번 포스트에서는 @Transactional의 다른 속성들에 대해 살펴보자.@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Transactional { Propagation propagation() default Propagation.REQUIRED; Isolation isolation() default Isolation.DEFAULT; int timeout() default TransactionDefinition.TIMEOUT_DEFAULT; boolean readOnly() default false; Class[] rollbackFor..
@Transactional의 속성 2이번 포스트에서는 @Transactional의 다른 속성들에 대해 살펴보자.@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Transactional { Propagation propagation() default Propagation.REQUIRED; Isolation isolation() default Isolation.DEFAULT; int timeout() default TransactionDefinition.TIMEOUT_DEFAULT; boolean readOnly() default false; Class[] rollbackFor..
2023.10.23 -
이번 포스트에서는 @Transactional의 속성들에 대해서 좀 깊게 살펴보자.@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Transactional { Propagation propagation() default Propagation.REQUIRED; Isolation isolation() default Isolation.DEFAULT; int timeout() default TransactionDefinition.TIMEOUT_DEFAULT; boolean readOnly() default false; Class[] rollback..
@Transactional의 속성 1이번 포스트에서는 @Transactional의 속성들에 대해서 좀 깊게 살펴보자.@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Transactional { Propagation propagation() default Propagation.REQUIRED; Isolation isolation() default Isolation.DEFAULT; int timeout() default TransactionDefinition.TIMEOUT_DEFAULT; boolean readOnly() default false; Class[] rollback..
2023.10.20 -
우리는 데이터를 표현하기 위해서 Entity, VO, DTO라는 녀석들을 사용한다. 기본적인 작성 방법이 비슷해서 대충 섞어서 잘못 사용하는 경향이 있는데 이들의 정확한 차이점에 대해서 살펴보자. Entity vs VO vs DTO EntityEntity는 실제 데이터베이스의 테이블과 매핑되어 영속성을 가지는 데이터를 표현하기 위해 사용된다.Entity는 테이블의 기본키(Primary Key)에 해당하는 고유한 식별자(ID)를 가지며 이를 기준으로 동일성을 판단한다. 따라서 Entity 객체 하나가 테이블의 한 행(row)에 대응 된다. Entity는 식별자는 불변이지만 시간에 따라 상태가 변할 수 있는 가변성을 갖는다.Entity는 필요 시 비지니스 로직을 포함할 수 있으며 데이터와 관련된 로직을 ..
Entity vs VO vs DTO우리는 데이터를 표현하기 위해서 Entity, VO, DTO라는 녀석들을 사용한다. 기본적인 작성 방법이 비슷해서 대충 섞어서 잘못 사용하는 경향이 있는데 이들의 정확한 차이점에 대해서 살펴보자. Entity vs VO vs DTO EntityEntity는 실제 데이터베이스의 테이블과 매핑되어 영속성을 가지는 데이터를 표현하기 위해 사용된다.Entity는 테이블의 기본키(Primary Key)에 해당하는 고유한 식별자(ID)를 가지며 이를 기준으로 동일성을 판단한다. 따라서 Entity 객체 하나가 테이블의 한 행(row)에 대응 된다. Entity는 식별자는 불변이지만 시간에 따라 상태가 변할 수 있는 가변성을 갖는다.Entity는 필요 시 비지니스 로직을 포함할 수 있으며 데이터와 관련된 로직을 ..
2023.10.19 -
이번 시간에는 SpringBoot에서 Spring Data JPA를 사용하기 위한 프로젝트의 기본 환경 설정에 대해 살펴보자.프로젝트 개요 게시판을 위한 Spring Data Jpa 프로젝트우리가 만들어볼 애플리케이션은 회원제 게시판이다. 회원은 여러 개의 게시글을 작성할 수 있고 각각의 게시글은 하나의 첨부 파일과 여러 개의 댓글을 가질 수 있다. 데이터를 저장할 데이터베이스로는 H2를 사용한다.Spring Data JPA를 통해 접근한다. Spring Data JPA는 JPA 사용하는데 그 구현체로는 Hibernate를 사용한다. 구현체는 EclipseLink등으로 교체할 수도 있다.Model을 구성하는 Service와 Repository는 빈으로 관리되며 DB의 테이블을 객체화 하기 위한 Enti..
03. 프로젝트 구성이번 시간에는 SpringBoot에서 Spring Data JPA를 사용하기 위한 프로젝트의 기본 환경 설정에 대해 살펴보자.프로젝트 개요 게시판을 위한 Spring Data Jpa 프로젝트우리가 만들어볼 애플리케이션은 회원제 게시판이다. 회원은 여러 개의 게시글을 작성할 수 있고 각각의 게시글은 하나의 첨부 파일과 여러 개의 댓글을 가질 수 있다. 데이터를 저장할 데이터베이스로는 H2를 사용한다.Spring Data JPA를 통해 접근한다. Spring Data JPA는 JPA 사용하는데 그 구현체로는 Hibernate를 사용한다. 구현체는 EclipseLink등으로 교체할 수도 있다.Model을 구성하는 Service와 Repository는 빈으로 관리되며 DB의 테이블을 객체화 하기 위한 Enti..
2022.11.13 -
이번 시간에는 엔티티의 상태 관리와 관련된 메서드들을 사용해보면서 P.C의 동작 즉 1차캐시, 지연로딩, 식별자를 통한 엔티티 관리, 변경 감지, 쓰기 지연 방식에 대해 살펴보자.Entity의 상태 P.C에서 엔티티의 상태P.C에서 엔티티는 new(transient) / managed / detached / removed 의 4가지 상태로 관리된다.상태설명New - 비영속엔티티는 생성됐지만 아직 EntityManager가 관리하지 않음Managed - 영속persist 또는 find 계열의 메서드 동작 등으로 엔티티가 P.C의 1차캐시에 저장된 상태로 EntityManager에 의해 관리 됨Detached - 준영속영속 상태였다가 EntityManager가 close() 또는 clear()되거나 엔티티..
06. 엔티티의 상태 관리이번 시간에는 엔티티의 상태 관리와 관련된 메서드들을 사용해보면서 P.C의 동작 즉 1차캐시, 지연로딩, 식별자를 통한 엔티티 관리, 변경 감지, 쓰기 지연 방식에 대해 살펴보자.Entity의 상태 P.C에서 엔티티의 상태P.C에서 엔티티는 new(transient) / managed / detached / removed 의 4가지 상태로 관리된다.상태설명New - 비영속엔티티는 생성됐지만 아직 EntityManager가 관리하지 않음Managed - 영속persist 또는 find 계열의 메서드 동작 등으로 엔티티가 P.C의 1차캐시에 저장된 상태로 EntityManager에 의해 관리 됨Detached - 준영속영속 상태였다가 EntityManager가 close() 또는 clear()되거나 엔티티..
2022.04.12 -
이번 포스트에서는 JPA의 동작을 이해하는데 매우 중요한 EntityManager와 Persistence Context에 대해 알아보자.EntityManager EntityManager?EntityManager라는 객체는 JPA에서 엔티티를 관리하는 핵심 객체이다. EntityManager는 엔티티의 생명주기를 관리하고 엔티티에 대한 C/R/U/D 처리를 위한 API를 제공한다.다음은 EntityManager의 주요 메서드이다.package jakarta.persistence;public interface EntityManager extends AutoCloseable { public void persist(Object entity); // create..
05. EntityManager와 Persistence Context이번 포스트에서는 JPA의 동작을 이해하는데 매우 중요한 EntityManager와 Persistence Context에 대해 알아보자.EntityManager EntityManager?EntityManager라는 객체는 JPA에서 엔티티를 관리하는 핵심 객체이다. EntityManager는 엔티티의 생명주기를 관리하고 엔티티에 대한 C/R/U/D 처리를 위한 API를 제공한다.다음은 EntityManager의 주요 메서드이다.package jakarta.persistence;public interface EntityManager extends AutoCloseable { public void persist(Object entity); // create..
2022.03.19