본문 바로가기

전체 글67

사용자 수에 따른 규모 확장성 사용자 수가 증가함에 따라 시스템 구조에 어떤 변화를 줘야 하는지에 대해 알아보고자 정리를 한다. 해당 내용은 「가상 면접 사례로 배우는 대규모 시스템 설계 기초」 1장 내용이다. 내용을 정리하면서, 중간중간 이해가 어려운 부분에 대해서 다른 포스팅으로 정리하며, 내 머릿속에도 설계에 대한 사고력을 확장시켜 나가고자 한다. 본 내용은 단일 서버부터 시작하여 사용자 수에 따른 시스템 변화를 알아본다. 1. 단일 서버 1. 사용자는 도메인명을 이용하여 웹 사이트에 접속한다. 때문에 DNS 질의를 통해 주소변환 과정을 거친다. 2. DNS 조회 결과로 IP주소가 반환. 3. 해당 IP주소로 요청을 보내면 4. 요청을 받은 웹 서버가 클라이언트에게 응답을 반환한다. 2. 데이터베이스 분리 사용자가 늘어남에 따라.. 2023. 6. 30.
[Spring] 스프링의 DI를 이용한 전략패턴 도입 프로젝트를 진행하다 보니, 여러 가지 상황을 겪게 된다. 이번에 경험한 것은 제목과 같이 프로젝트에 "전략패턴"을 구현함으로써 유연성을 향상시킬 수 있었던 이야기다. 상황은 아래와 같다. 문제 A: 그냥 읽기만 하면 되는 문제 문제 B: 객관식 위와 같이 두 문제가 있고, 각 문제의 유형은 다르다. 또한 각 문제마다 채점 방식이 다른데, 채점 방식은 아래와 같다. - 문제 A는 읽기만 하고 [제출]을 누르면 Solve 처리가 된다. - 문제 B는 읽고, 정확하게 번호를 고른 후 [제출]을 눌러야 Solve 처리가 된다. 이러한 상황에서 전략 패턴을 도입하기 전과 후 어떤 차이가 있고, 어떤 식으로 Spring에서 전략패턴을 구현할 수 있는지에 대해 정리해보고자 한다. 전략패턴이란? 알고리즘군을 정의하고 .. 2023. 6. 8.
[JPA] 동일 트랜잭션 내 OneToMany 필드 객체의 데이터와 DB 데이터의 불일치 JPA의 변경감지 jpa에서 데이터를 수정하는 방식으로는 영속상태의 엔티티 필드를 수정하는 방식인 변경감지가 있다. 변경감지가 일어난 이후, 트랜잭션 종료 또는 JPQL 실행을 하면 영속성 컨텍스트를 flush하게 되어있다. 테스트를 하다 마주친 양방향 연관관계 매핑 과정에서 생긴 궁금증과 테스트를 통해 궁금증을 해결한 과정을 적어보고자 한다. 양방향 연관관계 매핑 우선 설명에 필요한 두 엔티티에 대해 간략하게 적어보자면 아래와 같다. 1. Member: Member 엔티티는 List 타입의 필드를 가진다. (@OneToMany(mappedBy)) 2. Solve: Solve 엔티티는 Member 타입의 필드를 가진다. (@ManyToOne) 이 두 관계는 양방향 연관관계로써, Member엔티티의 L.. 2023. 4. 21.
데이터 동시성 제어의 목적과 유형(Lock과 트랜잭션 격리수준) 동시성 제어 데이터베이스는 공유를 목적으로 하기 때문에 가능한 많은 트랜잭션을 동시에 수행시켜야 한다. 하지만, 동시에 수행함으로써 같은 데이터를 공유한다면 데이터의 일관성이 훼손될 수 있다. 그래서 동시에 다양한 트랜잭션의 데이터 접근을 제어하기 위한 DBMS 기능이 바로 동시성 제어인 것이다. 각 트랜잭션이 동시에 같은 데이터에 접근하는 경우는 아래 세 가지가 있을 것이다. T1(작업종류) T2(작업종류) 발생 가능한 문제 읽기 읽기 없음 읽기 쓰기 - Dirty Read(잘못된 값 읽기) - Non-Repeatable Read (반복 불가능 읽기) - Phantom Read(유령데이터 읽기) 쓰기 쓰기 갱신손실 첫 번째 상황은 데이터 변경의 여지가 없으므로 아무 문제도 발생하지 않는다. 두 번째 상.. 2023. 3. 13.