본문 바로가기

TIL

7주차 WIL

 

1) 확장성, 확장성, 확장성!

 

- 이번주 과제를 수행하면서 가장 많이 생각하게 된 점은 확장성에 관한 생각이다

  항상 확장성을 고려하면서 설계하고 개발할 수 있어야 한다

  특히, 개인 프로젝트를 할 때는 확장성을 고려하면서 개발하는 것이 매우 중요하다

  실무를 할 때는, 회사의 비즈니스 상황에 따라 확장성에 대한 고려가 어려운 환경도 존재한다. 

 

- 100만명이 쓰는 API를 개발하는 것과 100명이 쓰는 API를 개발하는 것은 아예 다른 일이다

   축구로 비유를 하자면 프리미어리그에서 축구를 하는 것과 조기 축구를 하는 것에 비유할 수 있다

 

-  이 점을 빨리 깨닫고, 이 방향으로 고민을 하고, 노력을 해야 백엔드 개발자로서 성장을 할 수 있다

   왜 Redis가 필요할까? 왜 Kafka가 필요할까? 왜 MicroService가 필요할까?

   모든 것은 규모가 커진 상황에서 발생하는 문제들에 대한 솔루션으로 제안된 것들이다

 

- 즉, Redis가 캐시 솔루션이고, Kafka가 Pub/Sub 구조로 이루어져 있다고 공부한다 하더라도,

  실제로 규모가 있는 상황에서 코드를 작성해보지 않으면 해당 솔루션을 '어떻게 다뤄야'하는지

  이해할 수 없다. 

 

- 실제 상황에서 코드를 작성해보는게 최선이지만,

  그런 환경이 주어져 있지 않다면 최소한 그런 환경을 가정해서 코드를 개발해야 한다. 

 

- 내가 작성하는 모든 코드나 기능이 네이버나 카카오에서 바로 쓰여야 한다고 생각해보자.

  내가 로그인 API를 만드는데, 네이버 메인 페이지의 로그인에 쓰인다고 생각해보자.

 

(1) 네이버의 메인 페이지에 1초에 몇 명이 로그인 할까? 

(2) 그럼 각각의 사용자에게 몇 초의 latency를 보장해야 할까? 

(3) 해당 사용자들의 로그인 정보를 조회하기 위한 DB는 어떻게 구축되어야 할까?

(4) 네이버는 로그인 IP가 변경되면, 새로운 로그인을 요구한다.

     로그인 IP에 대한 정보는 어디서 어떻게 관리해야 할까?

(5) 네이버 로그인을 위한 서버는 몇 개가 구축되어야 할까? 

 

- 간단해보이는 로그인 API라 하더라도, 그 규모가 '매우' 커지면 고민할 거리들이 엄청나게 늘어난다.

  그리고 그 고민의 축을 이루는 키워드들은 '성능', '데이터 정합성' 등이다.