JPA 4

[JPA] 순환 참조, API 호출 시 순환 참조가 발생하는 이유

JPA의 순환 참조란 객체 간의 상호 참조가 무한 반복되는 경우를 말한다. 객체 그래프에서 한 객체가 다른 객체를 참조하고, 그 다른 객체가 다시 처음 객체를 참조하는 상황이고 스택 오버 플로우가 발생할 수 있다. 사이드 프로젝트 진행 하던 도중 Service 단 개발을 끝내고 API를 만들다가 스택 오버 플로우가 발생 하였다. 순환 참조를 미쳐 신경쓰지 못하고 있었음.. 순환 참조를 잘 예방해야겠다고 다시 한 번 생각함 Service를 테스트 할 때 까지만 해도 발생하지 않았던 문제인데 REST API를 구현하면서 문제가 발생한 이유는 ResponseBody를 구현할 시 Object 형태의 값을 직렬화를 이용해 JSON 형태로 변환하는데 이 때 순환 참조가 발생하기 때문이다. public class O..

프로그래밍/JPA 2024.03.01

[JPA] Auditing으로 저장 할 생성/수정 시간 DateTimeFormatter로 포매팅하기

엔티티가 생성되고(CreatedDate), 변경되는 시점(LastModifiedDate)을 자동으로 감지하여 column으로 저장하기 위해 Auditing 클래스인 BaseTimeEntity 클래스를 만들었다. 아래처럼 @CreatedDate 와 @LastModifiedDate 를 사용하여 LocalDateTime을 그대로 받으면 @CreatedDate private LocalDateTime createdDate; @LastModifiedDate private LocalDateTime modifyDate; 이런 형식으로 날짜, 시간이 받아진다 2023-08-19T16:23:47.960583 알아보기도 힘들고 밀리세컨드 단위가 필요없어서 년-월-일 시:분:초 형식으로 변경하기로 하였다. 형식을 본인이 받고..

프로그래밍/JPA 2023.08.21

[Web] HTTP Method 종류

C (Create) POST R (Read) GET U (Update) PUT D (Delete) DELETE GET 리소스를 조회 정보를 서버에 요청할 때 HEAD GET과 동일하지만 response에 body부분을 제외하고, response code와 head만 반환 Resource를 받지 않고 찾기만 할 때 응답의 상태 코드를 확인할 때 Resource가 수정되었는지 확인 할 때 PUT 서버에 데이터를 수정, 작성 (GET과 반대) 서버가 Client 요청의 Body를 확인한다. 리소스를 대체 (덮어쓰기), 리소스가 없으면 생성 POST 서버에 데이터를 전송 HTML form 에 많이 사용 TRACE 루프백 메시지를 호출하기 위해 테스트용으로 사용 OPTION 리소스가 지원하고 있는 메서드를 취득 ..

2023.03.10

[JPA] 엔티티의 생명주기

상태 비영속 (new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속 (managed) : 영속성 컨텍스트에 관리되는 상태 준영속 (detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제 (removed) : 삭제된 상태 비영속 객체를 생성한 상태, JPA와 전혀 관계 없음 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속 객체를 저장한 상태 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); EntityManager em = emf.createEntityManager..

프로그래밍/JPA 2023.01.20