분류 전체보기 62

큐잉(Queuing)과 라우팅(Routing)

큐잉 (Queuing)메시지를 안전하게 저장하고, 소비자가 처리할 때까지 순서대로 보관·전달하는 것.포인트생산자(Producer)가 메시지를 브로커에 보냄 → 큐(Queue)에 쌓임소비자(Consumer)가 큐에서 메시지를 가져가 처리메시지는 소비자가 확인(200 ack)해야 큐에서 제거됨처리 실패 시 재전송 가능 (retry, dead-letter queue 활용)예시사용자가 주문 취소 요청 → 명령 메시지가 큐에 저장Command Service가 이 큐를 구독 → 순차적으로 처리 라우팅 (Routing)메시지를 어떤 큐에 보낼지 결정하는 규칙RabbitMQ에서 Exchange → Queue 바인딩 규칙을 기반으로 동작라우팅 유형Direct Routing : 라우팅 키 = 큐 키워드 일치 시 전달Fan..

CS 정리 2025.09.22

논동기와 비블로킹

익숙해서 당연하게 쓰는것도 돌아보면 뭔가 아이디어를 얻을 수 있지 않을까요?동기(Synchronous) & 비동기(Asynchronous) 블로킹(Blocking) & 논블로킹(Non-Blocking) 조합 조합 의미특징/활용블로킹-동기제어권 안 줌 + 결과 올 때까지 기다림가장 직관적. 파일 읽기, JDBC 쿼리, HTTP논블로킹-동기제어권은 바로 줌 + 하지만 결과 확인을 직접 계속 해야 함(polling)CPU 낭비가 있을 수 있음. NIO 소켓, IoT polling블로킹-비동기제어권 안 줌 + 결과는 나중에 콜백/알림으로 옴GUI 이벤트 루프, Future.get논블로킹-비동기제어권 즉시 반환 + 결과는 알림/콜백/Promise로 받음현대 시스템에서 가장 많이 쓰는 패턴, Node.js, Web..

CS 정리 2025.09.05

동기(Synchronous) & 비동기(Asynchronous)

"결과를 언제 받느냐"동기(Synchronous) 어떤 작업을 요청했을 때, 그 작업이 끝날 때까지 다음 작업이 시작되지 않고 순서대로 처리되는 방식. 앞의 결과가 나와야 뒤의 일이 진행됨. ex) 결제 버튼을 누르면, 결제가 끝날 때까지 화면이 멈춰 있고 다른 메뉴를 누를 수 없는 경우 비동기(Asynchronous) 작업을 요청하면 결과가 끝날 때까지 기다리지 않고 즉시 다른 작업을 처리할 수 있는 방식. 결과는 나중에 알림(콜백, 이벤트 등)으로 전달됨. ex) 결제 버튼을 누르면, 결제가 끝날 때까지 기다리지 않고 바로 다른 메뉴를 볼 수 있는 경우.카페에서 커피 주문 후, 커피가 나올 때까지 카운터 앞에서 서서 기다리는 것. (=동기)커피 주문 후, 진동벨을 받고 자리에 앉아 다른 일을 하다가 ..

CS 정리 2025.09.03

블로킹(Blocking) & 논블로킹(Non-Blocking)

"호출 시 제어권을 넘겨주냐 마냐" 블로킹(Non-Blocking)어떤 작업을 요청했을 때, 그 작업이 끝날 때까지 프로그램이 멈추고 기다리는 방식. 대기 중 다른 작업 불가ex) 파일 읽기 요청을 했을 때, 데이터가 다 읽힐 때까지 CPU가 기다림. 논블로킹(Non-Blocking)작업을 요청하면 즉시 제어권을 반환하고 다른 일을 할 수 있는 방식, 결과는 나중에 확인하거나 이벤트/콜백으로 발생ex) 파일 읽기 요청을 해두고, 데이터가 준비되면 알림(콜백, 이벤트 루프)으로 결과를 받음. 카페에서 커피 주문 후, 커피가 나올 때까지 카운터 앞에서 서서 기다리는 것. (=블로킹)커피 주문 후, 진동벨을 받고 자리에 앉아 다른 일을 하다가 커피가 준비되면 벨이 울려 찾으러 가는 것. (=논블로킹) 비교구분..

CS 정리 2025.09.02

Feign 사용해보기

(발음은 페인)Feign은 Java에서 HTTP 클라이언트를 선언형(Declarative)으로 작성할 수 있게 해주는 라이브러리주로 Spring Cloud에서 Spring Cloud OpenFeign 형태로 사용REST API 호출을 인터페이스로 선언하면, 런타임 시 구현체를 자동 생성API 호출 시 HTTP 요청 생성, 전송, 응답 파싱 과정을 프록시 객체가 대신 처리java 8 이상, spring cloud와 연계하기 위해선 java 17이상기존 미사용 코드 환경 content(XML)을 만들어 전송해야 함sign = base64(MD5(content + keyValue))를 전송 직전에 생성공통 파라미터: sign_type=MD5&notify_type=ORDER_CREATE&input_charset..

