본문 바로가기

전체 글

(178)
[OS] 스레드 풀(thread pool)은 무엇인가? Thread per request modelRequest마다 하나의 Thread를 할당시켜 하나의 Request는 하나의 Thread가 처리하도록 동작하는 모델이다. 문제점만약 Thread per reqeust 모델의 동작 방식이 서버에 들어오는 요청마다 스레드를 새로 만들어서 처리하고, 처리가 끝난 스레드는 버리는 식으로 동작한다면 스레드 생성에 소요되는 시간 때문에 요청 처리가 더 오래 걸린다.처리 속도보다 더 빠르게 요청이 늘어나면 스레드가 계속 생성이 되어 메모리가 고갈되고, 컨텍스트 스위칭이 더 자주 발생한다.이는 CPU 오버헤드 증가로 CPU Time이 낭비가 된다.어느 순간 서버 전체가 응답 불가능한 상태에 빠진다.Thread Pool미리 정해진 개수만큼 Thread를 생성해 놓고, 내부적으..
[OS] 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍 사전 배경 지식 정리프로그램(Program)컴퓨터가 실행할 수 있는 명령어들의 집합이다. 프로세스(Process)컴퓨터에서 실행 중인 프로그램이다.각각의 프로세스는 독립된 메모리 공간을 할당받는다.프로세스는 명령어들과 데이터를 가진다. CPU(Central processing unit)명령어를 실행하는 연산 장치이다. 메인 메모리프로세스가 CPU에서 실행되기 위해 대기하는 곳 IO(input/output)파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고받는 것입출력 장치(e.g. 키보드, 마우스)와 데이터를 주거나 받는 것 단일 프로세스 시스템초창기 시스템은 단일 프로세스 시스템이었다.단일 프로세스 시스템은 한 번에 하나의 프로그램만 실행할 수 있다.따라서 다른 프로그램을 실행시키려면 현재 실행되고 ..
[Database] DB MVCC와 PostgreSQL, MySQL의 동작 비교 기존 Lock based Concurrency Control read-lockwrite-lockread-lockOXwrite-lockXX 위 표는 각 read와 write lock의 호환 관계를 나타낸 표이다.예를 들어 두 Transaction이 모두 read-lock + read-lock을 가지고 있을 때는 block이 될 필요 없지만, 한 Transaction이 read-lock, 다른 Transaction은 write-lock을 가지고 있을 경우 둘 중 하나만 실행이 가능하며, 다른 한쪽은 unlock 할 때까지 기다려야 한다. 이러한 호환성 문제를 개선하기 위해서 MVCC(Multiversion Concurrency Control)가 등장한다.MVCC (Multiversion Concurrency..
[Database] LOCK을 활용한 concurrency control 기법 + 2PL (two-phase locking) Lock여러 Transaction이 같은 데이터에 read / write를 한다면 예기치 못한 데이터 변경이 일어날 수 있다.이를 막기 위해 데이터를 Lock이라는 장치를 설정하여, Lock을 취득하기 전까진 그 데이터의 read/write를 못하게 막을 수 있다. Write Lock (Exclusive Lock)read / write(insert, modify, delete)할 때 사용한다.다른 transaction이 같은 데이터를 read / write 하는 것을 허용하지 않는다.write 할 때만 사용하는 것은 아니다. Read Lock (Shared Lock)read 할 때 사용한다.다른 transaction 같은 데이터를 read 하는 것은 허용한다.Lock을 사용한 시나리오상황Transacti..
[Database] DB concurrency control: schedule과 serializability, recoverability Lost Update 현상데이터베이스 시스템에서 Lost Update는 동시에 실행되는 두 트랜잭션이 동일한 데이터 항목을 업데이트하여 이전 업데이트가 손실되는 현상을 의미합니다.다음과 같은 상황에서 발생할 수 있습니다. Alice가 Transaction을 시작합니다.동시에 Bob도 Transaction을 시작합니다. 이 때 Product의 quantity와 likes는 Alice, Bob에게 각각 7, 5 입니다.Alice가 product의 quantity를 6으로 Update 합니다.Bob은 product의 quantity를 10으로 Update 합니다.Alice는 자신의 Update를 Commit 하여 DB에 반영합니다.Bob 또한 자신의 Update를 Commit 하여 DB에 반영합니다. 결과적으..
[Spring] 테스트 환경을 독립적으로 만들어보자 H2 DatabaseH2 Database는 다음과 같은 특징을 가진 인메모리 데이터베이스이며, 메모리에 데이터를 정하기 때문에 매우 빠른 속도를 제공한다.또한 파일 기반으로 작동하기 때문에 별도의 서버 설치가 필요하지 않다.H2 데이터베이스는 JDBC 드라이버를 제공하기 때문에 대부분의 JDBC 기반 프레임워크와 호환된다. JDBC?JDBC는 Java Database Connectivity의 약자로, 자바 프로그래밍 언어에서 데이터베이스에 접근하고 데이터를 조작하기 위한 표준 API이다.JDBC를 사용하면 Java 코드를 통해 데이터베이스에 연결하고, SQL 쿼리를 실행하고, 결과를 처리하며, 데이터를 삽입, 수정, 삭제할 수 있다.H2 DB는 빠른 속도와 간편한 설정으로 인해 개발 및 테스트 ..
[Spring] Spring Security에서 지원하는 Logout과 JWT 기반 Logout 구현의 차이 스프링 공부를 위해 구입한 도서에서는 JWT 기반 회원가입, 로그인 기능은 있어도 로그아웃은 없길래 로그아웃 기능은 어떻게 구현할까 찾아보았다. 기능 추가를 하려면 새 DB를 써야해?? 구글링으로 스프링 JWT 기반 로그아웃 기능을 어떻게 구현했는지 찾아보았는데 Redis를 사용해서 로그인 시 Token 데이터를 저장하고, 로그아웃 시 Redis에서 토큰 데이터를 지우는 방식으로 구현하였다. 로그아웃 하려고 DB를 새로 추가하라니.. 그럼 로그인 기능도 바꿔주어야 하는 것 아닌가..란 생각이 들었다. 그래서 다른 방법을 찾기 위해 Spring Security에서 지원하는 Logout에 대해 알아보았다. Spring Security에서 기본으로 제공하는 Logout https://docs.spring.io..
[Database] isolation이 안될 때 나타날 수 있는 여러 현상 Isonlation이 안될 때 발생할 수 있는 이상한 현상들Dirty Readcommit 되지 않은 변화를 읽어서 이상한 값이 반영되는 상황을 Dirty Read 라고 한다.예시를 살펴보자.Transaction 1 Begins: A가 어떤 계좌에 $100 달러를 입금하려 한다. (Transaction 1) 현재 계좌 잔액은 $500 달러이다.Transaction 1 Modifies Data: Transaction 1은 새 잔액을 계산한다.($500 + $100 = $600) 하지만 commit은 하지 않는다.Dirty Read Occurs: 또 다른 transaction이 시작하여 계좌에 $500 달러를 read 한다. (Transaction 2)Transaction 2 Reads Uncom..