반응형

📕 오늘 학습 키워드

📔 인증·인가와 로그인 흐름

📑 Spring Security, Filter, Session, JWT

  • 인증은 사용자가 누구인지 확인하고, 인가는 해당 기능에 접근 가능한지 확인하는 것. Session은 서버에 저장된 인증 정보를 확인하고, JWT는 전달받은 토콘의 서명과 만료 등을 검증함

📔 요청 데이터 검증

📑 Validation, @Valid, BindingResult, FieldError

  • 요청 DTO 값이 정해진 조건을 만족하는지 검사. 검증 오류가 있으면 서비스 호출 전에 오류 처리 가능

📔 서버 간 통신

📑 RestTemplate, JSON 직렬화·역직렬화

  • 내 서버도 다른 서버에 요청할 때는 클라이언트가 됨. JSON으로 객체를 보낼 때는 직렬화, 객체로 바꿀 때는 역직렬화

📔 엔티티 관리와 데이터 조회

📑 영속성 컨텍스트, LAZY, EAGER, Transactional

  • 연관 데이터가 필요할 때 조회. OneToMany는 default가 List로 객체를  LAZY, ManyToOne은 default가 EAGER임. 지연 로딩은 연관 데이터가 필요할 때 조회하므로 아직 읽지 않은 데이터를 조회하려면 해당 컨텍스트가 사용 가능해야 함. readOnly는 연관 데이터를 미리 읽는 설정

📔 연관 엔티티의 저장·삭제

📑 영속성 전이, CascadeType, orphanRemoval

  • cascade는 연관 엔티티에 저장·삭제 같은 작업을 전파. REMOVE는 부모 삭제를 자식에게 전파하고, orphanRemoval은 관계에서 빠진 자식도 삭제

📕 학습하며 겪었던 문제점 & 에러

📔 ManyToOne·OneToMany와 외래키 매핑

  • 사용자(User) 한 명에게 주문(Order) 여러 개가 연결되는 관계에서, User는 List<Order>를 가지고 OneToMany, Order는 User 하나를 참조하고 ManyToOne으로 표현
  • 예제에서 외래키는 orders 테이블의 user_id에 있음. Order.user에 @JoinColumn(name = "user_id")를 붙여 객체 참조와 DB 외래키를 연결
  • User.orders의 mappedBy = "user"는 Order의 Java 필드명 user를 가르킴. DB 컬럼명 user_id를 넣는 것이 아님
  • ERD 관계 개수 표시와 Java 객체의 참조 방향을 섞지 말것

📔 flush와 영속성 상태

  • flush하면 DB에 반영하면서 관리도 끝나는 줄 알았으나 DB에 동기화한 뒤에도 영속 상태가 유지됨
  • clear나 detach로 관리가 끝나면 준영속. flush와 트랜잭션 commit은 다름

📔 readOnly와 지연 로딩

  • readOnly면 연관 데이터를 미리 읽는다고 생각
  • 실제로는 조회용 트랜잭션의 최적화 설정, 조회 시점은 LAZY EAGER가 결정. 쓰기를 무조건 거정하는 장치도 아님

📕 내일 학습할 내용

📔 다음 학습

  • Docker CI/CD, MSA 개념 복습

더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.