본문 바로가기

System Design

Object-Oriented Design (개체 지향 디자인을 위한 체크리스트)

반응형

ood 설명에 앞서서 내 생각을 말하자면.. 이 내용 역시 번역에 가까운 포스팅이고 당장 실제로 내가 겪은 개발 케이스는 아니다. 그럼에도 불구하고, 이런 글을 포스팅 하는 것은 끊임없이 시스템을 어떻게 잘 구축할 것인지에 대해 훈련이 되어 있어야 한다고 믿기 때문에 계속 포스팅을 하는 것이다. 전쟁에서 대규모 전투가 없더라도 그것을 가정하고 훈련을 하는 것처럼 시스템 디자인에 대한 생각들도 '훈련'을 스스로 해야 한다고 본다. 물론 운이 좋아서 내가 일하는 직장에서 시스템 디자인을 실험하기 좋은 트래픽과 환경, 그리고 프로젝트를 맡게 되면 가장 베트스겠지만, 돈을 받고 일하는 직장에선 그렇지 않을 확률이 꽤 크므로, 모의로 연습을 해나가자. 

여러 시스템 디자인 관련 문제가 있을 때 다음과 같은 것들을 체크해야 한다. 

  1. 모호한 것을 분명히 해야 한다.
    • 가령, 문제를 명확히 하기 위한 질문을 해서 문제를 명확히 해야 한다. 가령, 육하 원칙을 생각해야 한다. 누가, 무엇을, 어디서, 언제, 어떻게, 왜 등
    • 가령, coffee maker 를 개체 지향 디자인으로 개발을 기획한다고 해보자. 이때 커피 메이커는 시간당 수백명의 고객에게 커피를 제공해야 하고, 수십 가지 종류의 커피를 제공해야 할 수 있다. 또한, 매우 심플하게 한 가지 종류의 커피에 대해서 적은 수의 사람에게 커피를 만들어주는 커피메이커일 수도 있다. 즉, 비즈니스 맥락을 파악하고 정량적인 Estimation 을 올바른 가정을 통해 해야만 한다. (이러한 가정들이 디자인에 중요한 임팩트를 끼칠 것이다.)
  2. 핵심 object들을 명확히 정의해야 한다.
    • 예로 들면, restaurant 을 object-oriented design 한다고 가정해보자. 그럼 core objects 는 Table, Guest, Party, Order, Meal, Employee, Server, Host 등이 될 것이다.
  3. 그 object 들 간의 관계를 분석하자.
    • 위에서 정의내린 core object 들 간의 관계를 분석해야 한다. 어떤 object들이 서로 상속관계이고, many-to-many, one-to-many 관계 등인지를 싹 다 정의하자.
      • Restaurant 디자인을 예로 들면..
      • Party 는 Array of Guest 를 가져야만 한다.
      • Server 와 Host 는 부모인 Employee 로부터 상속된다.
      • 각 Table 은 하나의 Party 를 갖지만, 각 Party 는 여러 개의 Tables 를 갖는다. (즉, Table 과 Party 는 many-to-one 관계다!)
      • 하나의 Restaurant 에는 하나의 Host 만 갖는다.
    • 물론, 이 디자인 역시 완벽하지 않다. 항상 해당 가정이 맞는지 확인하기 위해 기획자든 인터뷰어든 질문을 통해 완벽하게 개체간 관계를 분석하자!
  4. 액션(코드)를 고안하자.
    • 3 번까지 따라왔다면, 기초적인 object-oriented design 의 윤곽은 잡은 셈이다. 남은 것은 각 object가 가져야할 key action 을 정하고 이 액션이 어떻게 다른 object와 상호작용을 하는지 그려야 한다. Key action은 소위 public interface가 될 것이다.(보통은..)
    • Key action을 예로 들면.. (계속 레스토랑 프로젝트라고 가정하면)
      • Party 는 Restaurant 에서 '개최된다.'(walk into)
      • Guest 는 Host 로부터 Table 을 '요청한다'(request)
      • Host 는 예약을 '찾고'(lookup), 만약 Table 이 '존재하면'(if exist the table), Party 를 Table 에 '할당한다'(assign)
      • 그렇지 않으면, party는 대기명단의 끝에 '등록된다.'
      • Party 가 하나 떠나면, table도 하나 비기 때문에 리스트에 있는 새로운 party를 하나 빈 table에 할당한다.
반응형

'System Design' 카테고리의 다른 글

Instagram system design(generating news feed)  (0) 2020.06.21
Tiny URL 설계 레퍼런스  (0) 2020.05.19
Basic Steps to System Design for Real Service  (0) 2020.05.16
Data Partitioning Basics  (0) 2020.05.16
Cache ? / Cache Invalidation  (0) 2020.05.15