전체 글 (57) 썸네일형 리스트형 가상 면접 사례로 배우는 대규모 시스템 설계 기초(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주소 반환해당 .. 프로그래밍을 더 쉽게, AI Assistant(cursor, code rabbit, mcp) 들어가며최근에 개발자 네트워킹 행사를 다녀오며, 스타트업에서 일하시는 분들의 이야기를 들을 수 있었다. 연차가 낮아도 개발 조직에서의 권한이 높고, 비즈니스를 제외한 부분에서의 개발 자유도가 높은 조직에서 일을 하시는 분들이었다. 자의든 타의든 개발을 더 '편리'하게 만드는 툴들을 열심히 적용하여 팀의 생산성을 높이고자 노력하시는 모습이 엿보였는데, ai assistant 툴들을 활용하는 모습이 가장 인상깊었다.내가 일하는 조직은 보안과 전통적 방법의 개발 방식이 메인이 되고 있어서, 위와 같은 툴들을 이용하는 것이 조직 내에서 이야기가 돌지 않는다. cursor나 mcp는 주변에서 이야기를 많이 하여 접하고는 있었지만, 코드를 리뷰해주는 code rabbit은 이번에 처음 알게되었다. 개발 생산성 향상.. 개인정보 필드 암호화 대응기 들어가며최근에 금융권 특정 기관과 전용선으로 통신하던 환경에서, 개인정보 필드에 대한 암호화 요구사항을 받았다. 전용선을 사용할 때 네트워크 레벨에서 보안이 지켜진다면 특별히 필드 암호화를 할 필요는 없다는 것으로 정리하고 초기 프로세스를 구축했으나, 아마 기관 측 내부 감사 등의 사유로 정보보안 강화 차원에서 진행하려는 것으로 보였다.기존에 암복호화는 공통 모듈에서 제공하는 인터페이스를 통해 이루어져와서, 암복호화 모듈에 대한 협의는 해당 부서에서 진행하고, 단위 업무에서는 application 레벨에서의 도메인 로직에만 집중하면 되는 것으로 생각하였다. 하지만 기존 공통 모듈에서 제공하는 기능이 기관 측 암호화 요구사항을 충족하지 못하는 문제를 발견하였다. 기관 측 암호화 요구사항기관 측에서 요구하는.. 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.. Decorator 패턴 Decoratorattach new behaviors to objects by placing these objects inside special wrapper objects that contain the behaviors.참고자료refactoring.guruhead first design patterns 서적UMLClient 여러 데코레이터로 wrapping하여 추가 작업(concrete decorator에서 정의한) 실행 가능Component > wrappers and wrapped objects를 위한 인터페이스나 추상 클래스Concrete Component 실제로 wrapped 되는 subclass로, 기본 기능에 해당Base Decorator > wrapping 시킬 object의 상위 인터페이스.. 이전 1 2 3 4 ··· 8 다음