본문 바로가기

분류 전체보기

(318)
[CS] 멀티 코어 vs 멀티 프로세스 vs 멀티 스레드 멀티프로세스(Multi-Process)초기의 컴퓨터 시스템에서는 한 번에 하나의 작업(프로세스)만 실행할 수 있었습니다. 하지만 사용자 수가 늘어나고 동시에 여러 작업을 처리해야 할 필요성이 생기면서, 한 시스템에서 여러 프로세스를 동시에 실행하는 멀티프로세스 개념이 등장했습니다. 멀티프로세스는 하나의 운영체제에서 독립적인 여러 프로그램(프로세스)을 동시에 실행하는 방식입니다.각 프로세스는 독립적인 메모리 공간을 가지며, 서로 간섭하지 않습니다. 장점각 프로세스가 독립적이기 때문에 한 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않음.안정성과 보안성이 높음.단점프로세스 간의 통신(IPC)이 복잡하고 비용이 높음.독립적인 메모리 공간을 사용하기 때문에 메모리 사용량이 많음.예시웹 브라우저에서 탭마다 독..
[Network] CORS CORS (Cross-Origin Resource Sharing)CORS 문제는, 클라이언트가 다른 도메인(출처)에 있는 리소스를 요청할 때 발생하는 제한이다.SOP 정책 때문에 막혔던 다른 출처로의 요청을 CORS 설정을 거치게 되면 정상적으로 요청을 보낼 수 있게 된다.  동작 원리웹 브라우저는 보안상의 이유로 동일 출처 정책(SOP)을 따른다.동일 출처란 프로토콜, 호스트, 포트가 모두 동일한 경우를 말한다.클라이언트가 다른 출처의 리소스를 요청하면, 브라우저는 이를 차단한다.SOP (Same-Origin Policy) 출처를 판단할 때는 포트 뒤에 요소들은 제외하고 프로토콜, 호스트, 포트가 같을 때 동일한 출처로 판단하게 된다.SOP는 같은 출처끼리만 요청을 보낼 수 있는 것. 웹 브라우저는 보..
[Network] 프록시 서버 프록시 서버란?프록시 서버(Proxy Server)는 클라이언트와 서버 사이에서 중계 역할을 수행하는 서버이다.클라이언트가 직접 서버와 통신하지 않고 프록시 서버를 통해 요청을 보내고 응답을 받는다.이를 통해 보안, 성능, 익명성, 트래픽 제어 등의 이점을 얻는다.프록시는 다양한 형태로 제공되지만 가장 대표적인 리버스 프록시와 포워드 프록시를 알아보자. 리버스 프록시 (Reverse Proxy)리버스 프록시는 서버 측에 위치하여 클라이언트 요청을 받아 적절한 서버로 전달하고, 서버의 응답을 클라이언트로 반환한다.역할 및 특징:클라이언트는 실제 서버를 알 필요 없이 리버스 프록시를 통해 요청(서버의 IP 대신 프록시 IP를 사용).로드밸런싱, 보안(HTTPS 종단), 캐싱, 요청 필터링 등을 사용하여 서버..
[Spring] 예외 처리 방식 글로벌 예외 처리(Global Exception Handling)Spring에서 글로벌 예외 처리(Global Exception Handling)는 애플리케이션 전역에서 발생하는 예외를 한 곳에서 처리할 수 있도록 돕는 중요한 기능이다. 이와 관련하여 @RestControllerAdvice와 @ExceptionHandler는 글로벌 예외 처리의 핵심 요소로 작동하며, 이를 통해 예외 처리 로직을 중앙 집중화하고 코드 중복을 줄일 수 있다. 이를 통해 다음과 같은 이점을 얻을 수 있다. 글로벌 예외 처리는 모든 컨트롤러에서 발생하는 예외를 중앙에서 관리하기 위한 설계 패턴이다. 중복 코드 제거: 모든 컨트롤러에서 중복적으로 작성할 필요 없음.유지보수성 향상: 예외 처리 로직이 한 곳에 모여 있어 수정 및 ..
[Security] 단방향 암호화 / 양방향 암호화 단방향 암호화단방향 암호화는 데이터를 해싱(Hashing) 처리하여 특정한 값으로 변환하며, 변환된 값을 원래 데이터로 복원할 수 없는 방식이다. 이는 데이터의 무결성을 검증하거나 민감 정보를 안전하게 저장할 때 사용된다. 특징복호화 불가능: 입력 데이터를 암호화하면 다시 원본 데이터를 복원할 수 없다.동일한 입력값은 항상 동일한 해시값을 생성.해시값의 길이는 입력 데이터 길이에 상관없이 고정(예: SHA-256은 256비트).주요 용도: 비밀번호 저장, 디지털 서명, 데이터 무결성 검증 등. 대표적인 단방향 암호화 알고리즘SHA-256 MD5 SHA-256 (Secure Hash Algorithm 256-bit)SHA-256은 SHA-2 계열의 암호화 알고리즘 중 하나로, 256비트(32바이트) 길이의..
[CS] 스레드의 종류 하드웨어 스레드, OS 스레드, 네이티브 스레드, 커널 스레드, 유저 스레드, 그린 스레드 등 많은 스레드들이 있다.스레드의 종류와 개념을 정리해보자. 우리가 작성한 프로그램은 컴퓨터 상에서 위와 같이 동작한다. 컴퓨터를 구성하는 하드웨어, 하드웨어를 관리하고 컴퓨터 시스템 전반을 관리하는 OS, 그리고 우리가 개발한 프로그램은 이 운영체제를 통해서 하드웨어를 사용하게 된다.하드웨어 스레드코어의 고민메모리에서 데이터를 기다리는 시간이 꽤 오래걸린다..코어에서 프로그램이 실행될 때에 프로그램은 연산 작업을 위해서 메모리에서 데이터를 읽어오거나,연산 작업의 결과를 메모리에 값을 쓰는 메모리에 접근하는 작업들이 코어에서 실행되는 연산 작업에 비해서 오래 걸린다.데이터를 기다리는 동안에 코어가 아무 일도 안하는..
[Spring] Spring MVC vs Spring WebFlux Spring MVC vs Spring WebFluxSpring MVC와 Spring WebFlux는 Spring Framework에서 웹 애플리케이션을 개발하기 위한 두 가지 주요 프로그래밍 모델이다. 두 모델은 아키텍처와 비동기 처리 방식에서 큰 차이를 보인다.Spring MVCSpring MVC는 전통적인 동기식 프로그래밍 모델로 Servlet API 기반입니다.블로킹 I/O를 사용하여 하나의 요청이 처리되는 동안 쓰레드가 블로킹된다.Thread-Per-Request 모델을 사용한다.  특징동기적 처리 모델블로킹 I/O 기반 (Servlet 3.x 이상)JVM의 기본 스레드 풀을 사용하며, 하나의 요청당 하나의 스레드를 할당합니다.모놀리식 아키텍처에 적합하며, 레거시 시스템과의 통합이 쉽습니다.장점간..
[CS] 동기와 비동기 동기(Synchronous)차례차례 작업을 실행하는 것이다. 예를 들어 아래의 1번 작업이 끝나야 이어서 2번 작업을 실행하는 것이다.작업을 맞춰 실행한다는 말은 요청한 작업에 대해 완료 여부를 따져 순차대로 처리하는 것을 말한다.즉, 동기 프로그래밍이란 여러 작업들을 순차적으로 실행하도록 개발하는 것이다. 특징작업이 순차적으로 실행되며, 다음 작업은 이전 작업이 끝난 후에 실행된다.대기 시간이 발생할 수 있으며, I/O 작업(파일 읽기/쓰기, 네트워크 요청 등) 중에 CPU가 유휴 상태로 대기한다.코드 예시import timedef task1(): print("Task 1 시작") time.sleep(2) # 2초 대기 (동기 작업) print("Task 1 완료")def task2(..
[CS] 인터럽트와 시스템 콜 유저 모드와 커널 모드프로그램이 실행되다가 유저 모드에서 커널 모드로 바뀌고 커널 모드에서 유저 모드로 바뀌기도 한다.간단한 예를 통해서 유저 모드와 커널 모드를 살펴보자. User mode우리가 개발하는 프로그램(작성한 코드)은 일반적으로 유저 모드에서 실행된다.프로그램 실행 중에 인터럽트(interrupt)가 발생하거나 시스템 콜(system call)을 호출하게 되면 커널 모드로 전환Kernel mode나중에 이어서 실행하기 위해 프로그램의 현재 CPU 상태를 저장함커널이 언터럽트나 시스템 콜을 직접 처리즉, CPU에서 커널 코드가 실행됨모든 처리가 완료되면 중단됐던 프로그램의 CPU 상태를 복원CPU 상태를 복원하게 되면 다시 통제권을 프로그램에게 반환커널(kernel)운영체제의 핵심이다.시스템의..
[CS] CPU bound, IO bound CPU프로세스의 명령어를 해석하고 실행하는 장치 IO(input/output)파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고 받는 것입출력 장치와 데이터를 주거나 받는 것 버스트(Burst)어떤 현상이 짧은 시간 안에 집중적으로 일어나는 일 CPU 버스트CPU를 사용하는 구간프로세스가 CPU에서 한번에 연속적으로 실행되는 시간즉, 메모리에 올라와 있는 프로세스가 자신의 차례가 되서 CPU에서 실행됬을 때 자신의 명령어들이 CPU에서 연속적으로 실행되는 시간이다.CPU만 연속적으로 쓰면서 연산을 실행프로세스가 CPU에서 일부 코드를 실행하는 데 소비하는 시간CPU burst는 프로세스의 RUNNING 상태를 처리I/O 버스트I/O를 실행하는 구간프로세스가 IO 작업을 요청하고 결과를 기다리는 시간프로..