1/31/2023

위임의 중요성

 

<출처: https://unsplash.com/photos/a9kHtTbjpwY>

권한을 위임하는 것은 팀을 효과적으로 관리하는 중요한 측면이다. 위임을 통해 관리자는 팀 구성원에게 권한과 책임을 할당할 수 있으므로 구성원이 자신의 업무에 대한 소유권을 가지고 업무에 집중할 수 있다.

이런 행위는 생산성 증가, 사기 개선 및 효율적 리소스 사용으로 이어진다. 하지만 권한을 위임하지 않으면 팀 구성원간의 세부 관리, 신뢰 부족의 현상이 발생할 수 있다. 즉, 관리자가 어느선까지 위임을 하느냐에 따라서 팀의 성과가 달라지게 된다.

권한 위임의 주요 이점은 관리자가 자신의 분야에 집중할 수 있는 여유가 생긴다는 것이다. 팀 구성원에게 업무에 대한 권한과 책임을 할당하고 더 중요한 문제에 집중할 수 있도록 시간과 에너지를 확보할 수 있다. 이는 각각 담당하는 전문 분야에 집중할 수 있기에 생산성 향상으로 이어질 수 있다.

생산성을 높이는 것 외에도 권한을 위임하면 팀 구성원이 업무에 대한 오너십을 느낄 수 있다. 이런 권한이 부여되면 업무에 대한 자부심과 성취감을 느낄 가능성이 높아진다. 이는 팀 구성원이 업무에 더 많이 투자하고 최선을 다하도록 동기를 부여하므로 사기가 향상 될 수 있다.

또한 리소스를 보다 효율적으로 사용할 수 있다. 어떤 업무를 처리하는데 적합한 구성원에게 할당하여 팀이 전체 역량을 발휘할 수 있도록 할 수 있다.

처음 관리자가 된 이들은 대부분 마이크로 매니지먼트를 하는 경향이 있다. 팀 구성원을 신뢰할 수 없거나 본인이 해야 한다고 생각하기 때문이다. 이렇게 되면 창의성과 혁신에 부정적인 영향을 미치게 된다. 본인의 입맛에 맞지 않더라도 신뢰와 존중을 기반으로 위임을 해야 한다.

결국, 위임이란 관리자의 통제권을 포기하는 것이 아니라 공유하는 것이라는 것을 이해해야 한다. 관리자는 자신의 기대치를 명확히하고 팀 구성원이 성공하는데 필요한 리소스를 제공하고 최대한 지원을 해야 한다. 그리고 팀원을 신뢰하고 그들이 결정을 내릴 수 있도록 자율성을 부여해야 한다.

위임이라는 행위를 통해 관리자는 자신의 업무에 집중할 수 있고, 팀 구성원은 오너십을 가질 수 있으며, 리소스를 보다 효율적으로 사용할 수 있게된다.

위임은 신뢰를 기반으로 통제권을 공유하는 것을 이해할 때 관리자는 보다 효과적으로 팀을 성공으로 이끌 수 있다.

1/30/2023

[주니어 시리즈] 프록시 서버

블로그에 어려운 글로만 채우는 것 같아서 “주니어 시리즈”를 기획했다. 주니어 개발자가 알면 좋을 것 같은 내용으로 최대한 쉽게 작성하려고 한다.

우리가 사용하는 인터넷은 풍부한 정보와 도구를 제공함과 소셜 네트워크 및 음성/영상 기능을 사용하여 전 세계 사람들을 연결해왔다.
이 모든 것은 보안 및 개인 정보 침해에 대한 위험과 함께 제공된다. 본 글에서는 이런 위험을 완화하는데 중요한 역할을 하는 프록시에 대해서 설명하려고 한다.

프록시 서버

클라이언트에서 웹서버로 전송되는 모든 요청은 일종의 프록시 서버를 거치게 된다. 프록시 서버는 클라이언트와 인터넷 사이의 게이트웨이 역할을 하며 웹사이트와 분리한다.
웹 요청의 소스 IP 주소를 프록시 서버의 IP 주소로 변경한 다음 웹서버로 전달하게 된다. 웹서버는 클라이언트를 인식하지 못하고 프록시 서버만 볼 수 있다.


