백엔드 인턴 면접 - baeg-endeu inteon myeonjeob

이력서를 60군데(링크드인 8, 원티드 16, 사람인 11, 로켓펀치 20, 이외 5)정도 넣고 면접을 10군데 제의 받고 현재 6개째 면접을 봤고 한 군데에서 3500으로 오퍼를 받았는데 위코드 x 원티드 온보딩 코스를 듣기로 결정해서 나머지 면접은 보러가지 않았다.

파이썬, 장고 기술 스택인 회사 위주로 넣었는데 면접을 본 6군데 중에 클라우드 데이터를 다루는 곳은 Go를 써야한다고 했고 음악 스트리밍 앱을 만드는 곳에서는 nodeJS를 써야한다고 했어서 파이썬, 장고는 배우는 수단으로서 익힌 것이고 개발자로 일하려면 다른 언어와 프레임워크들도 익혀야되겠구나 생각이 들었다. 의료영상 처리하는 회사에서는 내가 Angular로 일한 경험이 있는 점이 마음에 든다고 했는데 그럼 풀스택으로 일을 시키려고 하는건지 싶은 생각이 들었고 두 군데에서 교포인지 물어봤다. 독일에 가서 일했어서 그런가,,??

예리님께서 가이드해주신대로 사수가 없이 혼자 배워서 혼자 책임지는 개발을 하기를 원하는 곳들이 많았고 사수가 없는 곳도 있어서 다시 한 번 열공의 필요성을 느꼈다. 위코드 수료 이후에 기수 분들과 함께 했던 스터디가 많은 도움이 되었고 팀원들과 내 이력서를 기준으로 면접을 보는 동안 자주 나온 질문들과 예상 질문과 대답을 추려보았다.

JWT 관련

JWT는 무엇인가? (인증/ 인가를 위해서 사용하는 여러 정보를 담은 JSON web token, 1. header에는 토큰을 생성하는signing 알고리즘 2.body에는 유저아이디와 유저권한과 같은 페이로드 3. 마지막 변조 확인하는 시그니쳐로 이루어져있다.)
JWT를 왜 사용하였는지? (보안을 위해서, JWT말고 Oauth를 사용할 수도 있다)
JWT의 변조 알고리즘에는 무엇이 있는지? (256, base64)
JWT가 어떤 방식의 해킹을 당할 수 있는지 그리고 그걸 예방하기 위해서 어떻게 해야하는지? (토큰의 탈취가 이루어질 수 있다, refresh token을 이용해서 access token을 재발급하도록 해서 예방할 수 있다)

인증 / 인가, 로그인이 이루어지는 방식

인증은 회원가입, 로그인하는 것 / 인가는 토큰을 제시하고 접근하는 것.

ORM 관련

ORM은 무엇인가? (장고에서 DB의 데이터를 객체로서 원하는 형태로 가공하기 위한 object relation manager)
ORM장,단점은? (장고에서 쉽고 빠르게 디비를 셋업할 수 있지만 쿼리문을 직접 작성하지 않아서 복잡한 쿼리를 쓰기가 더 번거롭다) Eager Loading은 무엇인가? (가져와야하는 데이터를 먼저 가져와놓아서 쿼리를 실행했을 때 원하는 정보를 빠르게 가져올 수 있도록 하는 것)

RESTful API는?

URI가 그 자체로 리소스와 기능이 무엇인지를 설명해주는 api를 말한다. 예시를 들자면 /post 인 경우 get method라면 게시글 불러오기가 되고 post method라면 게시글 등록하기가 될 것이고 post/{post_id} 인 경우 patch 혹은 delete method라면 해당 게시글을 수정, 삭제하는 기능과 연결시키는 것이 restful한 api가 될 것이다.

REST(representational state transfer)는 HTTP의 URL과 HTTP method(GET, POST, PUT, DELETE)를 사용하여 API 사용 가독성을 높인 구조화된 시스템 아키텍쳐(프레임워크)이고

REST의 설계 원칙으로는 서버와 클라이언트의 존재, Stateless, Uniform Interface등 다양한 조건이 존재하지만 현대 HTTP통신에서는 JSON 형식으로 데이터를 주고받기 때문에 self-descriptive의 조건을 만족하지 못해서 REST의 의도를 벗어난다고 한다.

