본문 바로가기

기술 블로그 (Tech Blog)

(75)
repository 설계 Repository 패턴과 QueryDSL 기반 동적 쿼리 구현을 결합했습니다.유지보수성: 기본 CRUD와 커스텀 로직을 분리.확장성: 새로운 기능 추가가 용이.성능 최적화: 페이징과 카운트 쿼리를 분리하여 성능 최적화.타입 안정성: QueryDSL을 사용해 컴파일 타임 검증 가능.DDD 원칙 준수: 도메인 계층과 인프라스트럭처 계층의 책임 분리. Repository 구조 HubRepository (도메인 인터페이스):DDD에서 "도메인 계층"에 속하며, 도메인 요구사항에 따른 저장소 인터페이스를 정의.핵심 비즈니스 로직과 연계된 메서드를 제공 (e.g., findByHubIdAndIsDeletedFalse).HubJpaRepository (구현체):Spring Data JPA를 사용하여 기본적인 CRU..
singleton - Problem&Solve 의문의 시작디자인 패턴을 공부하면서 의문이 들었다.https://cutewonny.tistory.com/entry/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4singleton.. 객체를 재사용한다는 것인데...초기화가 제대로 되지 않으면, 재사용할때 문제가 생기는거 아닐까?근데 왜 싱글톤을 쓰는거지? 위험하게? 어떻게 해야 초기화를 제대로 할 수 있을까?그래도 객체를 미리 만들어 놓고 사용하는건꽤나 많은 곳에서 쓰이고 있으니 장점이 있다는 건데.. singleton pattern에 대한 의문, 활용 사례sigleton pattern을 사용한다는 것은 객체를 한 번만 생성하고, 이를 재사용한다는 뜻입니다.회사에서나 프로젝트에서 흔히 사용되는 패턴이지만, 이를 공부하..
자료구조 정리 자료구조자료를 정리하는 여러가지 구조 해야할 일 == 리스트물건을 쌓아둠, 냉장고에 콜라를 넣은 것 == 스택티켓 줄서기 ==큐영어사전 == 사전, 탐색구조(이진트리)지도 == 그래프조직도 == 트리 알고리즘주어진 문제를 처리하는 절차 프로그램은 논리적으로 자료구조와 알고리즘으로 구성되어 있다. 시험 성적을 읽어서 최고 점수를 구하는 프로그램외부에서 점수가 입력되면 이 점수들을 처리하기 좋게끔 프로그램 내부의 어딘가에 저장시켜야 한다. 가장 쉽게 사용할 수 있는 것이 배열이다. 배열에 점수를 저장하면 바로 배열이 자료를 저장하는 구조 == 자료 구조 다음으로 필요한 것은 배열에 저장된 점수들 중에서 가장 큰 점수를 찾는 절차이다. 변수를 하나 만들고 배열의 첫 번째 요소 값을 변수에 대입한 다음, 이 변..
알고리즘 문제풀이 project 구상 어떻게하면 코딩테스트 문제를 풀때, 간단한 환경에서, 코딩테스트에만 집중할 수있는 Tool를 만들지? 어떻게 하면 Solution 클래스를 한번만 만들 수 있을까?어떻게 하면 반복되는 코드를 줄일 수 있을까?어떻게 하면 이미 풀어버린 클래스들을 메모리에 띄우지 않을까?(왜냐면 풀어버린 문제들은 이미 코드가 누적되어있기 때문에, method 구간에 올라갈 것이다) 알고리즘 문제를 풀 때매번 똑같은 함수를 복붙해서 날짜별로 구현을 했는데,생각해보니, 중복을 줄이면 좋지 않을까? 라는 생각이 러닝머신 위에서 들었다. 구 알고리즘 브랜치https://github.com/dev-wonny/algorism 문제점- 같은 코드를 반복- 문제를 풀 때마다, 환경을 세팅해야해서 시간을 뺏김- 이상한 패키지 구조(푼 날짜..
4대천왕👑이 정리한 객체 정의서(Gof 디자인패턴) java의 Iterator 를 공부하는데 무릎을 탁치게 되었다.그런데... Iterator 패턴이 있다고 한다..있었던가.. 그럼 간단하게 패턴을 정리해볼까?  사담더보기 확실히 책으로 읽을때보다 gpt를 사용해서 디자인패턴으로 정리해서 코드로 이해하는게와 닿는다.... 개발자에게는 gpt는 선생님... 책으로 읽다보면 깊게 깊게 파다보니요약이 잘 되지 않는다. 그렇게 저는 '또 길을 잃었다.(딴딴딴)👠👠👠'    이미지 출처: https://www.youtube.com/watch?v=An7kqZ5D7j8&list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2y_w_jZ Gof 뭐여?-> 4대천왕👑(GoF)이 정리한 패턴! Gang of Four(4명의 갱)객체지향 설계 문제를 23개 디자인..
Coopang 프로젝트: 멀티 모듈 구조와 역할 정리 Coopang 프로젝트: 멀티 모듈 구조와 역할 정리프로젝트 개요Coopang 프로젝트는 각 기능별로 모듈을 분리하여 유지보수성과 확장성을 극대화한 멀티 모듈 구조를 채택했습니다.각 모듈은 독립적인 기능을 제공하면서도, 다른 모듈과 상호작용하여 전체 애플리케이션을 유기적으로 구성합니다.  프로젝트 구조coopang├── BOOT (Server)│ ├── gateway│ ├── user│ ├── hub│ ├── product│ ├── order│ ├── delivery│ └── ainoti├── CLOUD (System)│ └── eureka├── DATA│ ├── api-data│ └── core-data├── INFRA (Integration)│ ├── auth-..
Coopang 프로젝트: Stateless 구조와 코레오그래피 기반 SAGA 패턴 적용 사례Stateless 구조코레오그래피 기반 SAGA 패턴 적용 사례 Coopang 프로젝트에서는 Stateless 구조와 코레오그래피 기반 SAGA 패턴을 활용하여, 마이크로서비스 간의 데이터 일관성과 트랜잭션 관리를 효과적으로 구현했습니다. 이번 글에서는 프로젝트에서 적용한 설계 흐름과 주요 특징을 소개합니다. https://github.com/dev-wonny/coopang/issues/52#issuecomment-2401670930 [시나리오] 수정사항 · Issue #52 · dev-wonny/coopang github.comGit Project에서 stateless 시나리오 과정을 자세히 볼 수 있습니다.Stateless 구조Stateless는 서버가 요청 간의 상태를 유지하지 않는 구조를 의미합니다.각 요청은 독립적이어야 하며, 필요한 모든 정보를 클라이언트에..
사가패턴은 왜 사가라고 하는걸까? 🍎아님 주말 모각코에서 프론트 개발자에게 주문/결제 페이지를 만들어봐! 문제를 내고,요즘 스타일을 알려주다가(요즘은 주문과 결제를 한 페이지에서 함)MSA와 트랜잭션 결국 사가패턴까지 나오게 되서 설명해주는데 '왜 사과패턴이라고 하나요?'라며 궁금해했다.(사실 프론트개발자는 🍎 사과로 들어서 궁금해했다) 그래서 처음에 나는 4개의 queue가 떠올라서 4가 패턴인건가?라고 생각했다.    내가 학습한 과정에서 SAGA Pattern은 rabbitMQ로 이벤트 처리를 할때 주문을 하게 되면 상품을 감소 시키고, 결제를 완료하는 이벤트를 보내는 로직을 간단하게 연습해봤다.SAGA Pattern을 공부할 때는 에러 처리를 추가 해줘서 배운 경험이 있어서error처리를 위한 queue가 추가되어서 결국 총 queue..