목록STUDY 📖 (14)
영주의 개발노트

현재 일하고 있는 도메인 특성상 Elasticsearch를 사용할 일이 많다. 이번 기회에 Elasticsearch의 주요 데이터 타입들과 타입들의 특징을 정리해보고자 한다. 자세하고 깊게 파는 것은 아니고 대략적인 내용을 정리하고자 한다. 상품 ID 필드 추가 작업 중 해당 type을 text로 지정하였고, 필터 적용을 하려면 type이 long이나 keyword 여야 한다는 리뷰를 받은 적이 있다. 정확히는 exact match 되는 document를 찾기 위해서는 keyword나 long 타입으로 인덱싱 해야 한다는 내용이었는데, 당시에는 개발하느라 수정만 하고 제대로 이해하지 못하고 넘어갔었다. 이와 같은 상황이 발생하지 않도록 ES 데이터 타입에 대해 정리해보고자 한다. 우리는 왜 데이터 타입에..

최근 코드 리뷰에서 ‘OOO인 게 좀 더 코틀린스러운 코드입니다.’라는 피드백을 받은 적이 있다. 코틀린에 대해 공부해 본 적이 없는 난 이 리뷰를 받고 아래와 같은 생각이 들었다.코틀린스럽다는 게 뭐지? 🤔코틀린이 지향하는 바를 알아야 '코틀린스럽다'는 의미를 명확하게 파악할 수 있을 것이라고 생각했다. 그러기에 이에 대해 공부해보기로 했다. 코틀린스럽다?코틀린은 기존 자바보다 더 간결하고 안전하며 직관적인 코드 작성을 목표로 설계된 언어이다. 그렇기에 '코틀린스럽다'라는 개념은 코틀린의 지향점과 주요 기능을 적극 활용하여 코드의 가독성과 효율성을 극대화하는 것을 의미한다. 코틀린스러운 코드로 나아가기 위해 코틀린의 핵심 원칙을 자바 언어와의 차이와 함께 정리해보고자 한다. 원칙 (1): 간결함과 ..

gRPC와 Protocol Buffers에 대해 알아보자 (1)현회사는 gRPC를 통해 내부 마이크로 서비스 간의 통신을 하고 있다. gRPC라는 것을 처음 들어본 나에게는 굉장히 생소한 개념이라 나와 같이 처음 접하는 사람들에게 도움이 되었으면 하는 바람0juuu.tistory.com지난번에 gRPC에 대해 알아보았다. gRPC는 원격 프로시저 호출 프레임워크로, 서로 다른 서비스들이 통신하기 편리하도록 만들어주는 도구이다. gRPC는 서비스 간 데이터를 전송할 때 Protocol Buffers(이하, ProtoBuf)라는 데이터 포맷을 사용한다. 오늘 다뤄볼 내용은 데이터 포맷인 Protol Buffers이다. ProtoBuf 란 무엇인가구글이 만든 데이터 직렬화 포맷으로, 데이터를 효율적이고 빠르게..

현회사는 gRPC를 통해 내부 마이크로 서비스 간의 통신을 하고 있다. gRPC라는 것을 처음 들어본 나에게는 굉장히 생소한 개념이라 나와 같이 처음 접하는 사람들에게 도움이 되었으면 하는 바람에 이 글을 작성하고자 한다. 이 글에서는 gRPC에 대해 자세히 알아보고, 이후 Protocol Buffer에 대해 알아볼 것이다. gRPC란 무엇인가? 를 알기 전에 🚥🖐️구글에서 개발한 오픈소스 RPC이다. 여기서 잠깐, RPC란 무엇인지 짚고 넘어가자. 많이들 알 수 있지만 RPC가 무엇을 하는지 알아야 gRPC에 대해서도 이해하기 수월할 것이다. 나처럼 RPC를 모르는 사람에게 아래 내용을 바친다. RPC란?RPC는 Remote Procedure Call로 원격 프로시저 호출을 말한다. 네트워크를 통..

🏦 기술 부채 상환 | git merge 와 rebase에 대해 알아보자최근 두고두고 쌓아둔 업보가 거대한 눈덩이로 변해 나를 덮쳤었다. 이 경험을 소개하며 그동안 쌓여온 git에 대한 기술 부채를 조금 갚아보려 한다. mac 세팅 중 사내 문서를 참고하여 아래 명령0juuu.tistory.com지난번에 merge와 rebase 개념에 대해 알아보았다. 이번에는 두 방식의 차이와 내가 겪었던 문제에 대한 원인과 어떻게 해결할 수 있을지에 대해 이야기해보겠다.Mergemerge는 두 개의 브랜치와 합칠 두 브랜치의 공통 조상 브랜치를 기준으로 합치게 된다. 이 과정에서 새로운 병합 커밋이 생성되며, 두 브랜치의 히스토리는 그대로 유지된다.특징 : 브랜치의 전체적인 히스토리가 보존되고, 합쳐지는 이력이 커..

