728x90
반응형

가상 면접 사례로 배우는 대규모 시스템 설계 기초

내가 보려고 정리하는 내용

그냥 읽기만 하면 기억에 잘 남지 않으니 간단하게 정리하면서 읽어보자.

 


제 1장. 사용자 수에 따른 규모 확장성

1.1 DNS, 로드밸런서, 데이터베이스 다중화

사용자가 웹사이트에 접속하여 무언가 요청을 하는 간단한 시스템에서 확장성을 다룬다.

되게 오랫동안 기억 저 안쪽에만 넣어둔 'DNS' 가 나왔다.

  • DNS: 도메인 이름(google.com)의 IP 주소를 알려준다.

사용자가 늘어감에 따라 하나의 서버에서 요청/처리를 하는 것이 아니라 여러 서버를 두어야 한다.

  • 데이터베이스
    • RDBMS
    • NoSQL
    • 각각의 장단을 고려해 바람직한 데이터베이스를 사용해야 한다.

예를 들어 아주 낮은 응답 지연시간이 요구되거나 다루는 데이터가 정형 데이터가 아닐 경우 NoSQL을 사용해야 하는 경우가 있을 수  있다.

성능을 개선하는 방법으로 확장에 대해 소개한다.

  • 수직적 규모 확장(scale up): 서버에 고사양 자원을 추가하는 행위
  • 수평적 규모 확장(scale out): 더 많은 서버를 추가하여 성능을 개선하는 행위

웹 서버에 너무 많은 부하(사용자가 많아짐)가 생기면 웹 서버가 다운될 수 있어 이를 막기 위해 로드밸런서를 도입해야한다.

로드밸런서는 웹 서버들에게 트래픽을 고르게 분산하는 역할을 한다.

우리가 흔히 LB 구성한다고 할 때의 그 LB이다.

이렇게 분산된다면 웹 계층의 경우 분산된 서버끼리 트래픽을 골고루 나누게 되는데 데이터베이스의 경우 어떻게 해결할까? 장애의 복구나 다중화가 필요하다.

데이터베이스 다중화

  • 쓰기 연산은 주 데이터베이스 서버로, 읽기 연산은 부 데이터베이스 서버 여러대로 분산시킬 수 있다.
  • 이를 통해 더 나은 성능을 기대할 수 있고
  • 데이터를 보존할 수 있어 안정성이 높아진다.
  • 하나의 데이터베이스 서버에 장애가 발생하더라도 다른 서버의 데이터를 가져와 계속 서비스 할 수 있어 가용성이 높아진다.

1.2 캐시

캐시는 값비싼 연산 결과나 자주 참조되는 데이터를 메모리에 두어 뒤이은 요청이 빨리 처리될 수 있도록 하는 저장소이다.

캐시 계층은 데이터가 잠시 보관되는 곳으로 데이터베이스보다 훨신 빠르다. 데이터 요청이 올 때 데이터베이스를 참조하기 전에 캐시에서 데이터를 반환할 수 있도록 한다.

캐시를 사용할 때 고려할 점

  • 캐시를 쓰는 바람직한 상황
  • 영구적으로 보관할 데이터라면 데이터베이스에 보관
  • 만료에 대한 정책
  • 일관성 유지
  • 캐시 단일 서버 장애 대응(캐시 분산)
  • 캐시 메모리 크기
  • 어떤 데이터를 캐시에서 삭제할지(LRU, LFU, FIFO 등 대학생 때 배웠던 그것!)

1.3 CDN(콘텐츠 전송 네트워크)

CDN은 이미지, 비디오, CCS, java script 파일 등을 캐시할 수 있는 정적 콘텐츠를 전송하는데 쓰이는, 지리적으로 분산된 서버의 네트워크이다.

CDN은 보통 제 3 사업자에 의해 운영되어 데이터 전송 양에 따라 요금을 내게 된다.

