일자 : 22.04.02
종류 : 모의 면접 (면접관:지원자 = 1:1)
면접방법 : Zoom
소요시간 : 약 30분
간단하게 자기소개 짧게 부탁드립니다.
안녕하세요, 저는 백엔드 개발에 지원한 장연지입니다. 저는 어 백엔드 개발을 위해 꾸준하게 노력을 해 왔습니다. 프로젝트를 6년 동안 매년 한 개 이상의 프로젝트를 꾸준하게 만들어 왔고, 그 프로젝트를 만들기 위해 습득한 지식과 기술들을 저만의 노트로 만들어서 기술 블로그나 깃허브에 업로드 해 놓았습니다. 입사 후에도 이런 꾸준함을 바탕으로 백엔드 개발 직무에 필요한 지식을 꾸준하게 노력하겠습니다. 감사합니다.
방금 전에 말씀하실 때 백엔드 얘기를 많이 하셨는데 예를 들어서 어떤 프로젝트를 해보셨어요?
프로젝트 기술을 말씀하시는 건가요?
그냥 본인이 했던 부분에 대해서 대략적인 개요를 얘기해보시고, 본인이 담당했던 부분이나 이런거 설명해주시면 될 것 같아요.
API 설계와 DB 설계를 위주로 프로젝트를 담당했습니다. 그리고 프로젝트에 필요한 기술들, 로그인이나 CRUD 기능, 추가적인 API 만드는 것들을 담당해왔습니다.
메이크업 시뮬레이션 서비스(쇼핑몰과 비슷), 경조사 관리 서비스(게시판과 비슷), 웹노래방 서비스 2개(노래 부르기, 방 배정), 해외 드라이브 정보 제공 서비스(안드로이드), 다이어리(게시판)
=> API 처리, RDBMS 모델링, 로그인/로그아웃/회원가입, MVC 패턴 이용한 CRUD 기능
API가 뭐라고 생각하세요?
서비스를 만들 때 필요한 데이터들을 넘겨주는 것이라고 생각합니다.
Application Programming Interface, 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
따로 의미에 대해서 명확하게 생각을 해 보신 적 있으신가요? 계속 쓰는 단어여서.. 일부러 쓰는 단어인가 싶어가지고..
API에 대해 학습은 했었는데 저만의 것으로 완벽하게 이해하지는 못한 것 같습니다.
DB 모델링도 담당을 하셨다고 했는데, 모델링을 하실 때 본인이 생각했을 때 이런 모델링을 해봤더니 데이터를 활용하는 데 있어서 효율성이 높았던 거 같다. 이런 부분들 생각나는 거 있으세요?
이제 프로젝트 DB 쿼리를 짜고 그에 필요한 테이블들을 설계하려다 보니 효율성에 대해서는 솔직히 많이 신경을 못 썼던 것 같습니다.
대량의 데이터를 다뤄본 적은 없지만, 인덱스를 여러개 잡아서 사용했었는데 테이블 관리가 힘들어 하나로 합쳐 편하게 관리했던 경험이 있습니다.
DB 모델링 할 때 인덱스를 잘 잡아서 ??을 했다고 생각하시나요 혹시?
네 인덱스는 항상 자동으로 올려주는 auto increment 기능을 사용하면서 인덱스를 잡았습니다.
쿼리적인 질문인데요, 인덱스가 잘 타고 있는지 확인을 해본 적이 있으신가요?
아 그 시스템이 데이터가 시스템 처리를 하면서 인덱스가 잘 넘겨졌는지 물어보시는 건가요?
네 사용하신 셀렉트 쿼리문들이 인덱스를 잘 타고 있는지 확인을 직접 테스트 하시면서 확인을 해 보셨는지
네 로그에 찍어서 어디에서 오류가 났고 여기서 처리가 됐는지 확인을 해 본 경험이 있습니다.
하나의 테이블에 인덱스를 여러개를 잡아서 써 보신 적 있으세요?
아니요 그런 경험은 없었던 것 같습니다. 외래키만 써서 했던 경험은 있습니다.
외래키를 썼을 때 어떤 문제가 발생하는 경우는 없었나요?
외래키 썼을 때 어떤 데이터를 수정하려고 했을 때 외래키 참조 때문에 수정이 불가능해서 외래키를 삭제하고 수정한 다음에 했던 경험이 있습니다.
테이블 구조 변경시 고려사항이 많이 생기고 테스트 데이터 만드는 것이 불편했던 경험이 있습니다.
실제 서비스 모델링을 했을 때 외래키를 쓰는 게 좋을까요, 안쓰는게 좋을까요?
저는 쓰는게 좋다고 생각합니다.
어떤 면에서 쓰는 게 좋다고 생각하세요?
외래키를 쓰면 하나의 테이블에서 다른 테이블의 정보까지 한꺼번에 조회할 수 있다고 생각해서 쓰는게 더 낫다고 생각합니다.
외래키를 사용하는것이 낫다고 생각합니다. Bulk INSERT/DELETE 시에는 분명히 외래키가 연산의 성능에 큰 영향을 미치지만 그 이외에 외래키를 성능문제 없이 잘 사용하기 위해서는 외래키 컬럼에 인덱스 달아주기, 부모 테이블의 PK가 변하지 않도록 디자인 하기, PK를 가능한한 인공키로 정하기로 한다면 외래키를 쓰는게 관계형 데이터베이스에서 효율적으로 사용할 수 있다고 생각합니다.
그게 꼭 외래키여야지만 가능한 대처?일까요?
제가 아는 지식으로는 조인을 하려면 외래키가 필요하다고 알고 있어서 그렇게 생각하고 있습니다.
단순조인을 하기 위해서는 인덱스만 갖고 있어도 해당 다른 테이블들과의 키 조인을 하는데 문제가 없습니다.
네
이력서 보니까 OAuth 관련해서 ?? 구현을 했던 경험이 있는데 OAuth 스펙에 대해서 설명해주실 수 있을까요?
OAuth 스펙을 어떤걸 얘기하시는지 모르겠습니다.
일반적으로 OAuth라는게 인증을 처리하는 규약이잖아요. 규약의 인터페이스가 어떤 과정인지를 거쳐서 구현을 할 수 있게끔 되어있는지에 대해서.. 실제 연동을 해 보셨다면 그 부분에 대해서 해당 플로우를 이해를 하셔야지 구현을 할 수 있으니까 플로우가 구성되어있는 인터페이스들이 어떻게 되어있다를 설명해주시면 됩니다.
제가 다시 찾아보겠습니다.
사용자가 애플리케이션에게 모든 권한을 넘기지 않고 사용자 대신 서비스를 이용할 수 있게 해주는 HTTP 기반의 보안 프로토콜입니다.
1. 코드권한 요청/응답, 2. 액세스토큰 교환 요청/응답, 3. API 호출/응답
lombok을 사용해보셨어요?
네
lombok이 어떻게 구동이 되는 구조일까요?
Gradle에 build를 하고 어노테이션을 스프링 부트에 gradle에 lombok을 구현을 하고 그 설치된 것을 어노테이션으로 사용하는 방식으로 알고 있습니다.
어노테이션들은 어떻게 동작을 하는 걸까요?
스프링부트 자체적으로 환경 파일이 있는데 gradle같은 빌드 자동화 시스템에 입력을 하면 자동으로 사용할 수 있는 환경 파일들이 생성돼서 거기에서 어노테이션을 쓰면 그 파일로 넘어가서 거기에 대한 정보를 불러오는 것으로 알고 있습니다.
이 부분은 어떤 의미인지 잘 모르겠는데, 비동기통신을 통한 로그인 회원가입은 어떤걸 말씀하시는건가요? 아 앱개발인가요?
네 안드로이드를 쓰면서 톰캣을 사용해서 거기서 로그인 처리 DB까지 연결되어가지고 로그인 처리를 할 때 비동기 통신을 이용해서 로그인 처리를 했습니다.
비동기 통신은 어떻게 구현하신거에요?
안드로이드에 AsyncTask라는 클래스를 인터페이스를 상속받아서 구현을 기능들을 사용했습니다.
AsyncTask가 어떻게 동작하는지 설명 가능하실까요?
다른 서비스를 동작하고 있을 때 비동기 통신이 오면 비동기 통신을 먼저 처리하고 나머지 서비스를 처리하는 것으로 알고있습니다.
안드로이드에 IV?머신이 돌아가는 스트레이트? 처리방식에 대해서 확인해보신 적이 있으세요? 안드로이드 VM 위에서 스레드가 어떤 식으로 처리?되는지에 대해서 퍼스?해보신 적이 있으신가요?
안드로이드 내에서 스레드를 사용한 방식 말씀하시는 건가요? → 네
저희가 로고를 띄우고 3초 정도 스레드로 띄운 다음에 로그인 페이지로 넘어가는 기능을 사용했었습니다.
SQLite 같은 경우는 지금 안드로이드 SQLite를 말씀하시는거죠?
네
SQLite를 쓰면서 뭔가 어떤 부분을 어떻게 활용하셨나요?
일단 로그인 처리 이외에 필요한 데이터들을 SQLite에 저장해서 앱 화면에 띄워진 데이터들만 SQLite에 저장해서 사용을 했습니다.
Django로 프로젝트를 만드셨었나요? Memories라는 프로젝트가 있는데, 이 프로젝트 내에서 본인이 직접 개발했던 부분에 대해서 설명 좀 해주세요
일단 장고를 사용해서 주소록 아니면 스케줄 관리 이런 것들을 생성, 수정, 삭제 등 CRUD 기능을 구현을 했었고 회원들을 관리할 수 있는 관리자 페이지랑 포인트,, 조회 수,
파이썬으로 개발 많이 안해보셨죠?
파이썬으로 개발은 하나밖에 안해봤습니다.
파이썬 학습하실 때 이부분에 대해서 다른 언어와 차이가 있었다 아님 괜찮았다고 생각이 드는 부분이 있나요?
파이썬은 일단 문법이 간결해서 사용하기가 좋았었고 모델 처리가 자바랑 좀 달라서 모델링 처리에 조금 힘들었습니다.
어떤 언어로 개발하시는게 제일 편하세요?
개발할 때는 자바가 더 편한 것 같습니다.
혹시 지금 최근에 학습하고 있는 프레임워크나 랭귀지나 이런 부분들이 있을까요?
최근에는 스프링부트 프레임워크랑 자바로 프로젝트를 만들면서 공부했던 경험이 있고 파이썬으로 알고리즘 공부를 하고 있습니다.
스프링 부트를 써 봤을 때 어떤 점이 본인에게 가장 편리성을 줬을까요?
일단 JPA를 사용하면서 저희가 따로 쿼리를 연결하지 않아도 DB랑 연결할 수 있다는 점이 좋았고 어노테이션 기능을 사용할 수 있어서 좀 편리했던 것 같습니다.
JPA 썼을 때 혹시 단점같은 건 없었나요? 본인이 생각했을 때 장점도 있는데 단점은 뭐라고 생각하세요?
단점은 한 눈에 봤을 때 어떤 내용인지 알아보기가 힘들고 새로 그거를 찾아서 이 기능은 이렇게 써야되는구나라는걸 새로 계속 학습해야되는 부분이 좀 어려웠던 것 같습니다.
프로젝트하면서 여러명이서 같이 진행했을 때 협업 툴도 사용하셨던게 어떤게 있을까요?
협업 툴로는 git을 사용했었습니다.
git을 어떻게 썼을까요? 뭔가 코드 관리를 어떤 형태로 규약?을 사용하지 않게 정리를 했었는지
일단 깃을 저희가 능숙하게 다루는게 아니어서 코드가 충돌되는 경우도 종종 있었는데 그런 것을 몇번 경험해보니까 미리 얘기를 하고 이거 수정 했으니까 참고하시면서 pull 하고 코드 수정해주세요라는 의사소통을 많이 하면서 협업 깃을 다뤘던 것 같습니다.
지금 AI 과정이 들어있는 거 같은데 어떤 부분에 대해서 학습을 했었을까요?
AI 관련해서는 사이킷런 이용해서 데이터에 학습.. 테스트 셋이랑 훈련 셋을 이용해서 얼마나 정확도를 가지고 있는지 판단하는 기술을 배웠습니다.
개발직을 계속 하고 싶으시면 어떤 분야를 개발자로서 커리어를 쌓아가고 싶으세요?
백엔드로 저는 커리어를 쌓아나가고 싶습니다.
백엔드는 너무 포괄적인 큰 거잖아요 조금 더 한 분야로 들어갔을 때 ..
저는 원래 DB 에 관심이 있어서 백엔드를 선택하게 되었고 나중에는 데이터베이스를 관리하는 DBA쪽으로 나아가고 싶은 생각이 있습니다.
DB관련해서 본인이 경험했던 DB SQL은 어떤 것들이 있을까요?
MySQL을 주로 써봤고 오라클도 조금 써봤는데 아직 익숙하지는 않습니다.
NoSQL DB같은 거는 써본 적이 없으세요?
네 아직 써보진 않았지만 이제 써보려고 공부해보려고 하고 있습니다.
그 부분을 깊이있게 공부하시면 좋을 것 같아요
네
본인이 여러 사람들과 함께 협업을 하는 데 있어서 성격이 어떻다고 생각하세요?
저는 프로젝트에 관해서는 먼저 다가가서 이렇게 하면 어떻겠냐고 많이 주도적으로 얘기하는 성격이고 만약에 다른 팀원들이 도움이 필요하다고 했을 때 제가 먼저 나서서 도와주는 편이었습니다.
예를 들어서 어떤 경험이 있으면 ..
이제 프론트 팀원이 리액트를 사용하고 있었는데 리액트를 다루기 어려워서 프레임워크를 쓰지 않고 스프링부트 내의 템플릿을 사용하면 어떻겠냐고 얘기가 나왔었는데 제가 리액트 공부를 하면서 도와줄테니까 같이 프레임워크를 사용해서 프론트 해보자고 얘기를 해서 도와준 경험이 있습니다.
면접 많이 봐 보셨어요?
아니요 개발자 면접은 한번도 본 경험이 없습니다.
다른 면접은 봐 보신적이 있으세요?
네 예전에 회사다닌 경험이 있어서 다른 분야로 면접을 본 경험이 있습니다.
26:25
==> ~한 것 같습니다. 고치기, 기술 지식 부족
'두두의 삶 > 두두의 면접' 카테고리의 다른 글
한국일보 3차 면접 후기 (0) | 2022.06.16 |
---|---|
한국일보 2차 면접 후기 (0) | 2022.06.16 |
면접 참고용 (0) | 2022.04.14 |
한국일보 1차 면접 후기 (2) | 2022.04.14 |
개발자 면접 질문 예시 (0) | 2022.03.29 |