백엔드 기술면접 질문 - baeg-endeu gisulmyeonjeob jilmun

그* 코딩테스트와 서류에 붙어 면접을 보게 되었다.

팀장님으로 보이는 시니어 한 분과 프린시플 레벨의 시니어 한 분이 들어오셨다.

굉장히 경직된 나를 보고는, 두 면접관님들이 분위기를 풀어주셔서 조금은 편하게 면접을 보았다! 


면접에서는

실제로 나의 이력서와 한 페이지 포트폴리오를 보고 내가 익숙해진 기술과 개념에서 질문이 나왔다.

Java Spring으로 현업에서 일한 경력이 없어 물어볼 폭이 넓지 않았던 거 같고, 1년의 짧은 연구실 경력과 개인적으로 운영하는 서비스에 중심을 두고 전개 되었다.

그 후엔 내가 가진 기술 스택을 토대로 한 기술적인 사항에 대한 질문들이 들어왔다.

당신은 어떤 일을 해왔나요?

1. 먼저 연구실에서 데이터 플랫폼 실험을 수행한 지 질문이 들어왔다.

문제 수행력 검증과 더불어 어떤 일을 경험했는지 물어보는 듯 했다.
  • 실제로 무슨 일을 했는지
  • 중간에 어떤 어려움이 있었는지

이 부분에서는 내가 한 일을 솔직히 말하는 것이 중요하다

2. 개인적으로 운영하는 서비스 (Java Spring)에 대해서도 질문이 들어왔다.

난 이 부분을 정말 잘 준비해 갔어야 한다.
이번 면접 기회는 개인 서비스를 통해 얻어진 느낌이었다.
개발 강의나 도서로 고민 없는 학습이 아니라 직접 부딪혀보는 야생성이 어필이 되었다고 생각한다.
  • 내가 어떤 고민으로 프로젝트를 했는지, 
  • 배포를 한 상태인지
  • 기술 스택은 어떤 고민을 거쳐 고르게 되었는지
  • 중간에 어떤 어려움이 있었는지 어떻게 해결을 했는지

내가 처한 상황과 어떻게 문제를 해결했는지, 고민을 거쳐 기술 스택을 사용했는지 잘 대답하는 것이 핵심이다.

어떻게 이 질문을 잘 대답할 지 물어본다면.. 내가 실제로 그렇게 고민하면서 개발하면 된다.

3. 졸업 후 어떤 일들을 해왔는 지

  • 흔히 공백기 질문이라고 부르는 질문이다. 
  • 공부나 프로젝트, 코딩테스트 공부를 해왔다고 해도, 일단은 현재 실력이 좋으면 면접관들도 그렇게 크게는 생각하지 않는 것으로 느꼈다.

기술 검증 들어갑니다

먼저 Java Spring에 관한 질문이 처음으로 나왔다.

이러한 형태의 전체 Flow와 기술적 Detail을 물어보는 질문은, 백엔드 면접뿐만 아니라 모든 면접에 해당되는, 면접자의 수준을 측정하는 질문이라고 생각한다.

Url으로 요청이 들어올 때부터 나갈 때까지 Java Spring 동작을 아는 범위에서 전부 설명해주세요.

내가 여기서 대답을 어느정도는 했지만, 추측하기로는 면접관님들이 만족하지 못하는 듯 했다.

먼저 내가 생각해보지 않았던 질문이라 답변의 포인트를 잘 잡지 못하고 횡설수설했던 탓도 있고, 워낙 방대하다보니 어느 수준에서 어떻게 대답해야할 지 갈피를 잡지 못했었다.

이 질문 이후에는 한 가지 꼬리 질문과 두 가지 추가 질문이 이어졌다.

  • 인증 과정이 추가된 꼬리 질문
    • Login이나 인증이 추가되어 Java Spring security가 더해진다면 동작은 어떻게 될 지
  • 두 가지 추가 질문
    • Java Spring Bean을 어떻게 의존성 주입을 수행하는지
    • Java spring와 python Django의 차이점

