전체 글 55

Entity의 field type은 무엇이 적합할까?

@Entity public class Accommodation { @Id private Long id; private String locationName; private String description; private String imagePath; private int pricePerDay; // primitive type? private int positionX; private int positionY; } 최근 리뷰를 한 코드 중 일부입니다. 저는 entity의 필드는 항상 wrapper type으로만 사용했기에 이 코드를 보았을 때 어색함을 느꼈습니다. 하지만 근거 있는 설득을 하기 위해 관련 자료를 조사했고 그 기록을 남겨봅니다. ID The primary key, or the property..

Study 2022.05.25

현재 환경에 맞는 값을 가져오기 with enum

로직은 같지만 개발과 운영에서 필요한 값이 다른 경우가 있는데, 대표적으로 url이 있습니다. 지금의 회사에서는 enum을 통해 관리하고 있지만, 그 방식이 enum 스럽지 않다고 생각하고 있었습니다. 그러던 중 기존 test - dev - stage - prod로 구성되었던 환경이 dev - qa - stage - prod로 변경되었고, 이 과정에서 코드를 개선한 내용을 기록해 봅니다. Before 환경 변수 enum public enum DeploymentEnvironment { DEV, QA, STAGE, PROD; private static final String AUTH_SERVER_NAME = Optional.ofNullable(System.getenv("AUTH_SERVER_NAME")) ...

분산 트랜잭션 설계하기 (초급)

분산 트랜잭션 관리는 MSA 운영의 핵심 중 하나로 설계도 어렵지만 제반되는 기술도 러닝 커브가 상당히 높습니다. 이와 관련되어 실무에서 경험해본 내용과 F-Lab의 twitch-clone 프로젝트를 진행하면서 고민해본 기록을 남겨봅니다. 2PC 패턴과 (2 Phase Commit) SAGA 패턴에 대한 배경 지식이 있다면 글을 이해하는데 더 좋습니다. 마이크로서비스 분산 트랜잭션 관리 (2Phase Commit) 개요 앞선 포스팅에서 마이크로서비스 분산DB 환경에서 고려되어야 할 사항에 대해 살펴보았다. 자세한 내용은 아래 포스팅을 참고하기 바란다. 마이크로서비스 Schema 분리 설계 (테이블 분리, waspro.tistory.com 마이크로서비스 분산 트랜잭션 관리 (Saga Pattern) 개요 ..

Study 2022.05.09

'AWS와 토스페이먼츠를 통해 E-Commerce 스타트업 혁신하기' 웨비나 후기

(22.04.27) 웨비나에서 소개한 기술 중 중요하거나 당사에 적합하다고 생각하는 내용을 회사 내부에 소개하는 글을 작성했습니다. 이 중 일부 민감 항목을 제외한 간단한 후기를 작성하며, 일부 내용은 재직 중인 회사의 시선에서 작성되었습니다. 저는 이전 경력으로 VAN과 페이의 운영 업무를 했었습니다. 그러다 보니 자연스럽게 결제 서비스의 선두 주자인 토스에 관심이 있었고, 특히 브랜드 페이는 웨비나 전부터 긍정적으로 생각하는 모델 중 하나였습니다. 그러던 중 AWS의 주관으로 무신사에 브랜드 페이를 적용한 대표 사례를 소개하는 웨비나를 들을 수 있는 기회를 얻었고, 이미 큰 트래픽을 처리하는 회사의 설계를 보며 최근 설계하고 있는 당사의 MSA에도 큰 영감을 얻었기에 내용을 기록해봅니다. OO페이, ..

Study 2022.04.29

대량 데이터 조회와 유지보수는 어떻게 해야될까?

GC에 익숙한 사람이라면 모두 Generational GC가 최고라고 이야기합니다. 'generational hypothesis는 대부분 상황에서 Young Object는 Old Object 보다 죽을 가능성이 클 것으로 내다본다.' 2008년에는 맞는 말이었죠. 하지만 지금은 설득력이 떨어집니다. Red Hat 개발자 Christine Flood - DevNation 2016 中 기술의 발전과 시장의 변화에 따라 과거에는 옳았던 것이 지금은 재해석되고 있습니다. 클라우드의 도입으로 어려웠던 확장/고가용의 기술이 쉬워지고, 하드웨어의 비용이 낮아진 것이 하나의 예입니다. 회사의 성장에 따라 다뤄야 하는 데이터는 기하급수적으로 늘어나고 기존의 방법으로는 해결하기 힘든 순간이 옵니다. 지금 다니는 회사에도 ..

Study 2022.04.02

마이크로 서비스도 리소스 동기화가 필요할까?

이번에 회사 최초로 시작하는 MSA 개발의 첫 삽을 제가 뜨게 되었습니다! 사실 이 개발을 하면서 제일 큰 걱정은 MSA 책 한 개도 안 봤는데 내가 설계해도 되나......... 였습니다. 설상가상으로 설계기간도 충분하지 못했죠. 하지만 틈틈이 읽은 서적과 블로그들이 큰 도움이 되었고, 부족하지만 제가 설계하고 개발한 기록을 공유합니다. 개발한 내용 기본 구성 오래되고 사용자가 많은 플랫폼 B와 비교적 최근에 개발되었지만 사용자가 적은 플랫폼 P가 존재합니다. 서로 다른 환경에서 운영되고 있던 플랫폼의 각 DB와 회원 등록/수정 로직이 통합 중에도 유지되어야 합니다. 구현된 언어와 프레임워크도 달랐고, 통합 대상인 회원의 식별자와 업무 내용도 미묘하게 달랐습니다. 이해를 돕기 위해 업무 내용의 일부를 ..

Study 2022.03.04

Custom LocalDateUtils 리팩토링

이번에 회사 업무의 일부를 확장/분리하는 업무를 맡았습니다. 프로젝트의 세팅부터 해야 되는 작업이었기에 제가 주도적으로 개발할 수 있었는데요. 이 과정에서 작업한 Legacy의 공통 Util 리팩토링의 일부를 기록해봅니다. AS-IS의 문제점 // 0. 이 프로젝트에 의존적인 로직이 존재합니다. // ex) 입력 값이 파싱할 수 없는 isEmpty() 라면 빈 값을 반환. (에러가 아니라) @UtilityClass public class LocalDateUtils { // 1. LOCAL_DATE_FORMAT_WITH_HYPHEN, LOCAL_DATE_FORMAT 이 String 변수로 존재합니다. public static final String LOCAL_DATE_FORMAT_WITH_HYPHEN = ..

Series/실전! 2022.01.04

'수십억건에서 QUERYDSL 사용하기' 를 보고..

기술 영상의 요약이나 후기는 웬만하면 작성하지 않는 편입니다. 하지만 우아콘 2020의 이동욱 님 발표 영상은 하나하나가 너무나도 실무적이고 주옥같은 내용들 뿐이라서 꼭 기억하고 싶은 마음에 정리해봅니다. [우아콘2020] 수십억건에서 QUERYDSL 사용하기 테스트 환경 OpenJDK 1. 8.0_252 Querydls_JPA 4.2.1 AWS Aurora MySQL 5.6 1.19.6 1. 워밍업 extends / implements 사용하지 않기 발표 자료에는 없지만 JPAQueryFactory를 Bean으로 설정해주는 작업이 필요합니다. @Configuration public class QueryDslConfig { @PersistenceContext private EntityManager ent..

Study 2021.12.19