프록시 서버는 단일 대문 역할을 하여 보안 정책을 보다 쉽게 시행할 수 있다.
요청된 웹페이지를 프록시 서버에 저장하여 성능을 향상시키는 캐싱 매커니즘도 제공한다.
요청된 웹페이지가 캐시 메모리에서 사용 가능한 경우 요청을 웹서버로 전달하지 않고 캐시된 웹페이지를 클라이언트에게 전달한다.
이를 통해 사용자가 많이 방문하는 웹사이트는 서버의 부하를 줄여 많은 비용을 절약 할 수 있다.

순방향(포워드) 프록시 서버

순방향 프록시는 일반적으로 클라이언트에서 구현되며 여러 클라이언트 또는 클라이언트 소스 앞에 위치한다.
순방향 프록시 서버는 주로 회사에서 직원의 인터넷 사용을 관리하고 콘텐츠를 제한하는데 사용된다.
또한 회사의 네트워크에 위협이 될 수 있는 모든 요청을 차단하여 회사 네트워크를 보호하는 방화벽으로도 사용된다.
프록시 서버는 사용자의 국가에서 차단될 수 있는 콘텐츠를 우회하여 접근하는데도 사용되기도 한다.
프록시 서버가 사용자의 세부 정보를 숨김으로 사용자는 익명으로 인터넷을 탐색할 수 있다.


역방향(리버스) 프록시 서버

역방향 프록시 서버는 클라이언트쪽이 아닌 서버쪽에 구현된다. 여러 웹서버 앞에 위치하며 들어오는 요청을 웹서버로 전달한다. 따라서 클라이언트가 아닌 웹서버에 익명성을 제공한다.
역방향 프록시 서버는 일반적으로 웹서버를 대신하여 인증, 콘텐츠 캐싱 및 암호화/복호화 같은 작업을 수행하는데 사용된다.
또한 역방향 프록시는 로드 밸런서로 사용되기도 한다. 하지만 들어오는 트래픽을 웹서버마다 효율적으로 분산시키기 위한 용도로는 최적화되어 있지 않다.
일반적으로 역방향 프록시 서버는 웹서버 또는 웹서버 그룹 단위로 로드 밸런싱을 하게 된다.


요약

프록시 서버는 클라이언트와 인터넷 사이의 대문(게이트웨이) 역할을 하므로써 최종 사용자를 웹사이트와 분리한다. 프록시 서버의 위치에 따라 순방향 프록시 서버인지 역방향 프록시 서버인지가 결정된다. 순방향 프록시는 클라이언트에서 구현되며 여러 클라이언트 또는 클라이언트 앞에 위치하여 요청을 웹서버로 전달한다. 역방향 프록시 서버는 여러 웹서버 앞에 위치하여 요청을 웹서버로 전달한다.

위에서 언급한 내용들을 예시로 표현해보자.


레스토랑에서 웨이터가 주문을 받아 주방장에게 전달하면 주방장은 주문을 외치고 주방에 있는 모든 사람에게 작업을 할당한다고 가정해보자.

  • 당신은 클라이언트이다.
  • 당신의 주문은 웹요청이다.
  • 웨이터는 순방향 프록시 서버이다.
  • 주방장은 역방향 프록시 서버이다.
  • 주방에서 일하는 다른 세프들은 웹서버이다.

이것으로 프록시에 대한 설명을 끝났습니다. 궁금하신 사항은 의견을 달아주세요.


1/13/2023

기술 능력이 엔지니어에게 가장 중요한 항목이 아닌 이유

일반적으로 엔지니어라고 하면 테크 스킬이 가장 중요한 것이라고 생각을 한다. 물론 엔지니어가 되기 위해서는 기술적 지식이 당연히 필요하고 기술 숙련도에 중점을 둘 가능성이 매우 높다. 하지만 효과적으로 의사소통을 하는 능력은 간과되는 경향이 있다.


엔지니어에게 커뮤니케이션 기술이 필요한 이유는 무엇일까? 우리가 진행하는 과제들은 개인이 혼자서 해결할 수 있는 것이 매우 적다. 기술 지식을 가진 사람들로 구성된 사람들 혹은 팀 간의 협업이 필요하다. 어떤 과제를 하기 위해서는 기술 베이스의 사람도 있지만 기획, 비즈니스 등 다양한 배경을 가진 사람들이 모여서 협업을 하기에 의사소통을 잘하면 더 효율적으로 진행할 수 있다.

