
FriendShip 애플리케이션에서 S3에 클라이언트에서 압축한 이미지 파일을 업로드할 때 업로드 방식을 Stream 을 기존에 사용하고 있었습니다.기존의 Stream 을 통한 업로드 방식과 향상된 For문, Parallel Stream 을 사용한 방식을 비교하여, 더 빠르게 구현할 수 있는 방법을 모색합니다. 더불어 현재 방식에서 Parallel Stream을 통한 업로드를 하지 않는 이유에 대해 기술합니다. S3에 업로드할 파일 S3에 업로드할 파일들은 임시로 생성한 png 파일로, 적은 용량을 갖고 있습니다.똑같은 파일 크기와 같은 그림을 갖고 있지만 이름만 다른 경우로, 각 테스트에서 2개씩 업로드할 예정이기에 6개를 준비해줍니다.Stream을 적용하여 S3에 파일 업로드 테스트 코드@Test ..

개발을 하면서, 효율적인 SQL을 작성하기에 앞서 SQL 에 대해 더 친근해지고자!!예전에 프로그래머스에 있는 SQL 문제를 모두 풀었습니다.저만 알기보다, 각 게시글을 Lv 1에서 5까지하여 모든 문제의 답을 공유하고자합니다.(참고로 기본적인 데이터베이스 지식과 함께 SQL을 공부한다면,따로 SQLD를 학습하지 않아도 쉽게 따실 수 있습니다!! 따로 준비 안하고 땄습니듯! ) 최솟값 구하기 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krSELECT MIN(DATETIME) FROM ANIMAL_INS 고양이와 개는 몇 마리 있을까 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Sol..

개발을 하면서, 효율적인 SQL을 작성하기에 앞서 SQL 에 대해 더 친근해지고자!!예전에 프로그래머스에 있는 SQL 문제를 모두 풀었습니다. 저만 알기보다, 각 게시글을 Lv 1에서 5까지하여 모든 문제의 답을 공유하고자합니다. (참고로 기본적인 데이터베이스 지식과 함께 SQL을 공부한다면,따로 SQLD를 학습하지 않아도 쉽게 따실 수 있습니다!! 따로 준비 안하고 땄습니듯! ) 모든 레코드 조회하기 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krSELECT * FROM ANIMAL_INSORDER BY ANIMAL_ID 역순 정렬하기 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Tota..

이번에는 코루틴에서 스코프를 열때, 코루틴을 실행할 때! 사용하던 Dispatcher에 대해 알아보고자 한다. 먼저, launch 로 실행할 때 인수로 넣을 수 있는 Dispatcher를 다 넣고 실행해 보았다.실행했을 때 주석과 같은 이름의 스레드가 동장함을 알 수 있었다. 과연 이 스레드들의 이름은 왜 다른걸까? 그리고 디스패처란 뭘까? fun main(){ runBlocking { launch { logging("1") //main - 2025-03-16T00:02:03.997624900 : 1 } launch(Dispatchers.Default) { logging("2") ..

이 장에서는 일시 중단 함수의 구성에 대한 다양한 접근 방식을 알아보고자한다.Suspend Function는 순차적이다?(Sequential)다른 곳에 정의된 두 개의 일시 중단 함수가 원격 서비스 호출이나 계산과 같은 유용한 일을 한다고 가정해 보겠다. (각각 1초 동안 지연한다.) 그럼 이 두 함수를 사용한다면 결과는 어떨까? suspend fun doSomethingUsefulOne(): Int { delay(1000L) return 13}suspend fun doSomethingUsefulTwo(): Int { delay(1000L) return 29}val time = measureTimeMillis { val one = doSomethingUsefulOne() ..

그런데 궁금하다.어떻게 코루틴을 정지시키는가?정확히는 어떻게 원리로 코루틴이 되어 있기에 상태를 감지하고 정지하는걸까? 이제 그 해답을 찾아보고자 한다. 코루틴 스코프?코루틴스코프를 직접 원문을 가져오면 이러하다. /** * 주어진 코루틴 [context]를 감싸는 [CoroutineScope]를 생성합니다. * * 만약 주어진 [context]에 [Job] 요소가 포함되지 않았다면, 기본적으로 `Job()`이 생성됩니다. * 이렇게 하면, 이 스코프 내의 어떤 자식 코루틴이 실패하거나 스코프 자체가 [취소][CoroutineScope.cancel]되었을 때, * [coroutineScope] 블록 내부에서와 마찬가지로 스코프의 모든 자식이 함께 취소됩니다. */@Suppress("FunctionN..

이번에는 코루틴에서 취소와 타임아웃 그리고 어떻게 취소가 가능한지 구조에 대해 알아보고자 한다.코루틴 실행중에 어떻게 취소하지?애플리케이션의 실행 중에, 백그라운드 코루틴에 대한 세분화된 제어가 필요할 수 있다. 예를 들어 MSA환경에서 다른 서버에 필요한 데이터를 동시 요청하다가, 의도치 않은 실패에 의해 , 더 이상 필요하지 않아져 작업을 취소할 수 있다. 이를 위해 launch 함수는 실행중인 코루틴을 취소하는데 사용할 수 있는 job을 반환한다. job의 cancel과 join 함수를 통해 코루틴을 정지할 수 있다. val job = launch { repeat(1000) { i -> println("job: 잠깐 잠 좀 잘게요 $i ...") delay(500..

코루틴이 뭔가요?코루틴은 잠시 중단 가능한 연산의 인스턴스라고 볼 수 있다. 개념적으로 스레드와 비슷한데, 예를 들어 하나의 스레드는 고양이 밥을 주고, 다른 하나의 스레드는 고양이 화장실을 치울 수 있다. 이 작업들은 병렬적으로도 가능하고, 동시적으로도 가능하다.참고: 병렬은 각 작업이 다른 주체에서 실행되는 것이고, 동시는 주체에 상관없이 다른 작업과 함께 수행되는 것을 의미한다.코루틴에서는 이러한 작업 단위를 코드 블록으로 분리하여 동시적 실행이 가능하도록 한다.코루틴의 간단한 동작과정 fun main () = runBlocking{ launch { delay(1000L) println("World!") } println("Hello")}이 코드를 처음 ..