분류 전체보기 55

Repository 가볍게 관리하기

GitHub - Hyune-c/blogcode-repository-di: Repository 의존성을 가볍게 관리하기 Repository 의존성을 가볍게 관리하기. Contribute to Hyune-c/blogcode-repository-di development by creating an account on GitHub. github.com 작고 단순한 피쳐를 개발할 때는 크게 신경 쓰지 않던 것들이 공부하고 실무를 할수록 의문이 생기곤 합니다. 그중 하나인 Repository를 개발하면서 느낀 점을 기록해봅니다. 도메인 로직과 영속성 영역의 경계는 어디일까? 어떻게 하면 인적 실수를 줄이고 생산성을 높일 수 있을까? 지금의 회사에서 개발하는 애플리케이션은 B2B 성격이기에 그리드 형태의 조회 로직이..

Series/실전! 2022.08.01

토스 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

ErrorMessage를 관리하는 방법

GitHub - Hyune-c/blogcode-errormessage Contribute to Hyune-c/blogcode-errormessage development by creating an account on GitHub. github.com HTTP status code는 3자리의 코드와 설명으로 표현됩니다. 하지만 실무에서는 더 많고 다양한 종류의 에러 표현을 위해 name, code, reason을 활용하곤 합니다. 그리고 간결함과 생산성을 위해 프로젝트 내에서도 code와 reason이 직관적으로 연결되기를 기대합니다. STEP 1. Enum으로 관리하기 @Getter @RequiredArgsConstructor public enum Errorcode { NOT_EXIST_PRODUCT("..

레거시 코드 개선하기 with delegate pattern

GitHub - Hyune-c/blogcode-delegate Contribute to Hyune-c/blogcode-delegate development by creating an account on GitHub. github.com STEP 1. 개선 전 코드 https://github.com/Hyune-c/blogcode-delegate/commit/7ac445974e1fc497509813303d80151ce705ce1c AWS S3 조작을 담당하는 서비스로 개선 전 코드는 중복 코드와 확장성에 큰 단점을 가지고 있었습니다. 초기에는 연관된 로직이 적어 괜찮았지만, 그것을 감안하더라도 가독성과 확장에 취약한 코드였습니다. 그러던 중 S3 버킷 추가의 요건이 생겼습니다. STEP 2. 코드 개선 버킷..

Series/실전! 2022.06.05

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

현재 환경에 맞는 값을 가져오기 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