Database

DB

[Database] 트랜잭션 격리 수준(Isolation Level)

트랜잭션 격리 수준(Isolation Level)이란? 트랜잭션의 격리 수준은 여러 트랜잭션이 혼재되어 있는 상태에서, 하나의 트랜잭션이 다른 트랜잭션의 데이터에 접근 할 수 있는 '정도'를 의미한다. 트랜잭션 격리 수준은 4단계로 나뉘어 진다. 0 - Read Uncommitted 1 - Read Committed 2 - Repeatable Read 3 - Serializable 격리 수준이 높아질 수록 트랜잭션의 고립 강도가 높아지는 반면, 성능저하도 야기된다. 일반적인 서비스에서는 Read Committed 혹은 Repeatable Read 수준을 사용하며, 서비스의 요구사항에 따라 적절한 격리 수준을 정해 사용해야 한다. 여러 트랜잭션이 존재하는 상황에서 트랜잭션들의 경합으로 발생하는 문제는 격리..

나혼자삽질

[Spring] 서비스 운영간 발생한 DB Connection Closed 이슈

장애 발생 및 발견 8월 24일 서버 정기점검이 이루어지던 새벽 정기점검 대상이 아닌 서버의 특정 인스턴스에 인입된 요청들이 'SQLException : Connection Closed' 오류로 모두 500처리가 되는 이슈가 발생하였다. 24일 3시 43분에 처음 발생한 이슈는 오전 9시 45분에 이슈사항으로 확인되었고 전사에 전파 및 담당자인 나에게 전달되게 되었다. ( 약 6시간의 장애 시간의 텀은 너무 부끄러운 장애대응이다.. ) 장애 대응 오전 9시 45분, 전사 장애 대응 채널에 내이름이 멘션되어 호출되기 시작했고, 해당 시스템은 팀내에서 개발한것이 아닌 외주업체에서 관리하고 있었기에 담당 업체에 연락하여 원인 파악 및 조치를 요청하였다. 오전 10시 03분, 담당 외주 업체에서의 조치 이전에 ..

나혼자삽질

[Database] Ms-SQL DeadLock 이슈 처리

이슈 사내 회원 서비스 운영중 로그인 과정에서 '트랜잭션이 잠금 리소스에서 다른 프로세스와의 교착 상태가 발생하여 실행이 중지되었습니다. 트랜잭션을 다시 실행하십시오.' 에러와 함께 서버로 들어온 요청이 처리되지 못하고 Error가 발생한 부분을 모니터링을 통해 감지됨. 해당 이슈가 발생한 DataBase는 Ms-SQL 사용중이었으며, 각각 [05:47:300], [05:47:726] 요청시간으로 같은 회원에 의해 동일한 요청이 거의 비슷한 시간에 들어오게 됨 요청 1의 경우 긴 지연시간을 가진후 정상 처리 되었고, 요청 2의 경우 요청 1의 지연시간을 대기하다 위와 같이 DeadLock 처리됨. 원인 및 해결 DeadLock이 발생한 원인을 파악하기 위해 다양한 추론을 통해 접근 1. 로직 처리시간이 ..

Spring

[JPA]연관관계 - 다대다(N:M)

JPA 연관관계 다대다(N:M) 실무에선 보통 사용하지 않는것을 권장한다. 관계형 데이터베이스에서 정규화된 2개의 테이블로 다대다를 표현할 수 없다. 관계형 데이터베이스에서 다대다를 표현하기 위해서는 중간 테이블을 통해 일대다, 다대일로 나누어서 표현해야한다. JPA에서는 관계형 데이터베이스가 중간 테이블을 만드는 것과 달리 @ManyToMany 어노테이션을 통해 별도의 중간 테이블에 해당하는 엔티티를 만들지 않고도 다대다를 표현할 수 있다. 단방향 다대다 다대다 관계를 JPA를 통한 단방향 구현시 아래와 같이 코드 작성이 가능하다. Member (연관관계의 주인) @Entity @Table(name = "member") @Getter public class MemberEntity { @Id @Gener..

Spring

[JPA]연관관계 - 일대일 관계

JPA 1:1(일대일) 관계 일대일 관계는 주 테이블혹은 대상 테이블 중에 외래 키를 넣을 테이블 선택이 가능하다. 일대일 관계에서는 반대도 일대일 관계가 된다. 다대일 관계에서는 다(N)에 해당하는 곳이 외래 키를 가지고 있지만(연관관계의 주인) 일대일 관계에서는 주 테이블이나 대상 테이블에 외래 키를 둘 수 있어서 선택 해야 한다. 일대일 관계에서는 외래 키를 주 테이블에 둘지, 대상 테이블에 둘지에 따라 약간의 차이가 있다. 1. 주 테이블에 외래 키가 있는 경우 주 테이블에 외래 키를 둘 경우, 주 테이블에 매핑되는 주 객체에도 객체 참조를 두는 구조를 만들게 된다. 일대일 단방향 주 테이블 Parent에 단방향 일대일 관계에 해당하는 Child 객체필드를 만든후, @OneToOne 어노테이션 선..

turtleDev
'Database' 태그의 글 목록