본문 바로가기
반응형

Develop239

[백엔드 실무 스터디] 5, 6, 7. 비동기, 동시성, I/O 병목 제어 서론이 글은 '주니어 백엔드 개발자가 반드시 알아야 할 실무 지식' 책을 읽고 진행하는 스터디 내용을 정리한다. 책을 읽고 학습하는 게 아니라, 책의 내용을 주제로 경험을 공유하는 스터디이기 때문에 포스팅 내용은 책과 관련이 없다. 이번 글은 '5장 비동기 연동, 언제 어떻게 써야 할까', '6장 동시성, 데이터가 꼬이기 전에 잡아야 한다', '7장 IO 병목, 어떻게 해결하지'를 읽고 진행한 스터디 내용을 정리했다. '(경험 공유)' 혹은 '(생각 공유)' 표기는 스터디원들이 실무에서 겪은 개인적인 경험이나 생각을 정리한 것이며, 항상 정답은 아니다. 5장 비동기 연동, 언제 어떻게 써야 할까 (경험 공유) 비동기 적용 사례병렬 처리를 위한 코루틴 적용알림톡 발송카프카에서 이벤트 컨슘 시 사용ack .. 2025. 8. 17.
[백엔드 실무 스터디] 3, 4. DB와 외부 연동 서론이 글은 '주니어 백엔드 개발자가 반드시 알아야 할 실무 지식' 책을 읽고 진행하는 스터디 내용을 정리한다. 책을 읽고 학습하는 게 아니라, 책의 내용을 주제로 경험을 공유하는 스터디이기 때문에 포스팅 내용은 책과 관련이 없다. 이번 글은 '3장 성능을 좌우하는 DB 설계와 쿼리', '4장 외부 연동이 문제일 때 살펴봐야 할 것들'을 읽고 진행한 스터디 내용을 정리했다. (경험 공유) 표기는 스터디원들이 실무에서의 경험을 정리한 것이며, 항상 정답인 예제가 아니다. 3장. 성능을 좌우하는 DB 설계와 쿼리 선택도 (58p)인덱스에서 특정 컬럼의 고유한 값 비율선택도가 높다 = 고유값이 많다 커버링 인덱스 (59p)인덱스 안에 포함된 데이터를 사용하므로 실제 데이터에 접근할 필요 없음.쿼리를 충족.. 2025. 8. 4.
[백엔드 실무 스터디] 2장. 느려진 서비스 살펴보기 서론이 글은 '주니어 백엔드 개발자가 반드시 알아야 할 실무 지식' 책을 읽고 진행하는 스터디 내용을 정리한다. 책을 읽고 학습하는 게 아니라, 책의 내용을 주제로 경험을 공유하는 스터디이기 때문에 포스팅 내용은 책과 관련이 없다. 이번 글은 '2장 느려진 서비스, 어디부터 봐야 할까'를 읽고 진행한 스터디 내용을 정리했다. (경험 공유) 표기는 스터디원들이 실무에서의 경험을 정리한 것이며, 항상 정답인 예제가 아니다. 2장. 느려진 서비스, 어디부터 봐야 할까수직 확장 & 수평 확장 (26p)(경험 공유) CPU 수치에 따라 스케일인/아웃되는 auto scaling group 설정사용자 적은 시간대는 스케일인을 해둔다던가 다양한 조건으로도 설정 가능DB 스케일은 직접 다룰 일이 없다 (DBA에게 요청.. 2025. 7. 5.
[Java] VirtualThread 동작 살펴보기 지난 글인 [Java] Virtual Thread 간단히 알아보기 에서 가상 스레드가 도입된 배경과, 가상 스레드는 무언인가에 대해 간단하게 살펴보았다. 이번 글에서는 VirtualThread 클래스를 살펴보고, 가상 스레드가 어떤 식으로 동작하는지 코드를 통해 대략적으로 살펴보려고 한다. (참고 코드: jdk21u) VirtualThread 클래스 살펴보기 아래는 VirtualThread 클래스의 코드 일부를 가져와보았다. 여러 멤버 변수들이 있는데 어떤 역할을 하는지 살펴보자.final class VirtualThread extends BaseVirtualThread { // scheduler and continuation private final Executor scheduler; .. 2025. 6. 1.
[Java] Virtual Thread 간단히 알아보기 이 글은 Java Virtual Thread, 가상 스레드가 만들어진 계기를 살펴본다. 가상 스레드 특징들을 공부하고, 도입 시 어떤 점들을 유의해야 하는지까지 간단히 살핀다. Virtual Thread의 자세한 동작 방식은 생략하고, 이후에 따로 글을 작성한다. 자바 스레드 모델 동작 흐름 기존의 Java에서 스레드를 생성하면, 운영체제(OS, Operating System)에 의해 관리되는 커널 스레드에 매핑된다. 스레드를 생성할 때마다 시스템 콜도 필요하고, 메모리도 많이 차지한다. 그래서 흔히들 스레드 생성은 비용이 굉장히 많이 드는 작업이라고들 한다. 그래서 자바에서는 스레드가 필요할 때마다 생성하는 게 아닌, 스레드를 미리 만들어놓고 할당/해제하면서 관리하기 위해 '스레드 풀'을 활용한다. .. 2025. 3. 30.
[Coroutines] SupervisorJob vs supervisorScope 서론 SupervisorJob은 코루틴을 만드는 코루틴 빌더이고, supervisorScope은 코루틴 스코프를 만드는 스코프 빌더이다. 그래서 사실 이 둘을 같은 비교 선상에 두기엔 애매하다고 생각한다. 이 글에서 알아보고 싶은 건 SupervisorJob을 직접 사용할 때와 supervisorScope 사용할 때 무엇이 달라지는지를 확인하고 싶었다. 필자는 아래 환경에서 코드 확인 및 테스트를 아래 버전에서 하고 있다.jvm 17kotlin 1.8.10coroutines-core 1.7.3  SupervisorJob 해당 job의 자식들은 서로 독립적으로 실패할 수 있음(= 자식의 실패 또는 취소가 발생한 경우, 다른 자식에게 영향이 없음)부모 job이 존재하는 경우, 부모가 취소되면 현재 job이 .. 2025. 3. 2.
데드락을 유도하는 코루틴 사용법 서론 이 글은 코루틴을 사용하다 겪었던 장애를 소개하는 글이다. 장애 원인이 밝혀지기까지 복잡한 과정이 있었으나, 모두 생략하고 코루틴에 대한 내용만 골라내 설명한다. 장애 원인은 무엇이었는지, 그 원인을 유도한 상황은 무엇인지, 어떻게 해결했는지 등을 정리해 보도록 하겠다. 코루틴에서 발생할 수 있는 데드락 (feat. runBlocking) 데드락이 발생할 수 있는 예제를 가져와보았다. 이 예제에는 두 가지 가정이 존재한다.dispatcher는 스레드를 2개까지 할당할 수 있는 디스패처async(dispatcher) { ... } 의 ...은 동기 호출이라 중단될 일이 없다🔻 실행 가능한 예제코드더보기아래 코드를 실행하면 애플리케이션이 종료되지 않는다. 그 이유는 하단에서 자세히 살펴보겠다.fun .. 2025. 1. 11.
구조적 동시성 이해하기 (feat. goto의 역사) 이 글은 'Notes on structured concurrency, or: Go statement considered harmful'을 번역한 글입니다. 원작자의 허락하에 번역하였음을 분명히 밝힙니다. 좀 더 쉬운 표현을 위해 의역한 부분도 있으니, 원문이 궁금한 분들은 링크를 참고하시길 바랍니다. Thanks to Nathanial J. Smith for allowing the translation. Notes on structured concurrency, or: Go statement considered harmful — njs blogvorpus.org 모든 동시성 API는 코드를 동시 실행할 방법이 필요하다. 다음은 몇 가지 예시다.go myfunc(); .. 2024. 12. 23.
[Kotest] Kotest 활용 간단 가이드 Kotest란? 🤔 공식 사이트에 가보면 Kotest를 아래와 같은 말로 표현하고 있다.Kotest is a flexible and elegant multi-platform test framework for Kotlin with extensive assertions and integrated property testing 위의 말을 보면 총 3가지 정도의 기능을 제공하고 있다. 각 기능들을 독립적으로 사용할 수 있는데, 이는 Kotest가 독립적으로 나뉜 여러 개의 하위 프로젝트들로 구성되어 있기에 가능한 일이다. (3가지 기능을 모두 사용하고 싶다면 의존성도 각자 추가해야 한다는 의미이다.) 일단 어떤 기능들을 제공하고 있는지부터 살펴보자. 1. 유연하고 우아한 멀티 플랫폼 테스트 프레임워크다.👉 .. 2024. 10. 27.
반응형