본문 바로가기

computer science

(11)
가상 면접 사례로 배우는 대규모 시스템 설계 기초(2장. 개략적인 규모 추정) 2장. 개략적인 규모 추정응답지연 값가용성에 관계된 수치들예제: 트위터 QPS와 저장소 요구량 추정팁개략적인 규모 추정(back-of-the-envelope estimation)은 보편적으로 통용되는 성능 수치상에서 사고 실험(thought experiments)을 행하여 추정치를 계산하는 행위로서, 어떤 설계가 요구사항에 부합할 것인지 보기 위한 것응답지연 값메모리는 빠르지만 디스크는 아직 느림디스크 탐색(seek)은 가능한 한 피하라단순한 압축 알고리즘은 빠름데이터를 인터넷으로 전송하기 전에 가능하면 압축하라데이터 센터는 보통 여러 지역(region)에 분산되어 있고, 센터들 간에 데이터를 주고받는 데는 시간이 걸림 가용성에 관계된 수치들고가용성(high availability)은 시스템이 오랜 시간..
가상 면접 사례로 배우는 대규모 시스템 설계 기초(1장. 사용자 수에 따른 규모 확장성) 1장. 사용자 수에 따른 규모 확장성단일서버데이터베이스수직적 규모 확장 vs 수평적 규모 확장 - 로드밸런서 - 데이터베이스 다중화캐시CDN무상태(stateless) 웹 계층데이터 센터메시지 큐로그, 메트릭, 자동화데이터베이스의 규모 확장백만 사용자, 그 이상웹 계층은 무상태 계층으로모든 계층에 다중화 도입가능한 많은 데이터를 캐시여러 데이터 센터 지원정적 콘텐츠는 CDN을 통해 서비스데이터 계층은 샤딩을 통해 규모 확장각 계층은 독립적 서비스로 분할CI/CD 자동화 도구 활용 단일 서버웹 앱, 데이터베이스, 캐시 등이 서버 한 대에서 실행사용자는 도메인 이름(api.mysite.com)을 이용해 웹사이트에 접속하고, 이 접속을 위해 DNS에 질의하여 IP주소로 변환DNS 조회 결과로 IP주소 반환해당 ..
Facade 패턴 Facade Patternstructural design pattern that provides a simplified interface to a library, a framework, or any other complex set of classesrefactoring.guruProblem라이브러리나 프레임워크를 이용해 코드를 작성한다고 해보자. 이런 경우 보통은 객체를 직접 초기화하고, 객체의 의존성을 직접 관리하고, 호출 순서까지 신경써야 한다.이렇게 되면 내가 작성하려고 하는 비즈니스 로직이 3rd party 라이브러리와 강하게 결합되게 되고, 코드릴 이해하거나 유지보수하기 어렵게 만든다.SolutionFacade 패턴은 많은 구성 요소를 가진 subsystem에 간단한 인터페이스를 제공하는 클래스..
Flyweight 패턴 Flyweight Patternfit more objects into the available amount of RAM by sharing common parts of state between multiple objects instead of keeping all of the data in each objectrefactoring.guruhead first design patterns 서적Problem인스턴스가 매우 많이 생성될 때, 인스턴스 생성 비용이 높은(하지만 모든 인스턴스가 공유하는 uniqueState) 필드가 있다면, 해당 필드는 공유하고 반복되는 state는 cache를 하면 메모리 절약 가능위 예시에서는 20KB를 차지하는 sprite는 공유하고, 반복적으로 생성되어 각 인스턴스에 할당되..
Observer 패턴 Observer Patternnotify multiple objects about any events that happen to the object they're observingrefactoring guruhead first design patterns 서적UMLPublishersubscribers 리스트를 갖고 있고, subscribe() / unsubscribe() 메서드를 통해 관리상태가 변경되면 subscribers 각각에 대해 변경된 상태를 알려주는 notifySubscribers() 메서드를 가짐SubscriberSubscriber interface는 Publisher가 notifySubscribers() 메서드에서 호출할 update() 메서드를 선언ConcreteSubscribersSub..
Strangler 패턴 Strangler Pattern이 글은 다음 글(Micro service architecture for the legacy codebase)을 번역하였습니다. 새로운 기능과 기능이 도입되면 application의 복잡성이 극적으로 증가하고 코드를 유지보수하거나 새로운 기능을 추가하는 것이 더 어려워집니다. 이러한 application은 Big Ball of Mud가 됩니다. 팀은 이렇게 복잡한 application을 유지보수하기 위해서 계속해서 노력해야 하고, 누군가는 새로운 기술이나 hosting, 아키텍쳐 패턴으로 대체할 것을 제안하게 됩니다. 그런데 전체 솔루션을 대체하는 것은 매우 어렵습니다.업계에서는 microservice, serverless architecture라는 유행어가 있어 왔습니다...
Cookie & Storage, 뭘 사용해야 할까? cookie, storage, session, session cookie, web storage, local storage.. 웹 클라이언트의 저장 공간을 이야기할 때 자주 혼용해서 사용하는 단어들이다. 최근에 지인과 cookie 관련된 내용을 이야기하였는데 알고 있다고 생각했지만 설명하려고 하니 잘 알고 있지 못하고 있다는 것을 깨달아 다시 한 번 정리해보기로 했다.웹 클라이언트에서 데이터를 저장하기 위해 사용하고 있는 공간은 크게 Cookie와 Web Storage 2개로 나뉜다. 만료 시점에 따라서 각 저장 공간은 다시 2가지로 나뉜다. Cookie는 session cookies/persistent cookies로 나뉘고, Web Storage는 session storage/local storag..
비밀번호는 왜 해시 함수를 이용해 암호화를 할까?(feat. 디피 헬만 키 교환) 개요 어떤 사이트에 접속해서 아이디와 패스워드를 입력해 가입을 한 뒤 로그인을 한다고 가정해보자. 아이디와 비밀번호라는 개인정보가 모두 공개되지 않으면 좋겠지만, 아이디는 비교적 공개되어도 되는 데이터에 가깝다. 하지만 비밀번호는 절대 공개되어선 안되는 데이터다. 심지어 웹사이트를 관리하는 관리자조차도 비밀번호를 함부로 알아선 안된다. 그렇지만 사용자가 로그인을 하기 위해선 회원가입 시에 입력한 비밀번호의 값을 서버 저장소에 보관한 뒤, 로그인 시에 입력하는 비밀번호가 저장된 비밀번호와 일치하는지 확인하는 작업이 필요하다. 보통 비밀번호는 평문 자체를 저장하지 않고 암호화한 임의의 값을 저장한다. 여기에서 핵심은 다음과 같다. 데이터를 한방향으로만 흐르게 해야 한다. 임의의 값으로 암호화하는 작업은..