cs 17

[CS] Graceful Shutdown(우아한 종료)

Graceful Shutdown(우아한 종료) 이란?서버 애플리케이션이 종료될 때, 처리 중인 작업을 마무리하고 리소스를 정리한 후 안전하게 종료하는 방식갑작스럽게 서버를 종료하는 경우 발생할 수 있는 데이터 손실, 트랜잭션 중단, 사용자 불편 등을 방지일반적으로 SIGTERM 시그널을 받으면, 서버는새로운 요청은 받지 않고현재 처리 중인 요청은 모두 완료한 뒤프로세스를 종료함 Graceful Shutdown이 필요한 이유사용자 요청 도중 서버가 즉시 꺼질 경우, 트랜잭션 실패 또는 데이터 유실 발생 가능DB 연결, 파일 핸들 등 리소스가 정리되지 않으면 자원 누수 발생사용자 경험이 저하되며, 시스템 안정성에도 부정적인 영향운영 환경에서 서비스 무중단 배포나 롤링 업데이트에도 필수적인 개념 SIGTER..

IT/CS 공부 2025.07.03

[CS] CQRS 패턴 (Command Query Responsibility Segregation)

CQRS(Command Query Responsibility Segregation)명령(Command)과 조회(Query)의 책임을 분리하는 소프트웨어 설계 패턴 시스템에서 처리하는 작업 종류명령(Command): 시스템의 상태를 변경하는 작업예: 주문 생성, 주문 취소, 결제 처리조회(Query): 시스템의 상태를 읽기만 하는 작업예: 주문 내역 조회, 사용자 정보 확인CQRS의 핵심 개념명령 모델과 조회 모델을 각각 별도로 분리하여 관리한다.하나의 리소스를 명령용과 조회용 두 개의 모델로 나눌 수 있다.예: Order (명령 모델), OrderData (조회 모델)명령 모델은 변경 작업에 집중하고, 조회 모델은 데이터 출력을 최적화할 수 있다.예시: 쇼핑몰 주문 시스템Order: 주문 생성, 결제 처..

IT/CS 공부 2025.06.27

[CS] CI/CD 파이프라인

CI/CD 파이프라인1. CI/CD를 왜 하는가?코드 변경의 위험을 줄이기 위해개발자마다 작업한 코드를 합치다 보면 충돌 발생 가능코드 통합 시점마다 자동으로 테스트하여 오류를 사전에 발견배포 속도를 빠르게 하기 위해수동 배포는 시간과 리소스 낭비, 실수 위험이 큼자동화된 빌드 및 배포를 통해 신속한 기능 릴리스 가능서비스 품질을 유지하기 위해자동화된 테스트를 통해 코드 품질과 안정성 확보변경 사항이 실제 환경에 미치는 영향을 조기에 검증개발-운영 간 협업 효율성 향상코드 커밋만으로 자동 빌드/테스트/배포 가능운영자는 배포 도구만 관리하고, 개발자는 기능에 집중 가능2. 핵심 개념 정리지속적 통합 (CI: Continuous Integration)여러 개발자가 자주 변경한 코드를 공통 저장소에 지속적으로..

IT/CS 공부 2025.06.26

[CS] 코드 커버리지(Code Coverage)