어떻게 이해관계자의 기여를 받고 중복되거나 낭비되는 작업을 방지할 수 있을까? 아래 사항들을 고려해서 진행해야 한다.

  • 모든 사람이 공동의 목표를 보고 있는지 확인
  • 결과물의 모습과 이를 달성하기 위한 로드맵 공유
  • 개발 전반에 걸쳐 지속적인 테스트를 통해 불확실성을 해소 및 수용

위에 언급된 항목에는 기술 지식에 대한 언급은 없다.

훌륭한 엔지니어는 이론 및 경험에 대한 지식을 지니고 있다. 코드 수준에서만 작업할 수 있는 사람은 다른 사람이 수행한 기존 구현내에서만 작업할 수 있고, 새로운 로직을 만들려면 수학적 관점에서 로직을 수립하는 것을 이해해야 한다. 그렇지 않으면 항상 다른 사람의 작업물 내에서 진행할 수 밖에 없다.

최고의 엔지니어는 비즈니스와 외부에서 무슨 일이 일어나고 있는지 알고 있어야 한다. 남들이 하는 일을 따라가지 못한다면 결국 뒤처지기 때문이다.

뛰어난 엔지니어는 전체 스택을 이해한다. 아는 범위 내에서 생각하고 결과물을 낼 수밖에 없기 때문에 전체를 이해하려고 노력한다.

신급 엔지니어는 사람들과 대화하는 방법을 알고 있다. 사람들은 자신이 알고 있는 것을 상대방도 알고 있다고 오해하여 불필요한 오버헤드를 만들기도 한다. 동료 엔지니어와 대화하는 경우에는 히스토리를 포함해 단순화하여 커뮤니케이션을 해야 한다. 좋은 일과 위대한 일의 차이는 얼마나 그것이 잘 설명되어 있느냐이다.

커뮤니케이션 기술을 향상시키고 엔지니어링 능력을 향상시키기 위한 단계를 아래와 같다.

1. 다른 사람의 말을 듣는 법을 배우자

다른 사람들은 나와 다르게 의사소통한다는 것을 이해해야 한다. 기술적인 부분을 사업 쪽에 설명할 때, 같은 내용을 전달하는 것도 다양한 방법이 있다는 것을 이해해야 한다. 그리고 그들과 상호 작용할 때는 “그들의 언어”로 소통해야 한다. Mirroring이라는 기술을 이용하게 되면 효과적인 언어 및 비언어적 의사소통 방법을 알 수 있고, 실험해 볼 수 있다. 나도 사업 쪽과 상호 작용을 하면서 이렇게 하려고 많은 노력을 기울이고 있다.

2. 더 많은 대화 시작

서로의 생각을 맞추려면 더 많이 이야기를 해야 한다. 그리고 대화가 끝나면 아쉬웠던 부분을 기억하고 더 나아질 수 있도록 해야 한다.

3. 공감

가장 어려운 것은 공감 능력을 키우는 것이다. 누군가가 당신의 하루를 망치는 무언가를 전달한다면 그들이 어떤 제약을 받고 있는지 생각해야 한다. 물론 이 관점은 사람들이 좋은 의도를 가지고 있다는 가정이다. “왜 이렇게까지 해야 했지?”라고 생각하고 직설적으로 물어 볼 필요도 있다. 누군가를 이해하기 위해 질문하는 것은 경험에서 배울 수 있는 최고의 엔지니어링 기술과 자질 중 하나이다. 이런 부분들을 무서워하거나 두려워하면 안된다.

끝으로, 우리는 종종 기술 숙련도를 엔지니어가 개발해야 할 핵심 기술로 본다. 물론 코딩 및 설계를 할 수 있다는 것은 매우 중요하다. 하지만 코딩하는 내용을 간결하게 전달할 수 없다면 성과를 잘 설명할 수 없을 것이다. 의사소통은 엔지니어가 배워야 할 필수 기술이다. 그 이유는 이해관계자들이 다른 전문가보다 더 잘 소통된다고 느끼기 때문이다.

12/05/2022

모놀리식 vs 마이크로서비스, 어떤 아키텍처를 선택할까?

모놀리식과 마이크로서비스 아키텍처중 어떤 아키텍처를 선택해야 하는지에 대해서 요즘IT에 기고했다. 아래는 기고한 글 일부이다.