이 후에는 DB에 관한 질문이 이어졌다. 첫 질문을 잘 대답하니 두번째로 쿼리 개선 경험을 물어보셨다.

  • DB의 transaction은 무엇이고 개념적으로 어떻게 동작하는 지
  • DB slow query 개선했던 경험이 있나요? 어떤 경험이었나요? 
  • 훅 들어온 심화 질문, DB는 일반적으로 어떠한 기준을 가지고 Index의 사용 여부를 결정합니다. 그렇다면 DB table의 Index를 강제로 사용하게 하는 방법을 무엇일까요? (대답 못함. 답은 use index)

그 이후에는 객체지향 패턴 중 하나인 싱글턴 패턴을 물어보셨고, 설명 중 class와 instance를 혼동해서 사용하는 모습에 추가 질문으로 이어졌다. 

  • 싱글턴 패턴의 개념과 예시
    • 개념은 잘 설명했지만, 예시를 못들었다. Java Spring Bean의 DI 주입이 싱글턴 패턴인데 낫 놓고 기억자도 모르는 사람..
  • Class와 Instance의 차이점

그리고 정말 기초 질문으로 마지막 검증!

  • call by reference, call by value
  • 기본형 / 참조형 변수
  • static 변수는 어디에 저장될까요? 

피드백

이 면접 어떻게 흘러가는건가. 이런 생각에 나라도 발전할 기회로 삼자..!

마무리 단계에서는 이런 생각에 이러한 질문은 던졌다.

선배 개발자 입장에서 제가 어떤 부분을 보완하면 채용 과정에서 더 매력적인 사람이 될 지 궁금합니다!

감사하게도 두 분 다 가장 어려운 질문이라고 너털 웃음을 지으시면서도 대답을 잘해주셨다.

프린시플 시니어분

개발자를 채용할 때, 세 가지를 주로 본다고 하셨다.

  • 트러블슈팅 능력
  • 협업 능력
  • 학습 능력

그런데 경력이 적거나 없는 경우에는 다양한 문제를 만나본 적이 없고, 확연한 협업 기회도 적기 때문에 그나마 검증할 수 있는 학습능력에 주안점을 두고 면접을 진행한다고 설명해주셨다.

즉, 공부할 때 꼼꼼히 공부했는지 보는 것이다. 

이는 면접시 답변이나 내가 해왔던 활동의 완성도, 그리고 프로젝트시에 다양한 고민들로 검증을 한다고 설명해주셨다. 

그 전에는 공부할 때 꼼꼼히는 공부했고 프로젝트가 잘 수행 될 수 있게 공부를 해왔지만 명확한 기준이 없었다.

이 답변을 듣고 내가 보강해야 될 부분을 확연히 알 수 있었다.

팀장 포지션 시니어분

이력서와 깃허브가 가장 중요하다고 말씀해주셨다.

이력서의 경우에는 지원에 대한 성의가 나타나기 때문에, 열정이나 진심을 비추어 확인하고,

깃허브에서는 프로필과 각 프로젝트에서 사용한 언어와 프레임워크를 보고, 
특히 현업에서 수행하는 Readme나 깃허브의 기능 사용 (Issue, git flow), Commit / Code convention을 지원자가 현업급으로 사용하고 있는지, 그렇지 않더라도 일관성을 지켜 코드와 커밋을 작성하는 지를 본다고 한다.

이제 나는 어떻게 할 것인가

Need Action Explain
말을 명료하게 하자 블로그든 일기는 Readme든
글을 많이 읽고 써보자 (1일 1글)
언급하지 않았지만
횡설수설! 고쳐야된다.
프로젝트시 기술 스택 분석 프로젝트에 기술을 도입하게 되면 도입 배경 글을 작성하자 그러자
면접 질문들 준비 면접 질문들에 모범 답변을 만들고 연습 학습을 더 꼼꼼하게 하자
이력서 이력서 작성 시간을 배정을 하고
항목별 메세지를 선 작성하여 채운다.
각 항목에 담을 메세지 먼저 작성하자
깃허브 IT 회사들의 깃허브를 참고하여 보강 깃허브는 개발자 lsmman의 얼굴이다.
공부는 그만하자 원하는 기술 스택이 있다면 그에 맞는 프로젝트를 기획해서 구현해보자 공부가 아니라 프로젝트를 하자
  • "개발바닥"의 "클론코딩" 이라는 이름의 영상이 있다. 클론코딩에 관한 영상이 아니라 그보다 좋은 학습법을 이야기해주는 내용의 영상인데, 여기에서 사업주도 개발이 성장에 주요했다고 말씀하신다. 나도 도입해야겠다.

