🔦 백엔드 개발자 기술 면접 질문 정리 🔦
💻 Computer Science 공통 질문
✔️ 프로세스와 쓰레드의 차이점에 대해 설명해주세요
프로세스
- 프로세스는 프로그램이 CPU를 할당받은 상태입니다. 독립적인 메모리 영역(CODE, Data, Heap, Stack)을 가지고 다른 프로세스와 공유하지 않습니다. 프로세스간 통신은 IPC를 사용합니다.
- 멀티 프로세스는 여러개의 프로세스가 동시에 실행되면서 CPU 레지스터에서 컨텍스트 스위칭이 발생하는데, 프로세스 간 공유되는 메모리 영역이 없으므로 부담이 됩니다.
- 프로세스는 최소 1개의 쓰레드를 가집니다.
쓰레드
- 쓰레드(Thread)는 프로세스내의 하위 실행 단위입니다.
- 프로세스의 메모리 영역(CODE, Data, Heap)은 쓰레드간 공유합니다.
- 쓰레드는 Stack 메모리 영역을 독립적으로 사용합니다.
- 프로세스가 할당받은 CPU를 이용해 쓰레드가 실행됩니다.
- 쓰레드를 통해 병행작업을 할 수 있습니다. 멀티 쓰레드의 경우 쓰레드 컨텍스트 스위칭으로 성능 저하를 유발할 수 있습니다.
프로세스 VS 쓰레드 차이점
✔️ 멀티 프로세스와 멀티 쓰레드의 개념에 대해 설명해주세요
- 멀티 프로세스는 여러대의 프로세스가 동작하는 환경입니다. 여러대의 프로세스가 동시에 실행되면서 CPU로 부터 자원을 할당받습니다. 프로세스간 통신은 IPC를 사용하며 공유되는 메모리 영역이 없으므로 Context Switching으로 cahce가 초기화되는 문제가 있습니다.
- 멀티 쓰레드는 프로세스 내에서 Stack을 제외한 나머지 메모리 영역을 공유합니다. Context Switchiing이 빠르다는 장점이 있지만 1개의 쓰레드에 문제가 생기면 전체 쓰레드에 영향을 미칠 수 있습니다.
✔️ 동시성과 병렬성은 무엇인가요?
- 동시성은 싱글 코어에서 여러개의 Thread를 실행하는 것을 의미합니다.
- 병렬성은 멀티 코어 환경에서 여러개의 Thread를 동시에 실행하는 것을 의미합니다.
✔️ 교착상태(Deadlock)이란 무엇인가요?
- 2개 이상의 프로세스가 실현 불가능한 상태가 되어 무한정 대기하는 현상입니다.
- 교착상태가 발생하기 위한 조건으로는 4가지가 있습니다.
- 상호배제 : 한개의 리소스는 한번에 한개의 프로세스만 사용가능함
- 점유와 대기 : 어떤 프로세스가 하나 이상 리소스를 점유하면서 다른 프로세스의 리소스를 대기함
- 비선점 : 프로세스가 작업을 마치고 자발적으로 자원을 반환합니다.
- 환형 대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지게 됩니다.
- 교착상태를 해결하기 위한 방법으로는 4가지가 있습니다.
- 예방(Prevention) : 상호배제 부정, 비선점 부정, 점유와 대기부정, 환형 대기 부정
- 회피(Avoidance) : 안정적인 상태를 유지할 수 있는 프로세스 요청만 받아들입니다.(은행원 알고리즘)
- 발견(Detection) : 문제 원인이 교착상태인지 다른 문제인지 파악합니다.
- 회복(Recovery) : 교착상태가 발생한 프로세스 중 희생양을 정해 제거합니다.
✔️ 콘보이 현상(convoy Effect)란 무엇인가요?
- 콘보이 현상은 작업시간이 긴 프로세스로 인해 다른 프로세스에 영향을 미치는 현상입니다.
- FCFS(First come First servced) 스케줄링에서 먼저 도착한 프로세스가 콘보이 현상을 일으킬 수 있습니다.
✔️ 임계구역(Cretical Section)은 무엇인가요?
- 다중 프로그래밍 환경에서 2개 이상의 프로세스가 운영될 때 프로세스간 공유되는 자원을 의미합니다.
- 프로세스 간 통신에 필요한 매개변수 역할로 임계구역을 설정합니다.
- 임계구역은 동시에 사용이 불가능하므로, 독점되지 않도록 관리해야 합니다.
✔️ 상호배제(Mutex)는 무엇인가요?
- 하나의 프로세스만 임계구역을 사용하도록 다른 프로세스의 접근을 차단하는 방법입니다.
- 조건
- 두개 이상의 프로세스들이 동시에 임계구역에 있으면 안됩니다.
- 어떤 프로세스도 임계구역에 진입하는게 무한정 연기되면 안됩니다.
- 임계구역 내 프로세스가 다른 프로세스의 임계구역 진입을 막을 수 있어야 합니다.
- 프로세스들의 상대적인 속도에 가정을 하지 않습니다.
- 만약 현재 사용중인 프로세스 실행 시간이 길면, 다른 프로세스들은 계속 대기하게 됩니다.(Busy Wait)
✔️ 세마포어(Semaphore)란 무엇인가요?
- 임계구역을 지키기 위해 기존 상호배제 알고리즘이 바쁜 대기 현상(Busy Wait)을 발생시키는 것을 방지하기 위한 방법입니다.
- 바쁜 대기 현상을 방지하기 위해 프로세스를 잠시 재우고(P 연산) 추후 다시 깨우는 (V연산) 방식을 사용합니다.
- 세마포어 알고리즘에서 사용되는 공유 자원 갯수를 세마포어 변수(S)라고 합니다.
- 0과 1로만 구성된 세마포어 => 이진 세마포어(=Mutex)
- 도메인 제한이 없는 세마포어 => 카운팅 세마포어
✔️ 선점형 vs 비선점형 스케줄링의 차이는 무엇인가요?
우선 프로세스 스케줄링이란 CPU를 사용하려는 프로세스들 간의 우선순위를 관리하는 작업입니다.스케줄링의 종류에는 선점형과 비선점형이 있습니다.
- 비선점형 : 현재 실행 중인 프로세스를 다른 프로세스가 중단할 방법이 없는 방법으로 현재 사용중인 CPU를 자발적으로 반환해야 다른 프로세스가 사용할 수 있습니다. FIFO, SJF, HRN가 있습니다.
- 선점형 : 현재 실행중인 프로세스를 다른 프로세스가 강제로 중단할 수 있는 방법입니다. 대화식, 실시간 처리 애플리케이션에서 사용할 수 있습니다. RR, SRT, MFQ가 있습니다.
✔️ 동기와 비동기에 대해 설명해주세요
- 동기 프로그래밍은 순차적 + 직렬로 작업을 수행합니다.
- 동기는 요청된 응답을 처리할 때 까지 나머지 작업들이 Blocking 됩니다.
- 비동기 프로그래밍은 병렬적으로 작업을 수행합니다.
- 비동기는 요청된 응답을 처리하는 동안 나머지 작업들이 Non-Blocking 됩니다.
✔️ 가상 기억장치란 무엇인가요?
- 보조기억장치의 일부를 주기억장치 처럼 사용해 용량이 큰 프로그램을 실행하도록 하는 방법입니다.
- 프로그램을 작은 블록으로 나눈 후 가상기억장체 저장 해 둔 필요한 블록만 주기억 장치에 할당해서 사용합니다.
- 페이징 기법과 세그멘테이션 기법으로 구분합니다.
✔️ 페이징 기법과 알고리즘에 대해 설명해주세요
- 페이징기법은 가상 기억장치에 보관된 프로그램과 주기억장치의 영역을 동일한 크기로 나누고 나눠진 프로그램(페이지)을 동일하게 나눠진 주기억 장치 영역(페이지 프레임)에 적재하는 기법입니다.
- 페이지 위치정보를 저장하는 페이지 맵 테이블을 사용합니다.
- 내부 단편화가 발생할 수 있습니다.
- 페이지 교체 알고리즘은 페이지 프레임이 비었을 때 페이지를 적재하는 방법입니다.
- OPT(Optimal replactement) : 가장 오래 사용하지 않을 페이지를 교체합니다.
- FIFO : 가장 먼저 적재된 페이지를 교체합니다.
- LRU : 최근에 가장 오래 사용하지 않은 페이지를 교체합니다.
- LFU : 사용빈도가 가장 낮은 페이지를 교체합니다.
- NUR(Not Used Recently) : 최근에 사용하지 않은 페이지를 교체합니다.
- SCR(Second Chance Replacement) : 자주 사용되는 페이지 교체를 방지합니다.
✔️ 문맥 교환(Context Switching)이란 무엇인가요?
- 멀티 프로세스 환경에서 CPU를 할당받는 프로세스를 변경하기 위해 현재 실행되는 프로세스의 상태 정보를 저장하고 다음 CPU를 할당해 다른 프로세스를 실행하는 방법입니다.
- 인터럽트가 발생하는 경우 진행중인 프로그램을 다시 시작(Resume)하기 위해 필요한 레지스터 문맥을 저장하게 됩니다.
- CPU 할당 시간인 Time slice가 작을 수록 문맥 교환수가 증가하고 오버헤드, 인터럽트 또한 증가합니다.
🌈 네트워크 & 인프라
☑️ HTTP와 HTTPS의 차이점에 대해 설명해주세요
- HTTP(Hyper Taxt Transfer Protocol)은 OSI7 계층의 응용계층에서 작동하는 통신 프로토콜입니다.
- HTTP의 대표적인 특징으로는 Stateless로 클라이언트의 요청에 서버가 응답을 하고 통신을 끊는 특징을 가집니다.
- 클라이언트의 정보를 기억하기 위해 JWT, 세션, 쿠키, Loacl Storage를 사용합니다.
- HTTPS는 SSL 인증서를 도입해 클라이언트와 서버간 통신 데이터를 암호화합니다. 이전에는 TCP와 직접 통신했다면 HTTPS는 SSL과 통신을 하고, SSL이 TCP와 통신하면서 안전한 연결을 가능하게 합니다.
- HTTPS는 기본포트로 443을 사용하고, HTTP는 80번 포트를 사용합니다.
☑️ GET요청과 POST 요청의 차이점은 무엇인가요?
- GET 메소드는 리소스를 조회할 때 사용되며 QueryString으로 데이터를 전달 합니다.
- POST 메소드는 리소스를 생성할 때 사용되며 HTTP body로 데이터를 전달합니다.
👉 GET vs POST 차이점
🔨 프레임워크
✅ WS와 WAS의 차이점에 대해 설명해주세요
- WS 비즈니스 로직을 넣을 수 없으며, 정적인 파일을 반환합니다.
- WS의 종류에는 Nginx, Apache가 있습니다.
- WAS는 동적인 파일을 반환하며, 비즈니스 로직을 넣을 수 있습니다.
- WAS 종류로는 uWSGI, Gunicon, Tomcat, .NET, PHP, ASP가 있습니다.
✅ Spring Framework에 대해 설명해주세요
- JAVA를 사용한 서버 애플리케이션 제작 툴입니다. 오픈소스 프로젝트입니다.
- 경량 컨테이너로 자바 객체를 직접 관리할 수 있습니다.
- 객체별로 라이프 사이클을 관리하며 스프링으로 부터 필요한 객체를 가져올 수 있습니다.
- 제어의 역전(Inversion Of Control)을 통해 애플리케이션의 느슨한 연결을 가능하게 합니다.
- 제어권이 개발자가 아닌 프레임워크에 있어 스프링 자체에서 사용자에게 코드를 반환합니다.
- 의존성 주입(DI)를 지원합니다.
- 각 계층별로 의존성이 존재하면 프레임워크에서 연결해줍니다.
- 관점 지향 프로그래밍(AOP, Aspect Oriented Programming)을 구현
- 트랜잭션, 로깅, 보안 등 공통적으로 사용하는 기능은 분리하여 관리할 수 있습니다.
✅ Spring과 Spring Boot 차이점은 무엇일까요?
- Spring과 Spring Boot 모두 서버 애플리케이션을 제작하는 프레임워크지만 차이점은 Auto Configuration에 있습니다.
- Spring은 프로젝트 시작 시 필요한 환경구성을 직접 해야 하지만 Spring Boot의 경우 Spring Boot Starter Dependency만 추가하고, 내장된 Tomcat으로 서버를 바로 실행할 수 있습니다.
✅ 서블릿(Servlet)에 대해 설명해주세요
- Spring MVC 패턴에서 Controller로 사용됩니다.
- 클라이언트의 요청에 대한 응답을 반환하는 최소 단위
- Sevlet 클래스를 구현하는 자바 웹 프로그래밍 기술
✅ 제어의 역전(IoC)란 무엇인가요?
- 객체의 제어권을 IoC 컨테이너에게 넘기는 것입니다.
- IoC 컨테이너에 객체를 생성하면 객체간 의존성을 주입하게 됩니다.
✅ 대용량 트래픽이 발생하면 어떻게 대응할 수 있을까요?
- HTTP 캐시를 통해 응답 속도를 올립니다.
- Loadbalancer를 통해 트래픽을 분산합니다.
- MSA를 적용해 로직을 분리할 수 있습니다.
- 극단적으로 하드웨어 성능을 스케일업해서 스펙을 올립니다.
- 스케일 아웃으로 여러대의 서버를 증설할 수 있습니다.
🗂 Database
☑️ 데이터베이스 정규화에 대해 설명해주세요
- 데이터 모델링의 3단계(개념, 논리, 물리) 중 논리 데이터 모델링을 상세화 하는 작업입니다.
- 쉽게 말해 하나의 릴레이션에 하나의 의미만 존재할 수 있도록 중복을 제거하고 안정된 자료구조를 작성합니다.
- 관계형 데이터베이스에서 검색과 추출의 성능을 향상시킵니다.
- 정규화를 통해 데이터 정확성이 높아지지만 물리적인 접근이 복잡해지는 단점이 있습니다.
- 정규화는 총 7단계로 구성됩니다.
- 비정규형 : 정규화가 진행되지 않은 상태
- 제1정규형 : 도메인이 원자값만 가지는 상태
- 제2정규형 : 부분 함수 종속을 제거한 상태
- 제3정규형 : 이행적 부분 함수 종속을 제거한 상태
- 보이스 코드 정규형 : 결정자가 후보키가 아닌 종속을 제거한 상태
- 제4정규형 : 다치 종속을 제거한 상태
- 제5정규형 : 후보키를 통하지 않은 조인 종속을 제거한 상태
☑️ 데이터베이스 인덱스란 무엇인가요?
- 인덱스는 쿼리 속도를 올리기 위해 일부 컬럼 데이터만으로 재구성한 자료 구조입니다.
- 테이블 내 1개 컬럼을 사용해 검색하기 용이하도록 순서를 변경합니다.
- 중복이 없거나 조인의 기준이 되는 컬럼을 후보로 선정해 인덱스를 생성합니다.
🚀️ 도움이 되셨다면 구독과 좋아요 부탁드립니다 👍️
'Programming' 카테고리의 다른 글
Typescript로 express 1분만에 실행하기 (0) | 2022.10.10 |
---|---|
mkdir -p 옵션이란? 💡 (0) | 2022.10.10 |
Markdown code block language 선택하는 방법💡️ (0) | 2022.10.02 |
Django Admin superuser 계정 생성 비밀번호 찾기 💡️ (0) | 2022.10.01 |
프로세스 스레드 차이점 ⁉️ (0) | 2022.10.01 |
댓글