애플리케이션의 아키텍처 스타일(모놀리식 vs 마이크로서비스)에 대한 선택은 트렌드나 경쟁사의 특징을 따르기보다, 애플리케이션의 목표와 비즈니스 요구 사항에 따라 달라진다. (생략) 모놀리식 애플리케이션은 소프트웨어 개발을 위한 기본 접근 방식이다. 그렇다면 마이크로서비스가 대세가 된 현재 모놀리식 접근 방식을 버려야 할까? 만약 모놀리식 애플리케이션에서 마이크로서비스로 전환하면 어떤 이점이 있을까? 마이크로서비스로 애플리케이션을 만들면 비즈니스의 이점은 무엇일까? 이번 글에서는 모놀리식과 마이크로서비스 아키텍처를 비교하여 장단점을 살펴보고, 비즈니스에 적합한 소프트웨어 아키텍처를 선택하는 방법에 대해서 알아보자.

(생략)

개발자라면 누구나 내가 설계하고 작성한 코드가 비즈니스에 큰 가치를 줄 때 성취감을 느낄 것이다. 이것은 우리가 기술을 다루지만, 항상 비지니스를 염두해 두고 고민해야 함을 뜻한다. 이번 글을 참고하여, 현 비즈니스 상황에 최적화된 아키텍처를 선택할 수 있길 바란다.

아래 링크를 통해 원본 글을 볼 수 있다.

기고글 보러 가기

10/16/2022

좋은 팀 구성 및 개발 문화 조성의 중요성

 GS리테일에 입사 후 팀빌딩과 개발 문화를 구축한 경험에 대해서 요즘IT 매거진에 기고했다.

본 글은 요즘IT 매거진에 기고한 글의 일부를 가져왔다.

<출처: https://unsplash.com/photos/Zyx1bK9mqmA>

함께 할 동료가 모였으니 이제 실제 업무를 진행할 차례다. 개발팀은 잘 작동하는 소프트웨어를 구축하는 것부터 기술 변화의 빠른 속도를 따라가는 것과 같은 문제를 해결해야 하는 경우가 많다. 가장 좋은 방법의 하나는 매력적이고 창의적인 팀을 구성하는 것이다.

어떻게 매력적이고 창의적인 팀을 구성할 수 있을까? 답은 간단했다.

“즐기게 놔두는 것이다.”

(생략)

아래 링크를 통해 원본 글을 볼 수 있다.

기고글 보러 가기


10/13/2022

Moduler Monolithic 아키텍처

프로젝트를 준비하면서 아키텍처에 대한 고민이 많다. 마이크로서비스 아키텍처로 프로젝트를 하였지만, 현 상황에서는 마이크로서비스 아키텍처가 어울리지 않을 수 있다는 판단을 했고 이유는 아래와 같다.

  1. B2C라고 볼 순 있지만 사용자 수가 정해져 있다.
  2. 트래픽이 증가하는 시간이 정해져 있다.
  3. 리소스 비용을 절약해야 함 (비용 감축을 위해서 트래픽이 몰리는 시간대외에는 인스턴스를 축소할 계획 있음)
  4. 데이터베이스가 통합되어 있음 (미니서비스로 고려가 가능)
  5. 각 서비스마다 다른 기술을 사용하진 않을 것 같음
  6. 레거시가 존재하기에 리팩토링이 우선되어야 함 (이 부분이 가장 중요!)

또한, 아래 사항들을 고려해야 한다.

  1. 글로벌 진출 시 로컬라이제이션을 고려해야 함
  2. 확장 가능하고 재사용 가능하며 유지보수가 쉽도록 만들어야 함
  3. 새로운 사람이 참여하게 되면 비즈니스 기능 및 시스템 기능을 쉽게 이해할 수 있어야 함
  4. Actor별 UI가 각각 존재해야 함
  5. 외부로 연계되는 부분이 많음
  6. 마이크로서비스 아키텍처 전환에 대한 기틀 마련

모놀리식은 단일 단위의 애플리케이션이다. 즉, 모든 비즈니스 로직이 한 곳에 있고 애플리케이션에 변경 사항이 적용되면 전체 애플리케이션에 영향을 미치기에 전체가 다시 배포되어야 한다.

또한, 모놀리식은 종종 큰 진흙 덩어리처럼 보이기도 한다. 시간이 지남에 따라 애플리케이션이 발전하기에 비대해지기 때문이다.

<출처: https://lewiseason.co.uk/2019/11/05/large-application-architectures>