[목차]

1. Java

2. Spring & Spring boot

3. DB

4. 웹 & 통신

5. 운영체제

6. 자료 구조


1. Java

1. JVM이란 무엇인가?

  • 자바 가상 머신의 약자를 줄여 부르는 용어(Java Virtual Machine)
  • JVM의 역할 : 자바 애플리케이션을 클래스 로더를 통해 읽어 -> 자바 API와 함께 실행하는 것
  • 메모리 관리(GC)를 수행하며 스택(Stack) 기반의 가상 머신

2. OOP(Object Oriented Programming) 란?

  • 객체 지향 프로그래밍
  • 현실 세계를 프로그램 설계에 반영한다는 개념을 기반으로 함
  • 프로그래밍에서 필요한 데이터를 추상화시켜 행위(Method)와 상태(Attribute)를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
  • OOP의 4가지 특징(캡 상추다)으로는 캡슐화, 상속, 추상화, 다형성이 있다.
백엔드 기술면접 질문 - baeg-endeu gisulmyeonjeob jilmun
출처 : https://github.com/devham76/tech-interview-study/blob/master/contents/java.md

3. GC(가 바지 콜렉터) 란?

  • GC는 힙(Heap) 영역에서 사용하지 않는 객체(인스턴스)들을 제거하는 작업을 의미
  • 작업이 필요한 이유 : Java는 개발자가 메모리를 직접 해제해줄 수 없는 언어이기에 객체를 사용하고 제거하는 기능이 필요함

4. 오버 라이딩과 오버 로딩은 무엇이며 어떤 차이점이 있나?

  • 오버 라이딩(Overriding)은 상위 클래스의 메서드를 재정의 하는 것을 의미 / 런타임 다형성
  • 오버 로딩(Overloading)은 같은 Class 내에서 동일한 메서드 이름을 가지지만, 매개 변수의 타입 혹은 개수가 다르게 구현할 수 있는 것을 의미 / 컴파일 타임 다형성
  • 추가로 "@Override" 어노테이션을 써야 하는 이유는 컴파일 타임에 오버 라이딩에 대한 안정성을 부여해주기 때문.

5. 리플렉션(Reflection) 이란?

  • 구체적인 클래스 타입을 알지 못해도 클래스의 메서드, 타입, 변수들을 접근할 수 있게 해주는 Java API
  • JVM에서 실행되는 애플리케이션의 런타임 동작을 검사하거나 수정할 수 있는 기능이 필요한 프로그램에서 사용됨

6. 제네릭(Generics) 이란?

  • 제네릭은 Java의 타입 안정성을 맡고 있다.
  • 컴파일 과정에서 타입 체크를 해주는 기능으로 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형 변환의 번거로움을 줄여줌

7. Java의 접근 제어자의 종류와 이에 대해 설명하세요.

제어자 같은 클래스 같은 패키지 자식 클래스 전체
public O O O O
protected O O O  
(default) O O    
private O      

8. 클래스와 객체는 무엇인가?

  • 클래스(Class)는 객체를 정의하는 틀 또는 설계도와 같은 의미
  • 객체(Object)는 식별 가능한 개체 또는 사물 / 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가짐

9. SOLID(객체 지향 5대 원칙)에 대해 설명하세요.

  • SRP(단일 책임 원칙) - 1개의 클래스는 1개의 책임만 가져야 한다.
  • OCP(개방-폐쇄 원칙) - 확장에는 열려 있으나 변경에는 닫혀 있어야 하며, 다형성을 활용해야 한다.
  • ISP(인터페이스 분리 원칙) - 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 되는 원칙 / 즉. 거대한 인터페이스보단 더 작고 구체적인 인터에 피스로 분리해야 한다.
  • DIP(의존관계 역전 원칙) - 추상적인 것은 자신보다 구체적인 것에 의존하지 않고, 변화하기 쉬운 것에 의존해서는 안된다는 원칙 / 구체적으로는 구현 클래스에 의존하지 말고, 인터페이스에 의존해야 하는 원칙이다.