최근 두고두고 쌓아둔 업보가 거대한 눈덩이로 변해 나를 덮쳤었다. 이 경험을 소개하며 그동안 쌓여온 git에 대한 기술 부채를 조금 갚아보려 한다. mac 세팅 중 사내 문서를 참고하여 아래 명령어로 git 세팅을 한 적이 있다. git config --global pull.rebase true한 달이 지난 후 develop 브랜치에서 개발 브랜치를 생성한 후 작업 내용을 반영하고 리뷰를 받았다. 리뷰를 반영하던 중 현 develop 브랜치에는 새로 개발되어 반영되어 있으나 내 개발 브랜치에는 해당 내용이 없어 develop 브랜치의 최신화된 내용을 내 브랜치에 반영해야 하는 상황이었다. 기존에는 pull.rebase를 false로 기본 설정해놓았기에 여느 때와 다름없이 아래 명령어를 실행하였다. 이렇게..

글을 시작하기 전, 개인적인 이야기를 먼저 공유하고자 한다. 최근 이직을 하고 검색 도메인을 다루는 팀에 들어가게 되었다.새로운 회사에 입사했다는 행복도 잠시, 업무라는 큰 산에 맞닥뜨렸다. 기존에는 주문 개발을 해왔던 터라 검색 개발은 나에게 있어 미지의 영역이었고, 어떠한 것을 개발하는지 감이 오질 않았다. 팀 내 문서와 구글을 이용하여 검색개발에 대해 찾아보다 보니 어렴풋이 갈래가 잡히는 듯하여 기존 도메인인 주문 개발과 검색 개발을 비교하고, 내가 느꼈던 변화와 함께 '이런 것에 집중하면 좋을 것 같다.'는 포인트에 대한 글을 작성해보고자 한다. 검색 개발과 주문 개발 비교1. 데이터주문 쪽에서는 트랜잭션이 굉장히 중요했다. 시스템 등의 오류로 주문 쪽에는 데이터가 저장되었는데 결제 쪽에는 데이..

개요 이전에 소개했던 팀 배치 프로젝트 최신화 과정에서 Spring Boot 버전 업그레이드를 고민하고 있다고 언급하였다. Java 17 업그레이드를 마무리하여 Spring Boot와 Spring Batch 버전도 업그레이드하기로 의사결정하였다. 👶 배치 프로젝트 최신화 | 자바 어떤 버전을 선택해야할까? (Java 17 vs Java 21) 신입 온보딩 프로젝트로 팀 배치 서버 구축을 하였다. Java 7로 이루어진 전사 배치에서 벗어나 Spring Batch를 활용한 팀 배치 서버를 구축하는 것이 목표였다. 구축 당시, Java 11, Spring Boot 2.x, Spring Ba 0juuu.tistory.com 사실, Java 업그레이드처럼 뚝딱 될 줄 알고 공식문서를 읽지 않고 일정 산정을 하였..

지난번에 예고했던 대로 제네릭의 한정된 타입 매개변수와 와일드카드에 다루며 제네릭 시리즈를 마무리하겠다. 🏦 기술 부채 정산 | 제네릭 톺아보기(2): 유연한 코딩을 위한 두 걸음지난번에 알아봤던 제네릭 기본 지식에 이어 좀 더 알아보겠다. 🏦 기술 부채 정산 | 제네릭 톺아보기(1): 유연한 코딩을 위한 한 걸음 김영한님의 '스프링 핵심 원리 - 고급편' 강의 예제 코드에0juuu.tistory.com 해당 글을 통해 얻어갈 수 있는 내용한정된 타입 매개변수와일드카드 우리는 앞서 E, T 등 타입 매개변수에 대해 알게 되었다. 하지만, 그간의 정보로는 ? extends E 라는 코드를 이해하기 어렵다. 제대로 이해하려면 한정된 타입 매개변수와 와일드카드라는 개념을 알아야 한다. 한정된 타입 매개..

지난번에 알아봤던 제네릭 기본 지식에 이어 좀 더 알아보겠다. 🏦 기술 부채 정산 | 제네릭 톺아보기(1): 유연한 코딩을 위한 한 걸음김영한님의 '스프링 핵심 원리 - 고급편' 강의 예제 코드에서 제네릭이 등장해 순간 멈칫하여 해당 글을 작성하고자 한다. 필자는 자바를 약 4년간 사용하였음에도 제네릭에 대해 잘 모른다. 지0juuu.tistory.com해당 글을 통해 얻어갈 수 있는 내용제네릭 메서드 제네릭 메서드이전까지 제네릭 클래스에 대해 알아보았다. 경각심을 줬던 코드 중 하단의 코드를 보면 일반 클래스의 메서드에서도 타입 매개 변수를 사용하는 걸 볼 수 있다. 이렇게 타입 매개변수를 하나 이상 가지는 메서드를 제네릭 메서드라고 한다. 이 경우 타입 매개변수의 범위가 메서드 내부로 제한된다. ..