Life/컨퍼런스

[코드스쿼드] 애플리케이션 아키텍처와 객체지향 - 조영호

샤아이인 2022. 5. 22.

PPT의 모든 출처는 우아한 형제들의 조영호 님께 있습니다. 문제 될 시 삭제하도록 하겠습니다.#

코드스쿼드의 열정적인 멤버들과 함께

이번 코드스쿼드 5월 콘퍼런스로 우아한 형제들의 조영호 님께서 초청 강연을 해주셨다.

 

1. 도메인의 개념

우리가 소프트웨어 적으로 해결해야 하는 문제의 대상이 도메인이다.

이번 강연에서는 영화 예약 시스템을 도메인으로 예제를 만들어 보여주셨다.

 

2. 레이어 아키텍처

이를 통해 맨 처음 설명해주신 개념으로는 Transaction Script 와 Domain Model에 대한 차이이다.

이중 Transaction Script는 절차 지향적인 방식이고, Domain Model은 객체 지향적인 방식에 해당된다.

 

둘 간의 차이에 대하여 이해하는 것 이 매우 중요했다.

 

2-1) Transaction Script

이 방식은 너무 이른 초기에 데이터를 먼저 정해버린다는 것이 가장 큰 문제이다!

전체 문맥(context)은 생각하지도 않고, 우선적으로 데이터를 정해버렸기 때문에 다른 객체들과 메시지를 주고받을 때 수신자의 인터페이스에 억지로 끼워 맞추게 되어 버린다.

 

또한 단순 데이터를 보관하는 구조체가 되어버리기 때문에 Getter, Setter가 난무하는 상황이 된다.

이에 따라 각각의 DAO들 또한 모두 필요하게 될 것 이다.

이는 매우 복잡한 상황이 되어버린다.

이렇게 절차적인 방식은 코드의 흐름을 조절하는 부분이 한 곳에 모여있는 중앙 집중식(Centralized)이 되어버리기 때문에

여러 곳에서 데이터를 한곳에 집합시킨 후, 가공을 하게 된다.

2-2) Domain Model

이 방식은 협력하는 객체들의 공동체를 생각하는 것이다.

협력을 하기 위해서는 책임을 정보의 전문가에게 할당하는 것이 핵심이다.

 

예를 들어 "영화를 예매하라!"라는 메시지가 전달된다면, 이를 받아 처리할 수 있는 가장 전문가는 누구일까?

Screening이 가능할 것이다. Screening은 영화 상영 정보를 알고 있기 때문이다.

 

하지만 상영정보를 통해 예매할 때는 또다시 가격 정보에 대한 전문가가 필요하다.

이는 Movie 가 해당 기능을 해줄 수 있다.

즉, "영화를 예매하라!" -> screening -> movie 순으로 메시지가 전달되어 책임을 위임시키는 것이다.

 

이런 방식은 위임식(delegated)/ 분산식(dispersed) 제어 스타일 이기 때문에

다른 객체에게 위임을 시키는 과정의 연속이 된다. 데이터는 객체 스스로 갖고 있게 된다.

 

3. 선택의 기로에서

그럼 우리는 과연 둘 중 어느 방식을 선택해야 할까?

무조건 Domain Model 방식일 것 같지만 그렇지는 않다 하셨다.

모든 것을 객체지향적으로 구현하면서 복잡하게 갈 필요는 없다 하셨다.

 

구현을 하다 보면 필요한 순간에 객체지향적으로 코드를 짜면 되며, 절치 지향적 코드도 필요한 순간에 매우 좋은 코드라고 하셨다.

 

따라서 다음을 명심하면서 코딩을 하자.

다만 transaction script를 사용할 경우 한 가지 큰 단점이 있다.

기능을 확장시킬 경우, 기존 코드를 수정해야 한다는 두려움이다.

이에 반해 객체지향적 코드는 확장에는 열려있고, 변경에는 닫혀있다 (Open Closed Principle)

 

Domain Model은 복잡선을 알고리즘에서 분리하고 객체 간의 관계로 만들 수 있다.

유효성 검사, 계산, 파생 등이 포함된 복잡하고 끊임없이 변하는 비즈니스 규칙을 구현해야 한다면
객체 모델을 사용해 비즈니스 규칙을 처리하는 것이 현명하다.
- Martin Fowler

 

 

따라서 변경이 발생할 때마다 요구 사항을 반영하기 쉽도록 만들어야 한다.

조영호 님이 추천한 방식은, 일단 절차 지향적으로 작동하는 코드를 작성한 후, Refactoring을 하면서 객체지향 적으로 바꿔 나가길 권장하셨다.

 

4. 끝으로

이번 발표같은 경우 나는 조영호 님의 오브젝트를 7장까지는 읽은 상태여서 발표를 들을 때 매우 잘 이해할 수 있었다.

책에서의 중요 내용들을 핵심만 뽑아서 설명해주시는 모습에 감탄을 안 할 수가 없었다.

 

마지막으로 조영호 님과 함께 찍은 사진을 끝으로 마무리하겠다.

댓글