전체 글 526

동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있나요?

외부 서비스 장애로 인해 응답이 오래 걸린다고 했을 때 외부 API 응답으로 대기하는 자원들이 운영 서버 내부에 쌓이면서 성능에 악영향을 줄 수 있습니다. 이를 해결하기 위한 가장 기본적인 방법은 타임아웃을 설정하는 것입니다. 크게 타임아웃에는 커넥션 타임아웃과 리드 타임아웃, HTTP 커넥션 풀 타임아웃을 설정해 볼 수 있습니다.다음과 같이 특정 서비스의 장애가 전체 서비스에 영향을 주는 경우는 어떻게 해결할 수 있을까요? 🤔1. A 서비스, B 서비스, C 서비스 연동 코드가 HTTP 커넥션 풀을 공유한다.2. A 서비스의 장애로 응답 시간 지연이 발생하는 경우 2-1. 풀에 남은 커넥션이 점점 줄어든다. 2-2. 풀에서 커넥션을 구하는 대기 시간이 증가한다. 2-3. B, C 서비..

script 태그에서 async와 defer의 차이점에 대해서 설명해주세요.

먼저, 두 속성 모두 스크립트를 비동기적으로 로드한다는 공통점이 있습니다. 하지만 실행 시점에서 중요한 차이가 있습니다.async 속성async 속성에는 다음과 같은 특징들이 존재합니다.스크립트를 비동기적으로 다운로드합니다.다운로드가 완료되면 즉시 실행됩니다.HTML 파싱과 병렬로 진행되지만, 스크립트 실행 시 HTML 파싱이 잠시 중단됩니다.여러 async 스크립트가 있을 경우, 다운로드가 완료되는 순서대로 실행됩니다.defer 속성defer 속성에는 다음과 같은 특징들이 존재합니다.스크립트를 비동기적으로 다운로드합니다.HTML 문서 파싱이 완전히 끝난 후에 실행됩니다.DOMContentLoaded 이벤트 발생 직전에 실행됩니다.여러 defer 스크립트가 있을 경우, HTML에 작성된 순서대로 실행됩니..

자바스크립트 함수에 대해서 아는대로 설명해주세요.

자바스크립트 함수에는 여러가지 특징들이 있습니다.첫번째 특징은 자바스크립트 함수는 일급 객체라는 점입니다.자바스크립트에서 함수는 값처럼 취급될 수 있으며, 변수에 할당하거나, 다른 함수의 인자로 전달하거나, 함수의 반환값으로 사용할 수 있습니다.const sayHello = function() { return 'Hello'; };console.log(sayHello()); // 'Hello'const executeFunction = function(fn) { return fn();};console.log(executeFunction(sayHello)); // 'Hello'이를 통해 매우 유연하게 코드를 작성할 수 있으며, 고차 함수를 포함한 다양한 패턴을 구현할 수 있습니다.두번째 특징은 익명 함수와 ..

동일성과 동등성에 대해서 설명해주세요

동일성과 동등성은 객체를 비교할 때 중요한 개념입니다. 자바에서는 이 두 개념을 equals() 메서드와 == 연산자를 통해 구분할 수 있습니다.equals()와 ==의 차이는 무엇인가요?equals()는 객체의 내용을 비교하는 반면, ==는 객체의 참조(레퍼런스)를 비교합니다. 따라서 두 객체의 내용이 같더라도 서로 다른 객체라면 equals()는 true를 반환할 수 있지만, ==는 false를 반환합니다.동등성(Equality)은 뭔가요?동등성은 논리적으로 객체의 내용이 같은지를 비교하는 개념입니다. 자바에서는 equals() 메서드를 사용하여 객체의 동등성을 비교합니다. Apple 클래스를 예시로 보면, Object.equals 메서드를 오버라이딩하여 객체의 실제 데이터를 비교하도록 했습니다. 그..

JPA에서 ID 생성 전략에 대해 설명해주세요.