정적 콘텐츠를 웹 서버를 통해 서비스하는 것이 아니라 CDN을 통해 제공해 더 나은 성능을 보장할 수 있다.

1.4 무상태(stateless) 웹 계층

서버의 수평적 확장에서 고려해야 할 부분으로 공유되어야할 상태 정보를 웹 계층에서 제거해야한다.

공유 데이터는 NoSQL 등에 저장할 수 있다.

 

1.5 데이터 센터

엄청 커져서 분산된 데이터 센터가 만들어졌다면, 즉 다중 데이터센터 아키텍처가 만들어진 상황이라면

동기화, 테스트 ,배포 등에 고려할 점들이 많다.

시스템 컴포넌트들을 분리하여 독립적으로 확장할 수 있도록 구성해야한다.

 

1.6 메시지 큐

비동기 통신을 지원하기 위한 메시지 큐는 메시지의 버퍼 역할을 하며 비동기적으로 전송한다.

카프카, Rabbit MQ 등에서 다뤄볼 수 있다.

메시지 큐를 이용하면 서비스 또는 서버간 결합이 느슨해져서 규모 확장성을 보장하는 애플리케이션을 구성하기 좋다.

 

1.7 로그, 메트릭 그리고 자동화

로그: 애플리케이션에서 발생하는 개별 이벤트로 에러 로그를 통해 오류를 찾을 수 있다.

메트릭: 시스템의 상태를 파악할 수 있다.

  • CPU,  메모리 등 호스트 단위 메트릭
  • 캐시 성능, 디비 성능인 종합 메트릭
  • 재방문, 일별 능동 사용자 같은 것이 핵심 비즈니스 메트릭이라고 한다.

자동화: ci/cd등을 통한 생산성을 높이는 도구 또는 코드 검증 절차 자동화 등 개발 생산성을 향상 시키는 것

 

1.8 데이터베이스의 규모 확장

데이터베이스 또한 수직적/수평적 확장을 할 수 있다.

수직적 확장

  • 스케일업
  • 기존 서버에 더 많은 자원(CPU, RAM 등)을 증설하는 방법
  • 많은 양의 데이터를 보관하고 처리할 수 있다.
  • 단일 포인트 실패로 인한 문제점이 크다.
  • 비용이 많이 든다

수평적 확장

  • 데이터베이스의 수평적 확장은 샤딩이라고 부른다.
  • 더 많은 서버를 추가함으로써 성능을 향상시킨다.
  • 대규모 데이터베이스를 샤드라고 부르는 작은 단위로 분할하는 기술로 각각의 샤드에 보관되는 데이터 사이에는 중복이 없다.

 


안정적인 시스템 규모 확장을 위해서는

웹 계층은 무상태 계층으로, 모든 계층에는 다중화를 도입하고 데이터 계층 샤딩은 필수

각 계층은 독립적 서비스로 분할하며 모니터링과 자동화 필수

728x90
반응형
728x90
반응형

네이버 인턴 후기! - 면접

 

안녕하세요-! 엄청 오래전에 시작한 네이버 인턴 후기 2편.. 을 가지고 왔습니다. 너무너무 늦어서 죄송합니다 ㅠ.ㅠ

 

1편 글이 무려 4개월..? 5개월 전이네요 ㅋㅋㅋㅋ

2020.11.01 - [취업해] - [네이버/라인 플러스] 3개월 인턴 후기 (1) 서류


- 면접 준비

면접 준비는 총 약 세 단계로 정리했습니다. 첫 번째는 질문 리스트 쭉 뽑기, 두 번째는 나의 경험 정리하고 경험과 관련된 예상 질문 만들기, 마지막으로 지원한 조직의 서비스 분석하기.

 

첫 번째는 차근차근 잡플래닛, 블로그 등을 참고하며 질문 리스트를 쭉 뽑았습니다. 엑셀에 열심히 정리를 해 놓고 옆에 어떻게 말하면 되는지 답안도 정리했습니다. 정리하면서 느낀 것인데 제가 아는 것이 정말 없다는 것이었습니다. 그래서 더욱 열심히 시간을 들이며 뽑아 놓은 질문 리스트에 대한 답을 찾아보고 공부하였습니다.

 

