[Tistory] [Kotlin] 코루틴 이해를 위한 배경 지식

안녕하세요. 황진성입니다. 최근에 이직을 했고, 합류한 팀에서 비즈니스 로직 틈틈이 코루틴을 사용하는 것을 확인했습니다. 저는 비동기, 병렬 처리 등에 대해서 제대로 공부하거나 사용해 본 적이 없어서 코드를 명확하게 이해하는 것이 힘들었습니다. 단순히 공식 문서에서 예제 한두번 돌려보고 대충 이해하고 쓰기만 했습니다. 꼼꼼히 코드 리뷰를 해주실 때 잘못 사용된 부분을 알려 주시긴 하는데, 언제까지 이렇게 개발할 수 없었습니다. 이 참에 코루틴에 대해 어느 정도 자세히 알아보고자 합니다. 코루틴과 코루틴을 감싸고 있는 이야기를 모두 해볼까 하는데, 여러 개의 포스트로 나눠서 차근차근 정리해 보겠습니다. 1편에서는 “코루틴을 감싸고 있는 이야기”에 집중해서 이야기해보겠습니다. 동시성(Concurrency)과..

[Tistory] N+1문제의 발생이유와 해결방법

N+1 문제의 발생 이유와 해결 방법에 대해 설명해주실 수 있을까요? 해결 방법은 3가지 이상 말씀해주시면 좋습니다. N+1 문제란? N+1 문제는 데이터베이스 쿼리를 실행할 때 발생할 수 있는 성능 문제 중 하나로, 쿼리 실행 시 추가적인 N개의 쿼리가 발생하여 성능저하를 초래할 수 있습니다. 이는 주로 ORM(Object-Relation Mapping)를 사용하는 경우 발생하며, 한 번의 부모 쿼리로 N개의 자식 쿼리를 가져오는 방식에서 문제가 발생합니다. Lazy Loading(지연 로딩) : 연관된 데이터가 실제로 필요할때만 로드되도록 설계된 방식이지만, 이를 잘못 사용할 경우 여러번의 쿼리가 발생하여 N+1 문제가 발생할 수 있습니다. Eager Loading(즉시 로딩) : Eager 전략으로..

[Tistory] Coroutines이란?

개요 Kotlin을 사용하며 Coroutines를 사용하여 여러 동시처리를 하기 위해 공부해보고자 합니다. Coroutine이란? 코투린은 루틴의 일종이며, Co는 with 또는 together를 뜻합니다. Routine이란 하나의 task 또는 함수로 생각하면 됩니다. 이름만 보았을때는 코틀린에서 만들어진 개념같지만 코틀린의 것만이 아니며 여러 언어에서 지원하고 있는 개념입니다. 예를 들어 javascript의 async await를 사용한 경험이 있다면 이미 코루틴을 사용해 본 경험이 있는 것입니다. 코루틴은 실행을 일시 중단했다가 다시 시작할 수 있는 컴퓨터 프로그램 구성 요소로, 협력적 멀티태스킹을 위한 서브루틴을 일반화합니다. 코루틴은 협동 작업, 예외, 이벤트 루프, 반복자, 무한 목록 및 파..

[Tistory] 이펙티브 자바 6장 열거 타입과 에너테이션

아이템 34 int 상수 대신 열거 타입을 사용하라 https://blog.naver.com/dlrhkdgh3333/223104587652 아이템 34 int 상수 대신 열거 타입을 사용해라 개요 이번 아이템에서는 열거타입에 대해서 배우게 됩니다. 열거 타입에 대해서 자세히 배우기전 간단히 상… blog.naver.com 아이템 35 ordinal 매서드 대신 인스턴스 필드를 사용하라. https://blog.naver.com/dlrhkdgh3333/223104652623 아이템 35 ordinal 메서드 대신 인스턴스 필드를 사용하라 개요 열거 타입 상수는 자연스럽게 하나의 정수값에 대응하게 됩니다. 모든 열거 타입은 해당 상수가 그 열… blog.naver.com 아이템 36 비트 필드 대신 ..

[Tistory] [Key Word 개발기] Swagger ?? Spring Rest Docs??

