[기술 면접 후기] 가장 인상 깊었던 3번째 기술 면접 및 질문 정리
by 무작정 개발
오늘 22년 6월 3일 금요일에 3번째 기술 면접을 보았다.
회사는 금천구에 위치하였고, 집에서 나름 가까웠다.
편한 복장으로 면접을 보았고(No 정장), 1대 1 면접으로 진행되었고 약 1시간 넘게 진행되었다.
면접관님께서는 내가 꾸준히 정리하였던 기술 블로그와 GitHub를 보시고, 열심히 한 흔적이 보인다고 말씀하셨다.
내가 지원한 직군은 백엔드 개발자(기술 스택 : 스프링)이다.
기술 면접에서는 스프링의 개념보다는 백엔드 개발자의 기본 지식인 웹 통신(네트워크)과 Java에 대한 개념이었다.
난 Java의 개념을 확실히 잡고 갔지만 가장 기본적인 핵심 내용의 정의를 100% 완벽하게 대답을 못하였다.
그리고 웹 통신(네트워크) 부분은 내가 중요하지 않다 생각이 들었는지 준비가 많이 부족하다는 것을 느끼게 되었다.
하지만 면접관님께서는 내가 틀리거나 대답을 못한 부분 혹은, 조금 틀린 부분을 친절하게 설명해주시면서
네트워크 지식이 왜 중요한지 잘 말씀해주셨다.
개인적으로 이러한 분(면접관) 밑에서 배운다면 각자 학습 속도를 다를 수 있어도 기본 베이스부터 제대로 배울 수 있을 거 같은 느낌이 들었다. 그래서 면접관님의 조언을 하나하나 경청하면서 듣고, 내가 부족했던 부분이 무엇이었는지
마음속으로 정리하였다.
이번 면접을 통해 왜 기초적인 지식이 중요한지 다시 한번 느끼면서 아직 많이 부족하다는 것을 느끼게 되는
좋은 면접 경험이었다.
이번 기술 면접에서 물어봤던 질문을 정리해보았다. 너무 인상 깊었던 기술 면접이라서 물어보셨던 질문 사항이
거의다 기억을 했다.
- Java
1. OOP 정의는?
- OOP는 Object Oriented Programming의 줄임말이고, 객체 지향 프로그래밍을 의미한다.
데이터를 추상화시켜서 상태와 행위를 가진 객체로 만들고, 그 객체 간의 상호 작용을 통해 로직을 구성하는 방법
2. 클래스와 객체의 차이점은?
- 먼저 클래스(Class)는 객체를 정의하는 틀 또는 설계도를 의미하고, 객체는 식별 가능한 개체 또는 사물을 뜻한다.
3. 객체가 무엇인가?
- 객체(Object)란 식별 가능한 개체 또는 사물이다. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한
상태를 가진다. 인스턴스들을 통칭하는 용도로 사용한다.
4. C와 Java의 차이점은?
- C언어는 순차적으로 읽어가는 절차 지향 언어이고, Java는 클래스를 사용하고 설계적인 측면이 강조된
객체지향 언어이다.
5. 후임 4명한테 간단한 자바 프로그래밍을 시켰다. 예를 들어 1번은 코드가 가장 짧고, 2번은 예외가 발생해서
중간에 종료가 되는 등 각자 다르다. 여기서 내가 점수를 준다고 하면 본인이 생각하는 중요도는??
- (따로 정답이 없다고 생각한다. 각자 자기의 생각을 말해보자 / 나는 예외 처리가 1순위라 말했다.)
- Web 통신 (네트워크)
1. HTTP 1.0 / 2.0 / 3.0의 정의 및 차이점은?
- 먼저 HTTP란 HyperText Transfer Protocol의 약자 / 텍스트 기반의 통신 규약으로 인터넷에서 데이터를
주고받을 수 있는 프로토콜을 의미한다.
- HTTP 버전 별 특징
(1) HTTP/0.9
사용 가능한 메서드는 GET이 유일 / HTTP 헤더가 없기 때문에 전송은 HTML 문서만 가능
응답은 오로지 파일 내용 자체로 구성( 상태 혹은 오류 코드가 존재하지 않았음)
(2) HTTP/1.0
HTTP 헤더 개념 도입 / HTML 파일들 외에 다른 문서들을 전송하는 기능 추가(Content-type)
/ 상태 코드 주입( 응답 시작 부분에 상태 코드가 붙게 되면서 브라우저가 요청 성공 실패 여부를 알 수 있음)
/ POST 메서드 추가
(3) HTTP/1.1 - 표준 프로토콜
첫 번째 표준 버전이며, 메서드에 OPTION, PUT, DELETE, TRACE가 추가되었음
기존 모델의 단점을 해결하고자 1번 열린 커넥션을 재사용하는 Persitent Connection이라는 개념과
여러 개의 HTTP 요청을 할 수 있는 HTTP Piplelining이라는 개념 등이 생김
(4) HTTP/2.0
HTTP 메시지를 바이너리 형태의 프레임으로 나누고 TCP 연결 하나로 여러 요청과 응답들을
병렬적으로 보내는 특징을 가지며 순서가 뒤섞이더라도 수신 측에서 재조립한다.
따라서 여러 개의 연결 없이 병렬 처리도 가능해지며 HOLB문제도 해결
(5) HTTP/3.0
HTTP 3.0 버전은 UDP를 기반으로 하는 QUIC 프로토콜을 사용
QUIC 프로토콜을 사용함으로써 새로운 연결에 대한 HandShake로 인한 Latency를 감소
QUIC 프로토콜 : TCP가 가지는 문제점을 해결하고자 구글이 개발한 UDP 기반의 프로토콜
2. HTTP와 HTTPS 차이점은?
- HTTP는 따로 암호화 과정을 거치지 않기 때문에 중간에 패킷을 가로챌 수 있고, 수정 또한 가능하다.
따라서 보안이 취약한데 이를 보완하기 위해 나온 것이 HTTPS이다. 중간에 암호화 계층을 거쳐서
패킷을 암호화한다.
3. 요즘 브라우저들은 SSR 방식으로 통신하는데 SSR이란?
- SSR이란 Server Side Rendering의 약자로 처음 클라이언트가 접속했을 때 브라우저에서
JS 코드를 다운로드하여 해석할 때까지 기다리지 않고 서버에서 보일 HTML을 미리 준비해
클라이언트한테 응답해주는 방식을 의미
4. 코어스(Cross Origin Resource Sharing)이란?
- CORS란 웹 개발을 하다가 흔히 만날 수 있는 이슈이다. 대개는 프런트 개발 시에 로컬에서 API 서버에
요청을 보낼 때 흔하게 발생한다.
서로 다른 도메인 간에 자원을 공유하는 것을 뜻하고, 출처가 다른 서버의 자원을 요청하면 발생하는 문제이다.
5. 코어스를 쓰는 구체적인 이유는?
- 먼저 CORS의 반대인 SOP는 다른 출처라면 무조건 차단함으로써 막강한 보안을 제공한다.
하지만 다른 출처의 리소스를 사용할 때는 CORS를 써야 한다고 생각한다. 또한 CORS는 출처가 다를 시에
HTTP Header를 이용해 브라우저에게 알려준다.
6. 코어스를 구현하려면 어떻게 하는가?
- CORS를 구현하기 위해 앞서 요청을 허락하기 위해 Access-Control-Allow-Origin:{도메인}과 같은 내용을
Response 헤더에 추가해주어야 함.
7. Session Hijacking(세션 하이재킹)이란?
- 세션 하이재킹은 시스템의 접속하기 위한 인가된 ID와 Password가 없을 경우 현재 접 속된 시스템들의
세션 정보를 가로채는 공격 기법이다.
8. 3-way handshake 이란?
- 가상 회선을 수립하는 단계를 말한다.
클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 전송할 수 있는지 확인하는 과정
- 4-way-handshake는 TCP 연결을 해제하는 단계로, 클라이언트는 서버에게 연결 해제를 통지하고 서버가
이를 확인하고 클라이언트에게 이를 받았음을 전송해주고 최종적으로 연결이 해제된다.
- DB
1. SQL의 풀네임은?
- Structured query language(구조화된 쿼리 언어)
2. DB Connection Pool이란?
- 웹 컨테이너(WAS)가 실행되면서 DB와 미리 Connection(연결)을 해놓은 객체들을 pool에 저장해두었다가
클라이언트 요청이 오면 connection을 빌려주고, 처리가 끝나면 다시 connection을 반납받아
pool에 저장하는 방식을 말함.
- 유닉스 & 리눅스
1. 커멘드 쉘을 쓸 수 있나?
2. 커멘드 쉘의 기본적인 명령어는?
3. 유닉스 & 리눅스 차이점?(ex 명령어 등)
자주는 아니지만 평소에 썼던 명령어들이다. 다만.. 내가 이게 이 것을 말하는지 파악하지 못하였다.
이번 기술 면접을 통해 웹 개발자한테 유닉스 & 리눅스가 중요하다는 것을 깨닫게 되었다.
확실히 이번 기술 면접에 대한 지식이 많이 부족하였다. 난 궁금한 점이 생기면 못 참아서 면접을 보고 집에 오자마자
구글링을 하여 질문에 대한 답변을 정리하였다. 답변을 정리하다 보니 내가 어디 부분이 부족한지 느끼게 되었고,
이번 면접에서 나온 질문들을 자세히 정리할 예정이다.
'CS 지식 & 기술면접 > 기술 면접 정리' 카테고리의 다른 글
신입 백엔드 개발자 기술 면접 핵심 정리 - Java (3) | 2023.01.09 |
---|---|
[기술 면접] 신입 백엔드 기술 면접 질문 정리 및 답변 (2) | 2022.07.12 |
[IT 기술 면접] Java의 Collection Framework 이란? (0) | 2022.05.31 |
[IT 기술 면접] JVM (자바 가상 머신) 이란? (0) | 2022.05.30 |
[IT 기술 면접] OOP(객체 지향 프로그래밍) 이란? (0) | 2022.05.30 |
블로그의 정보
무작정 개발
무작정 개발