실무진 면접 경험으로 정리하는 백엔드 (1) : 에듀 테크 기업 면접

에듀 테크 기술 면접

시간 내어 이력서를 꼼꼼하게 봐주시고

서류상으로는 회사에서 원하는 background라고 생각해주셔서 느낌이 좋았다.


최근 본 면접들 중 가장 깊이있는 질문을 해주셨고

오답과 대안에 대한 설명도 해주셔서 배워갈 수 있었다.



아쉽게도 합격하지 못했지만

좋은 면접 경험이었기 때문에

다음 면접에서 더 견고한 답변을 위해 정리해보았다.




질문&답변&더 나은 답변


일반 질문

이직 사유?

경영상의 이유로 인한 권고사직,
프로덕트 개발과 프로덕트 피벗 과정의 공백기


회사의 이 직군에 지원하면서 뭘 기대하는지?
거의 혼자서 개발을 해왔는데 다른 관점의 의견을 들을 기회가 없었다.
여러 개발자의 의견을 듣고 내 의견에 태클을 걸며 같이 발전하면 좋겠다.


공백기에 뭐하고 있는지 ? 
1. django template과 admin, 그리고 오픈소스 wysiwyg를 사용하여
블로깅 서비스 사이드 프로젝트하면서 풀스택 공부중이다.

2. 현업에서 줄곧 이미 구축된 ci/cd를 사용해오고있었는데
직접 구현을 학습하기 위해 github action workflow를 공부하고 있음. 

기술&개발 관련

관리형 서비스를 쓰지 않고 aws ec2를 쓴 이유 ?
- 비용문제



vpc 어떻게 설정했나?
- production region은 모든 ip에 대해서 열고
  development region은 사무실 개발 pc와 사무실 기기들의 ip만 접근가능하도록 함



nginx ssl 적용했다고 하는데, 인증서 뭐 사용했나?
- 'let's encrypt'사용했는데 생각이 안나서 대답못함.


socketio에는 wsgi or asgi?
- wsgi vs asgi 차이점에 대해서 답변함.


django vs fast api ?
- 동기, 비동기 서버 기반과 기타 feature에 대해서 답변함.
- django에서 기본 제공되는 템플릿, admin,ORM과 미들웨어들
- fastapi는 기타 기능들을 따로 붙여서 써야한다고 답변,


django도 asynchronous feature가 있는데 왜 fast api를 쓰나?
- 많은 기능이 커버됐지만 not fully supported라고 답변,

답변하신 것처럼 fast api에서 coroutine 기반으로 request를 핸들링한다.
(multiple coroutine을 이벤트 루프가 관리)
django 와 같이 wsgi쓰는 웹 애플리케이션은 무엇으로 핸들링하는가?
- 이 때 질문을 이해 못해서 답변을 못함
- 면접관 답변 -> Thread로 핸들링한다.
- 이해하고나서 wsgi 서버를 deploy 할 때,
   cpu 코어 개수에 따른 thread, worker-process 개수를 추가로 얘기함.


웹소켓대신 socketio를 선택한 이유?
- 자동 재연결기능 등 부가적인 기능이 포함됨.
- python script의 편의성
이라고 답변

websocket과 socketio의 차이?
- socketio는 처음부터 websocket으로 통신하는 것이 아니라
   서버에서 websocket을 지원하는지 http handshake로 확인 후,
   method를 변경하여 프로토콜을 바꾼다.
   지원하지 않는 경우 http polling 방식으로 통신한다고 답변.

- 그리고 websocket은 연결이 끊어지면
   재연결 로직을 프로그래밍 해야하는데,
   socketio는 그 기능이 내포되어있다고 답변

polling과 websocket 통신 차이?
polling은 클라이언트 측에서 서버로
주기적으로 데이터가 있는지, 상태를 체크하는 요청을 보냄.

websocket의 경우 데이터가 생기면 바로 클라이언트로 접속함.

위와 같이 답변함.


short polling과 long polling의 차이?
-> 기억 안나서 대답 못함




정규화 했을 때, mysql database를 postresql로 바꾼 이유와
두 제품간의 무슨 차이가 있는지 말해보시오

- 웹 애플리케이션을 고려하여 postgresql로 바꿨음.





내부에 있던 데이터 이관은 어떻게 했는지?
- server downtime에 덤프뜬 데이터를
   새 db container연결을 통해 복사하고
   WAS의 접속 db를 새 db container로 라우팅함.



server downtime은 어떻게 처리했는지 ?
- downtime에 대한 공지를 하고 서버를 중단 후 갱신하였음.


django celery와 같은 걸로 주기적 배치 실행해본 적 있는지 ?
대시보드 시각화용 통계 테이블 갱신하는 배치 작업이 있었는데
ec2 -> ec2로 날리는 api call로 실행했고 crontab을 사용했다.