협업 프로젝트에 들어가면서 api문서에 있어 Swagger를 사용할까??Spring Rest Docs를 사용할까?? 고민하였다. 나는 개인적으로는 Spring Rest Docs를 적용하고 싶었다. 그 이유를 여기서 차차 설명할것이다. 첫번째 Swagger는 운영코드에 침투적이다 Swagger를 사용하려면 컨트롤러단에 코드를 추가해야한다.예를 들어 @ApiOperation(value=” 회원 조회 “) @ApiResponses(value = { @ApiResponse(code=200, message =”회원 존재”, response=String.class), @ApiResponse(code=500, message = “서버 에러”) } @PostMapping(“/member/{id}”) public Res..

[Tistory] [ Kotlin & Spring ] – 스프링 WebFlux의 코루틴 지원과 코루틴 원리

1. 스프링 WebFLux의 코루틴 지원 프로젝트 리액터 기반의 리액티브 프로그래밍은 비동기-논블로킹의 단점인 콜백 헬 문제를 순차적으로 동작하는 연산자를 통해 해결합니다. 하지만 함수형 패러다임에 익숙하거나 리액터의 다양한 연산자에 부담이 없다면 이도 상관없지만, 매우 러닝커브가 높은 편입니다. 이로 인해 최근 안드로이드도 최근엔 RxJava에서 코루틴 기반으로 작성하는 코드가 늘어나고 있고 서버 측에서도 코루틴을 도입하는 사례도 많아지고 있습니다. 1-1. 코루틴 코루틴(Coroutine)은 코틀린에서 비동기-논블로킹 프로그래밍을 명령형 스타일로 작성할 수 있도록 도와주는 라이브러리 입니다. 이는 멀티 플랫폼을 지원하며 코틀린을 사용하는 안드로이드, 서버 등 여러 환경에서 사용할 수 있습니다. 또한 ..

[Tistory] [TIL] Kotlin Coroutine의 구조와 간단한 예제

-1- Coroutine Coroutine이란? Coroutine은 비동기적으로 실행되는 코드를 간소화하기 위한 실행 설계 패턴으로 mainroutine과 subroutine에 suspend와 resume을 통해 routine들 간의 비선점형 멀티태스킹을 할 수 있도록 하는 프로그램 구성요소이다. 선점형, 비선점형 멀티태스킹?? 선점형 멀티태스킹 : 멀티코어를 사용해서 동시에 여러가지 작업을 하는 것으로 하나의 프로세스가 다른 프로세스 대신에 프로세서를 강제로 차지할 수 있어 병행성이 있다 – 쓰레드 비선점형 멀티태스킹 : 하나의 프로세스가 CPU를 할당받으면 종료되기 까지 다른 프로세스가 CPU를 강제로 차지할 수 없어 동시성은 있지만, 복수의 작업을 동시에 처리하는 것이 아니라 병행성은 없다. – 코..

[Tistory] Kotlin coroutine 강의로 이해하기 – 1 : [우아한테크코스 5기 AN_베르]

사용이 목적이라면 쉽지만 이해하긴 어려운 코루틴을 공부해보자 킹갓 제이슨은 말씀하셨다. 어떻게 코어를 효율적이고 효과적으로 사용할 것인가? 코어나 프로세서가 추가됨에 따라 실행시간이 항상 빨라지는가? 코루틴 학습을 통해 이해해보도록 하자. 학습 로드맵 Philipp Lackner 의 KOTLIN COROUTINES https://www.youtube.com/playlist?list=PLQkwcJG4YTCQcFEPuYGuv54nYai_lwil_ Android Kotlin 코루틴 https://developer.android.com/kotlin/coroutines?hl=ko Kotlin Docs 코루틴 https://kotlinlang.org/docs/coroutines-overview.html 용어 정리 ..

[Tistory] Android에서 배경을 20% 투명하게 만드는 방법

Android에서 배경을 20% 투명하게 만드는 방법 ?▁을 어떻게 만들 수 ?Textview약 20% 투명(완전히 투명하지 않음), 배경에 색상(예: 흰색)이 있습니까?검은색의 경우 다음 코드를 사용합니다. #000000 불투명도를 사용하려면 다음 코드를 사용하십시오. #99000000 불투명도 코드의 경우 아래: 모든 불투명도 수준 16진수 불투명도 값 100% — FF 95% — F2 90% — E6 85% — D9 80% — CC 75% — BF 70% — B3 65% — A6 60% — 99 55% — 8C 50% — 80 45% — 73 40% — 66 35% — 59 30% — 4D 25% — 40 20% — 33 15% — 26 10% — 1A 5% — 0D 0% — 00 투명성을 위해 어..