[2주차] 인프런 워밍업 클럽 Backend
2주차 학습 내용
스프링 Profile
서버 마다 다른 상수 값을 쓰는 방법이다.
annotation 종류
@Entity
테이블과 매핑되는 엔티티임을 명시
@MappedSupperclass
객체의 공통 매핑정보 필요 시 해당 어노테이션을 사용한 추상클래스를 만들고 상속받아서 사용한다
@Id
pk임을 명시
GeneratedValue : pk 생성 전략을 선택한다
@Component
스프링이 처음 실행되며 컴포넌트 스캔을 진행하는데 해당 어노테이션이 사용된 것들을 찾아서 인스턴스를 만들어 준다
@PostConstruct
스프링 실행되어 모든 빈들이 등록된 이후 수행되는 메서드를 위한 어노테이션
@CreatedDate
현재 시간을 필드에 넣어주는 어노테이션
@Column(nullable = false, updatable = false) 로 설정해준다
@UpdatedDate
수정 시간을 필드에 넣어주는 어노테이션
updatable 속성은 디폴트가 true이다
@OneToMany
FetchType.LAZY 를 사용하는게 좋다
→ Eager는 N+1문제가 생김, 성능 이슈
CasecadeType.ALL
영속성을 지키기 위해 싱크를 맞춰줌
미션
API 문서를 Postman을 이용해 작성해 본게 처음인데, 같이 미션 하는 분들의 자료를 참고하며 진행하니 많은 도움이 되었다.
진행 중에 부딪힌 두가지 이슈가 있었다.
먼저 양방향 연관관계에 대해 JPA를 사용해 개발해본 경험이 없어서 어려웠다.
매핑테이블을 따로 두었기 때문에 N:M -> 1:N, M:1로 쪼개고
1:N 설정 시 FK는 N쪽에 두고, FK 설정할 필드 값을 위해 ManyToOne을 사용해 1쪽에 구현했다.
다만 h2에서 테이블 조회시 FK 설정이 보이지 않아, 이 부분은 추가로 확인할 예정이다.
추가로 유저 테이블명을 user로 해두었는데, h2 db 2.x.x 버전에서 user 키워드가 예약어로 지정되어있어 오류가 났다.
해당 부분이 예약어가 아님을 명시하는 속성을 application.yml에 추가하였다.
회고
저번주 회고에 미션이나 발자국을 미리 작성해보고자 했는데, 그렇게 하지 못해서 아쉽다.
끝까지 포기하지 않도록 틈틈히 스터디를 진행하고자 한다.
reference
댓글을 작성해보세요.