위 그림은 큰 진흙 덩어리인지 분산된 진흙 덩어리인지에 따라 모듈러 모놀리식과 마이크로서비스 아키텍처를 선택하는 것에 대한 아이디어를 준다. 초반에는 모듈식 모놀리식으로 시작하고 제품이 충분히 성공적이면 마이크로서비스로의 이동을 고려해 볼 수 있다.

모놀리식 아키텍처

기존의 모놀리식 애플리케이션은 빌드할 때 코드 개발 및 유지 관리를 쉽게 하기 위해 로직을 여러 계층으로 나눈다.


<출처: https://www.n-ix.com/microservices-vs-monolith-which-architecture-best-choice-your-business/>

위의 구조는 효율적으로 애플리케이션을 구축하기 위한 방법이지만, 코드를 변경하면 전체에 영향을 미치기 때문에 유연하지 않다. 이런 상황으로 인해 순수한 모놀리식은 사용할 수 없다.

모듈식 모놀리식 아키텍처

모듈식 모놀리식 아키텍처는 먼저 로직을 모듈로 나누는 방식으로 구성되며, 각 모듈은 독립적이고 격리된다. 각 모듈에는 고유한 비즈니스 로직이 있어야 한다. 이렇게 다른 모듈에는 최대한 영향을 주지 않고 레이어를 만들고 수정할 수 있어야 한다.

<출처: https://www.fullstacklabs.co/blog/modular-monolithic-vs-microservices>

마이크로서비스 아키텍처가 모든 것을 해결하는 솔루션이 아니다. 더 적합한 다른 접근 방식이 존재할 수 있다. 결국 진화에 의해 향후에는 마이크로서비스 아키텍처로 끝나더라도 거기까지 도달하기 위한 다른 중간 단계가 존재하는 것이다.

모듈식 모놀리식은 아래의 특징을 지니고 있다.

  • 모듈은 완전히 독립적이지 않다. 다른 모듈과의 종속성이 있지만 최소화해야 한다.
  • 모듈은 상호 교환이 가능하다.
  • 코드를 재사용할 수 있다.
  • 기존의 모놀리식에 비해 종속성을 더 잘 구성할 수 있다.
  • 기존의 모놀리식보다 유지 관리하고 개발하기가 더 쉽다.
  • 배포를 위해 다른 서버가 필요 없이 전체 프로젝트를 단일 단위로 유지할 수 있다.
  • 기존의 모놀리식보다 확장성이 뛰어나다.
  • 마이크로서비스 아키텍처보다 덜 복잡하다.

일반적인 Java 패키징 체계는 아래 왼쪽 그림처럼 웹 항목, 비즈니스 로직, 데이터베이스 엑세스을 별도의 레이어 패키지로 그룹화 한다.

<출처: https://medium.com/design-and-tech-co/modular-monoliths-a-gateway-to-microservices-946f2cbdf382>

문제는 시간이 지나면 위 오른쪽 그림처럼 스파게티 코드가 만들어진다는 것이다. 이런 상황이 발생하는 것은 일반적으로 Java에서 대부분 클래스를 Public으로 선언 하기에 캡슐화하는 것이 아니기에 어디서든 접근 할 수 있게 된다.

