🫰 운영 및 트래픽 관련 질문
Q1. 대용량 트래픽을 어떻게 처리할 것인지
A:
- scale-out
- 서버의 개수를 늘려서 많은 트래픽을 여러 서버가 나눠서 처리하는 방법. '수평 스케일'
- 클라이언트 요청을 어떤 서버에서 처리할 것인지와 한 서버에만 트래픽이 몰리는 것을 방지하기 위해 로드 밸런싱으로 트래픽 조절이 필요하다
- scale-up
- 한 대의 서버를 구성하는 부품(CPU, RAM, DISK 등..)을 추가하거나 업그레이드하여 서버 자체의 처리 능력을 향상시키는 방법
Q2. 서버에 과부하가 오면 어떤 방식으로 처리할 것인지
Q3. 운영서버 운영시 로그 관리는 어떻게 했는지
A:
- 운영 환경(가상 pc) 내부에 app log를 일자별로 쌓아서 텍스트 파일 형태로 저장하고 있다가 장애가 발생하면 장애가 발생한 시점에 해당 로그를 찾아서 어떤 요청에서 어떤 에러가 발생했는지 메시지를 확인 후 디버깅하면서 운영 이슈 대응
- 서버 내부에 logger module을 따로 만들어서 좀 더 자세하게 데이터를 확인해야 하는 에러일 경우 로직 내부에 로그를 찍는 코드를 추가하여 어떤 오류인지 더 빠르게 파악할 수 있도록 함
Q4. 리뉴얼 이후 유저가 기존에 비해 13배 증가했다고 적혀있는데 관련해서 트래픽 이슈는 없었는지 있었다면 어떻게 대처했는지
A:
- 우선 리뉴얼 이후 사용자 수가 급격하게 늘어나게 될 것을 미리 예상하고 기존보다 서버 용량을 두 배로 확장하여 배포하였기 때문에 1차적으로 트래픽 이슈를 사전에 방지할 수 있었다고 생각한다. 그리고 솔직하게는 급격한 트래픽 증가에 의한 이슈를 전 프로젝트 운영을 하면서 해결해본 경험은 없다.
Q4-1. 그럼 이런 트래픽 이슈가 발생했을 때 대처방법에 대해 알고 있는지
A:
- scale-up: 서버 용량 자체를 증가시킴. 하나의 서버만 관리하면 되서 관리가 편하지만 용량을 증가시킬때마다 비용이 들고 물리적으로 증가하는데 한계가 존재함.
- scale-out: 동일한 작업을 수행하는 여러개의 비슷한 용량의 서버를 수평적으로 늘려 로드밸런싱을 통해 트래픽을 분산시킴. 관리해야할 서버의 개수가 늘어날수록 관리하는 데에 많은 리소스가 투입됨. 여러대의 서버로 분산하여 처리되기 때문에 장애의 발생 확률이 단일서버보다 적음.
Q5. 난감했던 운영이슈 처리 경험
A:
- 통계 api에서 운영이슈 발생
- 목록조회시 select 쿼리가 한 번에 여러개 날아가게 되고 가져온 데이터로 연산 로직까지 태웠기 때문에 50개 이상 조회하게 되면 응답이 오지 않는 문제가 발생했음
- 운영중인 해당 api를 새로 만들어 배포하는 것으로 기획자와 상의했고, 새로 만들어 배포하기 전까지 해당 api는 조회시 한 페이지에 최대 10개까지만 조회하도록 관리자 페이지 사용자들에게 안내함
- 쿼리 튜닝을 거쳐 날리는 쿼리 개수 자체를 줄였고 연산 로직도 쿼리로 최대한 해결할 수 있도록 하여 새롭게 배포함
🤟 db & 쿼리 관련 질문
Q1. 쿼리 개수가 줄면 디비 성능이 좋아지나? 그렇다면 왜 그렇게 생각하는지?
Q2. 관계형 디비 성능을 최적화하는 방법을 몇가지 알고 있는지(인덱싱이나 정규화 등등)
Q3. 인덱싱은 어떤 알고리즘으로 구현되어 있는지
A: binary search tree, b tree, b+ tree에 대해 설명
Q4. 레디스에 대해 아는 것이 있는지
Q5. rdbms와 nosql의 차이 그리고 각각의 장단점
Q6. 트랜잭션에 대해 설명해달라
- 트랜잭션은 데이터베이스에서 하나의 그룹으로 처리되어야 하는 명령문들을 모아 놓은 논리적인 작업 단위이다. 여러 개의 명령어의 집합이 정상적으로 처리되면 정상 종료되며 하나의 명령어라도 잘못되면 전체가 롤백된다.
Q6-1. 트랜잭션을 왜 사용하는가
- 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위함
- 데이터 무결성이란 데이터의 Lifecycle 동안 모든 데이터가 얼마나 완전하고, 일관되며, 정확한지를 나타내는 정도입니다. 같은 말로 ‘데이터 완전성’이라고도 합니다. 다시 말해 데이터 무결성에서의 ‘데이터’는 우연하게 또는 의도적으로 변경되거나 파괴되는 상황에 노출되지 않고 보존돼야 합니다.
Q7. 인덱싱 최적화 해 본 적 있는지
Q8. db 인덱싱을 사용해본 적 있는지, 인덱스가 뭔지?
🖐️ 네트워크 & 보안 관련 질문
Q1. http 프로토콜에 대해 아는대로 설명
Q2. 토큰을 클라이언트에서 관리하게 되면 토큰이 탈취될 위험성이 있는데 이럴 경우 서버에서 보안을 더 강화하려면 어떻게 해야하는지
A:accesstoken의 유효기간은 짧게하고 refreshtoken을 추가로 발급하여 accesstoken이 만료되면 refreshtoken을 보내서 accesstoken을 새롭게 발급받을 수 있도록 해야 한다.
Q3. options 메소드를 사용해서 preflight를 날린다고 했는데 preflight는 왜 날리는지?
Q4. cors가 뭐고 이게 왜 필요한지, 그리고 이걸로 어떻게 보안을 유지할 수 있는지
A: '다른 출처'에 리소스를 요청할 때, 해당 리소스에 접근할 수 있도록 HTTP header에 추가 설정을 하여 접근 권한을 부여하고 이를 브라우저에 알려주는 정책
Q5. http 메소드가 어떤것이 있고 각각의 특징이 뭔지
Q6. http 메소드가 가지고 있는 여러 데이터 수송신 방법이 있는데(쿼리 파라미터, 패스 파라미터, 페이로드) 각각 어떤 특징이 있고 어떨때 사용하는지
Q7. put/patch 둘의 차이
신입 면접이었나요..?