전체 글129 READ COMMITED와 REPEATABLE READ 비교 트랜잭션의 격리 수준(isolation level)은 여러 트랜잭션이 동시에 실행될 때, 특정 트랜잭션이 다른 트랜잭션의 변경사항이나 데이터를 조회할 수 있는지를 결정하는 중요한 설정입니다. MySQL은 총 4가지 격리 수준을 제공합니다.READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE이 중에서 READ UNCOMMITTED는 커밋되지 않은 데이터를 읽는 Dirty Read 문제를 일으킬 수 있고, SERIALIZABLE은 동시 처리 성능이 낮아지는 단점 때문에 거의 사용되지 않습니다.따라서 이번 포스팅에서는 가장 자주 사용되는 READ COMMITTED와 REPEATABLE READ를 중심으로, 두 격리 수준의 차이점과 특징을 살펴보겠습니다.READ.. 2025. 1. 6. InnoDB스토리지 엔진 수준의 락 InnoDB 스토리지 엔진은 레코드 기반의 잠금 기능을 제공합니다. 이 덕분에 MyISAM 보다 뛰어난 동시성 처리를 제공합니다.또한, 잠금 정보가 상당히 작은 공간에서 관리되기 때문에 레코드 락이 페이지 락 또는 테이블 락으로 레벨업되지 않는 특징이 있습니다. InnoDB 스토리지 엔진에서는 레코드 락, 갭락, 넥스트 키락을 제공합니다. 이번 포스팅에서는 레코드 락과 갭 락에 관해 다뤄보겠습니다. 레코드 락(Record Lock) 일반적으로 레코드 락(record lock)은 테이블의 특정 레코드를 잠그는 기능으로 이해됩니다.그러나 MySQL의 레코드 락은 테이블의 레코드를 직접 잠그는 것이 아니라, 인덱스의 레코드를 잠급니다.이 개념을 이해하기 위해 특정 레코드를 조회하는 상황을 살펴보겠습니다.인덱스.. 2025. 1. 6. MVCC(Multi Version Concurrency Control) MVCC는 일반적으로 레코드 레벨의 트랜잭션을 지원하는 DBMS가 제공하는 기능입니다. Multi Version Concurrency Control(MVCC)을 직역하면 '다중 버전 동시성 제어'입니다. 이 표현에서 유추할 수 있는 것은 'MVCC는 여러 버전이 존재하며, 동시성 제어와 관련이 있다'는 점입니다. 하나 이상의 버전이 존재한다?하나의 레코드에 여러개의 버전이 동시에 관리됨을 의미합니다. 여러개의 버전이 왜 필요할까?(READ_COMMITTED 격리 수준을 전제로)한 레코드를 수정 중일 때, 해당 레코드를 조회하는 요청이 들어오면, 아직 수정 내용이 커밋되지 않았으므로 수정 전의 데이터를 조회해야 합니다.또한, 하나의 트랜잭션에서 레코드를 수정한 뒤 다른 작업 중 에러가 발생하면 기존 데이.. 2024. 11. 27. NAT Gateway를 NAT Instance로 대체하자 출시를 목표로 프로젝트를 진행 중인 학생으로서, 그동안 대학 사업단의 지원을 받아 AWS 관련 비용을 충당해 왔습니다. 하지만 이제 팀원 대부분이 졸업을 앞두고 있어, AWS 비용이 큰 부담으로 다가오고 있습니다. 이에 따라 AWS 인프라를 재구성하기로 결정했으며, 목표는 비용을 최소화하는 것입니다. 이를 위해 첫 번째로 시도한 방법은 NAT Gateway를 NAT Instance로 대체하는 것이었습니다. NAT Gateway AWS에서는 Private Subent 내의 인스턴스가 VPC 외부의 서비스(인터넷)에 연결할 수 있도록 하게 해주는 NAT Gateway 서비스를 제공해주고 있습니다. https://aws.amazon.com/ko/vpc/pricing/ 논리적으로 격리된 가상 네트워크 - Am.. 2024. 11. 25. 왜 Private Subnet이 필요한가? (feat : 보안 그룹) 프로젝트를 진행하며 팀원들에게 이런 질문을 받은 적이 있습니다."Private Subnet을 사용하는 이유가 뭐야? 보안은 보안 그룹으로 설정하면 되지 않나?"이 질문에 명확히 답변하지 못했던 경험이 있어, 이번 기회에 Private Subnet과 보안 그룹의 차이와 필요성을 정리해보려 합니다.Private Subnet과 보안 그룹이란? Private Subnet은 인터넷 게이트웨이와 연결되지 않아 외부에서 접근이 불가능한 서브넷입니다. Private Subnet에 속한 리소스는 인터넷에 직접 노출되지 않고, 내부 네트워크에서만 접근 가능합니다. 반면, 보안 그룹은 AWS 리소스(예: EC2, RDS 등)의 인바운드와 아웃바운드 트래픽을 제어하는 가상 방화벽입니다. 특정 IP, 포트, 프로토콜 규칙을 기.. 2024. 11. 18. Swagger 403 에러 해결 프로젝트를 진행 중에 Swagger API 에서 요청에 대한 응답으로 403 에러가 반환되고 있다는 것을 발견했습니다. 위 에러를 마주하였을 때 가장 먼저 의심한 것은 CORS 에러였습니다. 다만, 조금 더 고민해보니 앞뒤가 맞지 않는 추론이었습니다. 왜냐하면, Swagger의 Origin과 서버의 Origin은 동일한 Origin이기 때문입니다. Same Origin Policy 왜 동일한 Origin인데 CORS에러가 아니라고 생각했냐 라고 묻는다면 CORS 에러가 나온 이유를 생각해보면 당연합니다.웹 어플리케이션은 기본적으로 동일한 출처의 리소스만 공유할 수 있습니다.다만, 동일한 출처의 리소스만 공유할 수 있으면 웹 어플리케이션을 사용하는 데 너무 번거롭기 때문에 편의성을 위해 몇몇 출처를 허용해.. 2024. 11. 12. 이전 1 2 3 4 ··· 22 다음 728x90