[기술 면접] 신입 백엔드 기술 면접 질문 정리 및 답변
by 무작정 개발[목차]
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가지 특징(캡 상추다)으로는 캡슐화, 상속, 추상화, 다형성이 있다.
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 문이란?
- 관련 있는 칼럼을 기준으로 행을 합쳐주는 연산
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://github.com/ksundong/backend-interview-question#%EB%A9%B4%EC%A0%91-%EA%BF%80%ED%8C%81
'CS 지식 & 기술면접 > 기술 면접 정리' 카테고리의 다른 글
신입 백엔드 개발자 기술 면접 핵심 정리 - Java (3) | 2023.01.09 |
---|---|
[기술 면접 후기] 가장 인상 깊었던 3번째 기술 면접 및 질문 정리 (1) | 2022.06.03 |
[IT 기술 면접] Java의 Collection Framework 이란? (0) | 2022.05.31 |
[IT 기술 면접] JVM (자바 가상 머신) 이란? (0) | 2022.05.30 |
[IT 기술 면접] OOP(객체 지향 프로그래밍) 이란? (0) | 2022.05.30 |
블로그의 정보
무작정 개발
무작정 개발