레벨 인터뷰 회고(3)

주노·2023년 8월 30일
0

우테코 5기 회고

목록 보기
11/12
post-thumbnail

서론

레벨 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과는 어떤 차이가 있나요?
    • OAuth 2.0의 동작과정을 설명해주세요
  • 세션방식과 토큰 방식의 차이점을 설명해주세요
  • 토큰 방식을 사용한 이유가 있나요?
    • (예상답변) 서버의 부하를 줄일 수 있다.
      • 세션 사용 시 실제로 얼마만큼의 트래픽이 있어야 서버에 유의미한 부하가 발생하는지 측정해봤는지?
    • (예상답변) 분산 환경에서 이점을 가져갈 수 있다.
      • 대용량 트래픽의 경우 세션 클러스터링을 고려해볼 생각은 없었는지?
    • 토큰 탈취 시나리오에 대해 고려해봤는지?
      • (예상답변) 만료기간을 짧게 가져가면 해커가 유의미한 동작을 수행하지 못한다.
        • 해당 주장의 근거는? (진짜 궁금)
      • (예상답변) 리프레시 토큰을 이용 + 서버에서 리프레시 토큰 정보를 저장하여 탈취 상황에 대한 대비를 할 수 있다.
        • 그렇다면 토큰의 무상태성이라는 이점을 잃게되는데 이 관점에서 토큰방식이 세션방식보다 더 나은 점이 있나요?
  • HTTP와 HTTPS의 차이점에 대해 설명해주세요.
  • 트랜잭션의 특징에 대해 설명해주세요
  • Docker를 왜 사용하셨나요?
  • 레벨 3 협업과정에서 일어났던 사건/갈등상황에 대해 이야기해주세요.
    • 이를 어떻게 극복하셨나요?
      • 이와 똑같은 상황이 일어났을 때 본인이 리더라면 어떻게 해결할 것인가요?
    • (예상답변) 어떠한 이유로 일정추정이 잘 안되었다.
      • 일정추정을 잘 못했다면 왜 그런일이 있었을까요?

결론

레벨 3를 마치면서 프로젝트를 진행하는 과정에서 학습했던 내용에 대해 정리하는 시간을 가졌다.

이번에는 대답못한 질문 없이 학습한 내용에 대해 모두 답변할 수 있었다. 하지만 반대로 내가 작성한 질문지를 보면서 정말 대답할 수 있을까? 라는 생각에 스스로 답해보는 시간을 가졌는데 만족스러운 답변을 하기 어려웠다.

내가 작성한 질문지를 기술부채로 치환해서 더 성장해보자.. 👍
(일단 네트워크랑 DB 책부터 읽자...😅)

profile
안녕하세요 😆

2개의 댓글

comment-user-thumbnail
2023년 8월 30일

레벨2 레벨 인터뷰보다는 성장했다고 생각해보자고~

1개의 답글