목록으로
'언젠가 읽기' 컨텐츠는 논문이나 영문 컨텐츠 등 언젠가 읽으려고 즐겨찾기 하고선 읽지 않고 계속 미룰만한 컨텐츠를 읽고 요약하거나 소개합니다.

소프트웨어 아키텍트처럼 생각하기

서론

"왜 어떤 집은 수십 년 동안 견고하게 서 있지만, 다른 집은 얼마 지나지 않아 무너질까요?"
집을 설계할 때 단순히 외관의 아름다움만을 고려하는 것이 아니라, 기둥과 구조의 기본, 그리고 다양한 요소들의 조화를 신중하게 계획해야 합니다. 이는 소프트웨어를 설계하는 것과 마찬가지입니다.

SOFTWARE ARCHITECTURE란 무엇인가?

간단히 말해, 소프트웨어 아키텍처는 우리가 만들 소프트웨어의 "전반적인 계획"을 의미합니다. 시스템을 지탱하는 핵심 요소와 다양한 구성 요소들의 연결을 고려하여 시스템이 안정적이고 효율적으로 작동하도록 하는 것입니다. 여기서 가장 중요한 것은 "아키텍처"와 "디자인"의 차이를 이해하는 것입니다.

ARCHITECTURE와 DESIGN의 차이점

집을 예로 들어보겠습니다.
  • 집은 몇 층으로 구성되어 있나요?
  • 침실은 몇 개 있나요?
  • 욕실은 어디에 위치하나요?
이러한 질문들은 집의 "구조"에 관한 것으로, 우리는 이것을 아키텍처 라고 부릅니다.
반면에,
  • 침실의 벽지는 어떤 색으로 할까요?
  • 식탁은 어디에 놓을까요?
  • 침실 조명의 색상은 무엇으로 할까요?
이러한 질문들은 "디자인"에 관한 것입니다.
  • 아키텍처 는 "구조"를 계획하고 관리하는 것
  • 디자인 은 "세부 사항"과 "미적 요소"를 다루는 것
소프트웨어 설계에서도 마찬가지입니다.
  • 아키텍처 : Microservices와 Monolith 중 무엇을 선택할 것인가?
  • 디자인 : 코드에서 Repository 패턴을 사용할 것인가, Active Record를 사용할 것인가?
따라서 무엇을 "아키텍처" 수준에서 생각해야 하고, 무엇을 "디자인" 수준에서 생각해야 하는지 이해하는 것이 중요합니다.

소프트웨어 아키텍트의 원칙

  1. 맥락과 목표 이해하기
  2. 설계를 시작하기 전에 비즈니스와 기술적인 요구 사항 및 제한 사항을 명확히 이해해야 합니다.
  3. 비기능적 요구 사항(NFR) 고려하기
  4. 성능, 확장성, 보안, 유지보수성 등 간과하기 쉬운 중요한 요소들을 반드시 고려해야 합니다.
  5. 장기적인 관점 유지하기
  6. 훌륭한 아키텍처는 미래의 성장과 변화를 지원해야 하며, 큰 문제 없이 대응할 수 있어야 합니다.
  7. 명확한 커뮤니케이션
  8. 아키텍트는 기술적인 팀원과 비기술적인 이해관계자 모두에게 자신의 아이디어와 설계를 명확하게 전달할 수 있어야 합니다.

결론

소프트웨어 아키텍처 설계는 집의 기초를 세우는 것과 같습니다. 올바르게 설계된 아키텍처는 소프트웨어를 견고하고 유연하게 만들어주며, 미래의 변화에 대비할 수 있도록 해줍니다.

함께 읽으면 좋은 참고 자료

  • 클린 아키텍처
  • 소프트웨어 아키텍처의 기초
  • 디자인 패턴: 재사용 가능한 객체 지향 소프트웨어의 요소

푸딩캠프 뉴스레터를 구독하면 학습과 성장, 기술에 관해 요약된 컨텐츠를 매주 편하게 받아보실 수 있습니다.