본문 바로가기

전체 글27

2. 개발 목표 및 환경 개발 목표 주 목표 프로젝트의 가장 큰 목표는 하나의 프로젝트를 A ~ Z 까지 개발할 수 있는 개발자 인지 확인 하는 것이다. 여기서 A ~ Z란 프로젝트 기획, 설계, 구현, 운영 까지를 의미한다. 인프라를 구축하여 실지 배포 경험 가진다. docker-compose를 사용한 컨테이너 환경을 필수로 사용한다. 보조 목표 Web Server + API Server 형태의 모놀리식 구조를 사용한다. 이 프로젝트 이전에 내가 경험한 서버의 구조는 Spring 기반의 WAS 방식의 서버였다. 때문에 현재 보편적으로 사용되는 프론트와 API서버로 분리된 모놀리식 구조를 사용한다. 웹 서버는 톰캣보단 Nginx를 사용한다. AWS 사용을 배제 했기 때문에 온프레미스 환경에서 리눅스를 최대한 경험한다. 개발 환경.. 2023. 11. 3.
1. Project Intro 프로젝트 소개 프로젝트 BMW는 Bus Metro Walk의 첫자를 합친 이름입니다. 버스, 지하철을 사용하는 뚜벅이를 위한 심플한 대중교통 정보를 제공하는 프로젝트입니다. 만들게 된 이유 이왕이면 내가 사용하고 싶은 서비스를 만들고 싶었습니다. 제가 사는 곳은 지하철과 버스정류장 거리가 조금 있습니다. 때문에 지하철과 버스를 도착정보를 둘 다 확인해야 하는 경우가 꽤 많이 발생합니다. 일반적으로 버스, 지하철 도착정보를 확인하는 방법은 2가지가 있습니다. 지하철 앱으로 확인 + 버스 앱으로 확인 지도 앱에서 지하철 도착정보 확인 + 버스 도착정보 확인 두 방법을 모두 사용해 봤지만 단점이 있었습니다. 1번의 경우는 두 가지 앱에서 따로 확인해야 하는 번거로움이 있습니다. 2번의 경우 두 손을 모두 사용.. 2023. 11. 3.
4. 트랜잭션의 격리 레벨과 존재 이유 트랜잭션과 동시성 하나의 앱에서 하나의 트랜잭션만 사용한다면 동시성에 대한 이슈는 없을 것이다. 아니면 여러 트랜잭션이 서로 다른 데이터만 사용한다면 동시성에 대한 이슈는 없을 것이다. 하지만 한명의 사용자를 위한 앱이 아닌 이상 현실적으로 그럴 수 없다. 때문에 트랜잭션 다룰 때는 동시성 이슈는 필연적으로 발생한다. 트랜잭션을 지원하는 데이터베이스들은 동시성 문제를 트랜잭션 격리 레벨로 해결해 왔다. 격리 레벨이라고 불리는 이유는 트랜잭션시 발생할 수 있는 다양한 동시성 문제를 단계별로 해결하기 때문이다. 트랜잭션 격리 레벨 SQL 표준은 Transaction Isolation에 대해 4가지 레벨로 정의하고 있다. (위에서 아래로 격리레벨이 높아진다.) Read uncommitted(커밋 되지 않은 읽.. 2023. 8. 29.
3. 트랜잭션 사용 방법과 어보트 처리 RDB에서 트랜잭션 사용 방법 트랜잭션 여러 작업을 마치 하나 처럼 처리하도록 하는 기술이며, 여러 작업의 논리적인 묶음이다. 여기서 말하는 여러 작업은 SQL들을 말한다. 그렇다면 서버는 여러 SQL이 하나의 트랜잭션에 속하는지 어떻게 알수 있을까? 데이터베이서 서버와 클라이언트는 TCP 연결을 기반으로 한다. 연결된 TCP 내에서 BEGIN TRANSACTION 문과 COMMIT 문 사이의 모든 SQL은 같은 트랜잭션에 속하게 된다. 즉, 클라이언트는 트랜잭션 시작시 BEGIN TRANSACTION 을 보내고 트랜잭션 완료시 COMMIT 을 보내기만 하면 된다. BEGIN TRANSACTION; INSERT INTO ...; -- 1번 SQL INSERT INTO ...; -- 2번 SQL UPDAT.. 2023. 8. 29.
0. 트랜잭션 시리즈 작성 목적 시리즈 목적 트랜잭션은 여러 작업을 논리적인 하나의 작업처럼 동작하게 한다. 그 덕분에 데이터의 정합성은 높아지고 안정성과 신뢰성을 확보 할 수 있다. 하지만 트랜잭션은 강결합을 유발한다. 개발에서 항상 논해지는 트레이드 오프가 여기서도 발생하는 것이다. 현대의 시스템은 추상화를 통한 약한 결합이 중요하다. 그래야 서로 의존성이 적어 분리하기 쉽고 유지보수에도 용의하기 때문이다. 트랜잭션 또한 분산환경에서 약결합하기 위한 다양한 방법이 존재한다. 2중 커밋 (Two-Phase Commit, 2PC) Saga 패턴 로컬 트랜잭션 (Local Transactions) 이벤트 소싱 (Event Sourcing) 최종 일관성 (Eventual Consistency) 이 외에도 다양한 방식으로 존재하며, 이러한 .. 2023. 8. 22.
2. 트랜잭션에서 안정성을 의미하는 ACID ACID이란? ACID는 트랜잭션이 제공해야 하는 4가지 윈칙을 의미한다. 트랜잭션에서 제공하는 안정성을 말할 때 흔히 ACID를 설명한다. ACID는 1983년 데이터베이스의 내결함성 메커니즘을 나타내는 정확한 용어를 확립하기 위해 만들었다. A - 원자성(Atomicity) C - 일관성(Consistency) I - 격리성(Isolation) D - 지속성(Durability) 하지만 데이터베이스마다 ACID 구현은 제각각이다. 때문에 데이터베이스에서 말하는 "ACID를 준수"한다는 말은 정확하게 어떤 것을 준수하고 있는지 명확하지 않은 경우가 많다고 한다. 원자성(Atomicity) 일반적인 의미로 원자성이란 더 작은 부분으로 쪼갤 수 없는 뭔가를 말한다. 그리고 이 단어는 컴퓨터에서 비슷하지만 .. 2023. 8. 21.