목차
- 삼촌 에이전트와 Docker Compose
- PostgreSQL 도메인 타입과 매핑 이슈
- Prisma에서 조건문(where) 타입 문제와 satisfies 연산자
- 헥사고날 아키텍처(Hexagonal Architecture) 토론
- 2차 캐시 (2L Cache)와 캐시 일관성 문제
- 프론트엔드와 백엔드 배포 전략
- 정규식과 타입 검증 - typia 라이브러리 사례
- 오픈소스 기여 권장 및 typia 이슈 사례
- 개발 도구로서 화이트보드 활용법
- 기타 질문과 의견
1. 삼촌 에이전트와 Docker Compose 🚀
- "삼촌" 이미지를 Docker Compose로 실행한다는 재밌는 표현.
- Docker Compose는 여러 컨테이너를 정의, 동시에 실행할 수 있는 도구임.
- 에이전트(Agent) 개념을 코드로 만들어 확장하는 흐름이 미래 지향적이라는 의견.
2. PostgreSQL 도메인 타입과 매핑 이슈 🐘
- PostgreSQL의 CREATE DOMAIN은 기존 타입을 확장하거나 제한해서 만든 커스텀 타입임.
- 도메인 타입은 Enum과는 다르며, DB 수준에서 데이터 유효성이나 형식을 제한할 수 있음.
- 하지만 단순 게시판같은 작은 프로젝트에서는 모든 데이터 필드를 도메인 객체로 매핑하는 건 오히려 유지보수에 부담이 됨.
- 사수가 모든 DB 데이터타입을 도메인 객체로 무분별하게 만들어 재앙이 된 사례도 있음.
도메인 객체(Domain Object) 란?
이는 애플리케이션의 핵심 비즈니스 로직이나 의미를 갖는 객체로, 데이터베이스 타입과는 별개임. 무차별 매핑보단 필요에 맞는 범위에서 이용하는 게 효율적임.
3. Prisma 조건문과 TypeScript 타입 문제 🔍
- findMany 쿼리 시 where 조건을 여러 방식으로 쓰는데 1번째 방식은 실패, 2번째는 성공하는 경우 발생.
- 타입이 좁혀지지 않아 1번 방식 실패 가능성 큼.
- satisfies 연산자 사용 시 타입을 더 엄격히 체크 가능 (관련 공식 블로그 참고: https://www.prisma.io/blog/satisfies-operator-ur8ys8ccq7zb).
- 타입 정의가 올바르게 되어야 쿼리가 정상 작동함.
4. 헥사고날 아키텍처(Hexagonal Architecture) 논쟁 🏗️
- 헥사고날 아키텍처는 시스템을 포트(Ports) 와 어댑터(Adapters) 로 분리하여 내부 비즈니스 로직과 외부 인프라를 격리하는 설계 방식.
- 핵심 개념은 여러 어댑터로 외부 기능을 쉽게 교체 가능하다는 점임.
- 하지만 실제 프로젝트에서는 DB 교체 사례가 드물고, 복잡도만 증가하는 경우가 많아 비선호하는 의견도 존재.
- 레포지토리 패턴도 비슷하게 DB 관련 코드를 격리하지만, DB 교체 목적보다는 유지보수 및 코드 관리에 더 유용.
- 대형 기업에서는 fallback(대체 수단)이 많아 헥사고날 아키텍처가 효과를 볼 때도 있음.(예: 지도 서비스 여러 API 연동)
- 헥사고날은 구조 강제 및 테스트 도입이 쉬움 장점도 있어 작은 조직보단 복잡한 서비스에 적합.
- 빠른 사업 모델(BM) 변화 대응에는 유연하지 않는 한계 존재.
포트와 어댑터란?
- 포트는 애플리케이션 내부와 외부가 소통하는 인터페이스를 의미.
- 어댑터는 포트를 구현하는 외부시스템과의 연결 부품으로 DB, 메시징, 외부 API 등이 해당.
5. 2차 캐시 (2L Cache)와 캐시 일관성 문제 🗃️
- 2차 캐시란 로컬 캐시와 Redis 같이 분산 캐시를 조합하여 성능과 지연 시간 감소를 목표로 함.
- 로컬 캐시를 여러 서버 노드가 각각 가지고 있으며 Redis가 중앙 캐시 역할.
- 캐시 일관성 유지가 중요한 이슈로, API로 eviction(캐시 무효화)을 시키는 작업이 복잡.
- 주로 update 방식 캐시 무효화(데이터가 변경될 때 업데이트) 사용.
- 예: 다중 서버 환경에서 라우팅 규칙 변경시 DB I/O 비용 절감을 위해 local/remote 캐시를 복합적 관리.
- 장애 상황 대응을 위한 캐시 정책도 필요하며, TTL(Time To Live)을 통해 데이터 신선도 유지.
6. 프론트엔드와 백엔드 배포 전략 🖥️
- Next.js(프론트)와 Nest.js(백엔드)를 각각 Vercel, AWS EC2에 분리 배포하는 전략 추천.
- 프론트와 백엔드를 한 서버(EC2)에 통합해도 가능하지만, 배포 간 의존성 및 충돌 발생 가능.
- 분리 배포 시 각각 독립적 배포 및 운영 가능하므로 관리가 수월.
- 그러나 관리 역량이나 배포 편의성에 따라 결정 가능.
- AWS EC2에 Docker Standalone 옵션 켜고 빌드 후 배포도 어렵지 않음.
7. 정규식과 타입 검증 - typia 라이브러리 사례 🔡
- typia는 타입스크립트 타입을 기반으로 런타임 데이터 검증을 지원하는 라이브러리.
- 정규식을 타입에 박아서 URI 형식 등 복잡한 포맷을 체크함.
- 하지만 정규식을 컴파일 타임에 검사하는 기능은 아직 없어 런타임에서 if문 등으로 검사.
- 그룹 캡처, 교차 타입 정의 등에서 발생하는 복잡성과 버그가 존재.
- 관련 이슈는 GitHub에 활발히 공유 중(https://github.com/samchon/typia/issues/1503).
- 오픈소스 기여 권장됨.
8. 오픈소스 기여 권장 및 typia 이슈 사례 🌍
- 개발자들은 typia 이슈에 직접 PR을 올려 기여하는 문화 조성 중.
- 기여는 공식 문서 개선, 버그 수정 등으로 신입부터 고급 개발자까지 참여 가능.
- 협업을 장려하며 실전 경험 쌓기에 좋은 기회 제공.
9. 개발 도구로서 화이트보드 활용법 📝
- 화이트보드는 복잡한 설계나 캐시, 아키텍처 설명에 매우 유용.
- 최근엔 창문에 붙이는 종이형 화이트보드도 인기.
- 장점: 즉각적인 아이디어 공유와 팀원간 의사소통 강화.
- 단점: 지우기 어려움, 때로는 청소(물 묻히기) 필요.
10. 기타 질문과 의견 💬
- 헥사고날 아키텍처는 신입 개발자 교육에 부담될 수 있어 신중하게 도입 권장.
- 큰 트래픽 서비스에선 복잡한 fallback과 캐시 계층 관리가 필요해 헥사고날이 도움이 될 수 있음.
- NestJS SDK 구성에 대해 base URL 세팅 방법 논의.
- 개발자들 사이에 유머와 협력적인 분위기 형성.
면접팁⚡
- 헥사고날 아키텍처의 핵심 개념과 장단점을 명확히 이해하고, 실제 프로젝트 적합성 여부를 설명할 수 있어야 함.
- PostgreSQL 커스텀 도메인 타입과 일반 Enum 타입 차이를 정확히 말할 수 있어야 함.
- Prisma 쿼리 시 타입 문제에 대해 타입스크립트의 좁혀진 타입과 satisfies 연산자의 역할을 설명할 수 있음.
- 2차 캐시(2L Cache) 개념과 캐시 일관성 문제, eviction 전략을 기술 문제로 대비.
- 오픈소스 기여 경험이나 개발 문화에 대해 질문 나오면 github PR 경험을 활용.
링크🔗
- Prisma satisfies operator 블로그: https://www.prisma.io/blog/satisfies-operator-ur8ys8ccq7zb
- 카카오페이 헥사고날 아키텍처 아티클: https://tech.kakaopay.com/post/home-hexagonal-architecture/
- typia GitHub issues: https://github.com/samchon/typia/issues/1503
- 커패시터 7.0.1 버그 관련 블로그: https://velog.io/@kor8240/%EC%BB%A4%ED%8C%A8%EC%8B%9C%ED%84%B0-7.0.1-%EB%B2%84%EA%B7%B8-%EC%9D%B4%EC%8A%88
#HexagonalArchitecture#Prisma#PostgreSQL#2LCache#NestJS#NextJS#Deployment#Typia#캐시관리#개발문화