54

[가상면접 사례로 배우는 대규모 시스템 설계 기초] Chap2. 개략적인 규모 추정

본 글은 가상면접 사례로 배우는 대규모 시스템 설계 기초를 읽고 정리한 글입니다. 2의 제곱수 데이터 볼륨의 단위를 2의 제곱수로 표현하면 어떻게 되는가? 최소 단위는 1바이트이고, 8비트로 구성 ASCII 문자 하나가 차지하는 메모리 크기가 1바이트 2의 X 제곱 근사치 이름 축약형 10 1천 1킬로바이트 1KB 20 1백만 1메가바이트 1MB 30 10억 1기가바이트 1GB 40 1조 1테라바이트 1TB 50 1000조 1페타바이트 1PB 모든 프로그래머가 알아야 하는 응답지연 값 L1 캐시 참조 0.5ns 분기 예측 오류 5ns L2 캐시 참조 7ns 뮤텍스 락/언락 100ns 주 메모리 참조 100ns Zippy로 1KB 압축 10us 1 Gbps 네트워크로 2KB 전송 20us 메모리에서 1MB..

[가상면접 사례로 배우는 대규모 시스템 설계 기초] Chap12. 채팅 시스템

본 글은 가상면접 사례로 배우는 대규모 시스템 설계 기초를 읽고 정리한 글입니다. 페이스북 메신저와 유사한 채팅 앱을 설계해 볼 것이다. 응답지연이 낮은 일대일 채팅 기능 최대 100명까지 참여할 수 있는 그룹 채팅 기능 사용자의 접속상태 표시 기능 다양한 단말 지원. 하나의 계정으로 여러 단말에 동시 접속 지원 푸시 알림 5천만 DAU(Daily Acitve User)를 처리해야 함 2단계 개략적 설계안 제시 및 동의 구하기 클라이언트는 서로 직접 통신하지 않는다. 각 클라이언트는 채팅 서비스와 통신한다. 채팅 서비스는 아래 기능을 제공해야 함. 클라이언트로부터 메시지 수신 메시지 수신자(recipient) 결정 및 전달 수신자가 접속 상태가 아닌 경우, 접속할 때까지 해당 메시지 보관 채팅을 시작하려..

[가상면접 사례로 배우는 대규모 시스템 설계 기초] Chap01. 사용자 수에 따른 규모 확장성

https://hudi.blog/system-design-interview-alex-xu-1/ [가상면접 사례로 배우는 대규모 시스템 설계 기초] Chap01. 사용자 수에 따른 규모 확장성 이번장을 통해 사용자 수가 증가함에 따라 시스템의 규모를 확장해 나가는 과정을 개략적으로 공부해볼 것이다. 당장 각각의 내용을 깊게 이해하기는 어렵겠지만, 규모 확장과 안정적인 시스템 hudi.blog 본 글은 위 블로그의 포스팅된 글을 참조 및 재창조 한 글임을 알립니다. 단일서버 모든 컴포넌트가 단 한대에 서버에서 실행되는 간단한 시스템부터 설계 웹 서버가 클라이언트의 모든 요청 처리 과정 클라이언트는 DNS에 도메인 이름으로 IP를 질의함. 클라이언트는 DNS 조회 결과로 IP를 얻어온다. IP 주소는 웹 서버..

클린 코드 1장 깨끗한 코드 - 깨끗한 코드

비야네 스트롭스트룹 - C++ 창시자 의존성을 최대한 줄여야 유지보수가 쉬워진다. 성능을 최적으로 유지해야 사람들이 원치않은 최적화로 코드를 망치려는 유혹에 빠지지 않는다. -> 이펙티브 자바에서 최적화는 하지 마라. 라는 주제와 비슷하다. 철저한 오류 처리, 메모리 누수, 경쟁 상태, 일관성 없는 명명법 또한 관리해라. (나는 주어진 시간 내에 처리하기 위해서 일관성 없는 명명법을 사용하는 경우가 많았음에 반성..)

책/클린 코드 2023.02.02

클린 코드 1장 깨끗한 코드 - 나쁜코드

코드가 존재하리라 - 코드가 사라질 가망은 전혀 없다. 왜? 코드는 요구사항을 상세히 표현하는 수단이니까. 어느 수준에 이르면 코드의 도움 없이 요구사항을 상세하기 표현하기란 불가능하다. 코드란? 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업. 나쁜 코드 르블랑의 법칙 -> 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 위로한 경험이 있고 나중에 정리하겠다고 다짐한 기억이 있음. but 나중은 결코 오지 않는다. 나쁜 코드로 치르는 대가 -> 개발 속도를 크게 떨어트림. -> 팀 생산성이 무척 떨어짐. 프로젝트에 인력을 추가로 투입

책/클린 코드 2023.01.31

Spring 테스트 코드 적용하기(JUnit, TDD)

TDD란? 테스트 주도 개발 테스트를 먼저 설계 및 구축 후 테스트를 통과할 수 있는 코드를 짜는 것 애자일 개발 방식 중 하나 - 코드 설계시 원하는 단계 목표에 대해 설정하여, 프로그램 결정 방향의 갭을 줄임 - 최초 목표에 맞춘 테스트를 구축하여 그에 맞게 코드를 설계하기 때문에 적은 의견 충돌 목적 - 코드의 안정성 - 기능 추가, 변경 과정에서 Side-Effect를 줄일 수 있다. - 코드 목적을 명확하게 표현 가능 JUnit이란? Java 진영의 대표적 Test Framework 단위 테스트를 위한 도구 제공 - 단위 테스트란? -코드의 특정 모듈이 의도된 대로 동작하는지 테스트하는 절차 -모든 함수와 메소드에 대한 각각의 테스트 케이스를 작성 F.I.R.S.T 원칙 - Fast: 테스트코드..