들어가며 이 포스팅은 김영한 강사님의 자바 ORM 표준 JPA 프로그래밍 강의와 저서를 주로 참고하여 작성하였음을 미리 밝힌다. Spring data JPA를 사용하여 개발을 진행하기 전에 JPA와 하이버네이트에 대한 이해가 부족하다고 판단하여 공부를 하기 위해 작성된 포스팅이므로 잘못된 정보가 있을 수 있기에 김영한 강사님의 저서와 강의를 직접 듣고 공부하는 걸 추천한다. 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저는 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 쉽게 생각하면 엔티티 매니저는 엔티티를 저장하는 '가상의 데이터 베이스'라고 볼 수 있다. 엔티티 매니저 팩토리는 이 엔티티 매니저를 만드는 '공장'인데, 공장을 만드는 건 현실에서든 개발에..
JPA
들어가며 TIL 업로드 하는걸 깜빡해서 15일에 올리는 14일 TIL..!! 오늘의 TIL도 과제를 하면서 겪었던 에러를 트러블 슈팅해보고자 한다! 트러블 슈팅 문제 - DataIntegrityViolationException 에러 could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement not null인 테이블에 null을 집어 넣으려고 해서 나타나는 에러였다. 에러로그에서 바로 힌트를 얻을 수 있는데, 메인 에러 명은 데이터 무결성 위반 예외 이고, 뒤쪽에 적힌 에러명은 제..
들어가며 시도하기 막막했던 부분을 구글링해서 나온 코드로 해결했더니 속 시원하면서도 완전히 이해하고 쓰는게 아니라는 생각에 답답하기도 한 하루였다. 아직 할게 많이 남았지만 긴 시간동안 몰입해서 과제를 했으므로 만족. 집중력이 떨어진 김에 남은 시간은 TIL과 미뤄뒀던 공부 주제들을 포스팅하는 데에 사용하기로 했다. 오늘의 TIL은 과제를 하면서 겪었던 문제들에 대한 트러블 슈팅을 해보고자 한다. 트러블 슈팅 문제 - Timestamp Format 변경하기 결론만 보고 싶다면 세번째 시도를 봐주세요! 유저 정보를 User Entity가 아니라 UserResponseDto에 매핑해서 넘겨주는 방식을 사용하고 있는데, 내가 원하는 포맷인 "yy/MM/dd HH:mm:SS" 포맷이 아니라 기본 포맷으로 반환해..
문제상황 지난 삽질로그에서 계속 고민하던 문제인 '왜 지연로딩을 설정했는데도 참조하고 있는 객체를 통째로 들고다니지?' 라는 물음에 대한 이유를 어느정도 파악한 것 같다. PostRestController.java @GetMapping("") public List getPosts() { List postsList = postService.getPosts(); return postsList; } PostService.java public List getPosts() { List posts = postRepository.findAllByOrderByCreatedAtDesc(); return posts; } Post.java @Entity @Getter @NoArgsConstructor @JsonIdentit..
들어가며 과제를 하면서 '왜' 이렇게 사용하는지, 다른 방법은 없는지를 고민하면서 코드를 짜다보니까 알아야할 거랑 궁금한게 점점 많아진다. 그래서 뭐부터 정리해야할 지 고민이 된다. 일단 오늘의 TIL은 과제를 하면서 이용했던 부분과 삽질로그를 작성해보고자 한다. JPA findAll 정렬하기 요구사항 중 하나인, 작성 날짜 기준으로 내림차순 정렬을 하기 위해 JPA sort하는 방법을 찾아봤다. 물론 여러가지 방법이 있겠지만 맘에 드는 두가지만 소개해보도록 한다. 1. Sort 파라미터 사용하기 List posts = postRepository.findAll(Sort.by(Sort.Direction.DESC, "createdAt")); findAll을 해주고 Sort.by()를 사용하는 방식이다. 간단..
문제상황 06/06일 TIL로 작성한 2번째 문제가 아직 근본적으로 해결되지 않아서 쓰는 삽질로그. [TIL] 06/06 항해99 25일차 - 과제 [나만의 블로그 만들기] [TIL] 06/06 항해99 25일차 - 과제 [나만의 블로그 만들기] 들어가며 오늘부터는 달성 목표에 우선순위를 정해두고 하나씩 해결하는 방식으로 공부를 진행하고자한다. 확실히 하나씩 항목을 지워가면서 하니까 성취감도 들면서 내 페이스를 조절하기가 annajin.tistory.com 결국 stackoverflow 에러는 해결을 했지만 지연로딩으로 설정했을 때 해결이 되었어야하는게 아닌가? 라는 물음에서 시작된 순환참조 해결하는 삽질이다. + 지연로딩을 설정했음에도 참조하고 있는 객체를 전부 들고다니는 이유를 어느정도 파악한 것 같..
들어가며 오늘부터는 달성 목표에 우선순위를 정해두고 하나씩 해결하는 방식으로 공부를 진행하고자한다. 확실히 하나씩 항목을 지워가면서 하니까 성취감도 들면서 내 페이스를 조절하기가 좋았다. 오늘의 TIL도 지난번과 마찬가지로 항해99 과제인 [나만의 블로그 만들기]를 개발하면서 겪은 트러블 슈팅을 하고자 한다. 트러블 슈팅 문제 - @ManyToOne으로 만들어진 FK 컬럼이 null로 세팅되는 현상 Comment entity에서 Post entity와 연결해주기 위한 N:1 관계를 만들어주는 @ManyToOne어노테이션을 붙여주면 테이블이 생성될 때 자동으로 Comment 테이블에 FK 컬럼을 생성해준다. 그런데, 이 FK가 nullable하게 세팅되는 현상이 나타나고 있었다. create_at과 mod..
들어가며 인프런 김영한 강사님의 자바 ORM 표준 JPA 프로그래밍 강의 수강을 시작했다. 기존에는 Mybatis를 사용했었는데 항해99 커리큘럼에서 JPA를 사용하기도 하고, JPA가 여러모로 개발하기에 편리할 듯 싶어 이번에는 Mybatis대신 JPA를 공부하고 사용하기로 했다. 오늘의 TIL은 JPA를 사용하는 이유와, 강의 내용을 따른 초기 세팅 방법을 정리해보고자 한다. JPA를 사용하는 이유? JAVA는 객체지향언어이고, JAVA를 사용하는 Spring 역시 객체지향적으로 이루어져있다. 그런데, Spring과 함께 주로 사용하는 DB는 관계형 데이터베이스이다(Oracle, MySQL 등. 이하 관계형 DB). 즉, 객체 지향 언어를 사용하고 있다면 객체 데이터를 관계형 DB를 사용해서 관리하게..
반응형