
중요도가 높은 질문들 - ⭐
실무 면접을 여러 번 진행해보면서 받아본 질문들 - ✔️
1. 브라우저 렌더링 원리? ⭐ ✔️
- 브라우저가 웹 페이지를 불러오는 과정에선 렌더링 엔진이 사용된다.
- 렌더링 엔진 : HTML, CSS, JS와 같은 웹 페이지 구성 요소들을 파싱하고 화면에 표시하는 역할
- 브라우저 렌더링 원리는 렌더링 엔진, 렌더 트리, 레이아웃, 페인팅으로 구성된다.
<1> 렌더링 엔진
- HTML 문서 파싱 → DOM 트리 구축
- CSS 파싱 → CSSOM 트리 구축
- HTML : 문서 구조 정의
- CSS : 문서 스타일 정의
- JS : 문서 동작 정의
<2> 렌더 트리
- 렌더링 엔진은 DOM 트리와 CSSOM 트리를 결합해 Render Tree 구축
- 화면에 표시될 요소들만으로 구성된 트리 구조
<3> 레이아웃
- 렌더 트리를 통해 화면에 요소의 크기와 위치를 계산하는 과정
<4> 페인팅
- 레이아웃을 기반으로 화면에 요소를 그리는 작업
2. 렌더링 성능 최적화? ⭐ ✔️
- CSS 코드 압축, 중복 최소화
- JS 코드 압축
- Lazy loading, code splitting 등을 통한 성능 개선
@babel
등의 webpack 사용
3. DOM(문서객체모델) 이란?
- 웹 페이지의 콘텐츠 및 구조, 스타일 요소를 구조화 시켜 표현해 JS가 해당 문서에 접근해 조작할 수 있도록 하는 일종의 인터페이스
- HTML 문서를 계층적 구조와 정보로 표현
- 웹에서 발생하는 수많은 이벤트 = JS의 객체
- 이벤트는 이벤트 각각이 갖게되는 전파 경로를 따라 전파
- 이 전파 경로는 DOM Tree 구조에서의 Element의 위상에 따라 결정됨.
4. CORS 란? ⭐ ✔️
- 웹 브라우저에서 외부 Domain Server과의 통신 방식 표준화 보안 메커니즘
- 즉, 타 도메인 간에 자원을 공유할 수 있도록 해주는 것
- React의
localhost:3000
과 FastAPI의 localhost:8000
도 이에 해당한다.
- Server, Client는 정해진 헤더를 통해 Request에 대한 Response를 결정
- 주로
CORS Middle ware
를 통한 proxy server로서 동작
- Client에서
HTTP
요청 헤더에 Origin
를 담아 전달
- Server는 응답 헤더에
Access-Control-Allow-Origin
을 담아 Client에 전달
- Client에서
Origin
과 서버가 보내준 Access-Control-Allow-Origin
을 비교
- 유효하다면 사용, 유효하지 않다면 CORS 에러
CORS 에러를 겪었다면 어떻게 해결했는지? ✔️
- Proxy Server 의 구축 or 사용
- CORS 미들웨어 사용 (Node.js Express)
- Server :
Access-Control-Allow-Origin
헤더 세팅
5. 브라우저 저장소에 대해 알려주세요 ⭐ ✔️
Local Storage
: 저장한 데이터를 지우지 않는 이상 영구적으로 보관, 브라우저를 닫았다 다시 열어도 남아있다.
- 도메인마다 별도의
Local Storage
가 생성
Session Storage
: 도메인 마다 별도로 생성되는 점은 Local Storage
와 동일, 세션 종료 시에 Client에 대한 정보가 삭제된다.
- 브라우저 컨텍스트가 다르기 때문에 같은 사이트의 같은 도메인이여도 브라우저가 다르면 다른 영역이 된다.
- 서버 메모리에 저장되며 Client는
Session ID
를 부여받는다.
- ex) 비로그인 장바구니
Cookie
: 매번 서버로 전송, 용량은 최대 4KB, 만료 시기가 존재한다.
6. Token 인증 방식 이란? ✔️
- 첫 Login 시, 각 Client에게 Token 발급 → 해당 Token은 Client의 Storage에 저장 → Client가 Server에 요청 시에 HTTP 헤더에 Token을 포함해 요청 → Server는 해당 Token을 검증 후 응답
- 전통적인 인증방식 :
Session
에 User 정보를 저장해야 하지만 Token 방식은 그럴 필요가 없다.
JWT Token
-
Header
+ Payload
+ Signature
의 요소로 이루어진 JSON 기반 토큰 기반 인증 시스템
-
JWT 자체는 암호화 되지 않아 HTTP를 통해 전송할 경우, Token이 가로채질 위험이 존재함
7. HTTP, HTTPS란? ⭐ ✔️
HTTP
: 인터넷에서 데이터를 전송하는데 사용되는 프로토콜
- 웹 브라우저와 웹 서버 간의 통신을 가능하게 함
- 비 연결성 프로토콜
Stateless
특성으로 서버가 각 요청을 별도로 처리해야 함
HTTP/1.1
, HTTP/2.0
이 주로 사용
HTTPS
: HTTP
에 SSL
또는 TLS
프로토콜을 추가해 데이터 전송 시 암호화를 통해 보안을 강화한 것
8. WebSocket이란? ✔️
- 실시간, 지속적인 양방향(Full-Duplex) 통신을 가능하게 한 통신 프로토콜
- Server에 데이터가 있을 때, Client에게 즉시 데이터를 보낼 수 있음을 의미함.
- 데이터 전송에 대한 지연시간의 감소, 네트워크 자원의 효율적 사용 가능
wss://
를 통해 WebSocket 연결의 암호화 가능
- 주로 실시간 주식 차트, 채팅 어플리케이션 등에서 사용
9. Process, Thread
Process
: 실행중인 프로그램의 인스턴스, OS에 의해 메모리 공간, 데이터, 코드, 자원 등이 할당되어 독립적으로 실행
- 각 Process는 별도의 메모리 공간을 가진다.
Thread
: Process 내에서 실행되는 실행의 단위
- Process내의 thread들은 코드, 데이터, heap 영역을 공유하며, 각 thread는 자신의 stack을 가진다.
MultiThreading
: 하나의 Process에서 여러 Tasks를 동시에 수행할 수 있게 해줌
10. Webpack 이란? ⭐
- 웹팩은 모듈번들러로, JS와 CSS, img 등 관련 자원을 하나의 파일로 결합해 로딩 시간과 성능 최적화에 사용된다.
- 모듈 번들링을 통해 네트워크 요청 횟수를 줄이고, 로딩 시간의 최적화의 이점을 얻을 수 있다.
@babel
은 JS 컴파일러로 .jsx
를 .js
로 변환하는데 필요하다.
- React에서
babel-loader
를 통해 jsx
와 ES6
코드를 일단 JS로 변환하고 번들링하는 과정을 거친다.
- Webpack의 4가지 속성
Entry
: Webpack이 애플리케이션을 번들링하기 시작하는 곳, 애플리케이션의 루트(시작) 파일
Output
: Webpack이 bundle을 생성한 후 이를 배치할 위치 지정
Loaders
: Webpack이 다른 타입의 파일들을 처리할 수 있도록 변환
Plugins
: 번들 최적화, 환경 변수 주입 등의 작업 수행
11. 웹 표준이란?
- 웹 페이지가 다양한 브라우저와 장치에서 일관되게 작동하도록 보장하는데 중요한 역할
HTML
+ CSS
+ JS
로 구성
- 웹 표준을 준수함에서 오는 이점
- 호환성
- 접근성
- SEO (검색엔진최적화)
- 유지보수 용이성
12. UI와 UX란? ⭐
UI
: 사용자 인터페이스, 물리적 수단으로서 버튼, 아이콘, 레이아웃, 폰트, 색상 등을 의미한다.
UX
: 시스템 전반에 대한 사용자의 경험, 사용성, 편의성, 효율성, 만족도 등을 의미한다.
13. PWA (프로그레시브 웹 앱) 란?
- 모바일 기기에서 Native Application과 같은 사용자 경험을 제공하는 Web Application
- 푸쉬알람, 오프라인 지원 등의 기능까지 제공하는 것을 의미한다.
- 장점
- 개발 비용 저렴
- 일반적인 웹 기술을 통해 개발 가능
- 기본적으로 반응형, 다양한 폼팩터에 적용 가능
- SEO를 통해 검색엔진을 통해 찾을 수 있다.
- 한계
- 모바일 게임의 경우, PWA는 좋은 선택지가 아니다.
- 모바일 운영체제 접근에서의 한계
13. SPA와 MPA란? ⭐
-
SPA
: 단일 HTML 페이지에서 사용자와 상호작용을 동적으로 처리
- 한 번의 페이지 로딩으로 필요한 모든 자원(HTML, CSS, JS)를 로드, 이후 상호작용에 따라 필요 부분만 JS를 통해 동적으로 업데이트
- 페이지 전체 새로고침이 필요없이 특정 부분만 변경가능
- 빠른 페이지 전환속도, 반응형 상호작용
- 서버와의 통신을 최소화, 비동기적으로 데이터를 로드
- SEO에 불리하며
XSS
와 같은 브라우저 호환성 및 보안 문제가 발생할 수 있다.
-
MPA
: 전통적 방식의 웹 애플리케이션 구조, 여러 HTML 페이지로 구성되며 Client의 요청에 따라 전체 페이지가 새로고침 된다.
- 대부분의 콘텐츠 처리는 Server에서 이루어지는 SSR 방식이다.
- SEO에 유리하다.
- 상태 관리에 있어 복잡한 메커니즘을 가진다.
14. CSR과 SSR ⭐
- 콘텐츠를 사용자에게 보여주는 방식과 타이밍에서의 차이
CSR
: 웹 페이지가 Client Side에서 렌더링
- 기본적인 HTML을 로드한 후, JS를 통해 추가 콘텐츠를 가져와 브라우저에서 렌더링
- React, Vue 등 SPA 기반 Front-end Framework에서 주로 사용
- 사용자 상호작용 및 페이지 전환에 대한 반응이 빠르며, Server 부하를 줄일 수 있다.
- 초기 로딩 시간이 길고, SEO에 불리
SSR
: Server에서 페이지의 콘텐츠를 렌더링 후 Client의 요청에 따라 HTML을 렌더링해 완성된 페이지의 형태로 전송
Next.js
가 대표적
- 초기 로딩 시간이 빠르며 SEO에 유리
- 페이지의 각 부분, 상호작용에 따라 Server에 요청해야함, Server 부하 증가, 사용자 경험이 느려진다.
언제 사용하는게 좋은 지
CSR
: 동적이고 상호작용이 많은 웹 어플리케이션, 사용자의 경험이 중요시되는 웹 사이트에 적합
SSR
: SEO가 중요하고, 동적 변화가 많이 없는 홍보용 사이트에 적합
15. Flux 패턴이란? ⭐
- 사용자
Action
→ Dispatcher
→ Store
→ View
로 이어지는 단방향 흐름의 아키텍처 패턴
- React의 경우, Flux 패턴을 사용
- 프로그램의 데이터 흐름을 일관성있게 관리함으로써 프로그램의 예측가능성을 높임
16. MVC 패턴이란? ⭐
- 애플리케이션의 구성요소를
Model
, View
, Controller
의 세가지 역할로 구분한 아키텍처 패턴
- 사용자의 요청을
Controller
가 받는다.
Controller
는 비즈니스 로직을 처리한 후 결과를 Model
에 전달한다.
Model
에 저장된 결과를 바탕으로 View
를 통해 사용자에게 전달한다.
Model
은 Controller
, View
와 의존관계를 지니면 안된다.
View
는 Model
에만 의존해야한다.
View
가 Model
로부터 데이터를 받을 때는 반드시 Controller
에서 받아야 한다.
장점
- 특정 작업에 대한 관심사의 분리
- 컴포넌트의 역할 분리로 인한 결합도의 약화
- 코드 재사용성, 확장성 ↑
- 서비스 유지보수, 테스트에 용이
단점
Model
과 View
의 의존성을 완전히 분리시킬 수 없다.
Controller
의 비중이 높아진다면 Massive-View-Controller
현상을 피할 수 없다.
17. MVVM 패턴이란? ✔️
Model
, View
, ViewModel
요소로 이루어진 아키텍처 패턴
ViewModel
은 View
와 Model
사이에서 중개자 역할을 수행하며, View를 보여주기 위한 데이터 처리 역할 을 수행
- Vue에서 MVVM 패턴을 사용한다.
18. SEO (검색엔진최적화)란?
- 웹사이트가 검색 엔진에서 상위에 노출될 수 있도록 최적화하는 과정
- 웹 크롤러를 통해 해당 웹 페이지를 판단하고 해당 페이지를 색인에 추가하는 과정
- 색인 : 검색 엔진이 잠재적인 검색자에게 제공하기 위해 저장한 모든 가능성 있는 결과
19. 크로스 브라우징이란?
- 최대한 많은 종류의 웹 브라우저에서 정상적으로 작동하는 웹 페이지를 만드는 방법론
- W3C에서 채택된 웹 표준 기술을 기본으로 제작한다.
- 모든 화면에서 동일하게 보이는 "동일성"이 아닌,
동등한 수준의 정보 제공 및 기능 제공의 "동등성"을 얘기하는 것
20. REST API란? ⭐ ✔️
- REST?
- HTTP URI를 통해 자원을 명시하고
- HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원에 대한 CRUD를 적용하는 것
- HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용 가능
- REST API란 REST의 원리를 따르는 API를 의미.
- 올바른 REST API 설계 규칙
- URI는 동사보단 명사를, 대문자보단 소문자를 사용
- 마지막에
/
를 포함하지 않는다.
_
대신 -
- 파일 확장자(
.jpg
, .pdf
)은 URI에 포함하지 않는다.
- 행위를 포함하지 않는다. ex)
http://lookin_min.com/create-id/
X
- RESTful 이란?
- REST의 원리를 따르는 시스템을 의미
- REST API의 설계 규칙을 올바르게 지킨 시스템
- CRUD의 모든 기능을
POST
로만 처리하거나, URI 규칙이 올바르지 못하다면,
RESTful이라 할 수 없다.
21. HTTP의 GET, POST 비교 설명 ⭐ ✔️
- GET은 Server의 리소스에서 데이터를 요청할 때,
POST는 Server의 리소스를 생성하거나 업데이트할 때 주로 사용된다.
- GET은 HTTP 메시지에 body가 없고 POST는 body에 데이터를 담아 보낸다.
- GET은 URL의 Parameter 붙여 전송, 대용량 데이터 전송에 한계
- POST는 body에 데이터 타입을
Header Content-Type
에 명시해야함
- 속도 측면에서 GET 방식이 POST 방식 보다 빠르다
- GET 요청은 멱등, POST는 멱등이 아니다.
- 멱등 : 연산을 여러 번 하더라도 결과가 달라지지 않음
22. www.naver.com에 접속하는 과정 설명 ⭐
-
브라우저가 www.naver.com의 IP주소를 찾기 위해 캐시에서 DNS 기록을 확인
-
요청 URL의 캐시가 없다면, ISP의 DNS 서버가 DNS 쿼리로 URL을 호스팅하는 서버의 IP 주소를 찾는다.
-
브라우저가 해당 서버와 TCP 연결을 시작한다.
-
브라우저가 웹 서버에 HTTP Request를 보낸다.
-
서버는 요청을 처리해 Response를 보낸다.
-
브라우저는 HTML 컨텐츠를 클라이언트에게 보여준다.
ISP
- 인터넷 접속 서비스, 웹 구축 및 호스팅 서비스 제공 회사 (KT, LG U+ ...)
DNS
- 웹사이트의 IP 주소와 도메인 주소를 이어주는 시스템
- 도메인(URL) → IP 주소로 연결되게 해줌
23. 객체지향 프로그래밍이란? ⭐
- 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법
- 캡슐화, 상속, 다형성, 추상화, 확장 및 유지보수에 용이
추상화란
- 클래스를 설계하는 것 자체
- 공통의 속성이나 기능을 묶어 이름붙이는 것
캡슐화란
- 정보의 은닉을 통해 적절한 접근 제어로 객체의 접근을 선택적으로 허용하는 것
- 코드를 수정하지 않고 재활용 할 수 있는 근간
- 기능과 특성의 모음을 클래스라는 캡슐에 분류
- 객체의 역할을 수행하기 위한 하나의 목적으로 하나로 묶는 것
상속이란
- 부모 클래스의 속성과 기능을 자식 클래스가 이어받아 그대로 사용하고, 일부 기능의 변경은 자식 클래스에서 재정의해 사용하는 것
다형성이란
- 하나의 변수명, 함수명이 상황, 위치에 따라 다르게 사용되는 것
24. 클래스와 인스턴스 ⭐
클래스
- 속성과 행위를 변수와 메서드를 통해 정의한 것.
객체를 만들기 위한 메타 정보(붕어빵 틀)
인스턴스
- 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것.
실제 프로그램에서 사용되는 데이터
25. 오버라이딩과 오버로딩이란?
Overriding
: 상위 클래스에 있는 메소드를 하위 클래스에서 재정의
Overloading
: 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 정의
26. 시간복잡도와 공간복잡도
27. MSA란? ⭐ ✔️
- Microservices Architecture의 줄임말
- 애플리케이션을 여러개의 작은 독립된 서비스로 나누어 개발하는 방법론
- 장점
- 각 기능마다 특화된 프레임워크, 개발 언어 등을 통해 개발해 적합한 기술 선택에 대한 자유
- 새로운 기능을 빠르게 추가할 수 있는 유연성 및 확장성
- 서비스 간 격리로 인한 장애 발생 시, 전체 시스템에 미치는 영향 최소화 가능
- 단점
- 서비스 간 통신, 데이터 일관성 유지, 배포 자동화 등에서 복잡성 증가
- 여러 서비스로 나눠진 만큼, 운영 작업이 증가
- 데이터 관리에서의 복잡성(각 서비스가 독립적 DB를 가질 시)