전체 글 515

헬스체크에 대해서 설명해 주세요.

헬스체크(Health Check) 는 현재 서버의 상태가 정상인지 파악하는 것을 의미합니다. API 엔드포인트를 호출하거나 특정 포트로 TCP 연결을 시도하는 방식을 사용할 수 있으며, 스프링 액추에이터(Spring Actuator)를 활용하여 헬스체크 기능을 사용할 수 있습니다.헬스체크의 필요성은 무엇인가요?서버가 헬스체크 기능을 제공하면 최신 코드를 배포할 때 신규 배포가 정상적으로 이뤄졌는지 확인할 수 있으며, 장애를 감지하여 대응할 수 있다는 이점이 있습니다.장애 대응의 예시로, 로드 밸런서가 존재하고 트래픽 분산 대상 서버 2대(A, B)가 있을 때, A 서버의 헬스체크 결과가 비정상으로 판단되면 로드 밸런서는 A 서버를 트래픽 분산 대상에서 제외하고, 이후 B 서버로만 요청을 전달할 수 있습니..

제네레이터에 대해 설명해주세요.

제네레이터(Generator)는 자바스크립트에서 반복 가능한 데이터를 만들거나, 실행 흐름을 중간에 멈췄다가 다시 이어서 실행할 수 있게 해주는 특수한 함수입니다. 일반 함수와 다르게 function* 키워드로 정의하며, 내부에서 yield 키워드를 사용해 값을 순차적으로 반환합니다.제네레이터 함수는 실행하면 즉시 코드가 실행되지 않고, 대신 이터레이터 객체를 반환합니다. 이 이터레이터는 next() 메서드를 통해 하나씩 값을 꺼낼 수 있으며, yield 지점에서 멈췄다가, 다음 next() 호출 시 그 지점부터 다시 실행됩니다.function* myGenerator() { yield 1; yield 2; yield 3;}const gen = myGenerator();console.log(gen.n..

레이어드 아키텍처란 무엇인가요?

레이어드 아키텍처(Layered Architecture) 란 소프트웨어를 관심사별로 여러 계층으로 나누어 수직적으로 배열한 것을 의미합니다. 여기서 관심사란 유사한 책임들을 의미합니다. 예를 들어, 데이터베이스 접근과 관련된 책임들을 하나의 관심사로 볼 수 있습니다.레이어드 아키텍처의 대표적인 구성에는 3가지 레이어가 존재하는데요. 표현 계층, 도메인 계층, 데이터 소스 계층이 이에 해당합니다. 레이어의 종류와 수는 프로젝트 상황마다 달라질 수 있습니다.표현 계층(Presentation Layer) 은 사용자 입력을 처리하기 위해 존재합니다.도메인 계층(Domain Layer) 은 비즈니스와 관련된 로직을 수행하기 위해 존재합니다.데이터 소스 계층(Data Source Layer) 은 데이터베이스 접근 ..

이터러블 프로토콜에 대해 설명해주세요.

이터러블 프로토콜은 자바스크립트에서 데이터를 순차적으로 순회하여 탐색할 수 있도록 정해놓은 프로토콜입니다. 이터러블 프로토콜이 존재하는 이유는, 다양한 자료구조를 같은 방식으로 순회할 수 있게 하여 일관된 반복 처리 방법을 제공하기 위함입니다.예를 들어 배열, String, Set, Map 등은 서로 다른 구조를 가지고 있지만, 이터러블 프로토콜을 따르고 있기 때문에 for...of 문이나 스프레드 연산자 같은 문법으로 동일하게 순회할 수 있습니다. 이런 통일성 덕분에 개발자는 자료구조마다 다른 순회 방식을 고민하지 않아도 됩니다.이터러블로 간주되기 위해서는 해당 객체에 Symbol.iterator라는 키를 가진 메서드가 정의되어 있어야 하며, 이 메서드는 이터레이터 객체를 반환해야 합니다. 이때 반환된..

싱글턴 패턴이란 무엇인가요?

싱글턴 패턴(Singleton Pattern) 이란 생성자를 여러 차례 호출해도 실제로 생성되는 객체를 하나로 유지하는 것을 의미합니다. 객체가 최초로 생성된 이후에 생성자나 객체 생성 메서드는 기존에 만들어진 객체를 반환합니다.public class Singleton { private static final Singleton INSTANCE = new Singleton(); // 생성자 호출 제한 private Singleton() { ... } public static Singleton getInstance() { return INSTANCE; }}싱글턴 패턴의 장단점은 무엇인가요?싱글턴 패턴은 하나의 객체를 여러 상황에서 재사용할 수 있기 때문에 메모리 낭비를 방지할 수 있습니다. 또..

OOM(Out Of Memory) 발생 경험과 해결 방법

1. 발생 경험 소개> “네, OOM을 직접 겪은 경험이 있습니다. 예를 들어, Spring 기반 서버에서 특정 배치 작업이나 대량 트래픽 유입 시 java.lang.OutOfMemoryError: Java heap space가 발생한 적이 있습니다.”2. 문제 파악 방법로그 분석: OOM 발생 시점의 catalina.out / 애플리케이션 로그 확인.Heap dump 분석: -XX:+HeapDumpOnOutOfMemoryError 옵션으로 덤프를 남겨 Eclipse MAT이나 VisualVM 같은 툴로 메모리 누수 객체 추적.모니터링 지표: JVM GC 로그, Prometheus/Grafana 대시보드, NewRelic/APM 등으로 heap 사용량 추적.패턴 확인: 특정 API 호출 시, 혹은 특정 ..

Progressive Partial Rendering(PPR)에 대해서 설명해주세요

Progressive Partial Rendering(PPR)은 웹 페이지의 로딩 성능을 최적화하는 기법으로, 페이지의 전체 콘텐츠를 한 번에 로딩하는 대신 중요도에 따라 콘텐츠를 단계적으로 로딩하는 방식입니다.이 방법을 통해 사용자는 핵심 콘텐츠를 먼저 볼 수 있게 되어 체감 로딩 시간이 단축됩니다.주요 기법으로는 서버 사이드 렌더링(SSR), 클라이언트 사이드 렌더링(CSR)을 혼합한 하이브리드 렌더링, 스트리밍 SSR, 점진적 하이드레이션 등이 있습니다.이러한 PPR 기법들은 First Contentful Paint(FCP)와 Time To Interactive(TTI) 같은 성능 지표를 개선하는데 도움이 됩니다.Progressive Partial Rendering과 Lazy Loading의 차이점..

XSS 공격이란 무엇이며, 프론트엔드에서 이를 방어하기 위한 방법을 설명해주세요.

XSS(Cross-Site Scripting)는 공격자가 신뢰할 수 있는 웹사이트에 악성 스크립트를 삽입하여 사용자 브라우저에서 실행되게 하는 공격입니다. 이를 통해 쿠키 탈취, 세션 하이재킹, 피싱 등이 가능합니다.XSS 공격은 크게 세 가지 유형이 있습니다.첫번째로 저장형(Stored) XSS입니다. 악성 스크립트가 서버에 저장되어 다른 사용자가 해당 페이지를 방문할 때 실행됩니다.두번째는 반사형(Reflected) XSS입니다. URL 파라미터 등을 통해 전달된 악성 스크립트가 서버 응답에 포함되어 실행됩니다.마지막으로 DOM 기반 XSS입니다. 클라이언트 측 스크립트가 DOM을 동적으로 조작할 때 발생합니다.해결 방법이러한 보안문제를 해결하기 위한 방법으로는 입력 검증과 출력 이스케이핑이 있습니다..

어떤 이유로 코루틴을 사용한 작업 처리가 기존 스레드 방식보다 가벼운지 설명해주세요.

메모리 사용량 차이스레드: 각 스레드는 자체 스택 메모리를 필요로 하며, JVM에서 기본적으로 약 1MB의 스택 크기를 할당합니다. 이 메모리는 스레드가 생성될 때 예약되며 스레드가 종료될 때까지 유지됩니다.코루틴: 코루틴은 스레드 내에서 실행되며 자체 스택을 필요로 하지 않습니다. 일반적으로 코루틴은 단지 몇 KB의 메모리만 사용합니다.컨텍스트 스위칭 비용스레드: 스레드 간 전환은 운영체제 수준의 컨텍스트 스위칭을 필요로 하며, 이는 CPU 레지스터, 메모리 맵 등의 상태를 저장하고 복원하는 비용이 큽니다.코루틴: 코루틴 간 전환은 운영체제의 개입 없이 사용자 공간(user space)에서 발생하며, 단순히 실행 지점과 로컬 변수 상태만 heap 메모리에 저장하면 됩니다.생성 및 관리 비용스레드: 새 ..

쿠키와 세션의 차이에 대해서 설명해주세요

쿠키와 세션은 HTTP의 무상태(stateless) 특성을 보완하여 사용자 상태를 유지하는 메커니즘이지만, 여러 측면에서 중요한 차이가 있습니다.데이터 저장 위치쿠키는 클라이언트 측 브라우저에 저장되는 반면, 세션은 서버 측에 저장됩니다. 세션은 서버에 데이터를 저장하고 세션 ID만 쿠키를 통해 클라이언트에 전달합니다.보안성쿠키는 클라이언트에 저장되므로 사용자가 직접 접근하거나 수정할 수 있어 보안에 취약합니다. 반면 세션은 중요 정보가 서버에 저장되어 상대적으로 안전합니다.용량 제한쿠키는 일반적으로 브라우저당 도메인별로 4KB 정도로 제한되어 있습니다. 세션은 서버 리소스에 따라 다르지만 쿠키보다 훨씬 많은 데이터를 저장할 수 있습니다.라이프사이클쿠키는 개발자가 설정한 만료 시간까지 유지되며, 만료 시..