10. 인터페이스와 추상 클래스의 차이점에 대해 설명하세요.

  • 추상 클래스는 객체의 추상적인 상위 개념으로 공통된 개념을 표현할 때 사용하고, 단일 상속만 가능하다. 그리고 추상 클래스를 상속하는 집합 간에는 연관 관계가 있다.
  • 인터페이스는 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용하고, 다중 상속이 가능하다. 인터페이스를 구현하는 집한 간에는 관계가 없을 수 있다.

11. 컬렉션 프레임워크(Java Collection Framework)에 대해 설명해주세요.

  • 자료 구조를 바탕으로 객체, 데이터들을 효율적으로 관리할 수 있는 자료 구조들이 있는 라이브러리
  • List, Set은 Collection 인터페이스를 상속받지만, Map 인터페이스는 구조상의 차이라 별도로 정의한다.

12. List와 Map의 차이점은?

  • Map은 검색할 수 있는 인터페이스이고, 데이터를 삽일할 때 Key와 Value의 형태로 삽입되어, Key를 이용해서 Value를 얻을 수 있다. 데이터 순서를 보장하지 않고, Key값은 중복 허용 X , Value값은 중복 허용
  • List는 순서가 있는 Collection이고, 데이터 중복이 허용된다.
  • List와 Map의 차이점은 List는 데이터 순서를 보장하지만, Map은 순서를 보장하지 않는다.

13. 직렬화 란?

  • Java에서 입출력할 때는 스트림이라는 데이터 통로를 통해 이동한다.
  • 하지만 객체는 그렇지 않아서 스트림을 통해 전송이 불가능해서 객체를 스트림으로 입출력하기 위해 바이트 배열로 변환하는 것을 의미함
  • 역 직렬화 : 스트림 -> 객체

12. 정적(static) 이란?

  • static는 클래스 멤버라고 하며, 클래스 로더가 클래스를 로딩해서 메서드 메모리 영역에 적재할 때 클래스 별로 관리된다.
  • static 키워드를 통해 생성된 정적 멤버들은 PermGen 또는 Metaspace에 저장되며 저장된 메모리는 모든 객체가 공유하며 하나의 멤버를 어디서든지 참조할 수 있는 장점이 있다.
  • But, GC의 관리 영역 밖에 존재하기 때문에 프로그램 종료 시까지 메모리가 할당된 채로 존재해서, 너무 남발하게 되면 시스템 성능에 악영향을 줄 수 있다.

13. Java는 멀티 스레드(Multi Thread) 환경인데 멀티스레드란 무엇인가?

  • 멀티 스레드란 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것
  • 멀티 스레드 프로그램은 공유하는 자원에 대해 동기화 문제가 발생할 수 있다.
  • method area, heap area는 스레드가 공유하는 영역이다.
  • @ 추가적으로 JS(자바스크립트)는 싱글 스레드

14. 멀티 스레드(Multi Thread) 사용 이유는?

  • 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하므로, 시스템 자원의 낭비가 적다.
  • 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아진다.

2. Spring & Spring boot

1. Spring Framework의 특징과 쓰는 이유는?

  • 스프링은 자바 기반의 웹 애플리케이션을 만들 수 있는 프레임워크
  • 스프링 이전에는 엔터프라이즈급 시스템 개발이 복잡했는데  스프링에서는 복잡함을 해결하기 위해 DI, IOC, AOP 등이 있다.
  • 스프링의 주요 특징으로는 POJO 기반의 구성 / 의존성 주입(DI)을 통한 객체 간의 관계 구성 / AOP(Aspect - Oriented - Programming) 지원 - 관점 지향 프로그래밍 / 편리한 MVC 구조 / WAS의 종속적이지 않은 개발 환경 등이 있다.
  • 또한 Java 객체와 라이브러리들을 관리해주며, 내장 서버(톰캣)가 내장되어 있다.

2. Spring Boot 이란? (특징)

  • 스프링 부트는 스프링을 더 쉽게 이용하기 위한 도구라고 볼 수 있다.
  • 스프링을 이용하여 개발을 할 때 세팅을 해야 될 요소들이 많은데 스프링 부트는 매우 간단하게 프로젝트를 설정할 수 있게 하여, Spring 개발을 조금 더 쉽게 만들어주는 역할을 한다.
  • [핵심] : 비즈니스 로직을 제외한 Spring 구성은 Spring이 관리한다. 개발자는 비즈니스 로직에만 집중 가능

