본문 바로가기
반응형

분류 전체보기126

슬기로운 Concurrency-safety Lock - 실습 프로젝트 요구사항 정의 Goals 상품의 재고를 concurrency-safety하게 관리하는 프로그램을 개발합니다. Specs Infrastructure 인프라는 도커로 구성합니다. MySQL: 영속적으로 데이터를 관리합니다. Redis: 분산 락으로 사용합니다. Schema 테이블은 다음과 같습니다. product 테이블 name type id bigint - pk name varchar(100) price bigint description varchar(1000) version bigint stock 테이블 name type id bigint productId varchar(100) total_stock bigint remain_stock bigint note varchar(1000) created_at d.. 2022. 11. 27.
슬기로운 Concurrency-safety Lock 여는 글 안정적인 트랜잭션 처리를 위해서는 락이 필요할 때가 있습니다. 그런데 이 락도 남용 되거나 고민이 충분히 되지 않은 상태에 쓰게 되면 장애 포인트나 성능의 병목이 될 수 있습니다. 그렇다면 어떻게 락을 쓰면 좋을까요? Pessimistic lock(비관적 락) 데이터베이스 트랜잭션에서 비관적 락에는 크게 배타 락(X Lock, Exclusive Lock) 과 공유 락(S Lock, Shared Lock)이 있습니다. 배타 락은 달리 쓰기 잠금이라고 하는데, 특정 자원의 안정적인 변경을 위해 점유하고 다른 트랜잭션이 접근을 막습니다. 공유 락은 읽기 잠금 이라고도 불리는데, 특정 자원에 대해 읽기 잠금이 걸린 상태일 때 다른 트랜잭션도 읽기 잠금을 걸 수 있지만 이미 읽기 잠금이 걸린 자원에 대해.. 2022. 11. 27.
JVM 메모리 구조 GeeksforGeek 사이트의 Java Memory Management란 글을 번역했습니다. 일부 내용을 의역했기 때문에 어색하거나 틀린 내용이 있으면 댓글에 남겨주시거나 위 링크에 접속해서 확인하세요. 번역 과정에서 일부 제가 강조하고 싶은 단어(몰랐던 단어)는 괄호로 표시 합니다. 번역이 힘들었던 부분은 아래에 원문을 별도로 기재합니다. JVM 메모리 구조: JVM을 프로그램이 실행되는 동안 사용되는 다양한 런타임 데이터 영역을 정의합니다. 몇몇 영역은 JVM에 의해 생성되는 반면 몇몇은 프로그램에서 사용되어지는 쓰레드에 의해 생성됩니다. 그러나 JVM에의해 생성된 메모리영역은 JVM이 종료될 때만 회수됩니다. 쓰레드의 데이터영역은 인스턴트화(instantiation)되는 동안 생성되고 쓰레드가 종.. 2022. 7. 29.
대규모 서비스를 지탱하는 기술 - 규모 조정의 요소 규모 조정의 요소 여는 글 서비스의 흥행으로 이용량이 증가하게 되면 시스템의 확장이 필요해진다. 그렇다면 시스템의 확장을 위한 방법에는 어떤 것이 있을까? 스케일 업(scale-up) vs 스케일 아웃(scale-out) 스케일 업(scale-up) 스케일 업은 서버의 하드웨어 스펙을 올리는 것을 말합니다. 예를 들어, CPU 1 core, Memory 1 GB 인스턴스를 CPU 4 core, Memory 4 GB로 올리는 것을 말합니다. 스케일 업에는 두 가지 유의사항이 있습니다. 첫 번째는, 성능 향상에 들어가는 비용이 정비례 하지는 않는다는 점 입니다. 위 사진과 같이 16배의 성능 향상을 위해서는 기존 대비 비용이 30배 이상 들어갈 수 있습니다. 두 번째는 물리적인 한계점 입니다. 물리적으로 메.. 2022. 7. 29.
대규모 서비스를 지탱하는 기술 - (하드웨어 관점에서의) 메모리와 디스크 메모리와 디스크 컴퓨터 내 기억장치와 속도차 아래 그림을 보면 위로 갈 수록 비용 대비 속도가 빨라지는 반면 용량은 줄어들고 밑으로 갈 수록 속도는 느려지는 반면 용량은 늘어난다. SSD vs HDD 간 성능 차이는? 연속된 블록을 읽어들이는 순차 IO에서는 SSD가 HDD보다 약간 빠르거나 비슷한 정도이지만, 랜덤 IO일 때는 막대한 성능 차이를 보인다.(출처, Real MySQL 8장 인덱스) HDD의 데이터 탐색 방법 HDD 내에는 데이터가 기록된 플래터(원판)이 있고, 이 원판으로 부터 데이터를 읽어들이는 헤드 등으로 구성됩니다. HDD의 데이터 탐색은 물리적인 원판의 회전과 헤드의 움직임(헤드 자체의 이동과 플래터에 뗏다 붙였다 하는 행위)를 통해 이뤄집니다. 이렇듯 물리적인 장치임에도 전기적인.. 2022. 7. 27.
Spring Data JPA 2.4.15 Document Memo 여는 글 이 글은 Spring Data JPA 2.4.15 도큐먼트를 읽고 인상 깊었던 내용 일부만을 무자비한 의역 및 관련 개념을 정리하는 글 입니다. https://docs.spring.io/spring-data/jpa/docs/2.4.15/reference/html/#reference 4. Working with Spring Data Repositories 스프링 데이터 리포지토리 추상화의 목표는 데이터 액세스 레이어를 구현하는데 필요한 많은 보일러플레이트 코드를 막대하게 줄이는 것이다. 4.1. Core concepts 스프링 데이터 리포지토리 추상화의 중심이 되는 인터페이스는 Repository 입니다. 리포지토리는 관리 하기 위한 도메인 클래스와 아이디 타입을 가집니다. 이 인터페이스는 주로 .. 2022. 6. 14.
[최범균 Youtube] 마이크로서비스 5개 배포 원칙 소개 최근에 MSA에 대해서 관심이 생기면서 관련된 영상을 찾아보던 중 최범균님이 올리신 마빌딩 마이크로서비스 아키텍처 시리즈 영상에 대해 알게 되었습니다. 아래 영상을 먼저 보고 제 글을 읽어보시길 추천드립니다. 실행 격리 Isolated execution 부하/배포에 있어서 마이크로서비스 간에는 영향을 줘선 안된다. 만약 한 호스트(노드 혹은 서버)에서 여러 마이크로서비스 인스턴스를 실행할 경우 한 마이크로서비스의 부하가 급격히 증가 했을 때 다른 마이크로서비스의 성능이 저하될 수 있으며, 한 마이크로서비스의 배포를 위한 설정이 변경되면 다른 마이크로서비스의 배포에도 영향을 줄 수 있기 때문이다. 그러므로 격리된 환경에서 마이크로서비스를 실행해야 하며, 가상화 기술, 컨테이너, FaaS 등의 기술을 활용하.. 2022. 4. 10.
[최범균 Youtube] 완전 주관적인 실용주의 프로그래머 팁 10선 최범균님의 영상을 보고 저의 생각과 부연적인 의견을 더해 작성한 글입니다. 원본 영상을 보신 후에 읽어 보시길 추천드립니다. 팁1. 자신의 기예(craft)에 관심을 가져라 여기서 기예란 ‘컴퓨터에게 우리가 시키고 싶은 일을 하게 끔 만드는 것’을 의미한다. 좀더 자세하게 자신이 어떤 기예를 가지고 있고, 어떤 부분에 능숙하고 부족한지를 알아야 한다. 그래야만 실제 직면한 문제들에 대해 해결할 수 있고, 기예를 단련하기 위해 어떤 방향으로 나아가야 할지도 잡히기 때문이다. 이는 실용주의 프로그래머가 갖는 여러 특징 중 공통적이면서 기본적인 특징이다. 그 외에도 여러 특징이 있다. 새로운 것에 빨리 적응하는 것 새로운 기술이 나오거나, 새로운 환경이 등장 했을 때 이를 적극적으로 학습하고 적응하는 특징을 .. 2022. 4. 10.
[우아한Tech - 우아한테코톡] Event Loop 이벤트 루프는 Nginx, NodeJS, Netty, V8 Engine 등 많은 곳에서 쓰고 있는 메커니즘이다. 그 개념에 대해서 명확히 알지 못했던 차에 테코톡에서 좋은 영상을 찾아서 보고 간단히 정리해보려 한다. function process() { console.log("start"); setTimeout(()=>{ console.log("jordy"); }, 0); console.log("end"); } process(); 위 영상을 정확히 이해했는지 여부는 위 소스코드가 실행 됐을 때, 콘솔에 찍히는 순서를 맞출 수 있는지 여부로 확인할 수 있다. 결론적으로 start - end - jordy 의 순서로 출력된다. 왜 그런 것일까? 우선 브라우저의 구조를 이해한다면 더 이해가 쉽다. 다음 사진과.. 2022. 3. 28.
반응형