본문 바로가기

JPA

(3)
Spring 환경에서의 하이버네이트의 개념과 영속성 컨텍스트, 그리고 트랜잭션 하이버네이트 개념과 Session 하이버네이트는 객체/관계형 데이터베이스 문제를 해결해주는 ORM 기술로 투명한 영속성 매커니즘을 제공하는 비 침투적인 프레임워크입니다. 참고 ( 객체/관계형 데이터베이스 매핑 문제 : http://blogs.tedneward.com/post/the-vietnam-of-computer-science/ ) 하이버네이트를 사용하면 객체/관계 매핑 문제를 어느정도 해결할 수 있고, 영속성과 관련된 관심사를 애플리케이션에서 격리시켜 내부적으로 처리할 수 있게 됩니다. 하이버네이트에서는 Session(JPA에서는 EntityManager)이 영속성과 관련된 관심사를 담당하게 됩니다. 영속성 컨텍스트 ( persistence Context ) 하이버네이트를 사용하게 되면 애플리케이션..
JPA(hibernate) 연관관계 정리 @ManyToOne 가장 흔한 어노테이션으로 관계형 데이터베이스가 관계를 맺는 방식과 유사합니다. ex) @ManyToOne 연관관계가 설정이 되면, 하이버네이트가 데이터베이스 외래키를 설정하게 됩니다. @OneToMany @OneToMany 연관관계는 부모 엔티티에서 하나 이상의 자식 엔티티를 참조하는 연관관계 입니다. 만약 자식 엔티티 쪽에 @ManyToOne 연관관계가 있다면 양방향이고, 그렇지 않다면 단방향입니다. 단방향 @OneToMany 단방향 @OneToMany를 사용한다면, 하이버네이트가 어쩔 수 없이 두 개의 엔티티와 연결된 링크 테이블을 추가로 만들게 됩니다. ex) 이 엔티티들을 이용해 데이터베이스 스키마를 생성하게 되면 아래와 같은 결과가 나옵니다. Person , Phone 테이블..
JPA 에서 개인정보 암호화, 복호화 자동화 하기 문제 상황 현재 저희 팀에서는 개인정보 암호화가 필요한 데이터들의 경우 애플리케이션에서 암호화, 복호화를 해주고 있습니다. 그런데 이 과정이 자동화가 되어있지 않아서 DB에 저장하고, 꺼내올때마다 매번 수동으로 암호화 복호화를 해주어야 했는데, 이게 큰 문제는 아니었지만 아래와 같이 신경쓰이는 점들이 있었습니다. 1. 애플리케이션에서 직접 암호화, 복호화를 했기 때문에 이를 명시적으로 나타내기 위해서 엔티티 프로퍼티에 encrypted 라는 네이밍을 추가해야 했습니다. @Entity data class Example( @get:Id @get:GeneratedValue(generator = "id") @get:GenericGenerator(name = "id", strategy = IdGenerators...