3. Spring MVC에 대해 설명해주세요.

  • Spring MVC는 Model2를 지칭한다.
  • MVC란 Model - View - Controller 구조로 사용자 인터페이스와 비즈니스 로직을 분리하여 개발하는 것
  • MVC에서는 Model1과 Model2로 나누어져 있다.
  • Model(모델)
    • 데이터 처리를 담당하는 부분이고, Service 영역과 DAO영역으로 나누어지게 된다.
    • Model에서는 View와 Controller 어떠한 정보도 가지고 있어서는 안 된다.
  • View(뷰)
    • View는 사용자 인터페이스를 담당하며 사용자에게 보이는 부분
    • Model이 가지고 있는 정보를 저장해서는 안되며 Model, Controller의 구성 요소를 알아선 안된다.
  • Controller(컨트롤러)
    • Controller에서는 View에 받은 요청을 가공하여 Model(Service 영역)에 전달한다.
    • Model로부터 받은 결과를 View로 넘겨주는 역할을 하고, 모든 요청 에러와 모델 에러를 처리
    • Model과 View의 정보에 대해 알고 있어야 한다.

4. Spring DI / IOC는 무엇이고, 어떻게 동작하는가?

  • IOC (제어의 역전) - 대신해줌
    • 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것으로 코드의 최종 호출은 개발자가 제어하는 것이 아닌 프레임워크(Spring)의 내부에서 결정된 대로 이루어진다.
  • DI (의존성 주입) - 미리 찜해놓음
    • Spring에서 지원하는 IOC의 형태로 클래스 사이의 의존 관계를 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동으로 연결해준다.
    • DI 3가지 방법 : 생성자 삽입, Setter를 이용한 메서드 매개 변수 삽입, 필드 주입

5. Spring AOP란?

  • AOP(Aspect Orinted Programming)은 관점 지향 프로그래밍이다.
  • 핵심 비즈니스 로직과 공통 로직을 분리해서 응집도가 높게 개발할 수 있도록 지원한다.
  • 공통으로 사용하는 기능들을 외부로 독립된 클래스로 분리한다.

6. Spring Bean이란?

  • IOC 컨테이너 안에 들어있는 객체로 필요할 때 IOC 컨테이너에서 가져와서 사용한다.
  • @Bean 어노테이션을 사용하거나 XML설정을 통해 일반 객체를 Bean으로 등록할 수 있다.

7. 스프링 컨테이너란?

  •  Spring에서 객체를 생성하고 조립하는 컨테이너로, 컨테이너를 통해 생성된 객체를 빈(Bean)이라 부름

8. Spirng Bean의 Scope에 대해 설명하시오.

  • Bean Scope는 빈이 존재할 수 있는 범위를 뜻하며 싱글톤, 프로토타입, request, session, application 등이 있다.

9. Spring에서 CORS 에러를 해결하기 위한 방법은?

  • Servlet Filter를 사용하여 커스텀한 CORS 설정을 한다.
  • WebMvcConfiguer를 구현한 Configuration 클래스를 만들어서 addCorsMappings()를 재정의 한다.
  • Spring Security에서 CorsConfigurationSource를 Bean으로 등록하고 config에 추가한다.

3. DB

