모의 면접 회고
1. 간단한 자기 소개(인성)
2. 어떤 코드를 지향하나요?(CS)
→ 하나의 클래스가 하나의 기능을 가지는 코드
→ SRP 원칙에 준수한 코드가 깔끔한 코드인가요?
→ 좀 더 생각해보겠습니다.
3. 어떤 개발자가 되고 싶나요?(인성)
→ 사용자에게 즐거움, 편의성을 제공하는 개발자
→ 이를 위해 어떤 노력을 하고 있나요?
→ 백엔드 개발자로서, 알고리즘과 디자인패턴에 대한 공부를 하고 있습니다.
→ 디자인 패턴을 활용한 경험이 있나요? → 학부 시절 디자인 패턴 수업을 들었던 경험과 우아한 테크 코스 프리 코스에서 싱글톤 패턴을 활용한 경험이 있습니다. → 싱글톤 패턴에서 double checked locking 아나요? → 공부해오겠습니다.
4. 관심 직무가 있으신가요?
[프로젝트 관련]
4. 프로젝트에서 AOP를 활용했다고 했는데 @Aspect와 @Advice에 대해 설명해주세요.
→ 공부해오겠습니다.
5. 프로젝트에 대한 설명
6. 프로젝트 어려웠던 점
간단한 자기 소개
의사소통
안녕하십니까, 백엔드 개발 직무에 지원한 정영한입니다. 학부 시절 컴퓨터 공학을 전공하여, 컴퓨터 관련 지식을 함양했습니다. 특히, Java, Spring framework을 사용한 Restful API 기반의 웹 애플리케이션 설계와 구현에 능숙합니다. 팀원들과의 의사소통을 중시하여 지속적으로 다양한 CS 용어와 지식들을 공부하고 있습니다. 또한 팀원간의 활발한 코드 리뷰가 이루어지도록 커밋 컨벤션, 주석 등 다양한 의사소통 수단을 적극적으로 사용하는 노력을 하고 있습니다. 이를 체득하기 위해 꾸준히 블로그 작성을 하고 있으며, 다른 사람들에게 내가 알고 있는 지식들을 명확히 설명하기 위해 기술 세미나를 여러 차례 참여한 경험이 있습니다.
어떤 코드를 지향하시나요?
OOP와 SOLID 원칙을 준수한 코드
같이 프로젝트를 진행하는 개발자들 간의 약속에 따라 원칙을 지킨 코드를 지향합니다. 또한 프로젝트에 사용하는 언어가 절차 지향인지 객체 지향인지를 고려하여 원칙을 정하는 것이 중요하다고 생각합니다. 자바 언어를 사용한 경험으로는 자바 언어 특성 상 객체 지향의 장점을 잃지 않게 설계된 코드를 지향합니다. 이를 위해 자바로 프로젝트를 진행하고 있는 저의 생각으로는 SOLID 원칙을 준수하여 코드를 작성하는 것이 중요하다고 생각합니다. 하나의 프로젝트가 여러 사람에 의해 관리되기 때문에 원칙을 해치지 않고 유지보수가 용이하도록 각각의 클래스를 모듈처럼 독립적이면서도 잘 연결될 수 있게 설계하여 코드를 작성해야 합니다. 또한, 팀원들간의 의사소통을 원활하게 하기 위해 변수명을 이해하기 쉽도록 만들거나, 주석을 활용할 수도 있습니다.
어떤 개발자가 되고 싶나요? 개발자로서 꿈이 있나요?
언어에 종속받지 않고 개발할 수 있는 개발자. 이를 위한 기본기를 다지기 위해 노력하는 개발자.
이해할 수 있는 개발자가 되고 싶어요. 코드를 단순히 작성하는 것을 넘어서, 그 코드가 왜 필요한지, 어떤 문제를 해결하기 위한 것인지를 명확하게 이해하고 설명할 수 있는 능력을 갖춘 개발자가 되는 것이 꿈입니다. 또한, 다양한 프로그래밍 언어와 기술에 대한 끊임없는 학습을 통해 언어에 구애받지 않고 필요에 따라 적절한 기술을 선택하여 문제를 해결할 수 있는 유연함을 갖춘 개발자가 되고 싶습니다. 이를 위해 기본기를 탄탄히 다지는 것에 중점을 두고 있으며, 항상 새로운 기술과 트렌드에 대한 호기심을 가지고 탐구하는 자세를 유지하려고 합니다. 이런 과정을 통해 개발자로서의 성장뿐만 아니라, 팀과 프로젝트에 긍정적인 영향을 미칠 수 있는 사람이 되고 싶습니다.
관심있는 직무가 있으신가요?
저는 금융권에 관련된 애플리케이션을 개발하고 싶습니다. 애플리케이션은 성능도 중요하지만 신뢰성 측면에서 보안적인 부분을 굉장히 중요하다고 생각하는데, 이러한 금융권 애플리케이션은 보안에 대해 굉장히 엄격하게 관리할 것 같고 이를 배울 수 있을 것 같다고 여겨 금융관련 직무에 대해 관심이 있습니다.
→ 학부 시절, 시스템 보안 과목에 대해 흥미를 느껴 깊이 공부하여 A+을 맞은 경험이 있습니다.
① 암호문 단독 공격(Ciphertext only attack): 공격자는 단지 암호문만을 갖고 있으며, 이로부터 평문 또는 키를 찾아내는 방법
② 기지 평문 공격(Known plaintext attack): 공격자는 일정량의 평문에 대응하는 암호문을 알고 있는 상태에서 암호문의 내용을 해독하는 방법
③ 선택 평문 공격(Chosen plaintext attack): 공격자가 암호 시스템에 접근하여 평문을 선택하고, 해당 평문에 해당하는 암호문을 획득한 후, 키 또는평문을 추정하여 암호문의 내용을 해독하는 방법
④ 선택 암호문 공격(Chosen ciphertext attack): 공격자가 암호 복호기에접근하여 암호문에 대한 평문을 획득하여 암호를 해독하는 방법
프로젝트에 대한 설명
사용자들이 패션에 대한 사진 및 동영상을 공유하는 소셜 네트워크 서비스를 제공하는 패션 커뮤니티입니다.
해당 프로젝트는 html과 css, js를 사용하여 프론트를 구성하고, SpringBoot, Spring Security, MySQL DB를 사용하여 서버를 구성하였습니다.
사용자, 게시물, 댓글, 좋아요 기능에 대한 CRUD 기능을 구현하였고, 팔로우 기능을 사용하여 사용자들간의 관계를 지어주고, AmazonS3Client를 사용하여 동영상이나 이미지를 클라우드에 저장하고 게시할 수 있는 기능을 추가했습니다.
2회차
월요일날 프로젝트 및 인성적인 내용에 대해서는 이미 질문을 많이 했기 때문에 CS에 관한 질문을 위주로 진행하였습니다. CS에 대한 많은 공부가 필요할 것 같습니다. 아직 질문에 대한 답변이 너무 깁니다. 이는 질문의 의도를 명확하게 파악하지 못했기 때문입니다. 물어본 것만 정확하고 간결하게 말하는 것이 중요합니다. 다른 사람이 적어놓은 답변을 단순히 외우는 것이 아니라 예상 질문에 대해서 본인만의 답변을 작성해 보는 방식으로 공부하시면 좋을 것 같습니다.
3회차
블로그 정리에 비해 전반적으로 CS 지식이 부족함.
왜 사용했는지 이유에 대해 설명을 못한다.
Q. JWT 방식을 사용한 이유
→ Session 방식의 단점을 해결하기 위함
→ JWT의 보안적 단점은 어떻게 해결하려고 하는가?
전문가처럼 이야기 해야한다.
Q. 아파요 프로젝트에서 어떤 업무를 맡으셨나요?
→ 백엔드 전반에 대한 역할을 수행했다.
→ 외부 API 땡겨서 사용하는 것과 DB 연동하고 비지니스 로직을 처리함
→ 외부 API 연동 및 DB 연동과 비지니스 로직 수행
설명을 못함. 몰라서 그럼.
Q. 검색 기능의 동적 쿼리를 구현하기 위한 QueryDSL 사용한 이유가 무엇인가요?
→ QueryDSL의 사용이유에 대한 설명을 함.
→ 그거랑 검색 기능이랑 뭔 상관이에요? 앞뒤가 안맞아요.
Q. AOP에 대해 설명해주세요.
→ AOP는 이러이러한 것입니다.
→ AOP는 재사용성을 중심으로 이야기 해야한다.
알고리즘 / 자료구조 지식 부족함.
Q. 프림 알고리즘에 대해 설명
Q. 다익스트라 알고리즘에 대해 설명
Q. JVM에 대한 메모리 구조에 대한 설명