서론
레벨 3를 마치고 레벨인터뷰를 진행했다.
레벨 3 프로젝트를 수행하면서 학습한 내용 및 경험한 협업내용에 대한 이야기를 할 수 있었다.
레벨인터뷰를 진행하며 받았던 질문과 피드백에 대해 정리해보려고한다.
레벨인터뷰
레벨로그
레벨 3동안 학습한 내용에 대해 가장 인상깊은 내용을 위주로 요약정리해봤다.
정리한 내용을 기반으로 3명의 크루에게 인터뷰를 받는 경험을 했다.
RestDocs 도입
- 개발 과정에서 Notion으로 작성된 문서의 내용과 실제 API 값이 불일치하는 문제를 겪음
- 문서의 신뢰성을 위해 RestDocs를 도입
Spring Event
- History라는 도메인이 다른 도메인에 깊숙히 침투하여 거의 모든 도메인이 의존하게 되는 문제를 겪음
- 도메인 간 관심사 분리를 위해 AOP와 Spring Event 두 기술의 도입을 고민하고 Spring Event를 적용
RestAssured와 @Transactional
- @Transactional이 적용되어있는 테스트에서 RestAssured가 DB에 저장된 값을 읽어오지 못하는 문제를 겪음
- 인수테스트의 DB 초기화 방식을 간편화하기 위해 JUnit5의 BeforeEachCallback을 적용
동적쿼리와 QueryDsl
- 반려 식물 타임라인 페이지에서 필터링 기능 도입 간 동적 쿼리가 필요해져 동적쿼리의 처리 방안에 대해 고민함.
- MyBatis, JPA Criteria Query, QueryDsl을 비교하고 QueryDsl도입을 결정함.
AWS S3
- 비로그인 상태에서 보여주는 이미지를 유연하게 변경할 수 있는 방법을 고민함.
- AWS S3를 이용해 이미지를 유연하게 배포하는 방법을 생각하고 적용함.
- 적용 과정에서 S3 환경 구성 간 보안적으로 신경써야할 부분을 알고 적용함. (http 통신, public 버킷, S3 엔트포인트 주소 치환)
팀 기술블로그 운영
- 팀 내 기술블로그를 도입
- 분업화된 작업을 수행할 때 자신이 작업한 내용에 들어있는 기술적인 지식을 공유하여 서로의 작업내용을 리뷰하는데 큰 무리 없이 수행할 수 있었음.
Jenkins 환경 구성 및 공유
- 프론트엔드 팀원들에게 Nginx, Jenkins 환경 구성을 공유하여 직접 배포스크립트를 작성할 수 있도록 도와줌.
CORS 트러블 슈팅
- 프론트엔드의 Credentials 헤더 미적용으로 인한 문제를 탐색하고 issue로 등록하여 문제를 빠르게 인지함.
- 해당 과정에서 구체적인 이유를 팀원들에게 공유하여 문제 원인과 구체적인 해결 방향을 제시함.
GitHub Discussion 도입
- 회의 및 제안내용을 GitHub Discussion에 정리하여 특정 회의 간 제시된 안건에 대해 기록을 남김
- 비대면 환경에서도 활발하게 작성하여 개발 진행 간 기획/기술적인 협의가 원활하게 이뤄질 수 있었음
Wiki 문서화
- GitHub Wiki를 활용하여 팀 내 문서화에 기여함.
- 컨벤션, 기획, 회고 등의 내용을 정리함.
Q&A
작성된 레벨로그 내용을 기반으로 인터뷰어 역할을 담당한 크루들이 질문을 해줬다.
- S3를 사용하면 이미지를 유연하게 배포할 수 있다고 하셨는데, 이게 어떤 방법인지?
- S3에서 보안적으로 고려해야할 사항에 대해 설명해주세요
- AOP가 무엇인지 설명해주세요
- AOP와 Spring Event를 고민할 때, 어떤 부분을 통해서 Spring Event를 결정하게 되었나요?
- 횡단 관심사에 대해서 많이 말씀해주셨는데, 횡단 관심사가 정확히 뭐죠?
- RestAssure와 @Transactional 테스트 이슈에서 callback으로 어떻게 문제를 해결했나요?
- 여러 동적 쿼리 기술 중에서 QueryDsl이 가지는 장점이 뭔가요?
- 이전에도 QueryDsl을 사용해 본 경험이 있으신가요?
- 그렇다면, 새롭게 QueryDsl을 알게 된 팀원들에게 기술 전파를 어떻게 했나요?
- 프론트엔드가 프론트 배포 스크립트를 작성할 수 있도록 도와준 건가요?
- 그렇게 하신 이유가 있을까요? (오히려 백엔드에서 빠르게 스크립트를 작성하는 것이 더 리소스가 적게 들 수도 있을 것 같아요)
- 필터링 기능을 도입하셨는데, 정확히 어떤 것을 필터링 하고 구현셨나요?
- 레벨4 때 고도화 해보고 싶은 부분이 있나요?
피드백
크루들의 다음과 같은 피드백이 있었다.
기술 피드백
[좋은 점]
- 보안문제에 대해 설명할때 근거를 명확하게 들어서 설명하는 것이 인상깊었습니다.
- AOP를 설명할때 두괄식으로 설명을 한 점이 좋았고, 예를 들어 설명해서 이해가 쉬웠고 제대로 알고 있다는 느낌을 받았습니다. 하지만 조금 더 간결하게 잘 설명하도록 개선하면 정말 좋을 것 같습니다.
- 기술 도입을 할 때 여러 가지 기술을 비교하고 선택한 이유도 명확하게 인지하고 있는 점이 좋았습니다.
아쉬운 점:
- 기술에 대한 답변을 다 해주셔서 아쉬운 점은 딱히 없는것 같습니다.
- S3 도입 배경, 이유에 대해서 비교한 다른 방법들을 설명하고,
해당 방법들에 어떤 문제가 있어서 S3를 사용했는지 잘 설명해주셔서 좋았습니다!
또, S3 사용 시에도 다양한 고민을 하신 것이 보여서
단순히 S3를 사용한 것만이 아니라 여러 고민을 거쳤구나라는
느낌을 받아서 좋았습니다!
- AOP를 처음 듣는 사람에게 소개할 때 단순히 어떤 방법이다 라는 것만 소개하는 것이 아니라 사용되는 예시까지 말해줘서 이해하기가 더 수월하다고 느꼈습니다!
- AOP와 스프링 이벤트 중 어떤 것을 선택할지에 대한 고민에 대해서
실제 적용하지 않았던 AOP에 대한 내용도 깊게 알고 있어서
정말 근거 있게 스프링 이벤트를 적용한 것이라고 느껴졌습니다.
- 기술 공유 관련해서 기술 공유 예시도 잘 설명해주시고, 따로 기술 공유 시간도 마련이 되어 있다고 해주셔서 인상적이었습니다! 저희 팀도 해보고 싶어요.
말하기 피드백
[좋은 점]
- 제스쳐를 잘 사용하신 것 같아요!
- 이전 답변에서 잘못 대답한 답변도 이후 답변에서 수정한 것이 좋았던 것 같습니다!
- 목소리가 차분하지만 작지 않아서 더 말이 신뢰감 있게 들려서 좋았습니다.
- 제스처가 차분하고, 몸을 움직이지 않아서 안정적인 느낌을 받았어요.
[아쉬운 점]
- 로그와 같이 서비스의 도메인을 잘 모르는 사람이 들었을 때 오해할수도 있을 것 같습니다. 서비스에서 사용하는 용어를 설명할때 처음 듣는 사람이 이해할 수 있게 설명해주는 것이 좋을 것 같습니다.
- 꼬리 질문에서 인터뷰어의 질문이 끝나기 전에 답변하신 부분이 있어서 다 듣고 답변하시면 더 좋았을 것 같습니다! 말을 끊었다는 느낌을 받지는 않았지만 사람에 따라서 말을 끊었다고 느낄 수도 있었을 것 같아요!
질문지
다른 크루에게 질문하기 위한 질문지도 작성했는데 개인적으로 면접관의 입장이 되어 작성해봤다.
총 3명의 크루의 레벨로그를 보고 질문지를 작성해봤다.
얕게 대답하는 경우를 상정하여 depth가 깊어지는 순서대로 꼬리질문을 작성해봤다.
다 아는 내용이여서 평가하려고 질문한 것이 아니라 정말 궁금해서 물어본 내용들이다 😅
- 프로젝트에 Spring Event를 도입한 이유가 무엇인가요?
- 해당 과정에서 다른 방식을 고려해봤나요?
- AOP와 Spring Event를 비교했을 때 어떤 이점이 있었기에 Spring Event를나요?
- OAuth 2.0을 사용한다고 적어주셨는데 OAuth 2.0이 OAuth 1.0과는 어떤 차이가 있나요?
- 세션방식과 토큰 방식의 차이점을 설명해주세요
- 토큰 방식을 사용한 이유가 있나요?
- (예상답변) 서버의 부하를 줄일 수 있다.
- 세션 사용 시 실제로 얼마만큼의 트래픽이 있어야 서버에 유의미한 부하가 발생하는지 측정해봤는지?
- (예상답변) 분산 환경에서 이점을 가져갈 수 있다.
- 대용량 트래픽의 경우 세션 클러스터링을 고려해볼 생각은 없었는지?
- 토큰 탈취 시나리오에 대해 고려해봤는지?
- (예상답변) 만료기간을 짧게 가져가면 해커가 유의미한 동작을 수행하지 못한다.
- (예상답변) 리프레시 토큰을 이용 + 서버에서 리프레시 토큰 정보를 저장하여 탈취 상황에 대한 대비를 할 수 있다.
- 그렇다면 토큰의 무상태성이라는 이점을 잃게되는데 이 관점에서 토큰방식이 세션방식보다 더 나은 점이 있나요?
- HTTP와 HTTPS의 차이점에 대해 설명해주세요.
- 트랜잭션의 특징에 대해 설명해주세요
- Docker를 왜 사용하셨나요?
- 레벨 3 협업과정에서 일어났던 사건/갈등상황에 대해 이야기해주세요.
- 이를 어떻게 극복하셨나요?
- 이와 똑같은 상황이 일어났을 때 본인이 리더라면 어떻게 해결할 것인가요?
- (예상답변) 어떠한 이유로 일정추정이 잘 안되었다.
- 일정추정을 잘 못했다면 왜 그런일이 있었을까요?
결론
레벨 3를 마치면서 프로젝트를 진행하는 과정에서 학습했던 내용에 대해 정리하는 시간을 가졌다.
이번에는 대답못한 질문 없이 학습한 내용에 대해 모두 답변할 수 있었다. 하지만 반대로 내가 작성한 질문지를 보면서 정말 대답할 수 있을까? 라는 생각에 스스로 답해보는 시간을 가졌는데 만족스러운 답변을 하기 어려웠다.
내가 작성한 질문지를 기술부채로 치환해서 더 성장해보자.. 👍
(일단 네트워크랑 DB 책부터 읽자...😅)
레벨2 레벨 인터뷰보다는 성장했다고 생각해보자고~