본문 바로가기

전체 글846

인프런 2시간만에 끝내는 코루틴 8강 ~ 10강 정리 8강. suspending functionsuspend 함수는 suspend가 붙은 다른 함수를 호출할 수 있다. 그리고 suspend 함수는 코루틴이 중지되었다가 재개될 수 있는 지점을 의미한다. 중요한건 중지가 될수도 있고 안될수도 있다는 것이다. fun main(): Unit = runBlocking { launch { a() b() } launch { c() }}suspend fun a() { printWithThread("A")}suspend fun b() { printWithThread("B")}suspend fun c() { printWithThread("C")}// 결과Thread: main, AThread: mai.. 2024. 6. 12.
인프런 2시간만에 끝내는 코루틴 1강 ~ 7강 정리 1장. 루틴과 코루틴의 차이runBlocking: 일반 루틴과 코루틴을 연결하는 함수이다. runBlocking을 통해 새로운 코루틴을 만들 수 있다.launch: 반환값이 없는 코루틴을 만든다.suspend fun: 다른 suspend fun을 호출할 수 있다.yield: 현재 코루틴을 중단하고 다른 코루틴이 실행될 수 있도록 스레드를 양보한다. (제어권을 넘겨준다)fun main(): Unit = runBlocking { println("START") # 1 launch { # 2 newRoutine() } yield() # 3 println("END") # 6}suspend fun newRoutine() { val.. 2024. 6. 12.
200억건의 데이터를 MySQL로 마이그레이션 할 때 고려했던 개념과 튜닝 방법 정리 개요본 포스팅은 "200억건의 데이터를 MySQL로 마이그레이션 할 때 고려했던 개념과 튜닝 방법" 인프런 강의의 내용을 정리한 글입니다. PrepareCREATE TABLE test1( seq INT PRIMARY KEY AUTO_INCREMENT,    one_field BIGINT,    two_field BIGINT,    hash_email VARCHAR(500),    INDEX idx_hash_email(hash_email),    INDEX idx_col1_col2(one_field, two_field));Multiple Column IndexMultiple Column Index란 복합 인덱스를 의미한다. 복합 인덱스에서 가장 중요한 것은 명시된 컬럼의 순서에 따라 정렬이 된다는 점이다... 2024. 6. 9.
카카오 JDK 21의 신기능 Virtual Thread 알아보기 정리 개요본 포스팅은 카카오 테크밋에서 안정수님이 발표하신 "JDK 21의 신기능 Virtual Thread 알아보기" 영상을 본 후 글로 정리한 것입니다.Virtual Thread란 무엇인가Virtual Thread는 JDK 21에 새롭게 추가된 기능이다. 기존 플랫폼 스레드와는 달리 경량 스레드로써 OS스레드를 그대로 사용하지 않고 JVM 내부 스케줄링을 통해 수십만~수백만개의 스레드를 동시에 사용할 수 있게 해준다.전통적인 Java의 ThreadJava의 Thread는 OS Thread를 Wrapping한 것이다. (Platform Thread)Java 어플리케이션에서 Thread를 사용하면 실제로는 OS Thread를 사용한 것이다.OS Thread는 생성 갯수가 제한적이고 생성, 유지하는 비용이 비싸.. 2024. 5. 16.
틴더(Tinder) 시스템 디자인 Problem Statement틴더와 같은 위치 기반 데이팅 어플리케이션을 디자인해본다. 틴더는 오른쪽 스와이프를 통해 좋아요를 보내거나 왼쪽 스와이프를 통해 싫어요를 보낼 수 있고 매칭된 유저와 채팅할 수 있는 기능들을 제공한다.Gathering RequirementsIn Scope이 어플리케이션은 아래의 요구사항을 충족시켜야 한다.유저는 간략한 프로필과 사진을 업로드하여 자신의 프로필을 생성할 수 있다.유저는 지리적으로 근접해있는 지역의 유저를 추천받을 수 있다.유저는 추천받은 유저에게 오른쪽으로 스와이프하여 좋아요를 보내거나 왼쪽으로 스와이프하여 싫어요를 보낼 수 있다.유저는 타 유저와 매칭된 경우 알림을 받을 수 있다.유저가 다른 지역으로 이동해도 해당 지역과 근접한 지역의 유저를 추천받을 수 있.. 2024. 5. 16.
Uber는 어떻게 Redis를 통해 초당 4천만 읽기를 제공하는가 2020년 우버는 Docstore라는 분산 데이터베이스를 출시했다. 이는 MySQL을 기반으로 만들어졌으며 초당 수천만건의 요청을 처리하는 동시에 페타바이트의 데이터를 저장할 수 있었다. 수년에 걸쳐 Docstore는 우버의 모든 비즈니스 분야에서 서비스 구축을 위해 사용되었고 이러한 어플리케이션의 대부분은 낮은 레이턴시와 높은 성능, 그리고 확장성을 요구했다.Challenges with Low latency database reads확장성이 높고 낮은 읽기 지연이 필요한 애플리케이션을 처리할 때 대다수의 데이터베이스는 문제를 맞이한다. 그 중 몇가지는 다음과 같다.디스크에서 데이터를 검색하는 속도는 임계값이 있다. 또한 어플리케이션의 데이터 모델과 쿼리를 최적화하여 대기 시간을 개선하는 것에도 임계값은.. 2024. 5. 7.