[인프런 워밍업 클럽 BE]9-10일차 강의 이론 위주 정리 + 2주차 회고 및 과제정리

이 문서는

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지] 강의 - 인프런 (inflearn.com)

강의와 연관 스터디 내용을 정리하였습니다. 

 

시작하며

 

벌써 2주차 스터디가 끝나가는 일요일 저녁이다. 9-10일차의 강의는 본격적으로 대출, 반납 기능을 개발했다. 11일차부터는 기본적인 배포에 관해 배우는데 굉장히 설렌다. 수요일부터 미니 프로젝트와 코드 리뷰도 시작했는데 3월 초에 sqld 자격 시험도 있어서 일정이 꼬이지 않고 잘 완성시킬 수 있을 시 걱정이 앞선다. 😂😂

 

참고로 9-10일차 강의는 기능 개발이 중점이라 대부분이 리팩토링, 기능 개발에 관한 것이라 이론 분량이 이전보다는 적다! 그래서 이전 글처럼 n 일차, n강 식의 형식으로 작성하지 않고 이론을 간단한 리스트 형식으로만 정리하려고 한다.

 


- 다른 기능에서 사용할 DTO가 완전히 동일하다면?

대출/반납 등, 다른 기능에서 사용할 dto의 형식이 완전히 동일하다면 재활용 vs 새 DTO 생성?

-> 유연한 대처를 위해 새 DTO 생성이 권장!

 

- 연관 관계

  • 연관 관계의 주인

    • 관계의 주도권을 가진 테이블 = 상대 테이블을 참조하고 있는 테이블(상대 테이블의 기본키를 가지고 잇는 테이블)

    • 객체 연결의 기준

    • 관계의 주인이 아닌 쪽에 mappedBy 옵션을 단다.

  • 1:1 관계

    • ex)사람과 실거주 주소의 관계

    • @OneToOne 사용

  • 1:N

    • @OneToMany와 @ManyToOne 사용

    • @ManyToOne은 단방향 사용 가능

    • @JoinColoum - 연관 관계 주인이 사용하는 어노테이션

  • N:M

    • @ManyToMany 사용

    • 구조적 복잡함

    • 비직관적

    • 사용하지 않는다. 일반적으로 N:1 1:M으로 풀어서 사용

  • Cascade

    • CascadeType.ALL - 아래 모든 작업 전파

    • CascadeType.PERSIST - 영속성 컨텍스트에 새로운 엔티티 추가 시 해당 엔티티와 연관된 엔티티도 함께 영속화. 새로운 부모 엔티티 저장 시 연관 엔티티도 함께 저장

    • CascadeType.MERGE - 엔티티 상태 변경 시 연관된 엔티티 상태도 함께 변경. 부모 엔티티 업데이트 시 자식 엔티티도 업데이트

    • CascadeType.REMOVE - 부모 엔티티 삭제 시 자식 엔티티도 삭제.

       

    • CascadeType.DETACH - 부모 엔티티 분리 시 자식 엔티티 분리

    • CascadeType.REFRESH - 부모 엔티티 새로고침 시 자식 엔티티 새로고침

  • OrphanRemoval

    • 객체간(연관 관계의 주인와 종속된 객체)의 관계가 끊어진 데이터를 자동으로 제거하는 옵션

  • 지연 로딩

    • 영속성 컨텍스트의 4번째 속성

    • @OneToMany의 fetch 옵션에서 설정. 기본값 lazy

    • 필요한 순간 그 때 그 때 로딩

  • 연관 관계 사용의 장점

    • 각자 역할에 집중(=응집성)

    • 타인이 코드를 읽을 시 이해하기 쉬워짐

    • 테스트 코드 작성 용이

  • 연관 관계 사용의 단점

    • 지나친 연관 관계는 성능에 문제 발생

    • 도메인 간 복잡한 연결로 인한 시스템 파악 어려움

    • ⇒ 비즈니스 요구사항, 기술적 요구사항, 도메인 아키텍처 등 다방면 고민 후 결정

       

     


과제

6일차. https://www.notion.so/6-6e9b71c98126401097211cbeb7f5b21c

7일차. https://www.notion.so/7-95f01dca3af244439d75e0855322e6b2

 


간단한 회고

2주가 순식간에 지나가 버렸다. 이전보다 성장한 것이 맞는지, 여러 의문이 들지만... 시간을 되돌릴 수는 없다.😭

미니 프로젝트를 진행하며 다른 분들과 코드 리뷰를 진행 중이지만 보면 볼수록 내 부족함이 체감이 된다...!

강의에는 특별히 다루지는 않지만, ExceptionHandler, logback 설정 등 하나하나 찾아보지 않고도 직접 어느 정도 구현할 정도의 성장이 필요할 것 같다! 코드 리뷰를 하면서 절실하게 느낀 점 중 하나는, 코드 컨벤션을 너무 안 지키고 있다는 것이다. 항상 혼자서만 진행하다 보니 타인이 내 코드를 보고 어려워할 수 있다는 것 자체를 인지하지 못한 것 같다.