목록분류 전체보기 (44)
디지안의 개발일지
들어가기 전에 조영호님의 책 객체지향의 사실과 오해을 읽으면서 중요하다고 생각되는 부분들을 정리하려고 한다. 제대로 이해하려면 책을 꼭 구매해서 봐야할 듯하다. 이 책의 목적 이 책은 객체지향 프로그래밍 고수를 만들기 위한 책은 아니다. 단지 객체 지향에 대한 시야를 지금까지 보지 못했던 방향으로 보게 해주는 책이라고 저자가 소개하고 있다. 더불어, 객체지향에 대한 기본적인 지식들을 배울 수 있는 책으로 보인다. 핵심은 객체지향에 대한 시각, 기본적인 지식을 배울 수 있는 책으로 추측이 된다. 협력하는 객체들의 공동체 객체들은 역할, 책임, 협력 이 세가지에 의해 구성이 된다. 예를 들어, 각 객체는 어떤 역할을 가지고 있고 그 역할에 따라 협력하는 관계에서 책임을 지게 된다. 여기서 재밌는 점은 아래와..
들어가기 전에 코틀린만 사용하다가 자바를 사용할 기회(?)가 있어서 자바 코드를 열심히 작성하였다. 그런데 생성자, Getter, Setter를 모두 작성하다보니 코드의 양이 너무 많아져서 Lombok을 찾게 되었고 설정하는 것에 대해서 정리하려고 한다. Lombok이란? Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your loggi..
들어가기 전에 현재 회사에서는 주로 B2B를 진행하고 있기 때문에 인터넷이 되지 않는 온프레미스 환경에서 모든 환경들이 설정되어야 한다. 그리고 아무리 회사 내에서 테스트를 진행해도 고객사에서 문제가 발생하는 경우가 있어서 코드를 가져가서 직접 빌드하자는 의견이 나왔다. 감사하게도 이에 대해 정리해주신 글이 있었고 실제로 수행해본 결과를 정리하려고 한다. 의존성 캐싱 오프라인에서 gradle를 빌드하기 위해서는 온라인 상태에서 필요한 의존성들을 미리 캐싱을 해야한다. 캐싱은 따로 어떤 행위를 해야하는건 아니다. gradle에서는 기본적으로 ~/.gradle 폴더에 버전별로 라이브러리들이 저장이 되어있다. 정확하게 어떻게 저장하는지는 잘 모르겠다. Docker로 빌드 환경 구성하기 현 회사에서는 기본적으로..
들어가기 전에 이 글에서는 코루틴의 취소와 시간초과에 대해서 다룬다. Cancelling coroutine execution 긴 시간 운영하는 애플리케이션에서는 백그라운드 코루틴을 세밀하게 제어하는 것이 필요하다. 예를 들어, 유저가 페이지를 닫았을 때 실행 중이던 코루틴과 그 결과가 더 이상 필요하지 않으면 취소되어야 한다. launch 함수는 Job을 반환하는데 Job을 통해서 취소 할 수 있다. fun main() = runBlocking { val job = launch { repeat(1_000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1_300L) println("main: I'm tried of waiting!") ..
들어가기 전에 이 글은 기본적인 coroutine의 개념을 설명한다. Your first coroutine coroutine은 일시중지하는 계산이 가능한 인스턴스다. 개념적으로는 스레드와 유사한다. 이 의미는 코루틴에 해당하는 코드 블록이 다른 코드와 동시적으로 일을 수행한다는 의미다. 그러나 코루틴이 어떤 특별한 스레드를 의미하는 것은 아니다. 코루틴은 하나의 스레드 안에서 코루틴 자체의 실행을 지연하고 또 다른 스레드에서 실행을 재개한다. 코루틴은 경량의 스레드로 생각할 수 있으나 실제로 사용하는데 있어서 스레드와 중요한 차이가 있다. 다음 코드를 실행해보자. fun main() = runBlocking { launch { delay(1_000L) println("World!") } println("..
들어가기 전에 코틀린 코루틴에 대해 잘 알고 있다고 생각하였으나 며칠 전에 인턴 분들의 질문에 대답을 잘 못하여 내가 정말 잘 알고 있는건가? 라는 의구심이 들었다. 그래서 공식 문서를 다시 보고 싶은 욕구가 생겼고 다시 보는 김에 구글 번역기의 도움을 받아서 번역을 하려고 한다. Coroutine Guide 코틀린은 언어에서 다양한 다른 라이브러리가 표준 라이브러리로부터 코루틴을 활용할 수 있도록 로우 레벨의 API를 제공한다. 비슷한 기능을 가진 다른 언어와 달리 async와 await이 코틀린의 키워드가 아니고 심지어 표준 라이브러리에 속해 있지도 않다. 또, 코틀린에서의 supending function의 개념은 안전하고 비동기 기능에 대해 futures와 promises보다 오류가 발생하기 쉬운..
R2DBC란? 현재 Java 진영에서 주로 사용하고 있는 데이터베이스 연결 드라이버는 JDBC다. JDBC는 완벽한 블록킹 API이므로 아무리 비동기식으로 서버를 구성하더라도 결국 JDBC에서 동기적으로 동작을 하게 된다. 그래서 나온게 R2DBC다. 공식 문서를 보면 다음과 같은 구절이 있다. Part of the answer as to why R2DBC was created is the need for a non-blocking application stack to handle concurrency with a small number of threads and scale with fewer hardware resources. This need cannot be satisfied by reusing s..
들어가기 전에 이번 글의 목적은 프로토콜 버퍼와 JSON 그리고 gRPC와 HTTP를 비교하는 것이다. 프로토콜 버퍼가 메시지를 어떻게 경량화하는지는 프로토콜 버퍼 원리을 읽기 바란다. gRPC와 HTTP가 어떻게 다른지 알고 싶다면 gRPC vs HTTP를 확인하기 바란다. 테스트로 사용할 메시지 정의 사용자 목록을 조회하는 API로 비교를 해보자. 새로운 rpc와 message를 정의한다. syntax = "proto3"; package me.dgahn.account.v1; import "me/dgahn/account/v1/SignUpV1.proto"; import "me/dgahn/account/v1/GetProfileStreamV1.proto"; import "me/dgahn/account/v1/..