코드 커버리지(Code Coverage)1. 코드 커버리지란?테스트 코드가 실제 애플리케이션 코드를 얼마나 실행했는지를 수치로 표현한 지표테스트가 코드 전체에 얼마나 영향을 미치는지 확인 가능코드 안정성, 테스트 신뢰성을 평가하는 데 활용2. 코드 커버리지가 중요한 이유테스트가 작성되었더라도, 모든 코드 경로가 테스트되는 것은 아님테스트의 범위와 누락된 부분을 식별할 수 있음코드 리팩토링 시, 테스트 커버리지로 안전성 확인 가능3. 코드 커버리지의 주요 종류3-1. 구문 커버리지 (Statement Coverage)코드의 각 줄(라인)이 실행되었는지를 확인가장 기본적인 커버리지예: 5줄의 코드 중 5줄 모두 실행되면 100% 달성public void sayHello(String name) { Sys..

IT/CS 공부 2025.06.26

[CS] 정적 IP 주소 할당 방식과 동적 IP 주소 할당 방식

IP 주소 할당이 필요한 이유네트워크에서는 각 장치(호스트) 가 서로 통신하려면 식별자(IP 주소) 가 필요역할데이터의 목적지를 식별라우팅 경로 설정특정 서비스로 접근 (웹서버, DB 등)IP 주소 할당 방식의 종류정적 IP 할당 (Static IP Assignment) 정적 IP 할당 (Static IP Assignment)네트워크 관리자가 수동으로 직접 IP를 설정항상 동일한 IP 사용예: 서버, 라우터, DNS, CCTV 등 고정된 위치에 있어야 하는 장비 ✅장점항상 같은 IP로 접근 가능 → 서버나 DB에 적합DNS, 방화벽, 로드밸런서 구성에 용이❌ 단점장비가 많아질수록 관리가 복잡사람이 수동으로 설정 → 중복 오류, IP 충돌 위험유연하지 않음 (노트북, 모바일에는 부적합)동적 IP 할당 (..

IT/CS 공부 2025.06.19

[CS] 단일 장애 지점(SPOF)

단일 장애 지점(SPOF : Single Point of Failure)시스템 내에서 단 하나의 장애로 전체 시스템이 중단될 수 있는 구성 요소ex) API 서버가 한 대뿐이라면 해당 서버가 OOM(Out Of Memory) 또는 네트워크 장애로 다운-> 전체 서비스가 중단 서버 이중화로 SPOF 제거하기여러 대의 서버에 동일한 애플리케이션을 배포하고, 앞단에 로드 밸런서를 배치해 트래픽을 분산하나의 서버가 고장 나더라도 나머지 서버가 요청을 처리할 수 있어 고가용성(High Availability, HA) 을 확보할 수 있음이중화 시 점검해야 할 항목과 상세 설명임계 구역(Critical Section) & 동시성 문제임계 구역이란?여러 스레드나 프로세스가 동시에 접근하면 안 되는 공유 자원을 사용하..

IT/CS 공부 2025.06.19

[CS] JWT(Json Web Token)

JWT(Json Web Token)JWT(Json Web Token) 는 인증과 인가를 위해 사용되는 클레임 기반의 토큰 포맷입니다.JSON 형식의 데이터를 Base64Url로 인코딩한 문자열로,주로 사용자 인증 정보 및 권한 정보를 담아 서버와 클라이언트 간에 안전하게 전송하는 데 사용됩니다. JWT 구조JWT는 세 부분으로 구성..Header어떤 알고리즘으로 서명했는지, 어떤 타입의 토큰인지 명시{ "alg": "HS256", "typ": "JWT"}Payload (Claim)실제 전송할 데이터가 담깁니다.표준 클레임 (iss, exp, sub, aud 등) + 커스텀 클레임 (userId, role 등)을 포함할 수 있습니다.{ "sub": "user123", "exp": 171891648..

IT/CS 공부 2025.06.17

[CS] CSRF(Cross-Site Request Forgery) 공격

CSRF 공격사용자가 로그인된 상태에서 공격자가 유도한 악성 요청을 브라우저가 자동으로 실행해 서버에 전달하는 공격. 사용자는 자신도 모르게 중요한 요청(비밀번호 변경, 송금 등)을 실행하게 됨. 예시사용자가 securebank.com에 로그인하고 쿠키에 세션이 저장됨.Cookie: JSESSIONID=abc123공격자가 만든 사이트 evil.com에 아래 코드가 있다면사용자가 evil.com 접속 → 브라우저가 쿠키 포함 요청 자동 전송 → 공격 성공. Spring Security를 활용한 CSRF 방어Spring Security는 CSRF 방어 기능이 기본 활성화됨.@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSec..

IT/CS 공부 2025.06.17

[CS] 대칭키, 비대칭키, 디지털 서명

대칭키(Symmetric Key Cryptography) : 암호화와 복호화에 동일한 키를 사용하는 방식장단점암호화 속도가 빠르고 구현이 간단하지만, 키를 교환하는 과정에서 탈취 위험이 존재또한 통신 대상이 많아질수록 각 쌍마다 고유의 키가 필요해 키 관리가 복잡해질 수 있다.대표 알고리즘AES (Advanced Encryption Standard)DES (Data Encryption Standard)비대칭키 암호화 (Asymmetric Key Cryptography) : 암호화와 복호화에 서로 다른 키를 사용하는 방식공개키와 개인키로 구성되며, 일반적으로 공개키로 암호화하면 개인키로 복호화한다.장단점비대칭키는 키 교환의 보안성을 높이지만, 대칭키 방식에 비해 속도가 느리다.이를 보완하기 위해 두 방식을..

IT/CS 공부 2025.06.09

[CS] 테스트 주도 개발(Test Driven Development, TDD)

테스트 주도 개발 (Test Driven Development, TDD)테스트 주도 개발(TDD)은 테스트를 먼저 작성하고, 이후 코드를 작성하는 개발 방식으로, 매우 짧은 개발 사이클을 반복한다. 테스트 → 구현 → 리팩토링 TDD 사이클1. Red (실패) 요구사항을 검증할 수 있는 테스트 케이스를 작성 이 테스트는 처음에는 실패해야 함 2. Green (성공) 테스트를 통과하기 위한 최소한의 코드 작성 빠르게 성공하는 것이 목적 3. Refactor (리팩토링) 테스트를 통과한 코드를 개선 중복 제거, 명확성 향상, 성능 개선 등을 수행

IT/CS 공부 2025.06.09