전체 글
-
이코에코(Eco²) Clean Architecture #12: Locaton 도메인 마이그레이션이코에코(Eco²)/Clean Architecture Migration 2026. 1. 5. 02:10
domains/location Layered → apps/location Clean Architecture 전환AI Assistant: Claude Opus 4.5 (Anthropic)작업 일자: 2026-01-051. 마이그레이션 배경1.1 기존 구조 (domains/location)domains/location/├── api/v1/endpoints/│ ├── location.py # HTTP 엔드포인트│ └── metrics.py├── services/│ ├── location.py # ~300줄, 조회 + 변환 + 정책│ ├── category_classifier.py│ └── zoom_policy.py├── repositories/│ └── n..
-
이코에코(Eco²) Clean Architecture #11: Character 도메인 마이그레이션이코에코(Eco²)/Clean Architecture Migration 2026. 1. 4. 20:08
Character 도메인에 Clean Architecture를 적용하고, 로컬 인메모리 캐시 레이어를 통합한 과정을 기록합니다.AI Assistant: Claude Opus 4.5 (Anthropic)작업 일자: 2026-01-041. 마이그레이션 배경1.1 기존 구조 (domains/character)domains/character/├── api/v1/endpoints/│ ├── catalog.py # HTTP 엔드포인트│ └── internal_reward.py├── services/│ ├── character_service.py # ~400줄, 조회 + 캐시 + 매칭│ └── reward_evaluator.py├── repositories/│ └── charact..
-
Clean Architecture Character 다듬으며 잡담잡담 2026. 1. 4. 15:37
Clean Architecture 마이그레이션으로 서버 코드를 다듬으며 디톡스 중이다.Auth, Users 서버를 작업하며 생긴 마이그레이션 절차와 오류사항들을 기반으로 Character 도메인에 적용시키고 있다.요즘 작업을 하면 스토리지, 네트워크 팀에 합류하려고 캐치업했던 때가 자주 생각난다.매팀을 3개월씩 오가며 1-2주 캐치업, 2개월 서버 피쳐 개발을 하면서 타지에서 방 한 칸 잡겠다고 이리저리 다니고 그랬다.4.95평 크기의 전세가 2억 100만원이었지만 이미 수습까지 끝났고, 정규직으로 전환이 된 상태여서 '이제 회사에서 2-3년 이상은 다닐테니 이정도 투자는 괜찮겠지.'라 생각한 다음 잡은 방이었다.그런데 세팀을 오감에도 합류하지 못하게 되고, 마지막 팀에선 감정소모까지 있었던 지라 퇴사 ..
-
FastAPI Lifespan: 애플리케이션 생명주기 관리Python 2026. 1. 4. 04:13
1. Context ManagerFastAPI Lifespan을 이해하기 위해서는 먼저 Python의 Context Manager 패턴을 이해해야 합니다.1.1 with 문과 Context Manager# 파일 처리 - 가장 흔한 Context Manager 사용 예with open("file.txt", "r") as f: content = f.read()# 여기서 파일이 자동으로 닫힘with 문이 하는 일:1. 진입: __enter__() 호출 → 리소스 획득2. 본문: 블록 내 코드 실행3. 퇴장: __exit__() 호출 → 리소스 해제 (예외 발생해도 실행)1.2 Context Manager 프로토콜Context Manager는 두 개의 메서드로 정의됩니다:class FileManager: ..
-
이코에코(Eco²) Clean Architecture #10: Auth/Users 스키마 정규화이코에코(Eco²)/Clean Architecture Migration 2026. 1. 2. 18:22
Auth와 Users 도메인의 스키마 통합 과정에서 정규화 수준을 결정하고, 데이터 타입을 개선한 과정을 기록합니다.1. 스키마 통합 배경AS-IS: 분산된 사용자 정보문제: auth.users.id와 user_profile.users.id 수동 동기화 필요문제점문제설명ID 동기화auth.users.id와 user_profile.users.id 수동 동기화 필요트랜잭션 분리회원가입 시 두 스키마에 걸쳐 원자적 삽입 어려움조인 복잡성프로필 조회 시 cross-schema JOIN 필요데이터 불일치동기화 실패 시 orphan 레코드 발생 가능TO-BE: 통합 스키마통합 결과auth.users + user_profile.users → users.accountsauth.user_social_accounts → ..
-
이코에코(Eco²) Clean Architecture #9: Presentation Layer 정제이코에코(Eco²)/Clean Architecture Migration 2026. 1. 2. 13:23
Presentation Layer의 gRPC 구조를 정제하고, 횡단 관심사를 인터셉터로 분리한 과정을 기록합니다.1. 판단 기준Presentation Layer 내부 폴더 구조를 결정할 때 적용한 판단 기준:1.1 폴더 분리 기준기준질문분리 조건역할 분리이 파일의 책임은 무엇인가?서로 다른 책임 → 다른 폴더변경 주기언제 이 파일이 수정되는가?다른 시점에 변경 → 다른 폴더생성 방식수동 작성인가, 자동 생성인가?자동 생성 파일 → 별도 폴더재사용성여러 서비스에서 공유되는가?공유 가능 → 별도 폴더1.2 gRPC 폴더 구조 결정파일 종류역할변경 주기생성 방식재사용결론*_pb2.py메시지 정의proto 변경 시자동 생성Xprotos/*_pb2_grpc.py서비스 스텁proto 변경 시자동 생성Xprotos/..
-
이코에코(Eco²) Clean Architecture #8: Infrastructure Layer 정제이코에코(Eco²)/Clean Architecture Migration 2026. 1. 2. 12:39
Opus 4.5, GPT 5.2와의 문답, 자료조사, 학습을 거치며 Infrastructure 계층을 기술 단위로 분리하고, gRPC를 Infrastructure Layer에서 Presentation Layer로 재정의한 과정을 기록합니다.1. 계층별 분류 철학Application Layer와 Infrastructure Layer는 서로 다른 기준으로 폴더를 분류한다.1.1 Application Layer: 기능(Feature) 기준application/├── oauth/ ← "OAuth 인증"이라는 비즈니스 기능├── token/ ← "토큰 관리"라는 비즈니스 기능├── users/ ← "사용자 관리"라는 비즈니스 기능└── audit/ ..
-
이코에코(Eco²) Clean Architecture #7: Application Layer 정제이코에코(Eco²)/Clean Architecture Migration 2026. 1. 2. 05:20
Clean Architecture 초안을 바탕으로 Opus 4.5, GPT 5.2와의 문답, 자료조사, 학습을 거치며 Application 계층을 정제하고 적용한 과정을 기록합니다.1. 문제 정의AS-IS 구조apps/auth/application/├── common/│ ├── dto/ ← 모든 DTO│ ├── exceptions/ ← 모든 예외│ └── ports/ ← 모든 Port (14개 파일)├── commands/ ← 기능 구분 없이 모든 Command└── queries/ ← 기능 구분 없이 모든 Query문제점문제설명common 비대화14개의 Port가 common에 혼재. 기능별 응집도 낮음기능 파악 불가bl..