면접 질문 모음집
🍩Java
1. 프로세스와 쓰레드란?
- 프로세스는 실행 중인 프로그램을 의미하며, 최소 하나의 쓰레드를 가지고 있습니다.
프로세스는 독립적인 메모리 공간을 가지고 있으며, CPU 시간을 할당받아 실행됩니다. - 쓰레드는 프로세스 내에서 독립적으로 실행되는 실행 단위/프로세스 내에서 실행되는 세부 작업 단위 입니다.
쓰레드는 프로세스의 메모리 공간을 공유하며, 동시에 여러 쓰레드가 실행될 수 있습니다.
쓰레드는 CPU가 어떤 동작을 수행하기 위해 사용되는 명령 집합의 최소 단위
2. 멀티프로세스와 멀티쓰레드란?
- 멀티프로세스는 하나의 운영체제 안에서 여러 프로세스가 실행되는 것을 의미합니다. 각각의 프로세스는 독립적인 메모리 공간을 가지고 있기 때문에 서로의 메모리 공간을 공유하지 않습니다.
- 멀티쓰레드는 하나의 프로세스가 여러 작업을 여러 쓰레드를 사용해 동시에 처리하는 것을 의미합니다. 쓰레드들은 프로세스의 메모리 공간을 공유하기 때문에 자원을 효율적으로 사용할 수 있습니다.
3. MSA란?
- MicroService Architecture의 약자로 소프트웨어 개발 아키텍처 중 하나로, 작은 규모의 독립적인 서비스를 조합하여 애플리케이션을 구축하는 방식입니다. 각 서비스는 독립적으로 배포되고, 독립적으로 업데이트할 수 있습니다
4. REST api란?
- REST API(Representational State Transfer API)는 HTTP 프로토콜을 사용하여 자원을 주고 받는 API의 한 종류입니다. REST API는 자원을 표현하기 위해 URL을 사용하고, HTTP 메소드(GET, POST, PUT, DELETE 등)를 사용하여 자원을 조작한다.
5. 가비지 컬렉션이란?
- 가비지 컬렉션 (Garbage Collection, GC)은 프로그램이 동적으로 할당한 메모리 영역 중에서 더 이상 사용되지 않는 영역을 자동으로 찾아서 해제하는 프로세스
6. 가비지 컬렉션 실행 순서?
- 객체 생성: new 키워드를 사용하여 객체를 생성합니다.
- 참조: 객체를 참조 변수에 저장하여 사용합니다.
- 참조 해제: 더 이상 사용하지 않는 객체의 참조를 해제합니다.
- 가비지 컬렉션: 가비지 컬렉터는 참조가 해제된 객체를 탐지하고 제거합니다.
- 가비지 컬렉션은 크게 마킹 (Marking)과 스위핑 (Sweeping) 두 단계로 이루어집니다. 마킹 단계에서는 애플리케이션에 의해 참조되고 있는 객체를 식별하고, 스위핑 단계에서는 참조되지 않는 객체를 메모리에서 제거
7. 스프링 mvc 패턴이란?
- 스프링 MVC(Model-View-Controller) 패턴은 애플리케이션을 모델(데이터), 뷰(사용자 인터페이스), 컨트롤러(비즈니스 로직)로 나누어 개발하는 아키텍처 패턴
8. 오버로딩과 오버라이딩의 차이는?
- 오버로딩은 같은 이름의 메소드를 여러 개 정의하는 것이며, 매개변수의 타입이나 개수가 다르면 됩니다. 오버라이딩은 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 것입니다.
9. 자바 특징?
- 객체지향 프로그래밍, 플랫폼 독립성, 간결하고 강력한 문법 등이 대표적인 자바의 특징
10. 자바의 메모리 구조?
- 자바의 메모리 구조는 메소드 영역(Method Area), 힙 영역(Heap), 스택 영역(Stack), PC 레지스터(Program Counter Register), 네이티브 메소드 스택(Native Method Stack)으로 나뉩니다.
11. 자바의 예외 처리 방법은 무엇인가요 ?
- 자바에서는 try-catch-finally 블록을 사용하여 예외를 처리하며, throws 키워드를 사용하여 예외를 호출한 곳으로 던질 수 있습니다.
🍩Spring
1. 스프링?
- 스프링(Spring)은 자바 기반의 오픈 소스 애플리케이션 프레임워크로, 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 제공합니다.
- 스프링은 DI(Dependency Injection)와 IoC(Inversion of Control) 컨셉을 기반으로 하며, AOP(Aspect-Oriented Programming), 트랜잭션 관리, 데이터 액세스, 보안 등 다양한 기능을 제공하여 개발자가 더욱 효율적으로 애플리케이션을 개발할 수 있도록 돕습니다.
2. 스프링 / 스프링 프레임워크와 스프링부트의 차이?
- 스프링 프레임워크 : 스프링의 핵심 기능을 제공하는 프레임워크입니다. 스프링 프레임워크는 다양한 모듈로 구성되어 있으며, 개발자는 필요한 모듈을 선택하여 사용할 수 있습니다. 스프링 프레임워크는 XML 또는 자바 기반의 설정을 사용하여 애플리케이션을 구성합니다.
- 스프링 부트 : 스프링 기반의 애플리케이션을 빠르고 쉽게 개발하기 위한 프레임워크입니다. 스프링 부트는 자동 구성(auto-configuration)과 간편한 설정을 통해 개발자가 복잡한 설정을 하지 않아도 되도록 돕습니다. 또한 내장형 서버를 제공하여 애플리케이션을 쉽게 배포하고 실행할 수 있습니다
- .스프링 부트의 장점은 자동 설정, 내장 서버 제공, 의존성 관리 등이 있습니다. 이를 통해 개발자는 복잡한 설정 없이도 빠르게 애플리케이션을 개발하고 실행할 수 있습니다.
3. 스프링의 DispatcherServlet이란 무엇인가요?
- DispatcherServlet은 스프링 MVC의 핵심 요소로, 모든 클라이언트 요청을 최초로 받아들이는 프론트 컨트롤러입니다. 이는 적절한 컨트롤러에 요청을 위임하고, 응답을 생성하는 역할을 합니다.
4. IoC(Inversion of Control)란?
- IoC는 제어의 역전을 의미하며, 스프링에서는 객체의 생명 주기와 의존 관계를 스프링 컨테이너가 관리하고 제어
5. 빈(Bean)이란 무엇인가요 ?
- 필터와 인터셉터 모두 웹 애플리케이션에서 요청을 가로채어 중간에서 작업을 처리하는 구성요소입니다.
6. AOP(Aspect-Oriented Programming)란 ?
- AOP는 관점 지향 프로그래밍으로, 모듈화된 코드를 작성할 수 있도록 도와줍니다.
7. IoC 컨테이너?
- IoC 컨테이너는 스프링에서 객체의 생명 주기와 의존 관계를 관리하는 핵심 컨테이너입니다. 주로 ApplicationContext 인터페이스를 구현한 클래스들이 IoC 컨테이너 역할을 수행
8. 스프링의 라이프사이클(Lifecycle)?
- 스프링에서 빈은 초기화(initialization)와 소멸(destruction) 라이프사이클을 가지고 있습니다. 초기화 단계에서는 빈의 프로퍼티 설정 및 초기화 작업을 수행하고, 소멸 단계에서는 빈의 리소스 해제 등의 작업을 수행
9. DI란?
- DI(Dependency Injection)는 객체 간의 의존 관계를 외부에서 설정하여 객체 간의 결합도를 줄이고 유연한 코드를 작성하는 방법
10. 스프링 MVC(Model-View-Controller)
- Model(모델) 애플리케이션의 데이터와 비즈니스 로직을 담당합니다. 데이터는 주로 데이터베이스에서 가져오거나 외부 API에서 받아온 것일 수 있으며, 모델은 이 데이터를 가공하고 비즈니스 로직을 처리합니다.
- View(뷰) 뷰는 사용자에게 보여지는 화면을 담당합니다. HTML, JSP, Thymeleaf 등의 템플릿 엔진을 사용하여 동적으로 생성된 컨텐츠를 사용자에게 전달합니다.
- Controller(컨트롤러) 컨트롤러는 클라이언트의 요청을 받고, 모델을 이용하여 필요한 작업을 수행한 후에 적절한 뷰를 반환합니다. 클라이언트의 요청을 처리하기 위한 비즈니스 로직이나 서비스 호출은 주로 컨트롤러에서 이루어집니다.
🍩Doker
1. 도커(Docker)?
- 소프트웨어를 개발, 배포 및 실행하기 위한 플랫폼입니다. 도커는 컨테이너화된 애플리케이션을 생성하고 배포하기 위한 오픈 소스 기술을 제공하여 개발자와 운영팀이 애플리케이션을 더 쉽게 관리할 수 있도록 도와줍니다
2. 도커의 주요 특징?
- 컨테이너화: 애플리케이션을 컨테이너로 패키징하여 배포할 수 있습니다. 컨테이너는 애플리케이션 실행에 필요한 모든 자원을 포함하고 있으며, 다른 애플리케이션과 격리되어 독립적으로 실행됩니다.
- 분산 실행: 여러 대의 서버에서 컨테이너를 분산 실행할 수 있습니다. 이를 통해 애플리케이션의 확장성과 안정성을 높일 수 있습니다.
- 자동화: 도커는 다양한 자동화 도구와 연동하여 애플리케이션 배포와 운영을 자동화할 수 있습니다. 예를 들어, Jenkins, Ansible, Kubernetes 등과 연동하여 자동화를 구현할 수 있습니다.
- 보안 강화: 컨테이너는 다른 애플리케이션과 격리되어 실행되기 때문에 보안성이 높습니다. 또한, 도커는 이미지를 검증하고 보안 패치를 적용할 수 있는 기능을 제공합니다.
- 자원 공유: 컨테이너 간에 자원을 공유할 수 있습니다. 예를 들어, 네트워크, 파일 시스템, 데이터베이스 등을 공유할 수 있습니다.
- 이미지 생성: 애플리케이션을 컨테이너로 패키징하기 위해 이미지를 생성합니다. 이미지는 애플리케이션 실행에 필요한 모든 자원과 설정을 포함하고 있습니다.
3. 도커를 사용하는 이유는?
- 애플리케이션을 구동하기 위한 환경을 제공, 컨테이너를 활용하면 더 가볍고 빠르게 애플리케이션을 증가, 감소 시킬 수 있고, 동일한 애플리케이션이 아닌 각기 다른 서비스를 세분화해서 서로 독립된 환경에서 동작하는 MSA(Micro Service Architecture)를 실현시킬 수 있기 때문에 도커를 사용한다.
🍩PosgreSQL
1.PostgreSQL의 장점은 무엇인가요?
- PostgreSQL은 오픈소스 데이터베이스로, 다양한 기능과 높은 성능을 제공합니다. 다음은 PostgreSQL의 주요 장점입니다.
- 다양한 데이터 타입 지원: PostgreSQL은 다양한 데이터 타입을 지원하며, 사용자가 직접 데이터 타입을 정의할 수 있습니다.
- 강력한 쿼리 언어: PostgreSQL은 SQL(Structured Query Language)을 기반으로 하며, 다양한 쿼리 기능을 제공합니다.
- 안정성: PostgreSQL은 안정성이 높아 시스템 장애가 발생할 확률이 적습니다.
- 확장성: PostgreSQL은 대규모 데이터 처리에 적합하며, 확장성이 높습니다.
- 보안성: PostgreSQL은 보안성이 높아 데이터 유출 등의 문제를 예방할 수 있습니다.
2. PostgreSQL과 다른 데이터베이스 시스템과의 차이는 무엇인가요?
- 답변: PostgreSQL은 확장성이 뛰어나며, ACID(원자성, 일관성, 고립성, 지속성)를 준수하는 관계형 데이터베이스 시스템입니다. 또한 JSON 지원, 외부 키 제약 조건, 풍부한 데이터 유형 등의 기능을 제공합니다.
3. PostgreSQL의 백업 및 복원 방법은 무엇인가요?
- 답변: PostgreSQL에서는 pg_dump와 pg_restore를 사용하여 데이터베이스의 백업과 복원을 수행할 수 있습니다. pg_dump를 사용하여 데이터를 백업하고, pg_restore를 사용하여 백업 파일을 복원할 수 있습니다.
4. PostgreSQL에서 인덱스를 사용하는 이유는 무엇인가요?
- 답변: PostgreSQL에서 인덱스는 데이터베이스의 검색 속도를 향상시키기 위해 사용됩니다. 인덱스를 사용하면 데이터에 빠르게 액세스할 수 있으며, 쿼리의 실행 속도를 향상시킬 수 있습니다.
🍩DB
1. 쿼리
- INNER JOIN: 두 테이블에서 공통된 값을 가진 행을 연결합니다.
- LEFT JOIN: 왼쪽 테이블의 모든 행과 오른쪽 테이블의 공통된 값을 가진 행을 연결합니다. 오른쪽 테이블에 매치되는 행이 없을 때는 NULL 값을 반환합니다
- RIGHT JOIN: 오른쪽 테이블의 모든 행과 왼쪽 테이블의 공통된 값을 가진 행을 연결합니다.왼쪽 테이블에 매치되는 행이 없을 때는 NULL 값을 반환합니다.
- FULL JOIN: 왼쪽 테이블과 오른쪽 테이블의 모든 행을 연결합니다.공통된 값을 가지지 않는 행은 NULL 값을 반환합니다.
- OUTER JOIN은 두 테이블에서 값이 일치하는 레코드를 반환하며, 일치하지 않는 레코드의 경우 NULL 값을 반환합니다. OUTER JOIN에는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN 등이 있습니다.
2. DDL / DCL / DML
- DDL (Data Definition Language)
DDL은 데이터베이스의 구조를 정의하는 언어로, 테이블 생성, 변경, 삭제 등을 수행합니다. - 주요 DDL 명령어에는 CREATE, ALTER, DROP 등이 있습니다.
- DML (Data Manipulation Language)
- DML은 데이터베이스에서 실제 데이터를 처리하는 언어로, 데이터 검색, 삽입, 삭제, 갱신 등을 수행합니다2. 주요 DML 명령어에는 SELECT, INSERT, UPDATE, DELETE 등이 있습니다.
- DCL (Data Control Language)
- DCL은 데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는 언어로, 주로 데이터베이스 관리자가 사용합니다.
- 주요 DCL 명령어에는 GRANT (사용 권한 부여), REVOKE (사용 권한 회수) 등이 있습니다.
🍩Vue.js
1. vue.js?
- Vue.js는 사용자 인터페이스를 구축하기 위한 프로그레시브 프레임워크이며, js기반
2. vue.js 특징
- Vue.js는 가볍고 빠르며 직관적인 사용자 인터페이스(UI)를 제공합니다. 반응형 데이터 바인딩, 컴포넌트 기반 아키텍처, 가상 DOM 등의 기능으로 개발자들이 애플리케이션을 더 효율적으로 개발할 수 있습니다.
- 속도와 효율성을 위해 애플리케이션을 더 쉽게 최적화할 수 있는 기능을 제공합니다
3. Vue.js에서 컴포넌트를 어떻게 구성하나요?
- Vue.js에서 컴포넌트는 .vue 확장자를 가진 파일로 구성됩니다. 이 파일은 템플릿, 스크립트, 스타일을 담고 있으며, 각각 HTML 템플릿, 자바스크립트 코드, CSS 스타일을 작성할 수 있습니다.
- Vue.js에서 컴포넌트를 생성하려면, <template>, <script>, <style> 태그를 사용합니다.
4. Vue.js 라이프 사이클
- 컴포넌트의 라이프 사이클은 생성, 마운트, 업데이트, 소멸 등의 단계로 구성됩니다. 각 단계에서는 적절한 이벤트 핸들러를 등록하여 컴포넌트의 동작을 제어
- Vue.js 라이프사이클은 크게 creation, mounting, updating, destruction로 나눠지고 각 훅으로 단계들을 실행합니다
- beforeCreate: 컴포넌트가 생성되기 전에 호출됩니다.
- created: 컴포넌트가 생성된 후에 호출됩니다.
- beforeMount: 컴포넌트가 DOM에 마운트되기 전에 호출됩니다.
- mounted: 컴포넌트가 DOM에 마운트된 후에 호출됩니다.
- beforeUpdate: 컴포넌트의 데이터가 변경되기 전에 호출됩니다.
- updated: 컴포넌트의 데이터가 변경된 후에 호출됩니다.
- beforeDestroy: 컴포넌트가 파괴되기 전에 호출됩니다.
- destroyed: 컴포넌트가 파괴된 후에 호출됩니다.
5. Vue.js에서 발생할 수 있는 오류와 그 해결 방법
- Vue.js에서는 주로 데이터 바인딩 오류, 라이프 사이클 관련 오류, 컴포넌트 통신 오류 등이 발생할 수 있습니다. 이를 해결하기 위해서는 문법 오류를 확인하고, 디버깅 도구를 활용하여 오류를 찾아 수정할 수 있습니다. 또한 Vue.js 공식 문서나 커뮤니티를 통해 해결 방법을 찾을 수도 있습니다.
6. Vue.js를 사용하는 이유
- 배우기 쉽습니다.
- 컴포넌트 기반의 구조로 인해 코드의 재사용성이 높습니다.
- 반응형 UI를 구현하기 쉽습니다.
- 다양한 라이브러리와 프레임워크와 연동이 가능합니다.
- 성능이 좋습니다.
7. Vue.js를 사용하는 이유
- 배우기 쉽습니다.
- 컴포넌트 기반의 구조로 인해 코드의 재사용성이 높습니다.
- 반응형 UI를 구현하기 쉽습니다.
- 다양한 라이브러리와 프레임워크와 연동이 가능합니다.
- 성능이 좋습니다.
5. Vue.js에서 성능 최적화하는 방법
- 컴포넌트의 크기를 작게 유지합니다.
- 불필요한 DOM 조작을 최소화합니다.
- 데이터 변경 시에는 computed 속성을 사용합니다.
- watch 속성을 사용하여 데이터 변경을 감시합니다.
- lazy loading을 사용하여 필요한 컴포넌트만 로드합니다.
- virtual scrolling을 사용하여 큰 데이터를 처리합니다.
🍩Css
1. CSS에서 선택자(Selector)는 무엇?
- 선택자(Selector)는 HTML 요소를 선택하는 방법입니다. 선택자는 HTML 문서에서 특정 요소를 선택하여 스타일을 적용할 수 있게 해줍니다.
1. CSS에서 박스 모델(Box Model)이란?
- CSS에서 박스 모델(Box Model)은 HTML 요소의 크기와 위치를 결정하는 모델입니다. 박스 모델은 다음과 같은 요소로 구성됩니다.
- 콘텐츠 영역(Content Area): 실제 내용이 표시되는 영역입니다. 텍스트, 이미지, 링크 등이 포함됩니다.
- 패딩(Padding): 콘텐츠 영역과 테두리 사이의 여백입니다. 패딩은 콘텐츠 영역을 둘러싸며, 시각적으로 콘텐츠 영역을 더 크게 보이게 합니다.
- 테두리(Border): 콘텐츠 영역과 패딩을 둘러싸는 테두리입니다. 테두리는 시각적으로 콘텐츠 영역을 구분하고, 디자인에 다양한 효과를 줄 수 있습니다.
- 마진(Margin): 테두리와 다른 요소 사이의 여백입니다. 마진은 다른 요소와 거리를 두어 시각적으로 분리하거나, 레이아웃을 구성하는 데 사용됩니다.
- 전체 크기(Total Size): 콘텐츠 영역, 패딩, 테두리, 마진을 모두 포함한 요소의 전체 크기입니다. 전체 크기는 요소의 위치와 레이아웃을 결정하는 데 사용됩니다.
🍩HTML
1. 웹표준이란?
- 웹 표준(Web Standards)이란 월드 와이드 웹의 측면을 서술하고 정의하는 공식 표준이나 다른 기술 규격을 가리키는 용어입니다.
- 웹 사이트를 작성하는 데 중요도가 높아지고 있으며 웹 디자인, 개발과 관계가 있습니다. 수많은 상호 의존성이 있는 표준들과 규격들 가운데 일부는 단지 월드 와이드 웹으로만 끝나는 것이 아니라, 인터넷의 관리 측면이기도 합니다.
- 웹 표준을 지키면 사용자가 어떤 브라우저를 사용하더라도 웹페이지가 똑같이 보이고 정상적으로 작동합니다. 예를 들어, HTML, CSS, JavaScript 등의 언어들이 표준화된 방식으로 작성되어야 합니다.
- 이를 통해 사용자들은 어떤 브라우저를 사용하더라도 동일한 사용자 경험을 얻을 수 있고 오래된 브라우저에서도 컨텐츠가 적절하게 표시됩니다.
- 택자(Selector)는 HTML 요소를 선택하는 방법입니다. 선택자는 HTML 문서에서 특정 요소를 선택하여 스타일을 적용할 수 있게 해줍니다.
🍩Web Socket
- 웹소켓(WebSockets)이란 무엇인가요?
- 답변: 웹소켓은 클라이언트와 서버 간의 양방향 통신을 가능하게 하는 통신 프로토콜입니다. HTTP와 달리 지속적인 연결을 유지하고, 실시간으로 데이터를 주고받을 수 있습니다.
- 웹소켓의 장점은 무엇인가요?
- 답변: 웹소켓은 실시간 통신을 지원하고, 서버에서 클라이언트로 데이터를 푸시할 수 있으며, 연결 유지를 통해 빠른 통신 속도를 제공합니다.
- 웹소켓과 HTTP의 차이점은 무엇인가요?
- 답변: 웹소켓은 실시간 양방향 통신을 지원하는 반면, HTTP는 단방향 통신으로 요청(Request)과 응답(Response)의 형태로 동작합니다. 또한 웹소켓은 연결을 유지하는데 반해 HTTP는 요청 후 연결을 끊습니다.
- 웹소켓 연결이 어떻게 이루어지나요?
- 답변: 웹소켓 연결은 클라이언트에서 서버로 HTTP Upgrade 요청을 보내고, 서버가 이를 승인하여 양방향 통신을 위한 웹소켓 연결을 설정합니다.
- 웹소켓의 보안 문제는 어떻게 해결되나요?
- 답변: HTTPS와 같은 보안 프로토콜을 사용하여 웹소켓 연결을 암호화하거나, 서버 측에서 인증 및 권한 부여를 통해 보안을 강화할 수 있습니다.
- 웹소켓의 상태 코드들은 어떤 의미를 갖나요?
- 답변: 웹소켓의 상태 코드에는 연결이 성공했을 때의 101 상태 코드와 연결이 실패했을 때의 4xx 또는 5xx 상태 코드 등이 있습니다.
* 해당 질문들은 코파일럿, gpt, 클로버x로부터 얻음