두 번째는 지원한 자기소개서와 경험을 바탕으로 한 예상 질문을 만들었는데 첫 번째에서 나온 질문과 겹치는 것들도 많았습니다. 그래서 특별히 제가 경험한 프로젝트와 공부한 내용들을 다시 한번 꼼꼼히 살펴보고 어떤 기술을 썼었는지 분석했습니다.

 

마지막으로 제가 지원한 조직의 서비스도 알아보며 다른 경쟁 기업의 서비스를 분석하고, 어떤 기술을 썼는지도 정리를 해 보았습니다. 사실 면접 볼 때 관련된 질문을 거의 받지 않았지만 내가 앞으로 하게 될 일에 대해 더욱 기대감을 높일 수 있었고 이 기대감이 동기가 되어 면접을 더욱 열심히 준비할 수 있었습니다.

 

- 면접 당일

오전에 학원 수업이 있어서 학원에 갔다가 일찍 마치고 강남역에서 무려 메이크업까지 받았습니다... 굳이 필요 있었을까 싶었지만 처음 받아본 메이크업이 좋은 기운을 가져다주었으면 싶었고 언니의 강요로... ㅎㅎ

면접 장소는 네이버 본사였습니다. 크으.. 가슴이 웅장해지더랍니다. 긴장했는지 한 30분 정도 일찍 도착했는데 15분 전인가..? 10분 전에는 입장이 안되어 1층에서 기다렸습니다. 잘 신지 않는 구두 덕에 발 뒤꿈치는 아프지... 긴장한 탓에 배도 싸르르하지.. 참 견디기 힘든 시간이었습니다.

조금 기다린 후 드디어 입장하게 되었고 면접 장소 앞에서 대기하게 되었습니다. 앞에 들어간 지원자분이 아직 면접을 보고 있었고 저는 열심히 정리한 노트를 보며 어떤 질문을 하실까 긴장하며 대기하다가 순서가 되어 들어갔습니다.

면접관은 두 분이 계셨고 편안한 분위기였습니다. 약 한시간 정도 진행이 되었으며 제가 예상한 대로 컴퓨터 공학 전공 기초와 알고리즘 위주의 질문을 주셨습니다. 역시 알고리즘을 잘 알아야 하는구나 싶었고 다행히 제가 공부한 내용이 많이 나와 판서도 직접 하며 질문에 대답할 수 있었습니다. 

제 영어 성적에 관한 이야기도 나왔습니다. 업무와 관련된 것은 아니지만 정말 순수히 궁금해서 물어보시는 것 같아 잘 대답했고 업무를 하며 해외 사이트나 영어로 된 정보도 빠르게 습득하여 업무에 적용할 수 있을 것이라고 나름 연결하여 잘 대답했습니다.

한 시간이 생각보다 금방 지나갔습니다. 제 생에 첫 면접이라 그랬는지 많이 긴장하긴 했습니다. 그래서 면접을 마치고서도 면접을 잘 본 것인지.. 떨어진 것인지 정말이지 감이 안 잡혔습니다.


그래도 몇일 뒤에 연락이 오더군요!! 합격이라고!!!!!!! 크아... 확인 전화받고.. '어.. 저 000인데 저한테 거신 거 맞죠..? 저 맞죠??'라고 했습니다 ㅋㅋㅋㅋㅋ 그랬더니 엄청 웃더군요!!

 

제가 합격할 수 있었던 이유는 지원한 직무와 관련된 경험과 컴퓨터 공학 기초 전공지식에 잘 대답한 점이 큰 장점으로 작용했기 때문인 것 같습니다. 합격하고 약 10일 뒤 출근하는 일정이었으므로 저는 아주 신나게... 신나게.. 삶을 즐겼습니다!

 

