System Designing Pastebin
System Design 2021. 8. 3. 00:02

목표 Site pastebin.com, controlc.com 등 Pastebin 서비스란? 사용자가 text를 네트워크를 통해서 특정 공간에 저장을 하고, 접근 가능한 unique한 url을 받음으로써 해당 url로 해당 저장 공간을 접근 할 수 있는 서비스 2021.08.01 - [System Design] - Shortening Url Service Design Shortening Url Service를 응용한 서비스라고 생각하면 된다. 시스템 요구사항 기능 요구 조건 text를 upload 또는 붙여 넣기로 저장이 가능해야한다. 저장된 데이터를 접근 가능한 unique url을 제공 한다. 일정 시간이 지나면 자동으로 해당 url은 종료되거나, 사용자가 지정한게 있다면 해당 시간 이후 삭제 된다...

Shortening Url Service Design
System Design 2021. 8. 1. 22:08

Similar Services bit.ly, ow.ly, short.io Service Key Point 긴 url을 짧게 만들어 준다. 짧은 url을 browser에 붙이면 긴 url로 redirection 시킨다. 장치별 link를 최적화 가능하다. 접근 url의 history를 분석가능하다. AD에 해당 url을 붙임으로써 AD의 효용성을 분석할 수 있다. 요구사항 분석 기능 요구사항 긴 url을 짧고 unique하게 url로 제공 가능해야 한다. 충분히 복사 붙여넣기 등이 쉽게 될 수 있는 짧은 길이로 제공해야한다. 사용자가 short link를 접근 할 경우 original link로 redirect 시켜줘야 한다. 사용자가 필요할 경우 특수한 custom url을 제공 할 수 있어야 한다. 일..

System Design 공략
System Design 2021. 8. 1. 19:18

요구 사항을 명확하게 해라 Scope와 해결하고자 하는 문제를 명확히 해야한다. SD(System design)은 정답이 없다. 시스템 사이즈를 예측해라 우리가 SD할 Scale은 얼마인가? 이것을 예측 함으로써 scaling, Partitioning, load balancing, caching 등을 할지 정의 할 수 있다. 시스템 Scale은 얼마인가요? 얼마나 많은 TX가 발생할까요? 1초에 1분에 1시간에... Storage는 얼마나 필요할까요? 사용자가 사진을 최대 얼마만큼 올릴 수 있죠? 네트워크 사용량(Bandwidth)은 얼마일까요? 시스템 인터페이스를 정의 해라 이 시스템에서 사용하게될 API는 어떤 종류가 있는가? 이를 통해서 정확한 요구조건과 비용이 측정될 수 있다. Data Mode을..

Realization
System Design 2020. 10. 10. 14:49

Realization 한국어로는 실체화정도의 번역이 가능하다. 이는 일반화와도 비슷한 면이 있는데 2020/10/09 - [System Design] - Generalization 일반화는 상속받은 객체 뿐만이아니라 상속을 하게 되는 객체도 독립 Instance로 표현될 가능성이 있다. 물론 추상객체가 아닌 경우에 가능하다. 그러나 Realization은 그렇지 않다. 반듯이 상속되어 구현 되어져야 하는 방식이다. 예를 들자면 총의 기능이 무었인지 정의 되어있는 문서가 있다고 생각해 보겠다. 발사된다. 총알을 넣는다. 발사 버튼이 있다. 이와 같은 Protocol 또는 Interface는 자체적으로 활용성을 갖을 순 없다. 그러나 이와 같은 Protocol을 만족시키는 권총이라는 클래스를 만들어 실체화 ..

Aggregation and Composition
System Design 2020. 10. 10. 14:37

Aggregation and Composition 앞서서는 Dependency와도 의미가 혼동 된다고 했는데, 2020/10/09 - [System Design] - Dependency Aggregation의 경우는 Relationship과 완전히 동일하게 표현된다. 반면에 Composition은 Ownership에 대한 표현을 명확히하는데 목표를 두고 있다. 상기의 그림을 보면 철수가 없다고 해도 게임기는 독립 객체로서 살아 갈 수 있다. 만약에 철수가 사라지면 게임기도 반듯이 같이 사라져야 한다고 하면 어떻게 표현되어야 할까? 이때 사용되는게 Composition이다.

Dependency
System Design 2020. 10. 10. 14:32

Dependency A 클래스가 B클래스를 반듯이 필요로 하는 관계를 나타낸다. 상기 그림을 보면 Association과 틀릴게 없어 보인다. 2020/10/09 - [System Design] - Associations Associations Associations 클래스 간의 관계를 나타냄 상호관의 관계를 상호 참조 한다고 하는 것을 Tight Coupling되었다고 하며, 이와같은 상호 참조를 피해야한다. 한쪽만 알고 반대쪽을 모르는 경우, 상기 그림�� enumclass.tistory.com 그리고 실질적으로 다를게 별로 없긴 한데, 다양한 자료를 찾아 보아도, 역시 명확하게 A와 B는 이런식으로 분리 된다는 대표적인 내용을 찾아 보기 어려웠다. 그래서 몇가지 대표 되는 차이점의 내용을 남겨 보고..

Generalization
System Design 2020. 10. 10. 14:19

Generalization 일반화라고 한국어로 표시 되며, 여러 사물의 특징을 일반화 시킨것을 Generalization이라고 Data측면에서는 표현한다. 그러나 ERD에 입장에서는 상속을 받아 실체화 시킨다는 표현이 더 맞는 것 같다. 사람 클래스를 상속받아서 철수와 영희라는 클래스를 만든다. 상기와 같은 경우는 하나의 Class를 상속받는 다고 본다면, 이를 Single Inheritance 단일 상속 이라고 한다. 반대로 여러 Class에서 하나의 클래스로 상속 받는 경우도 있다. Multiple Inheritance 다중 상속 다중 상속이라는 것으로 C++, Perl, Python 등의 언어가 이를 지원하지만, 일반적으로는 구현의 복잡성 이유로 지원 하지 않는 방식이다.

Associations
System Design 2020. 10. 10. 14:05

Associations 클래스 간의 관계를 나타냄 상호관의 관계를 상호 참조 한다고 하는 것을 Tight Coupling되었다고 하며, 이와같은 상호 참조를 피해야한다. 한쪽만 알고 반대쪽을 모르는 경우, 상기 그림에서 2번째 같은 경우를 Directed Association이라고 한다. Multiplicity Association의 관계에 대한 Cardinality 즉 객체관의 관계 참여자 표현 방법이다. 클래스 간의 Carinality를 표현 할 수 도 있지만 Properties로 표현도 가능하다. 게임 Class를 철수는 gameTitle이라는 Properties로써 사용하고 있다. 철수 Class에는 Multiplicity가 표현되어 있지 않는데 이는 기본적으로 1로 생각하면 된다. 만약 0이나 ..

Class Diagram
System Design 2020. 10. 10. 13:52

Class Diagram 클래스 다이어 그램은 3개의 부분으로 이루어져 있음 Class Name : Upper Camel Case Atrributes : Lower Camel Case Class를 구성하는 Data Methods : Lower Camel Case Class를 구성하는 Function Visibility Class의 Attributes와 Method를 어디까지 Expose 할 것인가 범위 설정자 - Private : 외부 오픈하지 않음 + Public : 외부 오픈함 # Protected : Child Classes에서만 접근 가능함 ~ Package : 동일 패키지 Path 내에 있는 Class만 접근 가능