본문 바로가기

항해99

항해 99 - 2023.02.15 TIL

며칠동안 TIL 작성에 소홀했던 것 같다.

 

숙련 주차에 진행하는 작업들이 익숙하지 않고, 아직도 헷갈리는 부분이 많아 학습에 좀 더 매진했던 것 같다.

지금은 숙련주차 lv3 과제까지 거의 완료한 상태이지만, 리팩토링과 예외처리 부분이 부족한 점이 있어 수정이 필요한 상황이다.

 

그동안 학습을 진행하면서 어려웠던 점이나, 에러를 해결하였던 과정에 대해서 회고해보고자 한다.

 

 

 

JPA 연관관계 설정, StackOverFlow

이번 주차부터 JPA 의 연관관계 설정을 이용하여 엔티티간 관계를 설정해주는 작업을 진행했다.

 

다대일 양방향 연관관계를 엔티티 간에 맺어주면서, 해당 객체들을 직렬화할 때 연관관계가 맺어진 객체들이 서로를 무한 참조를 하게 되어 StackOverFlow를 발생시키게 되었다.

 

구글링 해보니, 다양한 방법이 존재하지만 나는 Json으로 직렬화할 속성에서 무시하는 @JsonIgnore 태그를 사용했다.

양방향 연관관계를 맺어준 필드에 해당 태그를 추가하니 해결되었다.

 

정확한 처리 과정에 대해서는 추가로 공부가 필요할 것 같다. 아직 직렬화, 역직렬화 개념에 대해서도 완벽히 이해하고 있지는 못한 상태이다..

 

 

 

JPA 양방향 연관관계 활용

public class Comment{
	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @ManyToOne
    @JoinColumn(name = "POST_ID")
    private Post post;
}

public class Post{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @OneToMany(mappedBy = "post")
    private List<Comment> comments = new ArrayList<>();
}

게시물 안에 댓글이 들어가야 하므로 위처럼 연관관계 설정을 해주었다.

관계의 주인은 외래키가 설정된 Comment 엔티티이고, Post 엔티티에는 mappedBy로 관계의 주인이 어디에 있는지 명시해주었다. 

이렇게 양방향 관계설정을 해주면, Post 엔티티를 사용할 때 따로 컬럼으로 설정되어있지 않음에도, Post Id에 매핑되어있는 모든 Comment 엔티티의 리스트를 가져와 사용할 수 있다.

 

만약 해주지 않은채로 사용하려면 DB에 쿼리를 두번 이상 날려줘야 되므로, 연관관계 설정을 통해서 DB의 접근을 최소화 할 수 있다는 장점이 있다.

 

 

 

JPA 쿼리 메소드 사용방법

그동안 JPA 쿼리 메서드를 어떻게 만드는 건지 감을 잡지 못했었는데, 구글링을 통해서 확실히 알고 갈 수 있었다.

단어의 조합으로 만드는 것이고, 안에 들어가는 필드명은 반드시 Entitiy에 선언된 필드명과 일치시켜주어야 한다.

 

https://kihwan95.tistory.com/5 

 

Spring Data JPA(쿼리 메소드)

Spring Data JPA로 쿼리를 생성하는 방법들을 알아보겠습니다. • 메소드 이름으로 쿼리 생성 쿼리 메소드는 Repository 인터페이스에 간단한 네이밍 룰을 이용하여 메소드를 작성하면 원하는 쿼리를

kihwan95.tistory.com

 

 

 

느낀 점

숙련 주차를 진행하면서 특히나 JPA의 연관관계가 가장 어렵게 느껴졌다. 그리고 예외처리에 대해서도 구글링을 통해서 적용해보고자 했지만 실패했다. 다음 주 심화 주차에 예외처리가 포함되어 있다고 하니, 우선은 보류해둘 생각이다.

 

기본 패키지 구성과 스프링 부트의 실행 흐름에 대해서 익숙해질 수 있었던 것 같다. 강의가 짧고, 실습위주로 진행이 되다보니 스프링과 JPA의 이론적인 부분에 대해서 가볍게 훑고 지나가는 느낌이라 심화된 내용이 나오면 어렵게 느껴진다.

 

JPA를 계속 사용해야한다면, JPA 관련 책을 하나 구매해서 공부해봐야할 것 같다.. 

 

코드를 작성하면서 가장 자주 했던 실수가 어노테이션을 빼먹는 것이였다.

특히, @RequestBody, @Transactional 이놈들을 자주 까먹어서 에러가 발생했을 때 한참을 찾았는데, 주의하도록 해야겠다.

'항해99' 카테고리의 다른 글

항해 99 - 2023.02.18 TIL  (0) 2023.02.18
항해 99 - 2023.02.16 TIL  (0) 2023.02.16
항해 99 - 2023.02.09 TIL  (0) 2023.02.10
항해 99 - 2023.02.07 TIL  (0) 2023.02.07
항해 99 - 2023.02.03 TIL  (0) 2023.02.04