1. NoSQL 이랑 RDBMS의 특징과 차이점은? (비 관계형과 관계형의 차이점)

  • RDMBS (관계형)
    • 데이터는 엄격한 스키마에 따라 table에 저장된다.
    • 관계를 통해 연결된 여러 개의 테이블에 저장
    • 사용
      • 데이터가 자주 수정되는 애플리케이션일 때 사용
      • 변경될 여지가 없고, 명확한 스키마가 중요할 경우에 사용
    • 장점
      • 명확한 데이터 구조 보장(정해진 스키마에 따라 데이터를 저장하기 때문)
      • 데이터 중복을 피한다. 공간 절약
    • 단점
      • 관계로 인한 시스템 복잡도를 고려하여 구조화해야 한다.
      • 시스템이 복잡하면 쿼리문 복잡, 성능 저하
  • NoSQL (비 관계형)
    • 분산 처리 목적으로 나옴
    • 스키마 x, 관계 x    /   테이블과 같은 개념으로 컬렉션이라는 형태로 데이터를 관리
    • 사용
      • 정확한 데이터 구조를 알 수 없거나 변경, 확장이 가능한 경우 사용
      • 막대한 양의 데이터를 다룰 때 사용(수평적 확장 용이)
    • 장점
      • 테이블 간의 복잡한 관계를 생각 안 해도 된다.
      • 언제든지 저장 데이터를 조정하고 새로운 필드 추가 가능 - (유연하다)
      • 자주 변경되지 않는 데이터를 저장하기에 유리하고, 수평적 확장에 용이(읽기 쓰기가 빠름)
    • 단점
      • 자유롭게 데이터를 추가할 수 있어서 데이터가 중복 저장이 될 수 있다.

2. Join 문이란?

  • 관련 있는 칼럼을 기준으로 행을 합쳐주는 연산
백엔드 기술면접 질문 - baeg-endeu gisulmyeonjeob jilmun
출처 : https://github.com/devham76/tech-interview-study/blob/master/contents/db.md#NoSQL%EC%9D%B4%EB%9E%80?-%EA%B8%B0%EC%A1%B4RDBMS%EC%99%80-%EB%8B%A4%EB%A5%B8%EC%A0%90%EC%9D%80?

3. Primary Key, Foreign Key에 대해 설명하시오.

  • Primary key(기본 키) : 후보 키 중에서 선정된 키. 유일성 O, 최소성 O / Null 값을 가질 수 없음
  • Foreign Key(외래 키) : 다른 테이블의 Primary key를 참조하는 칼럼

4. 정규화에 대해 설명하시오.

  • 정규화란 RDBMS의 설계에서 중복을 최소화하여 데이터를 구조화하는 프로세스
  • 연관성 있는 속성들을 분류하여, 각 릴레이션들에 이상 현상이 생기지 않도록 하는 과정

5. 정규화가 필요한 이유는?

  • DB설계를 잘못하면 불필요한 데이터 중복으로 인해 공간이 낭비되고 부작용을 초래할 수 있기 때문
  • 이러한 부작용을 이상(Anomaly)이라 한다.
  • 삽입 이상, 갱신 이상, 삭제 이상이 있다.

6. 무결성이란?

  • 데이터의 정확성과 일관성을 유지하고 보증하는 것
  • 개체, 참조, 도메인, 고유, NULL, 키 무결성이 있다.

7. 트랜잭션이란?

  • 트랜잭션은 작업의 완전성을 보장해주는 것이다.
  • 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능
  • 트랜잭션의 4가지 특성(ACID) : 원자성, 일관성, 고립성, 지속성

8. DB Connection Pool 이란?

  • 웹 컨테이너(WAS)가 실행되면서 DB와 미리 연결해놓은 객체들을 Pool에 저장해두었다가 클라이언트 요청이 오면 connection을 빌려주고, 처리가 끝나면 다시 connection을 반납받아 pool에 저장하는 방식

4. 웹 & 통신

1. HTTP란 무엇인가?

  • HTTP란 HyperText Transfer Protocol의 약자
  • 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜

2. HTTP와 HTTPS의 차이점은?

  • HTTP는 따로 암호화 과정을 거치지 않기 때문에 중간에 패킷을 가로챌 수 있고, 수정할 수 있어 보안이 취약
  • 이를 보완하기 위해 나온 것이 HTTPS이고, 중간에 암호화 계층을 거쳐서 패킷을 암호화한다.

3. HTTP 메서드에 대해 설명하세요. (REST API와 비슷함)

  • GET 요청은 서버에 존재하는 데이터를 요청 - CRUD로 따지면 R(읽기)
  • POST 요청은 서버에 데이터를 생성하는 것을 요청 - CRUD로 따지면 C(생성)
  • PUT 요청은 서버에 존재하는 데이터를 수정하거나 존재하지 않으면 생성 - CRUD로 따지면 C, U (생성, 수정)
  • DELETE 요청은 서버에 데이터를 제거할 것을 요청 - CRUD로 따지면 D(삭제)
  • PATCH 요청은 서버에 존재하는 데이터를 일부 수정 - CRUD로 따지면 U(수정)