JPA에서 ID를 생성하기 위해서는 직접 할당과 자동 할당을 사용할 수 있습니다. 직접 할당은 @Id어노테이션만을 사용하여 Id값을 직접 할당하는 방식입니다. 반면, 자동 할당은 @Id와 @GeneratedValue를 함께 사용해서 원하는 키 생성 전략을 선택하는 방식입니다. @GeneratedValue의 stretagy 옵션을 통해 생성 전략을 설정할 수 있는데, 여기에 올 수 있는 값인 GenerationType는 다음과 같습니다.@Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface GeneratedValue { GenerationType strategy() ..

인터넷 창에 www.google.com를 입력하면 무슨 일이 일어나는지 설명해주세요.

첫번째로 DNS 조회가 일어납니다. 사용자가 www.google.com을 입력하면, 브라우저는 먼저 이 도메인 이름을 IP 주소로 변환해야 합니다. 이 과정을 DNS 조회(DNS Lookup)라고 합니다. 브라우저는 캐시된 DNS 기록을 먼저 확인하고, 없으면 로컬 DNS 서버에 요청하여 www.google.com에 해당하는 IP 주소를 얻습니다.두번째로 TCP 연결 수립입니다. IP 주소가 확인되면, 브라우저는 서버와 TCP 연결을 수립합니다. TCP(Transmission Control Protocol)는 데이터를 신뢰성 있게 전달하기 위한 프로토콜입니다. 이 과정에서 브라우저는 서버와 3-way handshake를 수행합니다. 즉, 브라우저가 SYN 패킷을 보내고, 서버가 SYN-ACK 패킷을 보내..

단어의 일부로 검색할 수 있는 자동완성 기능을 구현할 때, a로 시작하는 단어 5개, ap로 시작하는 단어 5개

1) 로컬 인메모리: Top-K 유지 Trie아이디어Trie의 각 노드가 해당 **접두사(prefix)**에 대한 상위 K개(예: 5개) 제안을 미리 저장.단어를 삽입할 때, 경로상의 모든 노드에 “(단어, 점수/빈도)”를 갱신.검색 시에는 접두사 노드까지 내려간 뒤, 그 노드의 Top-K 리스트만 읽으면 O(|prefix|)에 바로 응답.장점매우 빠름(O(|prefix|)+K).어플리케이션 서버 메모리만으로 동작.단점데이터가 커지면 메모리 부담.빈도 업데이트가 잦으면 재정렬/갱신 비용 발생.Java 예시 (빈도 높은 순, 동일 빈도는 사전순)import java.util.*;class Suggest implements Comparable { final String word; final int..

한글날 묵상(feat gpt5)

매년 10월 9일은 한글날입니다.세종대왕과 집현전 학자들이 1443년 훈민정음을 창제하고 1446년 반포한 날을 기념하며,우리말과 글의 소중함을 되새기는 날이지요.한글은 세계에서 유일하게 창제자와 원리가 명확한 문자이며,소리의 과학과 철학이 담긴 가장 체계적이고 아름다운 문자로 평가받습니다.훈민정음 서문에는 이런 말이 있죠.> “나라의 말이 중국과 달라 백성이 말하고자 하는 바를 글로 펴지 못할까 걱정되어 새로 스물여덟 글자를 만들었다.”이 짧은 문장 안에는백성을 향한 사랑, 언어의 평등, 소통의 정의가 담겨 있습니다.글을 모른다는 이유로 억눌리던 시대에,누구나 읽고 쓸 수 있게 한 ‘지식의 해방 선언’이 바로 한글의 정신입니다.---💭 한글날에 생각해볼 거리1. 나는 한글을 얼마나 바르게 쓰고 있을까..

스프링 MVC

1) 서블릿 컨테이너 & 필터 체인1. 클라이언트 요청 → 톰캣/제티 등 서블릿 컨테이너 수신2. Filter 실행 (순서대로)예) CharacterEncodingFilter, HiddenHttpMethodFilter, CorsFilter, DelegatingFilterProxy(→ Spring Security Filter Chain) 등3. 필터 통과 후 DispatcherServlet(프론트 컨트롤러)으로 요청 전달2) DispatcherServlet 내부 파이프라인4. MultipartResolver: 멀티파트(파일 업로드)면 파싱5. LocaleResolver / ThemeResolver: 로케일·테마 결정 (있다면)6. HandlerMapping 조회: 어떤 컨트롤러 메서드가 처리할지 매핑 결정..

“무중단 배포(Zero-Downtime Deploy)”

“무중단 배포(Zero-Downtime Deploy)”를 위해 쓸 수 있는 대표 방법과 실무 체크리스트를 한 장에 담아드릴게요.무중단 배포 전략1. 블루-그린(Blue-Green)두 개의 동일한 환경(Blue=현재, Green=새 버전)을 준비하고 트래픽 스위치만 바꿉니다.장점: 전환과 롤백이 빠름(로드밸런서 스위치).단점: 인프라 비용↑, DB 스키마 호환성이 필수.2. 롤링 업데이트(Rolling)인스턴스를 한 대씩(또는 배치로) 새 버전으로 교체. Health 체크 통과 시 다음으로 진행.장점: 자원 추가 비용 적음.단점: 일정 시간 혼재 상태 → 엄격한 하위호환 필요.3. 카나리 배포(Canary)일부 트래픽(예: 1%→5%→25%→50%…)에만 새 버전 배정, 메트릭 이상 없으면 점증 확대.장점..