Python
Python에서의 threading, multiprocessing 차이 ?
Python interpreter 기본형인 cpython에서의 GIL의 장단점 ?
Python 에서 gil이 없다면 생길 수 있는 문제점 ?


DB는 트랜잭션의 집합이라고 볼 수 있는데
DB에서 트랜잭션 격리성 수준에 대해서 말해보세요
- 기억이 모두 안 나서 공부가 덜 된 것 같다고 답변.


캐시 사용 예시에는 어떤 것이 있는가?
- 토큰 저장소, 장바구니, 정적 데이터 저장(css, js, 404html)이 있다고 답변


redis를 토큰 저장소로서 배치했을 때의 이득이 있나요?
- 인증 후 api call마다 disk에 access가 아니라 memory에 access되므로
   response가 더 빠르다고 답변.

면접관 추가 설명 ->
접근 면에서는 rdbms와 큰 차이가 없으나 ( 엄밀한 O(1)은 아니지만 O(1)에 근접함 )
rdbms 트래픽이 조금이나마 분산되는 효과가 있고 스케일링이 더 용이하다는 장점이 있음.



drf-yasg 사용시 완벽하게 문서화되지 않는 것은 어떻게 보완했나?
나는 따로 docs로 문서를 관리했다

면접관 답변 ->
우리회사에서는 customize해서 관리함.
나처럼하면 관리할 게 2개나 생겨서 어느 문서 하나는 최신버전이 아닌 경우가 허다하다.




ec2로 굳이 개발한 이유가 있는가?
-> 비용문제 -> mvp가 개발되면 RDS와 같은 관리형 서비스로이관하려고함.
-> 전직장에서는 eks 와 같은 서비스를 제안을 한다던가 바꿀수는 없었음.




데이터베이스에 가해지는 부하를 개선하는 방법을 아는대로 말해보세요.

1. 인프라 측면에서는 

프론트엔드-백엔드 애플리케이션 구간 신호를
로드밸런서로 분산한다고 답변.

2. 백엔드 애플리케이션 서버 측면에서는 

2.1 ORM 개선을 통해(쿼리 최적화) 쿼리 프로세스가 빨리 끝나도록 조치.
쿼리를 분석해서 쿼리 최적화를 해야한다고 답변.

예를 들어, lazy-loading으로 인한 비효율적인 쿼리를 날리는 코드가 있다면
prefetch, related를 사용해서 n+1를 방지해야한다.
join할 수 있는 것이 있으면 미리 db에서 작업을 하고 가져와야한다.




말한 것처럼 튜닝이 필요한 쿼리는 어떻게 찾는가?
db 데이터를 픽스쳐로 import해서 테스트한다고 답변하는 도중에 내가 취소함.
같은 django 애플리케이션에서 작동하는 방식이고 db를 hit하지 않는 방법이라 무의미하기 때문


면접관 답변 ->
개발할 때 일일이 orm 쿼리를 다 분석하기 쉽지 않음.
예상보다 많이 생기는 쿼리가 무엇인지 '모니터링'하는 것이 현실적이라고 함.




내 질문

  • 입사하게 되면 어떤 팀에서 어떤 프로덕트 개발을 하나 ?

    - 입사시기에 따라 다를 것 같음.

    - 프로덕트 관련 내용은 민감한 정보이기 때문에 생략.

  • 개발자에게 기대하는 것에는 어떤 것이 있나 ?

    - 팀장마다 다르고 개발자의 연차에 따라 다른듯.

    - 공통적으로 코드를 잘 읽을 수 있어야함.

    - 일이 없어보여도 찾아보면 할 일은 쌓여있는데,
      일감을 알아서 찾아 하는 자기주도적인 개발자.



보충 공부가 필요한 것

- mysql 과 postgresql의 차이.
  어떤 특징을 기준으로 DB 제품을 선택해야하는지?

- 데이터베이스에 가해지는 부하를 개선하는 방법.
  구간별로 어떤 조치가 필요한지 자세히 알아둬야 할 필요가 있음.

  내가 답변한 로드 밸런서 부분은
  '무엇을' '어떻게' 분산하면 '효과가 어떻다.' 까지 답변해야한다고 생각한다.
  이번에 답변한 내용은 겉핥기식 지식이라고 생각될 것 같음.

   - db server 자체,

   - backend application server <-> db server,

   - frontend server <->backend application server,

   - client <-> frontend server

- django에서 mysql을 db backend로 선택하는 use case

- redis의 용례, redis의 퍼포먼스적 장점에는 어떤 설계 바탕이 있는지
 
redis가 in-memory db인 것 외에도
  single thread임에도 퍼포먼스를 낼 수 있는 설계라던가
  locking 메커니즘에 대해서 더 설명을 할 수 있으면 좋을 것.

- short polling과 long polling의 차이?






댓글

이 블로그의 인기 게시물

Blogger 커스터마이징 : CSS 수정 (sticky-header)

Intel 14th gen CPU의 칩 충돌 사태와 해결 방법