- 우선순위
1) 컴파일러와 인터프리터의 차이점은 무엇인가?
2) 절차지향 언어와 객체지향 언어의 차이점은 무엇인가?
3) 람다란 무엇인가?
4) 스트림이란 무엇인가?
5) 리플렉션이란 무엇인가?
-----------------------------------------------------------------------------------------------------------------------------------------------------------
- Oauth란 무엇인가?
- Docker를 사용해봤는가?
- JPA의 영속성 컨텍스트란 무엇인가?
- JPA의 영속성 컨텍스트의 로컬 캐시란 무엇인가?
- JPA N+1문제란 무엇인가?
- 컴파일러와 인터프리터의 차이점은 무엇인가?
- 절차지향 언어와 객체지향 언어의 차이점은 무엇인가?
- 1400명인 서비스를 14만명이 사용한다면 어떻게 구성하겠는가?
- 인덱스를 사용해봤는가?
- 인덱스의 클러스터링 인덱스에 대해 알고 있는가?
- 멀티 스레드 코드를 짜봤는가?
- 해시 맵의 내부 구조를 이해하고 있는가?
- AWS를 사용해봤는가?
- 어떤 개발자가 되고 싶은가?
- 람다에 대해서 알고 있는가?
- 스트림에 대해서 알고 있는가?
-> map과 forEach의 차이점은 무엇인가?
- 에러 로그는 어떻게 남겼는가?
- 리플렉션을 알고 있는가?
- 가상 메모리를 알고 있는가?
- JWT에 대해 알고 있는가?
- 인프라쪽 작업을 많이 해봤는가?
- 명령형 프로그래밍과 선언형 프로그래밍의 차이점에 대해 알고 있는가?
- 최근에 어떤 책을 공부했는가?
-> 그 책에서 배운 내용을 실무에 적용해봤는가?
- 쿼리 튜닝을 어떻게 했는가?
- PUT과 POST의 차이점은 무엇인가?
- NodeJS에서 트랜잭션을 직접 설정했는가?
- 금융과 관련된 데이터를 안전하게 거래하기 위해서는 어떻게 코드를 작성해야 하는가?
- 옵저버 패턴에 대해 알고 있는가?
- DNS의 내부 구조에 대해서 알고 있는가?
- 정규화란 무엇인가?
- CORS란 무엇인가?
모의 면접 질문
- (정규화 질문에 덧붙여) 역정규화란 무엇인가?
-
1) 서버 방 탈출 | |
당신은 토스의 편리한 기능을 OPEN API로 제공하는 팀의 서버 개발자로 합류 했습니다. | |
아직 서비스의 아키텍처 파악에 한참이던 때, OPEN API 클라이언트로부터 예상보다 이른 연락을 받았습니다. | |
고객: API가 안됩니다. | |
나: 어떻게 안되세요? 오류 응답이나 메시지가 있으신가요? | |
고객: 그건 잘모르겠는데....일단 API가 안된다고 합니다. 확인 부탁드리겠습니다. | |
서버의 요청/응답 로그를 확인해보니 실패 이력을 찾을 수 없었습니다. | |
실마리를 찾기 위해, 당신은 고객에게 전화하여 문제 상황을 구체적으로 들어보고자 합니다. | |
어떤 것들을 물어보면 좋을지 상상하여 작성해 주세요. | |
OPEN API는 공중망 인터넷에서 HTTPS로 제공하고 있다고 가정합니다. | |
2) 자동이체 요청량 제어하기 | |
토스은행은 수많은 고객들의 자동이체를 처리하고 있습니다. | |
자동이체란, 고객이 설정한 날짜에 고객이 설정한 금액과 날짜에 자동으로 이체되는 서비스입니다. | |
평화롭던 어느 날, 남극은행으로의 자동이체 요청이 갑자기 급증하였고, 잠시 후에는 급기기야 자동이체가 실패하기 시작했습니다. | |
"토스에서 발생시킨 트래픽으로 인해 거래 장애가 발생하고 있으니, 초당 20건을 넘겨 요청하지 말아달라"는 내용입니다. | |
현재 남극은행으로 자동이체 해야할 건은 일 평균 1만 건입니다. | |
남극은행 본점의 요청사항을 어떻게 구현할 수 있을지 작성해 주세요. |
3) 토스 가계부 서비스 개발 | |
카드, 계좌 사용이력을 하나의 화면에 보여주는 토스 가계부 서비스를 만들려고 합니다. | |
현재 토스는 Microservice Architecture(MSA)를 사용하고 있습니다. | |
즉, 소규모의 독립적인 서비스들로 구성되어 있으며, 각 서비스는 API를 통해 서로를 호출합니다. | |
이러한 맥락에서 카드 서비스의 계좌 서비스 또한 분리되어 있습니다. | |
가계부 서비스에서는 카드 서비스와 계좌 서비스에서 데이터를 가져와야 하고, 이때 캐쉬를 적용하려고 합니다. | |
A방법 - 가계부 서비스에서 카드 서비스와 계좌 서비스에 대해 Rest API로 통신하고, 카드 서비스와 계좌 서비스 쪽에선 캐쉬 레이어를 적용 | |
B방법 - 가계부 서비스에서 카드 서비스와 계좌 서비스에 대해 Rest API로 통신하고, 가계부 서비스 측에서 캐쉬 레이러를 적용 | |
C방법 - 카드 서비스와 계좌 서비스가 각각 Kafka로 데이터를 전송하고, 가계부 서비스는 이 데이터를 Consume 하여 자체적으로 NoSql에 저장 (중간 짤림) 이를 적용 | |
각 방법으 장점, 단점을 설명해 주세요. | |
4) 온라인 명함 조회수 어뷰징 막기 | |
이번에 보험 설계사가 자신을 PR할 수 있는 '온라인 명함 서비스'를 만들었습니다. | |
'온라인 명함 서비스'는 누구나 링크를 통해서 보험 설계사의 정보를 확인하고 상담신청 할 수 있는 웹서비스 입니다. | |
온라인 명함 서비스를 널리 알리기 위해서 온라인 명함 UV(Unique Visitor) 100회 당 행운상자를 제공하는 이벤트를 만들었습니다. | |
해당 이벤트는 쿠키 기반으로 UV 카운팅하는 로직을 구현했습니다. 서버에서 쿠키를 발급하고 해당 쿠키를 가진 브라우저의 요청은 하루에 한 번만 카운팅 되도록 했습니다. | |
그런데 쿠키는 브라우저에서 쉽게 조작할 수 있습니다. 쿠키가 없는 요청은 새 쿠키가 발급되는 것을 이용하여, 조회수를 쉽게 늘리는 어뷰징이 가능한 상황입니다. 이 어뷰징을 막기 | |
위해서 어떤 방법이 있을지 작성해 주세요, | |
UV(Unique Visitor): 측정 기간 동안 중복을 제거한 순방문자 수 / 사용장수, 조회 기간에 방문한 유니크한 사람의 수 |
5) 실시간 거래량 기반 TOP 100 캐시 갱신 | |
튼튼증권에서 실시간 거래량 상위 종목 랭킹을 노출하는 서비스를 준비하고 있습니다. | |
5분 간격으로 랭킹 데이터가 갱신되는 단순한 구조라, 개발자 김튼튼은 서버의 로컬 메모리에 캐싱을 하였습니다. | |
그런데 상장폐지 된 종목 정보가 잘못 랭킹에 섞여 들어가는 사고가 발생했습니다!! | |
랭킹 데이터는 즉시 갱신하였지만, 각 서버의 로컬 메모리에 캐싱된 데이터는 갱신할 수 없어서 즉각적인 대응에 실패하였고, | |
일부 고객님들은 5분간 노출된 상장폐지 된 종목을 클릭하기도 하였습니다. | |
고객님들에게 호된 질타를 받은 후, 로컬 캐시을 거의 동시에(혹은 수 초 이내에) 갱신하는 방법을 준비하기로 마음 먹었습니다. | |
어떤 방법들을 활용해 볼수 있을지 작성해 주세요. | |
[조건] | |
1) 종목 정보는 언제든 수정될수 있음.(종목 정보 어드민에서 수정) | |
2) TOP 100 종목과 랭킹은 db에 적재되어 있음. | |
3) 로컬 캐싱 방법의 제약은 없음, 따라서 자유롭게 구현 가능. | |
4) 도구, 라이브러리 등의 제약은 없음. | |
상장폐지: 증권시장에 상장된 종목에 대한 상장 취소. 거래소를 통한 고객 거래가 불가능합니다. |