뭔가 갈수록 마음의 여유가 없어지고 있는 것 같다.. ㅋㅋ
이번에는 SpringBoot(Exception Handler, Interceptor, Interceptor), Mybatis, JPA(영속성 컨택스트, 일반적인 Entity 매핑)에 대해 학습했다.
회고에 일일이 내용을 정리하기에는 너무 많기도 하고, 대부분 이해를 바탕으로 그냥 사용을 하면 되는 내용이기에 생략하고,
트랜잭션 격리 수준, 영속성 컨택스트 2가지는 가볍게 정리해보려고 한다.
[트랜잭션 격리수준]
- READ UNCOMMITTED (가장 낮은 수준)
- 정의: 다른 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있음
- 문제: Dirty Read 발생 가능 (다른 트랜잭션이 커밋하지 않은 데이터를 읽음)
- 예시: 트랜잭션 A가 값을 수정 중일 때, 트랜잭션 B는 그 값을 읽을 수 있음
- READ COMMITTED
- 정의: 트랜잭션은 커밋된 데이터만 읽을 수 있음
- 문제: Non-repeatable Read 발생 가능 (한 트랜잭션 내에서 읽은 값이 다른 트랜잭션에 의해 수정될 수 있음)
- 예시: 트랜잭션 A가 값을 읽고, 트랜잭션 B가 값을 수정한 후, 트랜잭션 A가 다시 그 값을 읽을 때 다른 값이 나올 수 있음
- REPEATABLE READ
- 정의: 트랜잭션이 처음 읽은 데이터를 다른 트랜잭션에서 수정하지 못하도록 함
- 문제: Phantom Read 발생 가능 (다른 트랜잭션이 새로운 데이터를 삽입할 수 있음)
- 예시: 트랜잭션 A가 읽은 데이터는 다른 트랜잭션이 수정할 수 없지만, 새로운 데이터가 추가될 수 있음
- SERIALIZABLE (가장 높은 수준)
- 정의: 트랜잭션이 완전하게 직렬화되어 실행되는 수준
- 문제: 성능 저하 (동시성은 낮고, 순차적으로 실행됨)
- 예시: 트랜잭션 A가 데이터를 읽고 수정할 때, 다른 트랜잭션은 해당 데이터를 수정하거나 삽입할 수 없음
[영속성 컨택스트]

-엔티티 매니저가 생성될 때 하나의 영속성 컨택스트가 만들어짐
-영속성 컨택스트는 엔티티를 1차 캐시에 저장, 동일한 엔티티를 두 번 조회하지 않도록 함.
find()
- 영속성 컨텍스트에 존재하는 경우: DB에서 조회하지 않고, 1차 캐시에서 엔티티를 반환.
- 영속성 컨텍스트에 존재하지 않는 경우: DB에서 즉시 조회하여 해당 엔티티를 영속성 컨텍스트에 저장.
persist()
- 새로운 엔티티가 영속성 컨텍스트에 추가되고, DB에 즉시 반영되지 않음.
- 트랜잭션이 커밋될 때 영속성 컨텍스트에 있는 모든 변경사항이 쓰기 지연 방식으로 DB에 반영
merge()
- 기존 엔티티 또는 분리된(detached) 엔티티를 영속성 컨텍스트로 병합(merge)하는 데 사용
[마무리하며]
최근 수업진도가 꽤 빨라서, 솔직히 수업내용을 온전히 100퍼센트 소화하진 못한 것 같다. 그래도 전반적인 흐름은 파악했으니, 필요할 때 다시 그 부분을 들쳐내서 공부하면 되지 않을까라고 생각하고 있다. 프로젝트 개발하면서 좀 더 체화시켜보자..
SQLD 결과가 나왔는데, 80점으로 합격했다. 기대했던 것보다는 좋지 못한 점수이지만, 합격을 했다는 부분에 의의를 두려고 한다.
요즘 체력적으로 좀 후달리고 그로 인해 집중력이나 사고력도 흐트러지는 것 같다. 가벼운 산책부터 시작해서 운동을 좀 더 루틴화해야겠다.
'Beyond SW > 주간 회고' 카테고리의 다른 글
| 한화시스템 Beyond SW캠프 15기 9주차 회고 (0) | 2025.03.24 |
|---|---|
| 한화시스템 Beyond SW캠프 15기 8주차 회고 (0) | 2025.03.17 |
| 한화시스템 Beyond SW캠프 15기 7주차 회고 (7) | 2025.03.09 |
| 한화시스템 Beyond SW캠프 15기 6주차 회고 (1) | 2025.03.03 |
| 한화시스템 Beyond SW캠프 15기 5주차 회고 (0) | 2025.03.02 |