분류 전체보기 555

CPU는 어떻게 여러가지 일을 한번에 처리할까?

최근 스레드 풀에 대해서 공부하기 전에 스레드가 어떻게 운영체제에서 관리되는지 공부하기 위해 찾아보다 "스레드 생성 비용과 스레드 풀과의 관계" 포스팅을 작성했던 기억이 있어서 다시 찾아보게 되었습니다. PCB와 TCB에 대한 내용이었는데 겉핥기 식으로 이 둘에 대해 알고 있었다보니 이번 기회에 제대로 공부하자고 마음먹고 공부하게 되었습니다. 이번 포스팅은 PCB에 대한 내용이 주된 내용이지만 PCB와 연관이 깊은 컨텍스트 스위칭도 같이 정리해보도록 하겠습니다. PCB (Process Control Block)PCB는 운영체제가 프로세스를 관리하기위해 사용하는 자료구조입니다. 프로세스를 관리하기 위한 메타데이터가 저장되어 있고 주요 메타 데이터로는 PID, Program Counter, Regist..

전통적인 ACID와 분산 시스템에서의 ACID

데이터베이스 포스팅이 벌써 50개를 넘어섰는데요. 단일 카테고리로는 두번째 양인데요. 첫번째는 Spring인데 조금 허수가 있는게 영한님 영상을 보면서 복사 붙여넣기 했던 포스팅이 15개정도 그리고 본격적으로 다시 보면서 공부한게 또 20몇개정도 되니 허수가 있죠. 하지만 데이터베이스 카테고리는 그런 허수없이 50개를 넘어섰으니 정말 많이 썼습니다. 그만큼 제가 데이터베이스 공부를 정말 좋아합니다. 데이터베이스에 대한 내용을 공부하면서 트랜잭션에 대한 이야기는 정말 많이 썼는데요. "스프링 내부적인 트랜잭션 동작 방식"이나 "PostgreSQL이 @Transactional과 어울리지 않는다"나 "@Transactional로 분산 트랜잭션을 구현할 수 있을까?" 같은 내용이 바로 그러하죠. 근데 이 ..

클라우드 데이터베이스의 미래 AWS Aurora DSQL

오랜만에 제가 좋아하는 데이터베이스 분야에서 신기술이 나왔습니다. 처음엔 영상으로 접했는데 그냥 AWS에서 신기술 냈구나 정도로 생각했지만 계속 영상을 보면서 흥미를 가질 수 밖에 없었습니다. Serverless RDBMS라고? 이게 무슨 혼종이지? 싶었죠. 오늘은 AWS Aurora의 후속 버전, 클라우드 데이터베이스의 미래 AWS Aurora DSQL에 대해서 공부한 내용을 정리해보는 포스팅을 작성해보려고합니다. AWS의 클라우드 데이터베이스 역사AWS는 처음엔 RDS를 선보였습니다. 이는 단순히 오픈소스로 되어있는 데이터베이스 엔진을 이용해서 RDBMS를 구축한 것에 불과했죠. AWS RDS를 시작으로 점점 사용자들은 다양한 니즈가 생기기 시작했습니다. 2009년에 RDS가 선보인 것을 시작으..

DevOps/AWS 2025.07.08

MSA에서 Kafka 유연하게 설계하기 (쓰기 연산 부하 편)

MSA 사고실험 첫번째 포스팅인 데이터베이스 설계에 이어 두번째는 Kafka를 유연하게 설계해보았습니다. 보통 MSA에서 이벤트 기반 아키텍처를 설계할 때 카프카를 주로 사용하게 되는데 카프카에 대한 이론적인 내용보다 설계에 초점을 맞추게 되다보니 두 가지 관점에서 카프카를 바라볼 수 있을 것 같습니다. 바로 쓰기 연산이 주를 이루는 애플리케이션과 읽기 연산이 주를 이루는 애플리케이션 이렇게 두 가지 관점에서 볼 수 있을 것 같은데요. 보통 쓰기 연산에 부하가 많이 가는 채팅앱, 읽기 연산이 자주 일어나는 쇼핑몰과 SNS처럼 두 가지 관점에서 설계를 해보려 합니다. 주의!!제 얄팍한 지식으로 설계하는만큼 실제 아키텍처를 공부하는게 아니고 직접 설계하는 능력을 기르기 위해서 쓰는 포스팅임을 알립니다. ..

DevOps/사고실험 2025.07.01

MSA에서 데이터베이스 아키텍처 설계해보기 (RDBMS)

가트너의 MSA 아키텍처에서 보면 MSA를 3티어 아키텍처로 두고 여러개의 파트로 분리해놓은 것을 보고 일단 데이터베이스부터 설계를 해야겠다는 생각을 했습니다. MSA에서 데이터베이스를 설계할 때 제가 중요하게 생각한 관점은 다음과 같습니다. RDBMS는 거대한 상태 덩어리이므로 stateless 애플리케이션에 적합한 k8s에 적합하지 않다. 때문에 데이터베이스는 클러스터 외부 베어메탈 머신에서 돌아가야한다. 이런 상황에서 쿠버네티스 클러스터 내부에 있는 애플리케이션과 상호작용 해야한다. 마스터 - 슬레이브 아키텍처로 마스터 노드에선 쓰기 작업을, 슬레이브 노드에선 읽기 작업을 해야하며 마스터 노드의 장애시 슬레이브 노드가 마스터 노드로 승격되어야한다. 되도록이면 Automatic Failover를 ..

