서론 JDBC는 연결하는 과정에 있어서 표준화된 인터페이스이다. JDBC가 없을땐 각각의 DB(ORACLE, MySql 등..)마다 연결하는 과정이 달라 어려움이 있었다고 한다. 요즘에 누가 JDBC를 사용하냐고 하는데 사실 나는 요즘에 누가를 경험하고 있는 중이다. 그 이유로는 Data Engineering을 하는데 있어서 저장하는 DB의 경우에는 Oracle DB로 통합되어있기 때문에 JPA를 사용하고 있다.하지만, 문제점은 각각의 인프라들에서 파싱해가야하는 DB들이 하나가 아니라는 점에 있었다. (몇가지 생각나는 DB들만 해도 MS-SQL, MySQL, Orcale 등등...) 또한, 몇몇 DB들은 쿼리 권한도 없어 프로시져를 통해서 가져가야 했다. 따라서 데이터를 파싱하는 점에 있어서는 JPA를 ..
영속성 전이 한 개의 엔티티를 persist 할 때에 영속성 전이 설정이 되어 있는 엔티티도 자동으로 persist 해주는 것이다. 간단하게 Parent와 Child 객체를 예로 들면 Parent.java @Entity public class Parent { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true) private List childList = new ArrayList(); public void addChild(Child child){ childList..
앞서 Lazy Loading에 대해서 잠깐 언급하고 넘어간 적이 있다. 한번에 엔티티에 해당하는 모든 데이터를 가져오는 것이 아닌 필요할때(호출시) 가져온다는 로딩 방식이었다. 여기서 프록시라는 개념이 있다. 보통 IT쪽에서 프록시는 네트워크에서 많이 들어본 단어일 것이다. JPA에서 프록시도 크게 다르지 않은 개념인 것 같다. 즉, 필요한 것으로 넘어가기 위한 중간 단계 역할의 객체를 놓는 것이다. Lazy Loading을 보면 바로 객체를 가져오는 것이 아닌 프록시 객체를 가져온 뒤, 그 프록시 객체를 통해서 실제 엔티티에 접근하게 된다. 프록시와 실제 엔티티는 상속을 받은 구조이기 때문에 겉모양이 동일하다. 이러한 특징으로 사용자는 프록시와 실제 엔티티를 사용하는데에 다른점이 없이 사용 가능하다. ..
엔티티를 설계하다보면 공통적으로 들어가는 멤버 변수들이 많이 있다. 예를 들어 운영시 필요한 생성시간, 생성한 유저, 변경시간, 변경한 유저 등... 이것을 일일히 적어도 되지만 반복을 피할수록 좋기 때문에, 이것을 @MappedSuperclass를 통해서 해결할 수 있다. 다음처럼 공통되는 변수를 묶은 클래스를 만들어 준다. (해당 변수들에 필요한 제약조건들은 동일하게 붙혀주면 된다.) @MappedSuperclass public abstract class BaseEntity { @Column(name = "INSERT_MEMBER") private String createdBy; private LocalDateTime createDate; private String lastModifiedBy; pri..
1:N 연관관계 맵핑 연관관계 맵핑이란 JPA가 관계형 DB와 연결되면서 관계형 DB의 정규화 과정을 표현하는 것이다. 예를 들어 team의 입장에서는 member가 여러명이라는 것에서 team과 member는 1:N 관계가 되는 것이다. @Entity public class Member{ /* ~~ */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; /* ~~*/ } @Entity public class Team{ /* ~~ */ @OneToMany(mappedBy = "team") private List members = new ArrayList(); } team 1개에 member가 여러명이라 O..
JPA와 DB의 맵핑을 알아보기 전에 우선 application의 설정에 대해서 알아볼 필요가 있다. spring: jpa: hibernate: ddl-auto: none 다음 설정에 대해서 운영환경에서 많은 영향을 미치기 때문이다. DDL이란 데이터베이스 스키마를 자동 생성하는 설정이다. 따라서 DB는 운영환경에서 매우 중요하기 때문에 해당 설정도 매우 중요하다고 할 수 있다. 운영장비에서는 절대 create, create-drop, update를 사용하면 안된다. 왜냐하면 해당 DB의 정보들이 모두 날아갈 위험이 있기 때문이다. 개발초기에는 create, update 테스트 서버에는 update, validate 스테이징 운영단계에 있는 서버는 validate, none을 사용하는 것이 좋다. 필자는..
- Total
- Today
- Yesterday
- Linux
- KAFKA
- K8S
- 리액트
- frontend
- rhel
- apache
- spring boot
- OS
- zookeeper
- Container
- Data Engineering
- broker
- NextJS
- spring
- cs
- feign client
- apache kafka
- centos
- backend
- Producer
- Front
- caching
- API
- 프론트엔드
- Firebase
- React
- JPA
- consumer
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |