본문 바로가기
TIL

Delivery프로젝트_2. (TroubleShooting)컨벤션

by Wanado 2025. 2. 13.
728x90

코딩 컨벤션이란?

코드를 어떻게 작성할 지 규칙을 정하는 것을 말한다.

 

간단한 정의이지만 막상 범위가 방대해 어디서부터 진행할지 막막한 느낌이었다.

 

 


먼저 튜터님 자료를 정리해보자.

 

 

https://github.com/etuhcarap/conventions-tutorial/wiki/Conventions

 

Conventions

Contribute to etuhcarap/conventions-tutorial development by creating an account on GitHub.

github.com

 

https://velog.io/@inwoo920/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EC%83%9D%ED%99%9C-%EC%B2%B4%EC%A1%B0-9%EA%B0%80%EC%A7%80-%EC%9B%90%EC%B9%99%EC%97%90-%EB%A7%9E%EA%B2%8C-Meeting-Service-%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81%ED%95%98%EA%B8%B0

더보기

Commit Message Conventions

Package Structure

Java Code Style

Git flow


 

 

이외로 추가로 생각해본 컨벤션은

Class Naming Convention

Code Convention

 

 

<<문제발생>>

우리는 Package Structure에서 팀원 두분이 제시한 방법 중 어떤 방법이 적절할지 고민에 빠졌다.

 

 DDD

 

<<정의>>

DDD방식이란 무엇일까??

 

반복적인 설계 수정을 기반으로 비즈니스와의 협업을 중심으로 하는 DDD

 

-데이터 중심이 아닌 도메인의 모델과 로직에 집중

-동일한 표현과 단어로 구성된 단일화된 언어체계의 사용

-Software Entity와 Domain 간 개념을 일치하여, 도메인 모델부터 코드까지 항상 함께 움직이는 구조의 모델 지향

 

https://kakaoentertainment-tech.tistory.com/95

이 글에서는 MSA의 하위개념으로 DDD를 말하고 있고

 

 

다른 시각으로 바라보는 사람도 있었다.

https://blog.naver.com/sssang97/223056423164

 

[DDD] 도메인 주도 설계(Domain Driven Design)

도메인 주도설계는 객체지향을 기반으로 하는 설계 방법론이다. 유지보수와 확장에 중점을 두며, 어느 정도...

blog.naver.com

좀 더 이해가 잘되는 글 인것 같다.

 

 

 바라보는 관점과 설계 방식에 따라 여러 답변이 나오는 것 같다.

 

<<해결>>

우리는 

- 프로젝트의 서비스 규모가 작고

- 모놀리식으로 개발하되 도메인을 중심으로 설계하고자 해서

 

  DDD 방식으로 설계를 하기로 결정했다.

 

 

>>> 추가 이슈 발생

 

개인적으로 이해를 잘 못하고 있음을 깨달음.

 

아키텍처의 범주화 (큰 개념 → 세부 개념)

아키텍처 개념은 보통 **"배포 및 운영 방식"**과 "설계 방식" 두 가지로 나눌 수 있습니다.

1. 배포 및 운영 방식 (Deployment & Operation)

이 카테고리는 애플리케이션을 어떻게 배포하고 운영하는지에 대한 개념입니다.

🏛 (큰 개념) 애플리케이션 아키텍처

🔽

  • 모놀리틱 아키텍처 (Monolithic Architecture)
    → 하나의 애플리케이션으로 모든 기능이 포함된 구조
    → 예: Spring Boot 단일 애플리케이션, Django 앱
  • 마이크로서비스 아키텍처 (Microservices Architecture)
    → 기능별로 독립된 서비스로 나누어 배포하는 구조
    → 예: 사용자 서비스, 결제 서비스, 주문 서비스가 각각 분리
  • 서버리스 아키텍처 (Serverless Architecture)
    → 서버를 직접 운영하지 않고 클라우드 기반 서비스(FaaS)를 활용하는 구조
    → 예: AWS Lambda, Google Cloud Functions

2. 설계 방식 (Design Patterns & Structure)

이 카테고리는 애플리케이션 내부 구조와 설계 패턴에 대한 개념입니다.

📦 (큰 개념) 소프트웨어 설계 아키텍처

🔽

  • 계층형 아키텍처 (Layered Architecture)
    → Presentation, Service, Repository 등으로 나눠진 구조
    → 보통 모놀리틱 아키텍처에서 많이 사용됨
  • 헥사고날 아키텍처 (Hexagonal Architecture, Ports & Adapters)
    → 비즈니스 로직을 인터페이스(포트)를 통해 외부 시스템과 연결하는 방식
    마이크로서비스에서도 자주 사용됨
  • 이벤트 기반 아키텍처 (Event-Driven Architecture)
    → 이벤트를 기반으로 애플리케이션을 설계하는 방식
    마이크로서비스에서 주로 사용됨
  • CQRS (Command Query Responsibility Segregation)
    → 읽기와 쓰기 로직을 분리하는 방식

정리: "포함 관계"가 아니라 "범주화된 관계"

상위 개념 (아키텍처 유형)설명하위 개념 (설계 패턴 & 구조)

모놀리틱 아키텍처 하나의 큰 애플리케이션으로 배포 계층형 아키텍처, MVC 패턴
마이크로서비스 아키텍처 여러 개의 독립 서비스로 배포 이벤트 기반 아키텍처, 헥사고날 아키텍처, CQRS
서버리스 아키텍처 서버를 직접 운영하지 않고 클라우드 활용 이벤트 기반 아키텍처

결론

  • 모놀리틱 vs 마이크로서비스 vs 서버리스는 배포 방식 차이
  • 계층형 아키텍처, 이벤트 기반 아키텍처 등은 내부 설계 방식
  • 특정 아키텍처 안에서 여러 설계 패턴을 사용할 수 있음
    (예: 모놀리틱에서 계층형 아키텍처 사용, 마이크로서비스에서 이벤트 기반 아키텍처 사용)

👉 즉, 아키텍처 간에 "상위-하위 개념"이라기보다는 "배포 방식(큰 개념)"과 "설계 방식(세부 개념)"이 존재하는 것! 😊

 

      그리고 설계 방식(Design Architecture) 안에서 패턴(Design Patterns)을 적용하는 구조

 

 

728x90