본문 바로가기

프로그래밍248

[gRPC + java or kotlin] gRPC를 직접 구현재보자 - 공통 모델편 안녕하세요. 오늘부터는 gRPC를 직접 구현해보는 시간을 가져보도록 하겠습니다. 총 3개의 챕터로 진행될 예정이며 이번 포스팅은 공통 모델, 서버, 클라이언트 편으로 나누어서 진행하려고 합니다. 오늘은 protocol buffer를 이용해서 java에서 공통된 모델을 만드는 과정을 보도록 하겠습니다. IDL(Interface Defintion Language) gRPC는 Interface를 먼저 정의해야한는 언어라고 말씀드렸습니다. 이부분에 대해서는 이전 시간에 [gRPC] protocol buffer3를 실제로 사용해보자 포스팅을 참고하시면 좀 더 자세한 내용을 알 수 있습니다. 오늘 사용할 protocol buffer 파일은 아래와 같습니다. 각 라인의 설명은 코드에 달아두었습니다. 위 링크에서 pr.. 2021. 7. 31.
[kotlin + Spring] 코틀린, Spring Boot 환경에서 JPA 사용하기, plugin과 함께 안녕하세요. 오늘은 코틀린 그리고 Spring Boot 환경에서 JPA를 사용하는 방법에 대해서 알아보도록 하겠습니다. 환경 JDK 버전 : 1.8.0.292 kotlin 버전 : 1.4.32 spring boot 버전 : 2.4.5 gradle 버전 : 6.8.3 intellij 버전 : 2021.1.1 프로젝트 시작하기 처음에 프로젝트를 시작하는 방법과 기본적인 gradle kotlin dsl의 설정에 대해서는 이전 포스팅에서 자세히 다루었습니다. 참고해주시기 바랍니다. [kotlin + Spring] 코틀린 환경에서 Spring Boot 사용하기 gradle kotlin dsl 설정 먼저 gradle kotlin dsl 설정을 하는 법부터 알아보도록 하겠습니다. gradle kotlin dsl 설정.. 2021. 7. 30.
[gRPC] protocol buffer3를 실제로 사용해보자 안녕하세요. 오늘은 gRPC의 2번째 시간입니다. 오늘은 gRPC에서 사용하는 IDL(Interface Defintion Language)인 protocol buffer을 실제로 사용해보도록 하겠습니다. 기본 프로토콜 버퍼(protocol buffer)는 .proto의 확장자를 파일명으로 가집니다. 그리고 내부의 기본적인 구성은 아래와 같습니다. syntax = "proto3"; message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3; } 위의 구성을 통해 알 수 있는 내용을 보면 아래와 같습니다. 첫 라인에는 syntax로 proto3를 사용한다고 명시해줍니다. 명시하지않으면 기본 값으로 prot.. 2021. 7. 25.
[kotlin + Spring] 코틀린 환경에서 Spring Boot 사용하기 우리가 자바를 사용하는 이유는 스프링 프레임워크가 있기 때문이다라는 말이 있을 정도로 자바 언어를 사용하는 유저에게 스프링은 정말 없어서는 안될 존재이기도 합니다. 최근 코틀린이 자바유저들의 관심을 받기 시작한것도 물론 언어적으로 좀 더 실용적이라는 관점도 있지만 스프링을 사용할 수 있기때문에 진입장벽이 낮게 여겨지는 이유도 있을것이라고 봅니다. 그런이유로, 오늘은 코틀린 환경에서 스프링 프레임워크를 사용해보도록 하겠습니다. 환경 오늘 프로젝트는 아래의 환경을 기반으로 이루어집니다. 만약 동일하게 따라했으나 오류가 난다면 버전문제일 수 있으니 확인해주시기 바랍니다. JDK 버전 : 1.8.0.292 kotlin 버전 : 1.4.32 spring boot 버전 : 2.4.5 gradle 버전 : 6.8.3.. 2021. 7. 25.
[gRPC] gRPC에 대해서 알아보자 - 기본 컨셉편 안녕하세요. 오늘은 gRPC에 대해서 알아보는 시간을 가져보도록 하겠습니다. gRPC 개요 gRPC는 HTTP/2를 기반으로 Protocol Buffers로 정의하며 통신시 바이트 스트림으로 통신하게 됩니다. 따라서 Json 기반으로 통신하는 Rest API 보다 더 가볍습니다. 또한 gRPC는 HTTP/2 기반이기 때문에 하나의 채널 커넥션을 맺고 그 커넥션을 통해서 동시에 메시지를 보내고 처리할 수 있습니다. 이런 이유로 전체적인 통신 속도의 향상 또한 크게 기대할 수 있습니다. ( 바이트 스트림 통신으로 인한 latency 상승은 그렇게 크지 않다고 합니다. Link 참조) 개요 gRPC는 Google Remote Procedure Calls의 약자입니다. 이름에서 알 수 있듯이 RPC의 한 종류입.. 2021. 7. 24.
[redis + Spring] Spring Data Redis를 이용한 Transaction 처리 안녕하세요. 오늘은 Java의 Spring 환경에서 Transaction을 적용해보도록 하겠습니다. 의존성 먼저 Spring에서 Redis를 사용하기 위해서 아래와 같은 의존성을 부여하도록 하겠습니다. spring-boot-starter의 버전은 본인이 사용하시는 SpringBoot 버전을 기본적으로 따라가기 때문에 버전은 따로 명시하지 않았습니다. implements("org.springframework.boot:spring-boot-starter-data-redis") 환경설정 아래는 redis와 연결하기 위한 관련된 application.yml 파일입니다. spring: redis: port: 6379 host: localhost Redis도 @Transactional을 이용해서 트랜잭션을 관리할 .. 2021. 7. 22.
[redis] 트랜잭션(Transaction) - 이론편 안녕하세요. 오늘은 redis의 트랜잭션에 대한 이론에 대해서 알아보도록 하겠습니다. 그리고 이후 포스팅에서 실제로 Spring Data Redis를 이용하여 redis의 트랜잭션을 실습해보도록 하겠습니다. 트랜잭션과 Redis 트랜잭션이란 무엇인가요 ? [데이터베이스] 트랜잭션과 격리성 포스팅에서 이전에 저는 트랜잭션에 대해서 별도 포스팅을 한적이 있습니다. 간단하게 말씀드리면 트랜잭션은 나누어지지 않는 최소한의 단위로 만들어 All Or Nothing 전략을 취할 수 있도록 해주는 단위입니다. 즉, 트랜잭션으로 묶게 되면 트랜잭션 내부에서 하나의 로직이 실패하여 오류가 나게되면 모두 취소시키며 그렇지 않으면 모두 성공시키는 것입니다. Redis는 Key / Value 형태의 NoSQL입니다. [Red.. 2021. 7. 18.
[kotlin] 코틀린 차곡차곡 - 10. 인라인(inline) 함수와 reified 키워드 안녕하세요. 오늘은 코틀린에서 인라인 함수와 reified 키워드에 대해서 알아보는 시간을 가져보도록 하겠습니다. inline function 인라인(inline) 키워든는 자바에서는 제공하지 않는 코틀린만의 키워드입니다. 이러한 인라인 키워드를 이용하여 함수를 만들고 이를 잘 활용한다면 다양한 이득을 얻을 수 있는 경우가 있습니다. 하나씩 알아보도록 하겠습니다. 람다식을 사용했을 때 무의미한 객체 생성을 예방 인라인 함수를 사용한다면 람다식을 사용했을 때 무의미한 객체 생성을 막을 수 있습니다. 무슨 의미일까요? 이를 이해하기 위해서는 kotlin의 람다식이 컴파일될때 어떻게 변하는지를 확인해봐야합니다. 아래의 예제를 보도록 하겠습니다. 아래의 코드는 함수를 파라미터로 받고 특정한 일을한 후 해당 함수.. 2021. 7. 14.
[database] 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock) 안녕하세요. 오늘은 낙관적 락과 비관적 락의 개념에 대해서 알아보는 시간을 가져보도록 하겠습니다. DB 충돌 상황을 개선할 수 있는 방법 database에 접근해서 데이터를 수정할 때 동시에 수정이 일어나 충돌이 일어날 수 있습니다. 우리는 이런 상황을 해결할 수 있도록 코딩을 진행해야합니다. 어떻게 해결할 수 있을까요 ? 첫번째, 테이블의 row에 접근시 Lock을 걸고 다른 Lock이 걸려 있지 않을 경우에만 수정을 가능하게 할 수 있습니다. 두번째, 수정할 때 내가 먼저 이 값을 수정했다고 명시하여 다른 사람이 동일한 조건으로 값을 수정할 수 없게 하는 것입니다. 비관적 락(pessimistic lock) 비관적 락은 Reeatable Read 또는 Serializable 정도의 격리성 수준을 제공.. 2021. 7. 9.
[kotlin] 코틀린 차곡차곡 - 9. 연산자 오버로딩 (Operator Overloading) 안녕하세요. 오늘은 코틀린의 연산자 오버로딩에 대해서 알아보도록 하겠습니다. 연산자 오버로딩 Java, javascript 만 사용하여 코딩을 하셨던 분들은 연산자 오버로딩이라는 개념이 생소하실 수 있습니다. 만약 C++, C#, python 등의 언어를 사용해 본적이 있으시다면 해당 언어에서도 연산자 오버로딩을 제공하기 때문에 알고 있으실 수 도 있습니다. 연산자 오버로딩이란 위키에서 객체 지향 프로그래밍에서 다형성의 특별한 경우로 다른 연산자들이 함수 연사자를 통해서 구현을 할 때를 말한다. 라고 정의되어 있습니다. 이 말인 즉슨 +, - 등 과 같은 연산자가 어떤 값과 함께 사용하느냐에 따라서 다르게 동작할 수 있도록 그것을 커스터마이징 할 수 있다는 의미입니다. java 에서도 연산자 오버로딩은 .. 2021. 7. 4.
리눅스 명령어 사용법 ( tail, head, more, less ) 안녕하세요. 어느덧 포스팅의 갯수가 172개가 되었습니다. 이번 포스팅으로 173번째를 맞이하게 됩니다. 한번 돌아봤었는데 제가 가장 먼저 썼던 포스팅이 리눅스 많이 사용하는 기본명령어 5가지 모음 라는 포스팅이었습니다. 들어가보시면 아시겠지만... 내용도 너무 대충이고.. 지금과는 많이 다른 느낌입니다. 언젠가는 한번 갱신해야지 라고 생각하고 있었는데요. 이번에 관련하여 새로운 내용을 추가하는 포스팅을 진행하고자합니다. 오늘 공유하고자 하는 포스팅은 unix 계열 terminal(unix, linux, mac 등)에서의 명령어에 대해서 알아보는 시간을 가져보고자합니다. 아래 파일은 명령어로 테스트 해볼 파일의 내부입니다. { "content": [ { "id": "com.ncsoft.lineagem19.. 2021. 7. 3.
[kotlin] 코틀린 차곡차곡 - 8. Scope Function 안녕하세요. 오늘은 코틀린 Scope Function에 대해서 알아보도록 하겠습니다. Scope Function 란 코틀린으 표준 라이브러리에서는 Scope Function을 지원하고 있습니다. Scope Fuction은 객체 컨텍스트 내에서 코드 블럭을 실행할 수 있도록 해줍니다. 즉, Scope Fuction을 이용하면 객체의 정보를 기본적으로 가지고 있는 코드 블럭을 만들어 사용할 수 있어 간결한 코딩을 가능하게 해줍니다. 아래 예제를 보시면 좀 더 이해가 되실 것입니다. 오늘 포스팅에서 사용할 클래스의 코드는 아래와 같습니다. class MappingService( private var name: String, private var age: Int ) { fun changeName(name: St.. 2021. 6. 28.