📖 제목 : 가상 면접 사례로 배우는 대규모 시스템 설계 기초 : 6장
🙋♂️ 저자 : 알렉스 쉬
6장에서는 키-값 저장소 설계
에 대해 다루고 있다. 우선 키-값 저장소
가 뭔지부터 알아본 후, 단일 서버 환경에서의 키값 저장소에서부터 분산 시스템으로 확장할 경우까지 대규모 시스템 설계의 핵심 개념들을 알아보기로 하자.
[독서기록] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 5장
📖 제목 : 가상 면접 사례로 배우는 대규모 시스템 설계 기초 : 5장
🙋♂️ 저자 : 알렉스 쉬
5장에서는 안정 해시 설계
에 대해 다루고 있다.
안정해시란 서버가 추가되거나 제거되더라도, 가능한 한 많은 키가 이동하지 않도록(다시 분산할 필요가 없도록) 도와주는 알고리즘이다. 이 개념을 이해하기 위해 우선 실제 서비스에서 키-값이 어떻게 쓰이는 지 몇 가지 사례를 생각해 본 후 안정 해시 설계에 대해서도 정리해보자.
파사드(Facade) 패턴과 Service 레이어의 차이에 대하여 알아보자
개발을 하다보면 컨트롤러 내부 메서드 하나에서 여러 서비스나 레포지토리를 호출해야 하는 경우가 종종 생긴다. 예를 들어, 아래와 같이 회원가입 기능을 구현할 때 유저 정보 저장, 메일 인증번호 발송, 레디스 캐시 저장, 이벤트 쿠폰 발행
등의 작업이 같이 수행되는 경우다.
1 |
|
이런 경우 파사드 패턴을 쓰면 좋다고 하는데, 그냥 서비스 메서드 하나로 처리하는 것과 크게 다르지 않아 보였다. 의아한 김에 무슨 차이가 있는지를 알아보았다.
[독서기록] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 4장
📖 제목 : 가상 면접 사례로 배우는 대규모 시스템 설계 기초 : 4장
🙋♂️ 저자 : 알렉스 쉬
4장에서는 처리율 제한 장치(Rate Limiter) 설계
에 대해 다루고 있다.
처리율 제한 장치란 말 그대로 특정 시간 동안 서버로 오는 클라이언트의 요청의 수를 제한하는 장치다. 한 번에 대용량 트래픽을 처리해도 모자랄 판에 요청을 막는 이유는 뭘까? 이 장에서는 왜 처리율 제한이 필요한지와 함께 대표적인 처리율 제한 알고리즘들을 살펴보고 있다.
스프링은 어떻게 동작할까? 요청부터 응답까지 흐름 정리
스프링은 어떻게 동작할까?
개발 할 때 맨날 쓰고 있지만 스프링이 내부적으로 어떻게 동작하는지에 대해서는 정확히 설명하기 어려웠다. 그래서 요청부터 응답부터 어떤 흐름을 거치는지, 각 단계에서 어떤 동작을 하는지 정리해보기로 했다.
Node.js로 회원가입 하기(비밀번호 암호화) 6
🙋♂️1. Node.js로 5분만에 API 만들기
🙋♂️2. Node.js로 POST API 만들기
🙋♂️3. Node.js로 데이터 저장하기
🙋♂️4. Node.js에 저장된 데이터에 인덱스 붙이기, 데이터 삭제하기
🙋♂️5. Node.js로 세션 방식 로그인 구현하기
이번에는 미뤄뒀던 회원가입 기능을 구현해보자. 비밀번호 암호화 하는 방법도 함께 알아보겠다. 암호화에는 단방향 해시함수 bcrypt
를 사용할 예정이다.
Node.js에서 .env파일로 개인정보 관리하기
개발을 하다보면 DB 접속정보나 Secret Key 같은 민감한 정보들이 생긴다. yml 파일에 써놓거나 하드코딩으로 코드에 박아놨다가 이런 정보들이 탈취되면 문제가 생길 수 있으니 사전에 관리를 하는 게 좋다. 이번에는 이런 중요한 정보들을 관리할 수 있는 .env
파일을 사용해보자.
Node.js로 세션 방식 로그인 구현하기 5
🙋♂️1. Node.js로 5분만에 API 만들기
🙋♂️2. Node.js로 POST API 만들기
🙋♂️3. Node.js로 데이터 저장하기
🙋♂️4. Node.js에 저장된 데이터에 인덱스 붙이기, 데이터 삭제하기
이번에는 로그인 기능을 구현해보자. 제일 기본적인 세션 저장 방식으로 구현하고, 암호화는 고려하지 않는다(원래는 꼭 비밀번호 암호화 해야 함!).
[독서기록] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2, 3장
📖 제목 : 가상 면접 사례로 배우는 대규모 시스템 설계 기초 : 2, 3장
🙋♂️ 저자 : 알렉스 쉬
시스템 설계 관련 면접을 보면 “이 서비스에 필요한 서버 수는 몇 대일까?” “하루에 얼마나 많은 요청이 들어올까?” “저장공간은 얼마나 필요할까?” 같은 질문을 받게 될 수 있다. 이런 질문들은 정확한 숫자를 요구하는 게 아니라, 얼마나 필요할 지를 대략적으로 계산해보는 능력을 보려는 의도다. 이 추론을 개략적인 규모 추정
이라고 한다. 쉽게 말해서 ‘대충 머릿속으로 계산해봤을 때 대략 어느 정도인지 감 잡기’를 할 수 있는지가 포인트다. 예시와 함께 어떻게 계산해야 할 지 알아보자.
그리고 3장에서는 시스템 설계 면접은 왜 보는 것인지
에 대해 생각해볼 수 있다.
Callback, Promise, async/await 쉽게 이해하기
자바스크립트는 싱글 스레드 언어
다. 즉, 한 번에 한 가지 작업만 할 수 있다는 뜻이다.
웹 서비스는 다양한 동작이 필요하다. DB 읽기, 파일 읽기, API 요청 보내기, 사용자 입력...
이 작업 하나하나가 끝날 때까지 기다려야 한다면 어떨까? 파일 하나가 다운로드 완료 될 때까지 기다려야 다음 파일을 받을 수 있고, 파일들이 다운로드 되는 동안에는 다른 동작을 아무것도 할 수 없을 것이다. 그래서 자바스크립트에서는 비동기asynchronous로 작업을 처리하는 경우가 많다. 그렇구나~ 하고 넘어가기에는 또 이상한 점이 있다. 비동기로 작업을 하려면 스레드가 두 개 이상 있어야 하는 거 아닌가? 하는 점이다.
쉽게 말해서 카페에 직원이 두 명은 있어야 한 명이 주문 받고 한 명은 음료 제조를 할 텐데, 직원이 하나 뿐이라면 어떻게 작업 분담이 가능하냐는 것이다.