API(Application Program Interface)는 request, response로 오가는 구조화된 데이터를 의미하고 클라이언트와 서버 간의 메신저, 매개체 역할을 통해 서로간의 데이터를 특정 형식에 맞게 전달하는 역할을 한다.

RESTful API는 이러한 RESTful의 개념과 API를 합쳐서 REST 설계 원칙을 따르는 API를 의미하며, 우리는 RESTful API를 통해 HTTP로 CRUD 등의 기능을 수행하는 API를 개발할 수 있다.

데코레이터

데코레이터는 무엇이고 왜, 어디서 사용하는지?
(분리, 재사용성, 권한관리 및 쿼리 디버깅)

장고의 MVT 패턴

백엔드 인턴 면접 - baeg-endeu inteon myeonjeob

컴파일러(C)와 스크립터(Python)언어의 차이?

컴파일러는 런타임 이전에 전체를 스캔하고 실행파일을 만들어서 실행하므로 속도가 빠르다. C/C++, Java가 그렇다.

인터프리터는 런타임 이후에 코드를 줄단위로 해석해서 구동한다. Python, Javascript가 이에 해당한다. 실행파일을 만들지 않으므로 메모리 효율이 좋다.

AWS

AWS 관련해서는 많이 물어보지는 않고 사용했다는 점이 중요한 것 같다.

캐싱

캐시 (cache)

  • 원래 ‘은닉처’ 라는 의미. 컴퓨터 분야에서는 ‘고속 기억장치’를 의미

캐싱

  • 자주 사용하는 데이터를 RAM과 같이 빠르게 액세스할 수 있는 곳에 저장하는 작업
  • 데이터 검색 성능을 높이는 것이 목적
  • ex) 속도가 느린 디스크의 데이터를 속도가 빠른 메모리로 가져와서 메모리 상에서 읽고 쓰는 작업

장고에서의 캐싱

  • django-redis 라이브러리 설치를 통해, Redis로 cache 사용이 가능하다

Redis란? (REmote Dictionary Server)

메모리 기반(= In-Memory) 의 key-value구조 비관계형 데이터 관리 시스템이고 별도 쿼리없이 데이터를 가져올 수 있다. 5가지 자료구조를 지원한다. < String, Set, Sorted Set, Hash, List > Redis의 위 특징에 따라 cache 역할을 할 수 있다.

프로세스와 쓰레드의 차이

프로그램이란 어떤 작업을 위해 실행할 수 있는 파일이다.
프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이고 Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역이다. 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
쓰레드는 프로세스 내에서 실행되는 여러 흐름의 단위이고 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다. 출처 - [OS] 프로세스와 스레드의 차이

DB Indexing

pk id 이외에 여러가지 자료구조를 활용하여 열에 번호를 붙여주는 것이다. insert해야하는 경우를 생각해보면 번호를 하나씩 밀어내지 않아도 되므로 시간이 덜 걸린다. 빠른 검색을 위해서도 필요하고 5배에서 10배정도 빠를 수 있다.
출처 - 안돌의 Index

인터뷰 질문 리스트

다음은 스터디 팀원들과 공유한 인터뷰 질문 리스트이다.

자기소개
개발자 전향 이유
전 직장에 관한 설명
개발자 되어서 겪었던 어려운 점
개발자로써의 목표
인간으로써의 목표
MVC 패턴
jwt 설명
restful api 설명

자기소개
개발자가 된 이유
전 직업에 관한 질문
코딩테스트 풀이 설명
틀린 이유 설명 및 다른 해결 방법
프로젝트 때 토큰 인증 방식을 채택한 이유
acess token과 fresh token의 차이
웹 개발자와 다른 개발자의 차이
MVC 패턴이 무엇인지
위코드에서 배운 것이 무엇인지
넥스클라우드에서 얻은 것은 무엇인지
현재 개인적으로 공부하고 있는 것은 무엇인지
drf serializer 에 대한 설명 및 기본적인 코드 구현 방식을 설명(함수까지…)
웹 개발자로써 발전하기 위해 노력하고 있는 부분
github repo들중에 requirement file이 없는 것에 대한 해명
넥스클라우드에서 경험한 좋은 개발문화란 무엇인지?

