반응형
📕 오늘 학습 키워드
📔 동기 & 비동기
📑 동기
- 호출 후 결과를 기다리고 이후 일을 진행
📑 비동기
- 호출 후 결과를 기다리지 않고 다음 일을 진행. 결과는 향후 처리
📔 DB 격리 수준
📑 Read Committed
- 다른 트랜잭션이 커밋한 행의 데이터만 읽을 수 있도록 함
📑 Read UnCommitted
- 다른 트랜잭션이 아직 커밋하지 않은 행의 데이터도 읽을 수 있도록 함
📑 Repeatable Read
- 같은 트랜잭션에서 같은 행을 다시 읽을 때 다른 트랜잭션의 변경 때문에 값이 달라지지 않도록 함
📑 Serializable
- 여러 트랜잭션이 동시에 실행돼도, 그 트랜잭션들을 하나씩 순서대로 실행한 것과 같은 결과를 보장
📔 Spring
📑 낙관적 락 & 비관적 락
- 낙관적 락: 수정 내용을 DB에 반영할 때 읽어둔 @Version 값과 DB의 현재 버전이 같으면 반영하고, 다르면 충돌로 실패시킴. 성공하면 Hibernate가 버전을 올려 저장함
- 비관적 락: 데이터를 먼저 잠가 다른 트랜잭션의 충돌하는 작업을 기다리게 하거나 실패시킴
📑 즉시 로딩 & 지연 로딩
- 즉시 로딩(EAGER): 엔티티를 조회할 때 연결된 연관 데이터도 바로 가져옴
- 지연 로딩(LAZY): 연관 데이터를 처음 사용할 때 가져옴. 사용하지 않으면 해당 조회를 생략할 수 있음
📑 IoC
- 객체의 생성과 생명주기 관리를 프레임워크에 맡기는 것
📑 DI
- 객체가 필요로 하는 다른 객체를 외부에서 전달받는 것. 생성자, 메서드 주입 등이 가능함
📑 Spring Data JPA
- JPA 기반 Repository의 반복 코드(보일러플레이트)를 줄여 구현을 간단하게 해줌
📑 인증
- 사용자가 누구인지 확인
📑 인가
- 그 사용자가 특정 기능을 사용해도 되는지 확인
📑 Session
- 사용자별 로그인 상태 등을 서버의 세션 저장소에 보관함. 새로고침만으로 사라지지 않음
📑 Cookie
- 브라우저에 저장하고, 조건에 맞는 HTTP 요청에 함께 보내는 작은 데이터
- 보안은 저장하는 내용과 쿠키 속성 및 사용 방식에 따라 달라짐
📑 Filtering
- 요청이 서블릿에 도달하기 전과 응답이 클라이언트로 돌아가기 전에 공통 작업을 처리함. 로깅과 보안 처리를 비즈니스 로직과 분리할 수 있음
📕 오늘 학습한 내용
📔 무엇을 배웠는지
📑 @Transactional
- 메서드가 트랜잭션 안에서 실행되도록 설정하는 어노테이션. 메서드나 클래스에 선언할 수 있음
📑 영속성 컨텍스트
- 엔티티를 관리하고, 변경 내용을 DB에 반영할 수 있도록 추적하는 공간
📑 @Primary, @Qualifier
- 같은 타입의 Bean 후보 중 어떤 Bean을 주입할지 선택함
- @Primary: 같은 타입의 Bean 중 기본으로 선택할 Bean을 지정함
- @Qualifier: 주입받는 곳에서 원하는 Bean을 구체적으로 지정함
📑 @Order
- 여러 Bean을 처리할 때 적용할 순서를 지정함
📔 직접 해본 것
📑 간단 회원가입, 로그인
- 사용자 비밀번호를 BCrypt로 단방향 해싱하여 저장
- 사용자 정보로 회원가입, ID 중복 방지
- 로그인 에러 처리
- 인증
- 세션 방식: 로그인 성공 시 서버가 세션을 만들고 세션 ID를 쿠키로 전달함. 이후 쿠키의 세션 ID로 로그인 상태를 확인함. 쿠키의 Max-Age와 서버 세션 만료시간은 별개임
- JWT 방식: 로그인 성공 시 사용자 정보와 만료시간을 포함하고 Secret Key로 서명한 Access Token을 발급함. 이후 요청에서 토큰의 서명과 만료시간을 검증해 사용자를 확인함
- 인가
- 관리자인 경우와 아닌 경우를 나눠 처리하도록 단순 구현
📕 학습하며 겪었던 문제점 & 에러
📔 문제 또는 헷갈렸던 점
📑 JPA와 영속성 컨텍스트
- EntityManagerFactory가 EntityManager를 생성하고, EntityManager가 영속성 컨텍스트를 관리하는 관계
- 비영속: 객체는 생성됐지만 영속성 컨텍스트가 관리하지 않는 상태
- 영속: 영속성 컨텍스트가 관리하는 상태
- 준영속: 관리되던 엔티티가 분리되어 더 이상 관리되지 않는 상태
- 삭제: DB에서 삭제하도록 요청된 상태
- 엔티티 상태와 메서드는 구분해야 함. find는 조회, persist는 새 엔티티 등록, merge는 상태 병합, remove는 삭제 요청
📑 같은 인터페이스를 구현한 Bean이 여러 개일 때
- Food 인터페이스를 구현한 Pizza, Chicken이 모두 Bean으로 등록된 경우
- Food 타입만으로 주입할 때 후보가 여러 개이면 주입 대상이 모호해지는 오류가 발생할 수 있음
- 주입받는 파라미터나 필드 이름이 Bean 이름과 일치하면 이름으로 후보를 구분할 수 있음. @Primary 또는 @Qualifier로 선택을 명시할 수도 있음
📕 내일 학습할 내용
📔 다음 학습
- Spring 심화, N+1, 연관관계, 트랜잭션 전파
더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'일기' 카테고리의 다른 글
| [내일배움캠프 사전캠프] - 미니 배민 과제 (0) | 2026.10.07 |
|---|---|
| [내일배움캠프 사전캠프] - Spring 숙련(RestTemplate), 심화, MSA, Docker (0) | 2026.10.06 |
| [내일배움캠프 사전캠프] Spring Boot, Docker, AI literacy (0) | 2026.10.01 |
| 2026.08.14 (0) | 2026.08.14 |
| 2026.08.13 (0) | 2026.08.13 |