아키텍쳐와 패턴 알아보기

김건우·2024년 4월 25일

개발 이야기

목록 보기
3/14
post-thumbnail

개발하다 보면 듣는 말들이 있다. 무슨 아키텍쳐, 어떤 패턴을 사용하자 또는 이 프레임워크는 이런 패턴을 쓴다더라...
도대체 아키텍쳐는 뭐고 또 패턴은 뭘까? 그 차이는 뭘까? 그것에 대해 알아보자.

📝 시작하면서..

아마 다들 클린 아키텍쳐, 헥사고날 아키텍쳐, 싱글톤 패턴, 빌더 패턴, 같이 유명한 아키텍쳐들은 한 번씩은 들어봤을 것이라고 생각한다.

안들어봤어도 상관은 없다

정확한 이름은 소프트웨어 아키텍쳐, 그리고 디자인 패턴이라고 불린다.

🖥️ 소프트웨어 아키텍쳐?

아키텍쳐(Architecture)란 한국어로 "구조"라는 뜻이다, 거기에 소프트웨어를 붙였으니 직역하면 소프트웨어의 구조라는 뜻이 되겠다.

그렇다면 정확히 어떤 구조를 의미한다는 것인가?

특정 프로그램의 요소와 그 관계를 생각하여 짜여지는 소프트웨어 구조를 의미한다. 이러한 구조는 개발 프로젝트의 전체적인 설계도 역할을 하여 개발팀이 기능 설계와 구현 로직을 만드는 것에 도움을 준다.

기능 별로 모듈을 구분하여 나누고, 상위 도메인에서 하위 도메인으로 세분화하고 구체화하여 내려가는 식으로 구성된다.

기본적으로 프로젝트 전반적인 구조의 추상화를 목표에 두고 있다.

❓ 그래서 이거 왜 씀..?

대충 소프트웨어 아키텍쳐가 뭔지는 이제 알겠다고 한다면 이걸 도대체 귀찮게 왜 신경써야 하고 공부해야 하는지 의문이 들 수도 있다.

개발을 하다 보면 초기 기능이나 디자인에서 변경이 되거나, 혹은 아예 180도 바뀌어 버리는 일들이 자주 발생한다.

만약 이럴 때 아키텍쳐나 디자인에 전혀 투자하지 않은 코드가 있다면, 기능 추가나 변경이 어렵고 복잡하며 협업을 할 경우에는 소스 코드가 중복되어 꼬이는 등 다양한 문제가 발생할 것이다.

결론적으로 소프트웨어 아키텍쳐는 소프트웨어의 질을 높이기 위한 소프트웨어의 구조라는 뜻이 되겠다.

📎 소프트웨어 아키텍쳐 패턴

그러나 이러한 소프트웨어 아키텍쳐에서도 분명히 문제점들이 발생할 수 있다. 구조적인 문제나 소스 코드 상의 문제 등등...

그리고 이런 소프트웨어 아키텍쳐에서 발생하는 문제점들에 대해 일반화된 솔루션을 제공하는 것이 바로 소프트웨어 아키텍쳐 패턴이다.

정리하자면 소프트웨어 아키텍쳐 패턴은 자주 사용되고, 이미 검증된 소프트웨어 아키텍쳐의 패턴이라고 볼 수 있다.

가장 대표적인 10가지의 소프트웨어 아키텍쳐 패턴:

참고: [번역] 10가지 소프트웨어 아키텍처 패턴 요약
1. Layered pattern
2. Client-server pattern
3. Master-slave pattern
4. Pipe-filter pattern
5. Broker pattern
6. Peer-to-peer pattern
7. Event-bus pattern
8. Model-view-controller pattern
9. Blackboard pattern
10. Interpreter pattern

스프링 부트에서 사용되는 MVC 패턴도 보인다

💻 디자인 패턴?

디자인 패턴은 소프트웨어 디자인에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이자 상황에 맞게 사용될 수 있는 문제들을 해결하는데에 쓰이는 템플릿을 의미한다...라고 위키피디아 에 나와있다.

위에서 아키텍쳐 패턴이 문제를 해결하기 위해 사용되는 구조라고 해놓고 여기서도 비슷한 말을 늘어놓고 있다.

도대체 디자인 패턴은 뭐가 다른지 알아보자.

🖋️ 아키텍쳐와의 차이점

일단 공통적인 것으로는 둘 다 소프트웨어의 질을 향상 시키고 개발에서 발생하는 문제를 해결하기 위한 것이라는 점이다.

다만 가장 큰 차이점은 아키텍쳐 패턴은 보다 추상적이고 큰 틀에서의 구조를 의미하고, 디자인 패턴은 함수나 클래스 등 코드 상에서의 구조를 정의해 놓은 것이다.

대표적으로 싱글톤, 빌더, 퍼사드 등이 있다...(서버 기준)

아래는 필자가 자주 애용하는 빌더 패턴의 예시이다.

entity와 dto에서 빌더 패턴을 이용하여 매핑해주는 클래스인 것을 확인할 수 있다.

📨 마치면서..

개발을 하면서 아키텍쳐와 패턴은 정말 중요한 부분이다. 각각의 아키텍쳐와 패턴을 어떻게 활용하고 또 사용하느냐에 따라서 코드의 질과 나아가 프로덕션의 수준까지 결정난다.

앞으로는 내가 사용하는 패턴과 아키텍쳐가 도대체 뭐 하는 놈인지는 알고는 사용하는 것이 좋겠다.

profile
백엔드 개발자, 김건우입니다.

0개의 댓글