on my way
CS 스터디 02-3 컴퓨터 언어: Front-End 본문
Front-End Link
- 브라우저의 작동 원리
- CORS
- 서버 사이드 렌더링 vs 클라이언트 사이드 렌더링
- RESTful API
- HTTP
- 호이스팅
- 클로저란
- ==과 ===의 차이
- TDD
- 비동기 함수란?
예상 면접 질문과 답변
1. 브라우저의 작동 원리
Q: 브라우저가 웹 페이지를 렌더링하는 과정을 설명해보세요.
A:
- URL 입력: 사용자가 URL을 입력하면 브라우저는 DNS 서버를 통해 해당 URL의 IP 주소를 조회합니다.
- HTTP 요청: 조회된 IP 주소로 서버에 HTTP(S) 요청을 전송합니다.
- 응답 수신: 서버는 요청에 대한 응답으로 HTML, CSS, JS, 이미지 등의 데이터를 브라우저에 전달합니다.
- 렌더링 과정:
- HTML 파싱: HTML을 DOM(Document Object Model)으로 변환합니다.
- CSS 파싱: CSS를 CSSOM(CSS Object Model)으로 변환합니다.
- DOM + CSSOM 결합: 렌더 트리를 형성하여 화면에 나타낼 요소를 계산합니다.
- JS 실행: JS 파일은 실행을 위해 파싱됩니다. 이 과정에서 필요한 경우 DOM 및 CSSOM이 수정됩니다.
- 레이아웃 계산 및 페인팅: 각 요소의 크기와 위치를 계산하고, 픽셀로 변환해 화면에 출력합니다.
부가 설명: 브라우저는 비동기 방식으로 리소스를 처리하며, JS 실행 시 렌더링이 차단되는 경우도 발생할 수 있습니다(렌더 블로킹).
2. CORS
Q: CORS란 무엇이고, 왜 필요한가요?
A:
CORS(Cross-Origin Resource Sharing)는 한 도메인에서 실행 중인 애플리케이션이 다른 도메인의 리소스에 접근할 때 발생하는 보안 메커니즘입니다. 브라우저는 보안상의 이유로 기본적으로 다른 출처의 리소스 요청을 제한합니다.
CORS는 서버가 특정 도메인에 리소스 접근 권한을 부여하도록 HTTP 헤더를 통해 브라우저에 알리는 방식입니다.
부가 설명:
- 동작 방식: 서버는
Access-Control-Allow-Origin
헤더를 사용해 허용된 도메인을 명시합니다. - 예시: 한 도메인에서 다른 도메인의 API를 호출할 때, 호출받은 서버가 CORS를 설정하지 않았다면 브라우저가 차단합니다.
3. 서버 사이드 렌더링(SSR) vs 클라이언트 사이드 렌더링(CSR)
Q: SSR과 CSR의 차이점을 설명해보세요.
A:
- SSR(Server-Side Rendering):
- HTML이 서버에서 렌더링되어 클라이언트로 전송됩니다.
- 클라이언트는 받은 HTML을 브라우저에 표시합니다.
- 초기 로딩 속도가 빠르고 SEO에 유리합니다.
- CSR(Client-Side Rendering):
- HTML, CSS, JS를 클라이언트로 전송한 후 브라우저가 JS를 실행해 렌더링합니다.
- 첫 로딩 시간이 길지만, 이후 페이지 간 전환이 빠릅니다.
부가 설명:
- SSR은 SEO가 중요한 서비스(예: 블로그)에 적합하고, CSR은 사용자 상호작용이 많은 SPA(Single Page Application)에 적합합니다.
4. RESTful API
Q: RESTful API란 무엇인가요?
A:
RESTful API는 REST(Representational State Transfer) 아키텍처 스타일을 준수하는 API입니다. 주요 특징은 다음과 같습니다:
- HTTP 메서드 사용:
GET
,POST
,PUT
,DELETE
등을 활용해 자원을 처리합니다. - 자원(Resource) 중심: URL은 자원을 나타내며, 행위는 HTTP 메서드를 통해 표현됩니다.
- 무상태성(Stateless): 각 요청은 클라이언트의 상태를 서버에 저장하지 않습니다.
예시:
GET /users
: 사용자 목록 조회POST /users
: 새로운 사용자 생성
5. HTTP
Q: HTTP란 무엇이고, 주요 특징을 설명하세요.
A:
HTTP(HyperText Transfer Protocol)는 클라이언트와 서버 간 데이터 전송을 위한 프로토콜입니다.
- 무상태성(Stateless): 요청 간 상태를 저장하지 않습니다.
- 메서드 기반:
GET
,POST
,PUT
,DELETE
등을 지원합니다. - 확장성: HTTPS를 통해 보안성을 강화할 수 있습니다.
6. 호이스팅
Q: 호이스팅(Hoisting)이란 무엇인가요?
A:
호이스팅은 JS 엔진이 코드 실행 전에 변수와 함수 선언을 끌어올리는 동작을 말합니다.
- 변수 선언(
var
)과 함수 선언은 스코프의 최상단으로 끌어올려집니다. - 초기화는 선언 이후에 수행됩니다.
예시:
console.log(a); // undefined
var a = 10;
7. 클로저란
Q: 클로저(Closure)란 무엇인가요?
A:
클로저는 함수와 함수가 선언된 렉시컬 환경의 조합입니다. 내부 함수가 외부 함수의 변수를 참조하고, 외부 함수가 종료된 이후에도 참조를 유지할 수 있습니다.
예시:
function outer() {
let count = 0;
return function inner() {
count++;
return count;
};
}
const counter = outer();
console.log(counter()); // 1
console.log(counter()); // 2
8. ==과 ===의 차이
Q: ==과 ===의 차이를 설명해보세요.
A:
==
: 동등 연산자로, 두 값을 비교하기 전에 형 변환(Type Conversion)을 수행합니다.===
: 일치 연산자로, 값과 데이터 타입 모두를 비교합니다.
예시:
console.log(5 == '5'); // true
console.log(5 === '5'); // false
9. TDD
Q: TDD(Test-Driven Development)란 무엇인가요?
A:
TDD는 테스트 주도 개발로, 코드를 작성하기 전에 테스트 케이스를 먼저 작성하고 이를 만족하는 코드를 작성하는 개발 방식입니다.
- 테스트 작성: 실패할 테스트를 작성합니다.
- 코드 작성: 테스트를 통과하는 최소한의 코드를 작성합니다.
- 리팩토링: 코드 품질을 개선합니다.
장점:
- 코드 품질 향상
- 디버깅 시간 단축
- 변경 사항에 대한 빠른 피드백
10. 비동기 함수란?
Q: 비동기 함수란 무엇이며, 어떻게 동작하나요?
A:
비동기 함수는 작업이 완료될 때까지 코드 실행을 차단하지 않고 다른 작업을 수행할 수 있는 함수입니다.
예시:
- 콜백: 함수의 인자로 다른 함수를 전달.
- Promise: 작업 완료 시점에 결과를 반환.
- async/await: Promise를 간결하게 표현.
예시 코드:
async function fetchData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
}