2024년 회고
·
성장이야기/주간회고
2024년의 키워드는 '경험'이었다.2023년 4월에 개발자로 커리어를 시작하며 2023년은 회사에 적응하며 보냈었고, 차츰 적응이 되기 시작했던 2024년은 다양한 경험을 하기 위해 이것저것 시도를 많이 해보았다.회고를 통해 이번 연도에 경험했던 것들을 다시 돌아보며 정리해보려고 한다. 우당탕탕 사이드 프로젝트우선 2024년 1월에는 사이드 프로젝트를 "비사이드"라는 플랫폼을 통해 시작했다."비사이드"는 사이드 프로젝트 모임 플랫폼인데, 14주간 개발자, 디자이너, 기획자들과 함께 한 팀을 이루어 프로젝트를 출시하는 프로그램에 참여했었다. (다시 찾아보니 지금은 사라지고 10일 만에 끝내는 포텐데이라는 프로그램만 존재한다.)결과부터 말하면 프로젝트는 출시조차 하지 못하게 되었다.기획, 디자인, 개발까지..
Kafka Streams, 코파티셔닝(co-partitioning)을 모르면 벌어지는 KStream-KTable Join 대참사
·
성장이야기/TIL
Kafka Streams를 활용하여 실시간 피드 제공 기능을 개발하는 도중 KStream-KTable 간 조인 시 발생했던 문제 상황을 공유하고자 합니다.글에서 제공되는 예시 코드는 실제로 동작하지 않는 pseudo code입니다.  현재 상황코스피/코스닥에 상장된 기업들의 주가 정보(시가/고가/종가/현재가 등등)을 5초마다 호출하여 파티션이 5개인 토픽에 저장합니다.오전 6시에 이전 영업일의 코스피/코스닥에 상장된 기업들의 valuation 값(per, pbr, psr 등등)들이 저장된 엑셀 데이터를 파싱하여 DB 저장 및 파티션이 1개인 토픽에 저장합니다. 두 토픽에 저장된 데이터를 이용하여 각 기업의 실시간 주가 정보를 이용하여 valuation을 계산하여 오전 6시에 엑셀 데이터를 파싱하여 토픽에..
자바에서의 CRTP(Curiously Recurring Template Pattern)
·
성장이야기/TIL
최근 빌더 패턴을 구현하다 CRTP(Curiously Recurring Template Pattern) 패턴을 알게 되었는데, 처음 접하는 패턴이라는 점과 제네릭을 통해 구현된 다소 복잡해 보이는 패턴이라 공부하게 되었습니다. 이번 글을 통해 CRTP 패턴이 무엇인지와 장단점에 대해 소개드립니다. CRTP란?CRTP는 원래 C++에서 주로 사용되는 패턴으로 클래스가 자신의 서브클래스 타입을 제네릭 매개변수로 사용하는 디자인 패턴입니다. 자바에서는 주로 빌더 패턴에서 자식 클래스의 타입을 부모 클래스에 전달하여 메서드 체이닝 시 자식 클래스의 메서드를 사용할 수 있게 합니다. (제네릭을 이용한 재귀적 타입 제한) 즉, 빌더 패턴에서 주로 이루어지는 메서드 체이닝에서 자식 클래스 타입을 유지함으로 컴파일 시..
주식 시황 피드의 종가 오류 해결기(데이터 일관성 개선)
·
성장이야기/TIL
항상 버그는 퇴근하고 발생하는 것 같은 기분이 듭니다.  주식 시장이 마감되고 코스피/코스닥에 상장된 종목들의 종가 및 종목 수익률을 계산하여 당일 시황의 전반적인 상황을 피드로 생성하여 제공하는 기능을 개발하여 개발 서버에 배포된 상태입니다. 그런데 당일 코스피/코스닥 종목들의 주가 변동률이 잘못 계산되어 피드가 생성되는 버그가 발생하였습니다.문제의 원인을 파악하기 전 기존 피드를 생성하는 프로세스를 확인해 보겠습니다. 피드 생성 프로세스현재 저희 서비스는 MSA 구조로 설계되어 있고 피드를 생성하는 데는 3개 서버의 의존성이 있습니다.코스콤에서 코스피/코스닥에 상장된 종목들의 주가 정보를 호출하여 DB에 저장하는 서버당일 시황 관련 정보를 수집하고 요약하여 생성하는 서버 (ML팀)피드를 생성하는 서버..
Confluent Schema Reference 관련 문제
·
성장이야기/TIL
문제기존 Protobuf 포맷으로 정의된 스키마(Version 1)에 새로운 inner message를 생성하여 스키마 버전(Version 2) 업을 하는 경우 이전 버전 스키마가 새로 생성한 inner message 를 참조하지 못하여 스키마 업그레이드를 하지 못하는 문제가 발생. 해결스키마에 inner message를 생성하는 방식이 아닌 별도의 schema를 생성하여 수정할 스키마에서 이를 참조하는 방식으로 해결 + Terraform Provider로 Confluent Schema Reference 적용 시 발생한 문제A스키마에서 B스키마를 참조할 경우 참조할 스키마(B)가 먼저 생성이 되어 있어야 한다."A" 스키마에서 새로운 메시지인 "B" 스키마를 참조하려고 할 때, "B" 스키마 생성과, "..
[Java] List.of()와 Arrays.asList() 차이
·
Java
문제List에 데이터를 추가할 때, null값 그 자체를 추가해야 하는데 NPE 에러가 발생했다.List.of() 메서드를 이용해 List를 만들어주었는데 List.of() 메서드는 null 요소를 허용하지 않기 때문에 발생한 문제였다. 해결해결은 간단히 List.of() 메서드 대신 Arrays.asList() 메서드를 사용하는것으로 변경하여 문제를 해결 할 수 있었는데, 이 둘의 차이가 무엇인지 알아보자. List.of() vs Arrays.asList()List.of()우선 List.of() 메서드는 자바9 버전 이후에 도입된 메서드로 파라미터로 전달받은 값들을 불변 리스트로 만드는 역할을 한다. 그리고 요소 하나하나 null인지 Objects.requireNonNull()메서드로 검사를 한다. 그..