목록kotlin (5)
디지안의 개발일지
Restdocs DSL 개요 평소에 회사에서 API 문서를 작성하기 위해서는 Swagger를 사용하여 작성하였다. 그런데 최근 시작한 프로젝트에 RestDocs를 사용해야되는 일이 생겼다. 오랜만에 작성하는 RestDocs를 작성하기 위한 테스트 코드는 너무 복잡하고 직관적이지 않다는 것을 느껴 더 좋은 방법이 없을까 고민을 하였고 우연히 toss에서 소개한 Kotlin으로 DSL 만들기라는 글을 보게 되었고 코드가 공개되어 있지 않아 직접 사용하기 위해 시간을 내어 만들어 보기로 했다. DSL이란? DSL은 Domain Specific Language의 약자로 특정한 도메인을 적용하는데 특화된 컴퓨터 언어를 의미한다. 굉장히 어려워 보이는 개념 같이 보이지만 사실 개발자라면 모두 DSL를 사용하고 있다..
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/..
들어가기 전에 Kotlin + Armeria + gRPC 기본 예제에 대해서 궁금하다면 기본편을 확인하면 된다. 스트림은 왜 사용될까? 스트림이 정확하게 왜 필요한지는 잘 모른다. 다만, 경험적으로 다음과 같은 경우에 사용을 했다. 한순간에 많은 데이터를 전송하지 못하는 경우 인터넷에 동영상을 다운로드 한다고 생각해보자. 동영상의 경우 데이터가 너무 크기 때문에 파일을 한순간에 받을 수가 없다. 그렇기 때문에 일정 크기로 잘라서 여러번 다운로드 받으면 된다. 우리가 인터넷에서 다운로드를 할 때 이어 받기를 구현한다고 할 때 스트림을 이용해서 간단하게 구현할 수도 있을거라고 생각한다. 이미 만들어진 데이터를 전송하는 것이 아니라 만들어질 데이터에 대해서 전송하는 경우 예를 들어 채팅을 생각해보자. 이미 만..
들어가기 전에 Java를 주로 사용하다가 주언어를 Kotlin으로 변경한지 이제 2년이 다 되어 간다. 그 동안 공부했던 것에 대한 정리를 하고 싶다는 생각이 문득 들어 하나씩 글을 작성해보려고 한다. 오늘은 그 첫번째 글로 Kotlin + Armeria + gRPC 사용했던 것에 대해서 정리한다. 3가지는 무슨 조합인가? 별거 없다. 프로그래밍 언어로 Kotlin으로 쓰고 웹 프레임워크로 Armeria를 사용하고 프로토콜로 gRPC를 사용했다. Kotlin 구글이 안드로이드 공식 언어로 선정한 이후 나름 핫한 언어라고 생각한다. 실제로 써본 느낌으로는 Java 보다 문법이 간단하고 확장 함수, 연산자 오버라이딩, dsl등 기존 자바에서 사용할 수 없는 문법들을 사용할 수 있다는 매력적인 포인트들이 있다..