그럼 다음에는 인턴을 하는 3개월 동안 무얼 했는지, 무얼 배우고 무얼 놓쳤는지 정리하여 돌아오겠습니다!!

728x90
반응형
728x90
반응형

전형 포기의 이유..

 

딱 일주일 전이 하나금융티아이 신입 공채 1차 면접날이었습니다. 

2020/08/29 - [취업해] - 하나금융티아이 필기시험(코딩테스트) 후기

요 글에서 볼 수 있듯이 코딩테스트 통과하고 면접 일자가 잡혀서 매우 행복했었죠...

 

하나금융티아이 필기시험(코딩테스트) 후기

하나금융티아이 코딩테스트 지난주 금요일(21일) 하나금융티아이에서 온라인 코딩테스트를 봤습니다. 한 3주 전쯤이었나.. 인성검사를 봤고, 코딩테스트는 이렇게 따로 보게 하더라고요! 다른 ��

haonly.tistory.com

 

그러나 저는 면접에 안가게 되었는데요...

사실 저는 8월 말 취업하여 직장에 다니고 있습니다. 

그런데 누구나 조금 더 나은 환경을 원하잖아요? 그래서 저도 계속해서 도전하고 시험 보고, 공부했던 겁니다 ㅎㅎ

(지금 다니는 회사도 나쁘지는 않지만 저는 원하는 목표가 있기 때문에 계속 준비하고 있어요!)


아무튼! 회사에 다니고 있는데 하필 면접 일자와 중요한 발표 날짜가 겹쳐버린 겁니다...

코XX 때문에... 면접이 2주가량 미뤄졌는데 미뤄지기 전 면접일은 토요일이었지만.. 미뤄진 면접일은 금요일.. 따흑... 진짜...

 

중요한 발표가 마음에 걸려 하나금융티아이 면접을 갈지 말지 고민하다가 면접 일자를 미뤄줄 수 없겠냐고 메일을 보내게 됐습니다....!

그런데 다음날이 되도록 답장이 오지 않아 카톡 플러스친구로 문의까지 남겼죠.


그런데 면접 전날이 되도록 답변을 받을 수 없었습니다ㅠㅠㅠ 결국 '그래.. 여기(지금 다니는 회사)서 존버하다가 준비해서 재취업 하자..ㅠㅠ'라는 마음으로 면접을 포기해야지! 하는데, 카톡을 받게 됩니다. 

아니 근데,, 일처리 왜 이렇게 느리냐고,, 

ㅎㅎ 그래서 전형을 포기하게 되었습니다~! 


사실.. 하나금융티아이도 굉장히 좋은 회사고 경력 개발하기에 정말 좋아 보입니다. 

그런데 저는 하나금융티아이에 들어간다고 하더라도 다른 회사로의 재취업을 꿈꾸게 될 것 같았습니다. 

어차피 재취업 하게 될 것... 회사를 옮겨 다니기보다 한 곳(지금 있는 곳)에 있으며 능력 쌓아서 옮기는 것이 조금 더 쉬울 것 같다는 생각이 들어 마음 놓고 전형을 포기하게 된 것 같습니다. 

나중에 지금 있는 회사에서 힘들 때 '아.. 그 때 면접 볼 걸!' 이러면서 후회할 것 같습니다. 하지만 지금 내릴 수 있는 결정 중 가장 알맞은 결정을 했다고 생각합니다. 


그래도 마음은 조금 싱숭생숭합니다. 취업은 정말 어렵습니다. 

마음도 갉아먹고.. 자존감도 정말 많이 낮아지고.. 그만큼 예민해지니 사람들과의 관계에서도 실수를 할 때가 있는 것 같습니다. 

보통 힘내자, 이겨내야지 하는데 이제는 이겨내기보다는 '내가 지금 힘들구나' 하고 있습니다. 

 

그럼 이만.

728x90
반응형

+ Recent posts