A: 사용자가 브라우저에서 URL을 입력하면 다음 과정을 거칩니다. ① DNS를 통해 도메인을 IP 주소로 변환 ② 브라우저가 해당 서버에 HTTP 요청 전송 ③ 서버가 HTML, CSS, JavaScript 파일을 응답으로 전송 ④ 브라우저가 파일들을 파싱하여 DOM 트리 구성 ⑤ CSS와 함께 렌더링하여 화면에 표시 ⑥ JavaScript 실행으로 동적 기능 제공. 이 모든 과정이 클라이언트-서버 구조로 이루어집니다.
Q2: HTTP와 HTTPS의 차이점을 설명해주세요.
A: HTTP는 평문으로 데이터를 전송하는 프로토콜로 80번 포트를 사용하며, 데이터 노출 위험이 있습니다. HTTPS는 HTTP에 SSL/TLS 암호화를 추가한 것으로 443번 포트를 사용합니다. HTTPS는 데이터 암호화, 서버 인증, 데이터 무결성을 보장하며, SEO 이점과 브라우저 신뢰도 향상 효과도 있습니다. 현재는 보안과 성능상 HTTPS가 웹 표준입니다.
Q3: GET과 POST의 차이점을 설명해주세요.
A: GET은 서버에서 데이터를 조회하는 메서드로 데이터를 URL 쿼리스트링에 포함시켜 전송합니다. 캐싱 가능하고 북마크 저장이 되지만 데이터 길이 제한과 보안 문제가 있습니다. POST는 서버에 데이터를 전송하는 메서드로 데이터를 요청 본문에 포함시킵니다. 데이터 길이 제한이 없고 상대적으로 안전하지만 캐싱되지 않습니다. GET은 멱등성을 가지지만 POST는 그렇지 않습니다.
Q4: 쿠키와 세션의 차이점을 설명해주세요.
A: 쿠키는 클라이언트(브라우저)에 저장되는 작은 데이터로, 서버가 생성하여 클라이언트에 전송하고 클라이언트가 이후 요청 시 함께 전송합니다. 세션은 서버에 저장되는 사용자 정보로 세션 ID를 통해 관리됩니다. 쿠키는 브라우저에 저장되어 보안에 취약하지만 서버 부담이 적고, 세션은 서버에 저장되어 안전하지만 서버 메모리를 사용합니다. 쿠키는 만료시간 설정이 가능하고, 세션은 보통 브라우저 종료 시 삭제됩니다.
Q5: REST API의 특징과 설계 원칙을 설명해주세요.
A: REST는 자원(Resource), 행위(HTTP Method), 표현(Representation)으로 구성되는 아키텍처 스타일입니다. 무상태성, 캐시 가능성, 계층화된 시스템, 통일된 인터페이스를 특징으로 합니다. 설계 원칙은 ① URI는 자원을 표현(명사 사용) ② HTTP 메서드로 행위를 표현(GET, POST, PUT, DELETE) ③ 상태코드로 결과 전달 ④ JSON 형태의 데이터 전송이 일반적입니다.
Frontend 기술
Q6: HTML 시맨틱 요소의 중요성을 설명해주세요.
A: 시맨틱 HTML은 의미를 가진 HTML 요소로 문서의 구조를 명확하게 표현합니다. header, nav, main, article, section, aside, footer 등이 대표적입니다. 중요성은 ① SEO 향상: 검색엔진이 내용을 더 잘 이해 ② 접근성 개선: 스크린 리더 등 보조기술의 이해도 향상 ③ 코드 가독성: 개발자가 구조를 쉽게 파악 ④ 유지보수성: 명확한 구조로 수정이 용이합니다.
Q7: CSS의 Box Model을 설명해주세요.
A: CSS Box Model은 모든 HTML 요소를 직사각형 박스로 표현하는 개념입니다. 안쪽부터 ① Content: 실제 내용이 들어가는 영역 ② Padding: 내용과 테두리 사이의 여백 ③ Border: 테두리 ④ Margin: 요소 간의 외부 여백으로 구성됩니다. box-sizing 속성으로 박스 크기 계산 방식을 변경할 수 있으며, content-box(기본값)와 border-box가 있습니다.
Q8: JavaScript의 호이스팅에 대해 설명해주세요.
A: 호이스팅은 변수와 함수 선언이 해당 스코프의 최상단으로 끌어올려지는 것처럼 동작하는 JavaScript의 특성입니다. var 변수는 undefined로 초기화되어 호이스팅되고, let/const는 호이스팅되지만 초기화되지 않아 일시적 사각지대(TDZ)가 발생합니다. 함수 선언문은 전체가 호이스팅되어 선언 전에도 호출 가능하지만, 함수 표현식은 변수 호이스팅 규칙을 따릅니다.
Q9: 클로저(Closure)에 대해 설명해주세요.
A: 클로저는 함수가 선언될 때의 렉시컬 환경(스코프)을 기억하여, 함수가 선언된 스코프 밖에서 실행되어도 그 환경의 변수에 접근할 수 있는 기능입니다. 외부 함수의 변수를 내부 함수에서 참조할 때 발생하며, 외부 함수 실행이 끝나도 내부 함수가 외부 함수의 변수에 접근 가능합니다. 데이터 은닉, 모듈 패턴, 콜백 함수 등에 활용됩니다.
Q10: Promise와 async/await의 차이점을 설명해주세요.
A: Promise는 비동기 작업의 완료 또는 실패를 나타내는 객체로, pending, fulfilled, rejected 상태를 가집니다. then(), catch(), finally() 메서드 체이닝으로 처리하지만 여전히 콜백 지옥이 발생할 수 있습니다. async/await는 Promise를 더 동기적으로 작성할 수 있게 해주는 문법입니다. async 함수는 항상 Promise를 반환하고, await는 Promise가 resolve될 때까지 기다립니다. 코드 가독성이 크게 향상되고 try-catch로 간단한 에러 처리가 가능합니다.
Backend 및 서버
Q11: MVC 패턴에 대해 설명해주세요.
A: MVC는 애플리케이션을 Model, View, Controller로 분리하는 아키텍처 패턴입니다. Model은 데이터와 비즈니스 로직을 담당하고, View는 사용자 인터페이스를 담당하며, Controller는 사용자 입력을 처리하고 Model과 View를 연결합니다. 관심사 분리로 코드 재사용성과 유지보수성이 향상되고, 개발자들 간 역할 분담이 명확해집니다. Spring MVC, Django, Express 등에서 이 패턴을 사용합니다.
Q12: JWT(JSON Web Token)에 대해 설명해주세요.
A: JWT는 JSON 객체를 안전하게 전송하기 위한 토큰 기반 인증 방식입니다. Header(알고리즘 정보), Payload(사용자 정보), Signature(서명)로 구성되며, 점(.)으로 구분됩니다. 서버에서 비밀키로 서명하여 위변조를 방지합니다. Stateless하여 서버 부담이 적고 확장성이 좋지만, 토큰 크기가 크고 만료 전까지 무효화하기 어렵다는 단점이 있습니다. 주로 API 인증에 사용됩니다.
Q13: 데이터베이스 연결 풀에 대해 설명해주세요.
A: 커넥션 풀은 데이터베이스 연결을 미리 생성하여 풀에 저장하고 재사용하는 기법입니다. 매번 연결을 생성/해제하는 오버헤드를 줄이고, 동시 연결 수를 제한하여 DB 서버 부하를 관리합니다. 적절한 풀 크기 설정이 중요한데, 너무 작으면 대기시간이 증가하고 너무 크면 메모리 낭비가 발생합니다. HikariCP, Apache DBCP 등의 라이브러리를 사용하며, 최대 연결 수, 최소 연결 수, 연결 대기 시간 등을 설정할 수 있습니다.
성능 및 보안
Q14: 웹 성능 최적화 방법을 설명해주세요.
A: 프론트엔드 최적화로는 ① 이미지 최적화(압축, WebP 포맷, lazy loading) ② 코드 분할과 번들 최적화 ③ CSS/JS 압축 및 최소화 ④ CDN 사용 ⑤ 브라우저 캐싱 활용이 있습니다. 백엔드 최적화로는 ① 데이터베이스 쿼리 최적화 ② 인덱스 활용 ③ 캐싱 전략(Redis, Memcached) ④ 로드 밸런싱 ⑤ 비동기 처리가 있습니다. Core Web Vitals(LCP, FID, CLS) 지표를 모니터링하여 사용자 경험을 개선합니다.
Q15: CORS에 대해 설명해주세요.
A: CORS(Cross-Origin Resource Sharing)는 웹 브라우저의 동일 출처 정책을 완화하여 다른 도메인의 리소스에 접근할 수 있게 해주는 메커니즘입니다. 브라우저는 보안상 같은 프로토콜, 도메인, 포트의 리소스만 접근을 허용합니다. CORS는 서버에서 Access-Control-Allow-Origin 등의 헤더를 설정하여 특정 도메인의 접근을 허용합니다. Preflight 요청으로 실제 요청 전에 서버 정책을 확인하며, 잘못 설정하면 보안 위험이 있으므로 필요한 도메인만 허용해야 합니다.
Q16: 주요 웹 보안 취약점과 대응 방법을 설명해주세요.
A: 주요 취약점으로는 ① XSS: 악성 스크립트 삽입 → 입력값 검증과 출력값 인코딩으로 방지 ② CSRF: 의도하지 않은 요청 → CSRF 토큰과 SameSite 쿠키로 방지 ③ SQL Injection: 악의적 SQL 삽입 → Prepared Statement와 입력값 검증으로 방지 ④ 인증 취약점 → 강력한 비밀번호 정책, HTTPS 사용, 세션 타임아웃 설정으로 대응합니다. 정기적인 보안 감사와 최신 패치 적용도 중요합니다.
Q17: SPA와 SSR의 차이점과 장단점을 설명해주세요.
A: SPA(Single Page Application)는 하나의 HTML 페이지에서 JavaScript로 동적으로 콘텐츠를 변경하는 방식입니다. 빠른 사용자 경험, 서버 부하 감소가 장점이지만 초기 로딩 시간이 길고 SEO에 불리합니다. SSR(Server-Side Rendering)은 서버에서 HTML을 완전히 렌더링하여 전송하는 방식입니다. 빠른 초기 로딩과 SEO 친화적이지만 서버 부하가 크고 페이지 전환 시 새로고침이 필요합니다. 현재는 Next.js, Nuxt.js 같은 프레임워크로 하이브리드 방식을 많이 사용합니다.
Q18: 캐싱 전략에 대해 설명해주세요.
A: 캐싱은 자주 사용되는 데이터를 빠른 저장소에 임시 보관하여 성능을 향상시키는 기법입니다. ① Cache-Aside: 애플리케이션이 캐시를 직접 관리 ② Write-Through: 캐시와 DB에 동시에 쓰기 ③ Write-Behind: 캐시에 먼저 쓰고 나중에 DB 반영 ④ Write-Around: 캐시를 거치지 않고 DB에 직접 쓰기가 있습니다. TTL 설정, 캐시 무효화 전략, 캐시 키 설계, 메모리 사용량 관리 등을 고려해야 합니다.
최신 기술 동향
Q19: 마이크로서비스 아키텍처의 특징을 설명해주세요.
A: 마이크로서비스는 애플리케이션을 작고 독립적인 서비스들로 분해하는 아키텍처 패턴입니다. 각 서비스는 특정 비즈니스 기능을 담당하고, 독립적으로 배포 및 확장 가능합니다. 장점으로는 독립적 개발/배포, 기술 다양성, 확장성, 장애 격리가 있습니다. 단점으로는 복잡성 증가, 네트워크 통신 오버헤드, 분산 시스템 관리의 어려움이 있습니다. API Gateway, 서비스 디스커버리, 로드 밸런싱 등의 지원 도구가 필요합니다.
Q20: PWA(Progressive Web App)의 특징을 설명해주세요.
A: PWA는 웹 기술로 개발되지만 네이티브 앱과 같은 사용자 경험을 제공하는 웹 애플리케이션입니다. Service Worker를 통한 오프라인 지원, 웹 매니페스트로 홈 화면 추가, 푸시 알림, 백그라운드 동기화 등의 기능을 제공합니다. 반응형 디자인, HTTPS 필수, 앱과 같은 인터랙션이 특징입니다. 하나의 코드베이스로 여러 플랫폼 배포 가능하고 앱 스토어 승인 없이 업데이트할 수 있지만, 일부 네이티브 기능 제약과 브라우저 지원 차이가 있습니다.