Study 20

Spring Cloud OpenFeign + WireMock Test

Netflix OSS 에서 시작한 Feign 은 강력한 기능과 편의성으로 Spring Cloud 에 OpenFeign 으로 편입되었습니다. OpenFeign 은 다음과 같은 장점을 가지고 있습니다. 외부 연동 로직을 간소화 시킵니다. MSA 구성에 큰 도움을 줍니다. SAGA 패턴, 마이크로서비스 통신 탄력성 등 리액티브 시스템의 특성을 만족시키는데 유용한 패턴을 제공합니다. OpenFeign 은 이미 널리 알려진 기술이기에 좋은 글들이 많지만 Kotlin + Test 로 작성된 글은 별로 없었습니다. 그래서 외부 연동을 준비하며 학습한 OpenFeign 의 기능을 구현과 테스트로 설명합니다. GitHub - Hyune-s-lab/openfeign-spring-tutorial: openfeign 연습하기..

Study 2023.02.05

토스 SLASH 22 를 보고..

토스 SLASH 22를 보고 관심 있는 주제인 Server/DevOps 위주로 정리했습니다. 소위 말하는 네카라쿠배의 컨퍼런스를 보면서 느끼는 것 중 하나는 대용량/동시성 처리를 위해서는 아키텍처와 생각의 패러다임 전환이 필요하고, 인프라의 재설계 및 운영 방법에 대한 고민도 필수적이라는 것입니다. 그리고 필연적으로 높은 운영 난이도가 요구되기에, 과도기의 회사에서는 어디까지를 트레이드 오프 해야 할지 항상 고민됩니다. 지속 성장 가능한 코드를 만들어가는 방법 패키지를 잘 관리함으로써 코드의 응집성을 높일 수 있습니다. import를 정리하는 것 또한 클린 코드의 영역입니다. 레이어 참조는 한 방향으로 이루어져야 하며, 레이어 역류와 레이어 건너뛰기는 금지됩니다. 멀티 모듈을 통해 레이어를 격리시킬 수 ..

Study 2022.07.11

INSERT INTO SELECT SHARED LOCK은 레코드 락으로 작동하는가? with MySql

회사에서 수기 작업 간 발생한 이슈를 해결하면서 회사 시니어님이 공유해주신 자료를 보고 이론으로 공부만 했던 것이 문득 궁금해져 테스트해 본 기록을 남깁니다. 환경 MySql 8.0 Datagrip Transaction Mode - Manual 테스트 1 목표 Table 단위의 LOCK이 걸리는가? 아니면 ROW 단위의 LOCK이 걸리는가? - 레코드 락 특정 ROW에만 SHARED LOCK이 걸리고, 다른 ROW의 CRUD에는 영향이 없는가? SHARED LOCK - 읽기 가능. 수정/삭제 불가 초기 세팅 create table test1 ( col1 int primary key auto_increment, col2 char(10) ); create table test2 select * from tes..

Study 2022.07.06

for vs stream

이전에 공부했던 내용이지만 잘 설명해준 유튜브를 보고 내용을 정리해 봅니다. 기본 정보 for, foreach 구체적인 로직이 외부에 노출되는 외부 반복의 형태입니다. for문은 java 1, foreach문은 java 5부터 등장했습니다. foreach문은 컴파일 시 for문으로 변환됩니다. stream 구체적인 로직이 외부에 노출되지 않는 내부 반복의 형태입니다. 함수형 프로그래밍 패러다임이 도입된 java 8부터 등장했습니다. 차이 익숙함의 차이에서 오는 가독성의 호불호가 있습니다. 디버깅 난이도의 차이가 있습니다. for 에러 발생 위치가 바로 노출됩니다. stream 지연 연산을 통해 실행되기에 에러 발생 시 위치를 추적해야 합니다. 병렬 처리 구현의 차이가 있습니다. for 구체적인 로직을 나..

Study 2022.06.01

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

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

분산 트랜잭션 관리는 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

'수십억건에서 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