DevOps/사고실험 2025.06.21

MSA 사고실험 시작

MSA 사고실험 시작이번 포스팅을 시작으로 MSA에서 아키텍처 설계를 해보려고 합니다. 제 개인적인 생각이지만 k8s정도는 한번 구축해보는게 이해하는것도 편하고 여러모로 쓸모 있지만 MSA라는 거대 아키텍처는 하나하나가 모여 거대한 아키텍처를 이루기에 깔짝깔짝 해본다고 해봤다고 하기 좀 뭣 한 것 같습니다. 당연히 Hello World 수준에서는 쉽겠지만 실제 MSA를 적용하고 있는 여러 기업들에서 생기는 문제들은 이런 수준이 아닐 것이므로 Hello World 수준으로 실습하는건 적절하지 못하다고 판단했습니다. 근데 구인공고 여기저기서 "MSA에 대한 이해가 있는 분" 이라고 써놓으니 공부를 안할 수도 없고 곤란하던 차에 든 생각이 바로 "아인슈타인도 상대성 이론을 사고실험으로 만들었는데 나라고 못..

DevOps/사고실험 2025.06.21

순수 자바로 @Transactional 구현하기

이번 포스팅에선 Spring의 @Transactional를 깊이있게 파헤쳐보고 정리해보도록 하겠습니다. 코드는 깃허브를 참고해주시면 감사하겠습니다. 코드는 웬만하면 적지 않을 예정입니다. 제 블로그 포스팅은 기본적으로 코드를 되도록 적지 않는데 그 이유는 코드가 많아지면 설명해야할게 많아지고 그럼 가독성이 떨어진다고 생각하기 때문입니다. 또한, 저도 공부하면서 포스팅을 수백개 봤지만 사실 코드를 잘 안봅니다... 그리고 깃허브를 들어가서 실제 코드를 보면 아시겠지만 변수명과 함수명이 실제 스프링 프로젝트와 다른 부분이 있습니다. 그 이유는 실제 스프링 프로젝트는 훨씬 더 복잡한 계층 구조와 다양한 팩토리 클래스를 가지고 있습니다. 그래서 제 프로젝트는 최대한 가볍게 만들기 위해서 변수명을 조정했습니다...

순수 자바로 Spring AOP 프레임워크 만들기

이번 포스팅에선 Spring AOP를 깊이있게 파헤쳐보고 정리해보도록 하겠습니다. 코드는 깃허브를 참고해주시면 감사하겠습니다. 코드는 웬만하면 적지 않을 예정입니다. 제 블로그 포스팅은 기본적으로 코드를 되도록 적지 않는데 그 이유는 코드가 많아지면 설명해야할게 많아지고 그럼 가독성이 떨어진다고 생각하기 때문입니다. 또한, 저도 공부하면서 포스팅을 수백개 봤지만 사실 코드를 잘 안봅니다... 그리고 깃허브를 들어가서 실제 코드를 보면 아시겠지만 변수명과 함수명이 실제 스프링 프로젝트와 다른 부분이 있습니다. 그 이유는 실제 스프링 프로젝트는 훨씬 더 복잡한 계층 구조와 다양한 팩토리 클래스를 가지고 있습니다. 그래서 제 프로젝트는 최대한 가볍게 만들기 위해서 변수명을 조정했습니다. 사실 코드는 별로 중..

순수 자바로 @Configuration, @Bean 구현하기

이번 포스팅에선 @Configuration, @Bean을 깊이있게 파헤쳐보고 정리해보도록 하겠습니다. 코드는 깃허브를 참고해주시면 감사하겠습니다. 코드는 웬만하면 적지 않을 예정입니다. 제 블로그 포스팅은 기본적으로 코드를 되도록 적지 않는데 그 이유는 코드가 많아지면 설명해야할게 많아지고 그럼 가독성이 떨어진다고 생각하기 때문입니다. 또한, 저도 공부하면서 포스팅을 수백개 봤지만 사실 코드를 잘 안봅니다... 그리고 깃허브를 들어가서 실제 코드를 보면 아시겠지만 변수명과 함수명이 실제 스프링 프로젝트와 다른 부분이 있습니다. 그 이유는 실제 스프링 프로젝트는 훨씬 더 복잡한 계층 구조와 다양한 팩토리 클래스를 가지고 있습니다. 그래서 제 프로젝트는 최대한 가볍게 만들기 위해서 변수명을 조정했습니다. ..

순수 자바로 스프링 빈 라이프 사이클 구현하기

이번 포스팅에선 Spring Bean LifeCycle을 깊이있게 파헤쳐보고 정리해보도록 하겠습니다. 코드는 깃허브를 참고해주시면 감사하겠습니다. 코드는 웬만하면 적지 않을 예정입니다. 제 블로그 포스팅은 기본적으로 코드를 되도록 적지 않는데 그 이유는 코드가 많아지면 설명해야할게 많아지고 그럼 가독성이 떨어진다고 생각하기 때문입니다. 또한, 저도 공부하면서 포스팅을 수백개 봤지만 사실 코드를 잘 안봅니다... 그리고 깃허브를 들어가서 실제 코드를 보면 아시겠지만 변수명과 함수명이 실제 스프링 프로젝트와 다른 부분이 있습니다. 그 이유는 실제 스프링 프로젝트는 훨씬 더 복잡한 계층 구조와 다양한 팩토리 클래스를 가지고 있습니다. 그래서 제 프로젝트는 최대한 가볍게 만들기 위해서 변수명을 조정했습니다. ..