본문 바로가기

전체 글845

Java Garbage Collection Unreachable 객체 GC는 JVM의 힙 영역에 있는 Unreachable 메모리를 청소한다. 위 사진을 보면 reachable한 객체들은 타 객체에 의해 참조되고 있고 unreachable한 객체들은 타 객체에 의해 참조되지 않고 있다. 하지만 단순히 타 객체에 참조되지 않은 객체를 unreachable라고 부르진 않는다. unreachable 영역을 보면 각 객체들은 서로 순환참조를 이루고 있다. 하지만 GC root로부터 참조를 이루고 있진 않은데, 이처럼 GC root가 도달할 수 없는 객체를 unreachable 객체로 판단한다. GC root가 도달할 수 있는 객체라면 GC가 동작해도 객체를 청소하지 않는다. 이러한 reachable한 객체와는 반대로 GC root로부터의 참조가 끊어진 .. 2024. 1. 30.
결제 시스템 디자인 Step1. Understand the Problem and Establish Design Scope 결제 시스템은 각각의 사람들에게 다른 의미로 받아들여질 수 있다. 몇몇은 애플페이나 구글 페이와 같은 디지털 월렛 개념으로 생각할수도 있고 몇몇은 페이팔이나 스트라이프처럼 결제를 담당하는 백엔드 시스템으로 생각할 수 있다. 따라서 인터뷰를 시작하기 전 요구사항을 명확히 해야한다. 나: 어떤 종류의 결제 시스템을 만들어야하나요? 면접관: 아마존과 같은 이커머스의 결제 시스템입니다. 아마존에서 사용자가 주문을 진행하면 결제 시스템은 돈의 이동에 관한 모든 것을 처리합니다. 나: 신용카드, 페이팔, 계좌이체 등 여러가지 종류 중 어디까지 지원해야하나요? 면접관: 이번 면접에서는 신용카드만을 대상으로 합니다. .. 2023. 12. 18.
광고 클릭 이벤트 시스템 디자인 Problem Statement 모든 소셜 미디어 및 이커머스 회사들이 성장하면서 디지털 광고의 중요성이 그 어느때보다 높아졌고 그에 따라 대다수의 기업들은 디지털 광고에 상당한 투자하고 있다. 모든 기업들은 광고 클릭 이벤트를 추적하고 통계를 내서 광고에 예산을 좀 더 효율적으로 할당하기를 원한다. 따라서 광고 클릭을 정확하게 추적하는건 굉장히 중요한 일이다. 또한 하루에 10억개의 광고 클릭이 발생하고 총 200만개 이상의 광고가 발생한다고 가정하면 데이터 양 또한 굉장히 많을 것이다. 본 포스팅에서는 주요 2가지 유즈케이스에 대해 살펴본다. 최근 M분동안 특정 광고의 클릭 이벤트 개수를 구한다. 최근 M분동안 가장 클릭이 많이 된 N개의 광고를 구한다. 여기에는 우리가 다뤄야 할 몇가지 엣지케이스가.. 2023. 12. 14.
채팅 서비스 시스템 디자인 Step1. Understand the problem and establish design scope 첫 번째로 면접관이 채팅 시스템 설계를 요청할 때 정확히 어떠한 것을 염두에 두고 있는지 파악해야 한다. 최소한 1:1 채팅인지 그룹 채팅인지 정도는 알아야 한다는 말이다. 아래와 같은 질문을 던질 수 있겠다. 나: 1:1 채팅 또는 그룹 채팅 중 어떠한 채팅 앱에 초점을 맞춰야하나요? 면접관: 1:1 / 그룹 채팅 모두 지원해야 합니다. 나: 모바일 앱, 웹 앱 중 어떤 것인가요? 둘 다 인가요? 면접관: 둘 다 입니다. 나: 스케일은 어느정도인가요? 스타트업 제품 수준인가요, 아니면 대규모 트래픽을 가졌나요? 면접관: DAU 5천만을 감당할 수 있어야 합니다. 나: 그룹 채팅의 경우 참여할 수 있는 .. 2023. 12. 13.
Whatsapp(왓츠앱) 시스템 디자인 Key Requirements 왓츠앱은 전 세계의 수많은 유저들이 빈번하게 접근하는 확장성이 뛰어난 시스템이기 때문에 신뢰성있는 시스템 디자인이 필수적이다. 그러므로 왓츠앱의 주요 요구사항을 식별하는 것은 굉장히 중요하다. 왓츠앱의 기본 요구사항 중 일부는 다음과 같다. 1:1 대화를 지원해야 한다. 마지막으로 본 시간과 메시지 확인을 표시하는 기능(전송, 도착, 읽음 표시) 종단 간 암호화된 미디어 전송 Capacity Estimation 우리의 목표는 대용량 트래픽을 수용할 수 있는 플랫폼을 설계하는 것이다. 이것을 위해 메시지와 유저의 수, 피크 타임의 트래픽, 데이터 저장소등 다양한 요소들을 고려해야 한다. 아래와 같은 상황으로 가정해보자. 하루에 100억건의 메시지가 10억명의 유저들을 통해 전.. 2023. 11. 30.
스프링 Webflux - 스레드와 이벤트 루프 개요 이벤트 루프는 단순한 스레드인데 어떻게 CPU를 블락킹하는 일반적인 자바 스레드와 다르게 동작할 수 있을까? 리액티브 프로그래밍은 이해하기 어렵진 않지만 완벽하게 이해하기는 쉬운 일이 아니다. 카페에 가서 선호하는 음료를 주문한다고 상상해보자. 주문을 한 후 바리스타가 커피를 다 만들때까지 카페에서 기다리거나 또는 카페 근처를 산책할수도 있다. 또는 주문 직후 핸드폰으로 이메일을 보내거나 다음 미팅 스케줄을 잡을수도 있다. 리액트 프로그래밍의 원리를 이해하고 사용하는것은 매우 중요한데, 프레임워크에 가려져있기에 쉽게 파악하기가 까다롭다. 본 포스팅에서는 일반적인 리액티브 프로그래밍에 대해 초점을 맞추지 않을 것이다. 대신, 스프링 내부에서 어떻게 통합되고 동작하는지에 대해 설명하겠다. Reactiv.. 2023. 11. 13.