결국, Jigsaw(자바 모듈 관리)를 이용해서 패키지를 관리해야 한다. (참고: https://openjdk.org/projects/jigsaw/)


<출처: https://medium.com/design-and-tech-co/modular-monoliths-a-gateway-to-microservices-946f2cbdf382>

위 그림의 패키징 체계에서는 비즈니스 로직 및 데이터 엑세스를 구현한 클래스는 보호되고, 해당 패키지의 접근은 유일하게 정의된 인터페이스를 통해서만 이루어지기에 된다.

이렇게 하면, 느슨하게 결합된 모듈을 만들 수 있고 인터페이스를 일관되게 유지 할 수 있고 향후 마이크로서비스 아키텍처로 전환 할 경우에도 유리하게 작용될 수 있다고 생각한다.

좋은 아키텍처는 끊임없이 진화하는 작업이며 올바른 솔루션은 운영 규모에 따라 달라진다.

이번 선택이 올바른 선택이길 바란다.


10/05/2022

소프트웨어 아키텍트의 역할

처음 IT 분야에서 일을 시작했을 때 소프트웨어 설계자라는 직책이 나의 관심을 끌었었다. 소프트웨어 혹은 애플리케이션 아키텍트라는 이름이 아름답고 우아하게 보였다. 그리고 아키텍트가 되기로 마음먹었었다.

아키텍트가 되기 위해서는 코딩, 아키텍처, 패턴, 커뮤니케이션 스킬 등 다양한 주제를 깊이 있게 공부하고 경험해야 했다. 나에게 아키텍트가 된다는 것은 훌륭한 개발자가 되고 아키텍처에 대해서 최대한 아는 것을 의미했기 때문이다.

우리는 일반적으로 수석 개발자나 우수한 개발자가 자신은 아키텍트라고 말하는 것을 본다. “Role of the Software Architect”에서 Simon Brown은 소프트웨어 아키텍트가 되는 것은 간단한 일이 아니라고 말한다. 점진적으로 역할을 수행하는데 필요한 경험과 자신감을 얻게 되는 과정이 필요하다. Simon Brown은 아키텍트를 역할로 간주하므로 한 사람이 수행하거나 팀에서 공유될 수 있다.

이번 글에서는 내가 생각하는 아키텍트의 역할을 정리해 보았다. 프로젝트 수행 시마다 아래의 역할을 잘 수행하려고 노력 중이다.


<이미지 출처: https://unsplash.com/photos/mfB1B1s4sMc>

아키텍트의 역할

Architectural Drivers

비즈니스 목표를 이해하고 솔루션을 제공하고 기능 및 비기능적 요구사항과 환경의 제약을 고려하여 아키텍처를 수립해야 했다. 소프트웨어 설계자는 비기능 요구 사항 및 제약 조건이 아키텍처에 큰 영향을 미치기에 이를 고려해야 한다는 점을 인식해야 한다.

소프트웨어 설계

소프트웨어 설계는 아키텍트에게는 정말 중요한 역할이다. 아키텍처 드라이버에서 제기하는 문제를 해결하고 시스템의 전체 구조에 대한 비전을 만드는 방법에 관한 것이다. 디자인 패턴과 최상위 디자인 접근 방식에 능숙해야 하고 기술 선택도 잘 해야 한다.

기술적 위험

아키텍트는 프로젝트에서 사용할 기술을 선택해야 한다. 이 행위는 위험 관리에 대한 부분이기도 하다. 복잡성이나 불확실성에 대한 리스크를 줄이고 이익이 있는 곳에서는 리스크를 도입해야 한다. 이 과정에서 가장 중요한 것은 성숙된 기술을 사용하는 것이다. 대부분의 경우에 새로운 기술에 대한 경쟁 우위 유혹을 받을 수 있다. 명심할 점은 소프트웨어 세계에서의 얼리어답터는 해당 기술의 버그를 찾아주는 선구자 역할을 수행할 수 있다.

아키텍처 진화

소프트웨어 아키텍처의 결과는 유지 관리 및 확장이 쉬운 소프트웨어야 한다. 아키텍트는 담당한 소프트웨어가 성장하도록 설계해야 한다.

코딩

아키텍트도 개발자이다. 이 점을 잊으면 안 된다. 대부분 사람들은 아키텍트가 되면 코딩할 필요가 없다고 생각한다. 이것은 매우 위험한 생각이다. 소프트웨어 아키텍트가 된다는 것은 코딩 작업등에 반드시 참여한다는 의미는 아니지만, 설계 및 구현에 대한 부분을 전달하는데 지속적으로 참여해야 함을 의미한다. 코딩에 대한 기반이 없으면 주도하고 나아갈 수 없다.

품질 보증

버그가 많은 제품을 출시하는 경우에는 아키텍트의 역할에 대한 의미가 퇴색된다. 품질에 대한 보증은 아키텍트 역할의 일부로 간주해야 한다. 코딩 표준, 디자인 원칙 및 도구 그리고 프로젝트의 품질을 보장하기 위한 기준선이 필요하다. 아키텍트가 설계한 것이 프로젝트 전반에 일관되게 구현되고 있는지 상시 확인해야 한다. 이런 행위를 아키텍처 원칙 준수라고 한다.

결론

소프트웨어 아키텍트가 되려면 정말 많은 일을 해서 경험을 쌓아야 한다는 사실을 알아야 한다. 어려운 의사 결정을 내리고 책임을 질 준비가 되어 있어야 한다. 가장 중요한 점은 실패하지 않을 제품을 제공할 것을 보장해야 한다.