반응형 개발 지식/JPA 반응형 7 [JPA] EntityManager Cycle management 실무 개발을 진행하면서 새벽 단순 DB 업데이트로 DB 서버를 재부팅을 진행한 적이 있다.노드 하나씩 재시작하는 형태라 당연히 failover가 되어 무중단으로 서비스가 될 것이라 생각했으나 알수 없는 Connection 실패로 어플리케이션을 다시 띄우는 조치를 진행했었다. 이에 이유를 한번 분석해보고자 한다. 당시 비슷한 환경 재현을 위해 간단히 DB 설정은 connection 5초 타임아웃과 그 당시 JPAQueryFactory 설정만 동일하게 하였고 쿼리는 JPA 그리고 QueryDSL 두개의 조합으로 구성하였다. application.ymlspring: datasource: url: jdbc:postgresql://localhost:5432/tms username.. 2024. 10. 4. [JPA] Connection Reset by Peer 실무 개발 및 failover 테스트 중에 Connection Reset by Peer 가 발생하였다. 이 원인은 Client 가 요청을 보냈는데 DB 서버쪽에서 연결이 닫혔다고 다시 연결하라는 RST(Reset) 패킷을 보내는 경우에 이 에러가 발생하며 한쪽만 연결되어 있는 좀비 커넥션 발생이 발생했다는 뜻이다. datasource: driver-class-name: org.postgresql.Driver hikari: connection-timeout: 2000 maximum-pool-size: 5 max-lifetime: 60000 // connection이 살아있는 최대시간 1분 max-lifetime 설정을 통해 커넥션 시간이 최대로 유지되는 시간을 설정할 수 있으며 위의 .. 2024. 7. 14. [JPA] Entity Class의 @NoargsConstructor (access = AccessLevel.PROTECTED) 실무에서 JPA를 활용하다보면 Entity 생성시 @NoargsConstructor (access = AccessLevel.PROTECTED) 이라는 Annotation을 붙여서 개발을 하게 된다. 이에 조금 더 정확히 이해하고자 이번 블로그 글로 언급하고자 한다. 이 글을 읽는 분들은 모두 알다시피 Lombok 라이브러리에는 생성자 관련한 두개의 어노테이션이 존재한다. AllargsConstructor NoArgsConstructor 1. AllargsConstrutor 말 그대로 '모든 매개변수 생성자'인 것 처럼 해당 클래스 내의 모든 변수값을 가진 생성자를 자동으로 만들어 준다. @Setter @Getter @AllArgsConstructor public class testDto { private.. 2022. 2. 6. [JPA] 프록시(Proxy)와 엔티티 연관 관계(LAZY, EAGER) 실무에서 조회기능을 메인으로 개발하고 있다보니 JPA 데이터 조회 최적화에 항상 관심을 가지고 있다. 특히 엔티티 설계시 엔티티간의 연관관계에 대해 중점적으로 설계하였고 이를 실무 개발에 적용하고자 하였다. 이에 해당 내용을 명확히 이해하고 적용하고자 JPA 프록시와 엔티티 연관 관계에 대해서 정리해보고자 한다. 그에 앞서 Proxy라는 것을 알아보자. 백엔드 개발자 아니 개발자 라면 Proxy Sever의 개념을 알고 있을 것이다. Proxy Server의 개념에 대해 깊이 있게 들어가게 되면 글의 길이가 길어지니 간단히간단히 이야기하자면 Proxy Server는 실 서버와 데이터의 도메인 및 IP를 외부에 오픈하기 전 중계 역할을 한다고 생각하면 된다. 예를 들자면 내가 B.com이라는 도메인으로 .. 2022. 1. 31. [ETC] javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.String javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.String 해당 오류는 Entity 클래스에서 @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="food_id") private String foodId; 에서 @GeneratedValue(strategy=GenerationType.AUTO)시 Id값에 해당하는 foodId를 String 변수로 선언해서 생기는 오류 이다. 이를 String이 아닌 다른 형식으로 바꿔 준다. ex.) String -> .. 2022. 1. 31. [JPA] JPA가 무엇일까 실무에서 JPA ORM을 활용하며 개발을 진행하고 있다. 야생형으로 개발을 진행하고 있는데 개발 시작 후 1년이 지난 지금 조금은 JPA에 익숙해졌다 느껴졌을 때 인프런 강의를 바탕으로 JPA를 관련 된 내용을 조금씩 정리해보려고 한다. JPA는 Java Persistence API 의 약자로 ORM(Object-relational mapping)기술을 활용하고 있다. 1. 즉 자바의 객체와 데이터베이스의 값들을 매핑하는 것이다. Mybatis는 insert into tab_erj (id, name, number) value( #{id}...) 위의 예시 mapper.xml 처럼 mapper에 ID 및 데이터 베이스 방언(쿼리)들을 사용하여 직접 데이터를 CRUD를 했다면 JPA는 @Entity @Tab.. 2021. 12. 26. [JPA] 1. JPA 공부를 시작해보자 약 4개월만에 블로그에 글을 쓰는 것 같다. 작년 12월 LG유플러스 개발자로 입사한 후 프로젝트 투입을 위해 인프런 교육을 신청해서 받았는데 말로만 들었던 JPA에 대해 배울 수 있었다. JPA 기초부터 JPQL, queryDSL 그리고 실제 API 적용 관련해서 정리를 해보고자 한다. 사실 대부분 회사 그리고 전 회사 같은 경우에는 Java Spring Framework와 DB간의 연결을 Mybatis를 이용하여 연동을 진행하였는데 SQL 쿼리 짜는 것에 상당한 리소스가 쓰였고 xml파일에 쓰다보니 약간의 오타가 있을 경우에도 바로 캐치하지 못하고 실행 후 DB 연결하여 조회했을 때 에러 부분(빨간..)을 찾을 수 있었다. 하지만 JPA을 이용하면 개발자가 객체 형태로만 개발을 진행하고 나머지는 JP.. 2021. 6. 21. 이전 1 다음