본문 바로가기

동시성 문제와 잠금 동시성 문제 (1) Lost Update한 트랜잭션의 변경 사항이 다른 트랜잭션에 의해 덮어씌워지는 현상을 말한다. 여러 트랜잭션이 동일 데이터를 읽고, 동시에 수정하려고 할 때 발생한다. (2) Write Skew여러 트랜잭션이 동시에 실행될 때, 각각의 트랜잭션이 다른 트랜잭션이 수행한 읽기 결과를 기준으로 조건을 확인하고 쓰기 작업을 수행함으로써, 전체 데이터베이스 상태가 일관되지 않게 되는 문제이다. 여러 트랜잭션이 동일 데이터를 읽고, 읽은 데이터를 기반으로 서로 다른 데이터를 수정할 때 발생한다. 주문, 재고, 판매상태 사례를 통해 Write Skew 개념을 파악해보자. 잠금 전략(1) 비관적 잠금 (Pessimistic Lock) 다른 트랜잭션이 데이터를 변경하려 할 가능성이 높다. 그러니 ..
데이터베이스 트랜잭션과 격리수준 Transaction트랜잭션은 작업의 완전성을 보장해주는 것을 말한다.논리적인 작업 셋을 모두 완벽하게 처리한다. --> 트랜잭션의 Commit 작업을 뜻한다.처리하지 못할 경우에는 원 상태로 복구한다. --> 트랜잭션의 Rollback 작업을 뜻한다.이렇게 작업의 완전성을 보장하여, partial update 문제를 방지한다.(a) partial update 문제partial update은 작업이 일부만 적용되는 현상이다.myisam 엔진과 Innodb 엔진 사례를 통해, 트랜잭션이 적용되지 않아 "partial update" 문제가 발생하는 사례를 살펴보자. (myisam 엔진은 트랜잭션을 지원하지 않는다.)위의 그림은 PK가 중복되는 레코드를 추가하여 오류가 발생했을 때, 엔진 별로 최종 데이터 결..
타임라인 회고 (Timeline Retrospective) 프로젝트 회고를 준비하며, GPT와 쿵짝쿵짝 정리한 시나리오를 정리한 자료입니다. 타임라인 회고는 1개월 이상 지속된 장기 프로젝트 회고로 적합한 방법입니다. 진행 방식은 다음과 같습니다. 준비물스티커, 네임펜, 3가지 색상의 포스트잇 진행방법1. 칠판에 타임라인을 그립니다. (5분)2. 포스트잇에 사건을 적어서 붙입니다. 따뜻한 감정은 빨간 포스트잇에, 차가운 감정은 파란 포스트잇에 작성합니다. (15분)3. 주요 사건들을 그룹핑합니다. (5분)4. 스티커를 5개씩 배부하고, 투표를 합니다. (5분)5. 투표를 받은 상위 사건들로 어떤 일이 있었는지 이야기를 나눕니다. (15분)6. 사건을 바탕으로 다음 5가지를 생각해봅니다. (15분) Achievements Surprises ..
VirtualThread 아는 체하기 (1) Virtual Thread이란?JDK 21에 추가된 경량 쓰레드이다. OS 쓰레드를 사용하지 않고 JVM 내부 스케줄링을 통해 쓰레드를 생성한다.수십만~수백만개의 쓰레드를 동시에 사용할 수 있다.(2) 일반 Thread이란?기존의 일반 Thread는 OS Thread를 그대로 매핑한 것이다. 이를 Platform Thread라고 한다.Java Thread는 실제로 OS Thread를 사용한 것이다. Thread를 생성할 때 커널 영역에 접근하기 위해, 시스템 콜을 해야한다. 이로 인하여 오버헤드가 발생한다.이러한 배경으로 생성 갯수가 제한적이고, 생성하고 유지하는 비용이 크다.그래서 Thread를 무한히 생성할 수 없기 때문에 Thread Pool으로 관리해왔다.미리 Thread를 만들어두고, 재..
Optimizing Java (자바최적화): JVM, 운영체제, 하드웨어 JVM이란?스택 기반의 해석 머신이다. 물리적 CPU 하드웨어 레지스터는 없지만,일부 결과를 스택에 보관하며, 스택의 위에 쌓인 값을 가져와 계산한다.JVM 인터프리터의 기본 로직평가 스택을 이용해 중간값을 담아두고, 가장 마지막에 실행된 명령어와 독립적으로 프로그램을 구성하는 명령 코드를 순서대로 처리한다. while 루프 안의 switch 문 같은 방식이다.실행 순서java helloWorldOS가 가상 머신 프로세스 (자바 바이너리)를 구동한다.자바 가상환경이 구성되고, 스택 머신이 초기화 된다.자바 프로세스가 새로 초기화되면, 클래스로더가 차례로 동작한다.부트스트랩 클래스로더 실행자바 런타임 코어 클래스 로드다른 클래스 로더가 시스템에 필요한 클래스를 로드할 수 있는 최소한의 클래스를 로드한다.예..
NotebookLM: AI 시대에 원서 개발 서적 읽기 발단NotebookLM으로 알아보는 프롬프트 작성 팁 을 읽고, Notebook LM을 알게 되었다. 그동안 책을 읽기가 부담스러웠던 Object-Oriented Reengineering Patterns를 읽는 데에 활용해봤다. 그런데 사용성이 좋아, 원서 개발 서적을 읽는 부담감이 줄어들 것 같단 생각이 들었다. 그래서 후기를 작성해보고자 한다.  NotebookLM이란?구글 제미나이를 기반으로 한 연구/글쓰기 도우미 서비스이다.  NotebookLM 칭찬 무료다. 360 페이지 분량의 PDF 파일을 비교적 빠르게 인식했다. 스타트업의 무료 요약 AI 서비스를 사용했을 때는 PDF 파일 용량이 크면 오류가 났다. 그런데 이건 파일 분석부터 매끄럽다. 글 요약 AI 프로그램을 몇가지 사용했을 때, 실제로..
Playwright을 활용한 비주얼 테스트: 스크린샷을 떠서 통채로 비교하기 Visual 테스트란? 애플리케이션 화면을 스크린샷으로 저장하여, 앱의 현재 상태와 비교하는 것을 말한다.E2E 테스트는 뷰의 동작을 검증한다면, Visual 테스트는 화면에 표시된 시각적인 부분을 검증한다. visual 테스트으로 수동 테스트 프로세스를 자동화하면, 브라우저 별로 데이터가 잘 뜨는지 매번 테스트를 하지 않아도 된다. Playwright이란? Playwright을 사용하면 UI를 캡쳐한 이미지 결과를 비교할 수 있다. Playwright 실습편 (1) 프로젝트 폴더를 만든 후, 냅다 설치! # Install node dependenciesnpm install -D @playwright/testnpm install -D typescript# Install playwright browser..
Object-Oriented Reengineering Patterns: 객체 지향 리엔지니어링 패턴 Object-Oriented Reengineering Patterns을 읽고 정리하자.(1) 리엔지니어링 패턴리엔지니어링 패턴이란?기존 소프트웨어 시스템, 즉 레거시 시스템을 개선하고 현대화하기 위한 검증된 방법을 제시하는 것을 말한다.리엔지니어링 패턴 기술문서 양식Name (이름)동료와 의논하기 쉬운 이름의 형태로 짓자.Intent (의도)패턴의 핵심을 간결하게 전달하는 것이 목적이다.현재 상황에 적용 가능한지 여부를 판단할 수 있다.Problem (문제)해결하고자 하는 특정 문제 상황을 제시한다.독자가 자신의 상황에 패턴을 적용할 수 있는지 판단하는 데 도움이 된다.Solution (해결책)문제에 대한 구체적인 해결 방안을 제시한다.여기에는 디자인 원칙, 리팩토링 기법, 코드 예제 등이 포함된다.Re..