4. OSI 7 계층에 대해 설명하세요.

  • OSI 7 계층은 네트워크 통신을 구성하는 요소들 7개의 계층으로 표준화한 것이다.
  • 표준화하는 것의 장점으로는 통신이 일어나는 과정을 단계별로 파악할 수 있어, 문제가 발생하면 해당 문제를 해결하기 용이해진다.
  • 추가적으로 실제로 우리가 대부분 사용하는 네트워크는 TCP/IP 4 계층이다. 통신에 실제로 사용되는 계층이고 1,2 계층이 1 계층, 5,6,7 계층이 4 계층으로 운영된다.

5. TCP와 UDP의 차이점에 대해 설명하세요.

  • TCP는 연결 지향형 프로토콜 / UDP는 데이터를 데이터그램 단위로 전송하는 프로토콜
  • TCP는 가상 회선을 만들어 신뢰성을 보장(흐름, 혼잡, 오류 제어)하는 프로토콜로 따로 신뢰성을 보장하기 위한 절차가 없는 UDP에 비해 속도가 느리다.
  • TCP는 파일 전송과 같은 신뢰성이 중요한 서비스에 사용되고, UDP는 스트리밍, RTP와 같은 연속성이 더 중요한 서비스에 사용된다.

6.  3 - way handshake 이란?

  • 가상 회선을 수립하는 단계를 말한다.
  • 클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 전송할 수 있는지 확인하는 과정
  • 추가적으로 4 - way - handshake는 TCP 연결을 해제하는 단계로, 클라이언트는 서버에게 연결 해제를 통지하고 서버가 이를 확인하고 클라이언트에게 이를 받았음을 전송해주고 최종적으로 연결이 해제되는 과정

7.  CORS(Cross Origin Resource Sharing) 이란?

  • CORS란 웹 개발을 하다가 흔히 만날 수 있는 이슈이다. 대개는 프런트 개발 시에 로컬에서 API 서버에 요청을 보낼 때 흔하게 발생한다.
  • 서로 다른 도메인 간에 자원을 공유하는 것을 뜻하고, 출처가 다른 서버의 자원을 요청하면 발생하는 문제

8. Session(세션)과 Cookie(쿠키)의 차이점에 대해 설명해주세요.

  • Cookie(쿠키)
    • 웹 사이트에 접속할 때 생성되는 정보를 담은 임시 파일 
    • 서버가 사용자의 웹 브라우저에 저장하는 데이터
    • 데이터 형태는 Key, Value 한 쌍으로 구성되고 String 형태
    • 쿠키는 로그인 유지 시간, 아이디 저장 등에 사용
    • 단점은 보안이 취약 / 서버가 가지고 있는 것이 아니라 임의로 수정, 가로채기가 가능해서 민감한 정보를 담는 것은 위험하다.
  • Session(세션)
    • 세션을 쿠키를 기반하고 있지만, 사용자 정보 파일을 서버에 저장하고 관리한다.
    • 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증 상태를 유지한다.

  Cookie Session
저장위치 클라이언트 서버
저장형식 text Object
리소스 클라이언트의 리소스 서버의 리소스
용량제한 도메인당 20개, 1쿠키당 4KB 없음
만료시점 쿠키 저장시 설정(디폴트 = 브라우저 종료시점) 알 수 없음


5. 운영체제

6. 자료 구조

7. 기타


[참고 자료]

https://velog.io/@hygoogi/%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0#%EC%9B%B9%EA%B3%BC-%ED%86%B5%EC%8B%A0

기술면접 준비하기

기술면접 빡세게 준비하자

velog.io

백엔드 기술면접 질문 - baeg-endeu gisulmyeonjeob jilmun

https://github.com/ksundong/backend-interview-question#%EB%A9%B4%EC%A0%91-%EA%BF%80%ED%8C%81

GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질

백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문, 인터넷 참고한 질문(CC BY-NC) - GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문,

github.com

백엔드 기술면접 질문 - baeg-endeu gisulmyeonjeob jilmun