자기소개
개발자 전향한 이유
status code 200은 뭔가
인턴쉽에서 무엇을 했는지
프로젝트 2주정도면 짧은데 어떻게 했는지
WAAB 커뮤니티 무엇인가(스터디 이름)
회사 지원동기
어떤 회사인지 알고 있나

stack, que, decque 설명
장고 모듈화해보았나
장고 환경설정 어떻게 했나, settings에서만 했나
jwt가 무엇인가
jwt로 암호화해도 해킹당하는데 어떻게 대처할 것인가
jwt 시간제한설정은 안했나
로그인 과정 설명
HTTP 메소드 설명
REST API 설명
API 문서화는 어떻게 했나
서버다운이나 플랫폼 작동이 안되는 경우에 대해 효율적으로 방지할 수 있는 방법
클라우드에 관심이 많은가

개발자로 전향한 이유
인턴쉽 기간동안 본인이 담당한 기능은
프로젝트 짧은데 얼마나 구현한것인지
파이썬 장고로 한 이유와 자바나 자바스크립트 쓰게되면 어떻게 할 것인지
프로젝트에서 본인의 역할과 힘들때 어떻게 했는지
비즈니스 방향과 개발자로서의 가치관이 부딪힐 때 어떻게 할것인가
본인이 생각하는 근로의 의미는
배포 문제해결을 위해 어떻게 할것인가

프론트에서 왜 백엔드로 넘어왔나?
CRUD설명
Restful api 예 그려보기(put patch차이?)
ORM 장단점?
파이썬에 접근제한자있는지? __init
컴파일러/스크립터 언어 차이
ERD그려봤는지? (포폴에 사진 넣어야겠음)
SQL 쿼리문 쓸 줄 아는지?
데코레이터 왜 쓰는지?(분리, 재사용)
생성자란?
웹서버 작동 설명, 캐시서버(redis)?
AWS 어떻게 사용했는지?

자기소개
프로젝트에서 본인의 역할
인턴쉽에서 본인의 역할
위코드에서 힘들었던 점
인증과 인가란
Jwt가 무엇이고 왜 사용했는지
Open api spec이 무엇인가
Open api는 무엇인가
Restful api란
도커 어느정도로 사용해봤는지
CI/CD 경험해봤는가
CI/CD를 한다면 이를 위해 무엇을 노력할것인지
위코드 커리큘럼 관련: 프로젝트에서 백엔드만 선택한 이유
개발을 시작한 이유
개발이 재미있는지

개발자가 된 이유
개발환경구축과정 (1차부터 3차 전부) 설명
api 란? restful api?
jwt와 Oauth의 차이점 / Jwt 사용이유
serverless란? / 대표적인 serverless 제품
자료구조란? / 가장자신있는자료구조 / 구현한것들
로드밸런서란?
굳이 백엔드가 된 이유?
인턴십 후 채용되지 않은 이유

인증/인가
Jwt토큰 구성요소, 무슨 알고리즘, 단점? 어떤 해킹 당할 수 있는지?
ORM이란?
Eager loading이란?
본인이 생각하는 리팩토링이란?
유닛테스트 설명
리팩토링하고 유닛테스트했는지?
프로젝트할 때 어려웠던 점?

자료구조 데이터스트럭쳐 얼마나 아는지?
그럼 해시 트리 그런걸로 직접 코드 짜봤는지?
자바로 제일 길게 짠 코드가 몇 줄인지?
ERD짜고 설계같은거 생각해봤는지?
파이썬 느린 이유 컴파일러언어 개념?

깃헙레포 리드미하고 기술블로그를 다같이 쭉 보면서 물어보셨습니다
개발자 왜 하고싶은지?
전에 회사 짧게 그만두었던 이유?
백엔드 공부가 프론트에 비해서 어려운데 잘 하려면 어떻게 해야할지?
본인이 개발을 잘 하는 것 같은가? 해보니까 적성에 맞는지?