[인프런 워밍업 클럽 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 설정 등 하나하나 찾아보지 않고도 직접 어느 정도 구현할 정도의 성장이 필요할 것 같다! 코드 리뷰를 하면서 절실하게 느낀 점 중 하나는, 코드 컨벤션을 너무 안 지키고 있다는 것이다. 항상 혼자서만 진행하다 보니 타인이 내 코드를 보고 어려워할 수 있다는 것 자체를 인지하지 못한 것 같다.