CS 정리 2025.08.11

Java + Kotlin 혼용 개발

구분 장점단점 현실적인 예시도입 유연성기존 Java에 Kotlin을 점진적 도입 가능코드 스타일 혼재로 혼란 가능신규 기능은 Kotlin, 기존 로직은 Java 유지코드 간결성Kotlin의 data class, null-safety 덕분에 생산성↑Kotlin 문법 미숙 시 유지보수 어려움Java는 Lombok 필수, Kotlin은 data class 한 줄로생산성 향상확장 함수, DSL로 빠른 개발기능 중복 구현 가능성예: Result.success() vs ResponseEntity.ok()상호 운용성Java ↔ Kotlin 완전 호환Java에서 Kotlin 호출 시 null 안정성 보장 안 됨Kotlin 메서드 호출 시 null 체크 누락 주의빌드 구조Gradle에서 함께 컴파일 가능kapt, 빌드 ..

CS 정리 2025.07.31

BunkerWeb, 도입 시 겪은 이슈: HTTP/2 프로토콜

BunkerWeb 이란BunkerWeb은 보안에 특화된 리버스 프록시로, 기존 Nginx를 대체할 수 있는 솔루션Docker나 Kubernetes 환경에 최적화되어 있어 컨테이너 기반 시스템에서 빠르게 적용할 수 있는 장점이 있음 주요 기능 WAF 내장 (ModSecurity + CRS)HTTPS 자동 구성 (Let's Encrypt)보안 헤더 자동 삽입Rate limiting / DDoS 대응로그 및 모니터링 지원도입 상황 Nginx 보안 설정이 번거로울 때HTTPS 자동 갱신이 필요할 때최소한의 설정으로 웹 보안을 강화하고 싶을 때도입 시 겪은 문제: HTTP/2 프로토콜 오류DEV 환경에 도입한 상태로 테스트 중 스크립트에서 오류가 발생함net::ERR_HTTP2_PROTOCOL_ERROR 200 ..

CS 정리 2025.07.29

HTTPS(HyperText Transfer Protocol + SSL/TLS)

HTTPS란?HTTP(HyperText Transfer Protocol)에 보안 계층(SSL/TLS)을 추가하여 데이터의 암호화와 인증을 지원하는 프로토콜port : HTTPS 443, HTTP 80 HTTPS 주요 구성요소HTTP: 웹 콘텐츠를 주고받는 프로토콜SSL/TLS: 데이터를 암호화하고 인증하는 프로토콜공개키/개인키 암호화 방식(비대칭키)대칭키 암호화 방식(공유된 하나의 암호키)디지털 인증서: 서버의 신원 확인과 공개키 제공에 사용 HTTPS 연결 절차 (SSL/TLS Handshake 과정)① 클라이언트가 HTTPS 연결 요청② 서버가 인증서 전달 (서버 인증)서버는 자신의 공개키가 포함된 디지털 인증서를 클라이언트에게 전송인증서는 CA (Certificate Authority, 인증기관)가..

CS 정리 2025.07.23

OAuth2의 4가지 Grant Type

1. Authorization Code Grant사용자 로그인 → Authorization Code → Access Token 교환사용처: 웹 서버, 모바일 앱 (Authorization Code + PKCE)보안 우수: 토큰은 브라우저에 노출되지 않음흐름① 사용자: 브라우저 → 로그인 ② 인증 서버: Authorization Code 발급 ③ 클라이언트 서버: Code → Access Token 교환 ④ 클라이언트 서버: Token으로 API 호출 OpenID Connect (OIDC)에서도 가장 많이 사용하는 표준 방식 * PKCE (Proof Key for Code Exchange)보안 강화를 위한 보조 프로토콜클라이언트 서버에서 인증 요청 시 랜덤 문자열을 암호화(SHA-256)하여 해시값을 보내..

CS 정리 2025.07.21

Spring Security + Keycloak으로 SSO 구현하기

SSO(Single Sign-On)는 하나의 로그인으로 여러 서비스에 접근할 수 있게 해주는 인증 방식 SSO 어떻게?사용자가 SSO 시스템에 로그인 (예: 중앙 인증 서버)로그인 성공 시 토큰/세션/쿠키 발급사용자가 다른 서비스 접근 시,로그인 정보를 공유받거나중앙 인증 서버로 리다이렉트되어 로그인 상태 확인인증이 확인되면 서비스 이용 가능 구현목표하나의 Keycloak 서버로 여러 Spring Boot 애플리케이션의 로그인 처리사용자 입장에서는 한 번 로그인으로 모든 서비스 접근 가능 시스템 구성Keycloak: 인증 서버 (SSO Provider)Service A / B: Spring Boot 앱 (OAuth2 Client)사용자 브라우저: Keycloak 세션으로 SSO 유지 Keycloak 설정..

CS 정리 2025.07.13