CS17 CORS(Cross-Origin Resource Sharing, 교차 출처 자원 공유) 정의- 웹 브라우저에서 다른 출처의 리소스에 대한 접근을 제어하기 위한 보안 메커니즘 - 웹 애플리케이션이 자신이 로드된 도메인과 다른 도메인에서 리소스를 요청할 때 이를 허용하거나 거부하는 방식- CORS는 서버에서 설정하는 것이기 때문에 client에서는 완전히 제어할 수 없음 작동 방식1. 프리플라이트 요청 - client가 실제 요청을 보내기 전에 OPTIONS http method를 사용하여 서버에 Preflight 요청서버는 클라이언트의 출처와 요청 메서드, 헤더를 기반으로 요청을 허용할지를 판단2. 서버 응답 - 서버가 요청을 허용한다면 다음과 같은 응답 헤더를 포함Access-Control-Allow-Origin: 허용된 출처 (예: *는 모든 출처를 허용).Access-Control-Al.. 2024. 10. 23. SSE, Polling, Socket SSE(Server-Sent-Event)정의- 서버에서 클라이언트로의 단방향 통신을 가능하게 하는 웹 기술 (단방향 소켓)- 주로 실시간 업데이트 상황에서 사용 - SSE를 통해 클라이언트는 서버로부터 업데이트된 정보를 받아 화면에 즉시 반영할 수 있음특징단방향 통신: SSE는 서버에서 클라이언트로의 단방향 통신을 지원→ 클라이언트는 서버로부터 데이터를 받을 수만 있고 서버는 클라이언트로부터 데이터를 받을 수 없음이벤트 스트림: 서버는 연결된 클라이언트에게 일련의 이벤트를 스트림으로 전송→ 이벤트는 일반적으로 텍스트 형식으로 이루어져 있고, 클라이언트는 이를 받아서 처리 가능장애 복구: SSE 연결은 HTTP 연결을 기반으로 하며, 이는 HTTP 프로토콜을 따름→ 네트워크 장애 또는 기기 재부팅과 같.. 2024. 4. 26. KVM과 QEMU Hypervisor(하이퍼바이저) - 가상화 기술을 사용하여 여러 개의 OS를 단일한 호스트 시스템에서 동시에 실행할 수 있게 하는 소프트웨어 레이어 Emulation과 Simulation - Emulation = 실제 하드웨어나 소프트웨어의 동작을 모방하여 시스템을 복제한 뒤 VM에서 해당 시스템의 동작을 재현하는 것 - Simulation = 호스트 머신에 존재하는 하드웨어 및 아키텍처를 이용하여 가상머신에 제공하는 것 QEMU(Quick-Emulator) - 다양한 종류의 하드웨어를 소프트웨어로 구현해둔 Hypervisor - Binary Translation을 수행함으로써 호환성 문제 해결 → 다양한 OS를 VM에서 실행할 수 있도록 함 ※ Binary Translation(이진 변환) = 하나의.. 2023. 12. 14. 클러스터(Cluster) 정의 - 여러 컴퓨터 또는 서버가 네트워크를 통해 상호 연결되어 작동하는 컴퓨터 시스템의 집합 - 노드(Node) = 클러스터를 구성하는 각 컴퓨터 또는 서버 장점 웹 기반의 중앙 집중 관리 멀티 마스터 클러스터로 각 노드가 모든 관리 작업을 수행할 수 있음 구성 파일을 데이터베이스 기반 파일 시스템으로 저장하고 Corosync로 모든 노드에 실시간 복제 가능 물리적 호스트 간에 가상 머신과 컨테이너의 손쉬운 마이그레이션 가능 빠른 배포 가능 방화벽 및 HA와 같은 클러스터 전체 서비스를 활용할 수 있음 단점 복잡성과 관리 어려움: 클러스터를 설치하고 유지보수하기 위해서는 고급 기술 및 전문 지식이 필요합니다. 복잡한 환경에서 여러 노드를 관리하고 상호 작용하는 것은 도전적일 수 있습니다. 고가의 하드웨.. 2023. 12. 13. CLI vs REST 비교 CLI(Command Line Interface) REST(Representational State Transfer) 프로토콜 다양한 프로토콜 사용 가능 HTTP 환경 주로 로컬에서 실행하므로 외부 요인 영향 X 네트워크를 통해 통신하여 외부 요인 영향 O 비동기 기본적으로는 동기적 기본(Default) 없이 동기 / 비동기 가능 데이터 크기 주로 작은 사이즈 대량 사이즈 가능 속도 비교 - 로컬에서는 일반적으로 CLI 방식이 빠를 수 있지만 다루는 데이터의 크기와 네트워크 환경에 의해서 REST 방식이 더 빠를 수 있는 가능성이 존재함 2023. 12. 13. Ceph 정의 - 여러 스토리지들을 클러스터로 묶어 하나로 보이게 하는 객체 기반 분산형 스토리지 - Ceph 하나로 Object Storage, Block Storage, File Storage 인터페이스를 모두 제공함 - Ceph 클러스터에 저장된 모든 데이터는 객체(RADOS → 객체 기반)로 표현 RADOS(Reliable Autonomic Distributed Object Store) - Ceph의 데이터 접근에 대해 근간을 이루는 서비스 - 객체 기반으로 설계됨 - Object Storage(LIBRADOS, RGW), Block Storage(RBD), File Storage(Cephfs) 인터페이스를 모두 제공 - 인터페이스의 종류와 상관없이 데이터는 RADOS Object 포맷으로 변환되어 Cep.. 2023. 12. 11. Message Broker MOM(메시지 지향 미들웨어, Message Oriented Middleware) - 어플리케이션들의 메시지를 중간에서 관리해주는 시스템 장점 - 여러 클라이언트 시스템간에 메시지 통신을 중간에서 관리 => 클라이언트 시스템 간의 종속성 및 결속성 ↓ - 수신자의 주소를 몰라도 송신 가능 - 백업 지원 => 안정성 ↑ - 라우팅 규칙을 활용하여 하나의 메시지로도 여러 클라이언트가 받을 수 있도록 해줌 ※ 메시지(Message) = 다양한 형태와 형식을 가질 수 있는 데이터 단점 - 메시지 전체를 관리하는 시스템이 따로 필요 - 시스템 구조가 복잡해지고 이에 대한 오버헤드 발생 가능성 존재 메시지 큐(Message Queue) - 분산 시스템에서 비동기 메시지를 저장하고 전달하는 컴퓨팅 컴포넌트 중 하나 .. 2023. 9. 20. HTTP 정의 - HyperText Transfer Protocol의 약자로 웹 상에서 Server와 Client 간의 데이터 전송을 위한 프로토콜 - TCP/IP 기반 프로토콜 - Request/Response 구조로 구성 (Client: HTTP Requset Server: HTTP Response) HTTP Request - Request Line, Header, Empty Line, Message Body로 구성 Request Line [HTTP Method] [Request target] [HTTP version] - HTTP 메소드, 전송 목표 주소, HTTP 버전으로 구성 ex) POST /test.html HTTP/1.1 Header - Request에 대한 추가 정보를 담고 있는 부분 ※ 주요 파.. 2023. 9. 10. RSA RSA - 공개키 암호 알고리즘 중 하나로 세계적인 공개키 암호 알고리즘 표준 - RSA라는 명칭은 해당 알고리즘을 발명한 3인의 이름 앞글자를 딴 것에서 유래 - 암호화 뿐만 아니라 전자서명(인증)도 가능 - 공개키(Public Key)와 개인키(Private Key)로 구성 (비대칭키) - 공개키 = 다수에게 공유, 개인키 = 개인만이 유일하게 소유 ※ 대칭키/비대칭키 = 암호화하는 키와 복호화하는 키가 같은/다른 경우 암호화 방식 - 공개키로 암호화&개인키로 복호화하는 경우(데이터 암호화)와 개인키로 암호화&공개키로 복호화하는 경우(송신 주체 인증)가 존재 ex) A => B로 데이터를 전송하려는 경우 1. A와 B가 서로의 공개키 공유 2. A가 B에게 받은 공개키(B)로 보내고자 하는 데이터를 .. 2023. 5. 3. Client 인증 방식 (Cookie, Session, JWT) Cookie 인증 - 쿠키(Cookie) = 서버에서 클라이언트에 저장하는 문자열 데이터 인증 과정 1. 클라이언트가 서버에 요청 전송 2. 요청을 받은 서버가 클라이언트에 저장하고 싶은 데이터를 Response Header의 Set-Cookie에 담아 전송 3. 클라이언트는 전송받았던 쿠키를 서버에 Request Header를 전송할 때마다 Request Header의 Cookie에 담아 전송 4. 서버는 Requset Header에 담긴 Cookie에 대한 정보를 참조하여 인증 수행 특징 - [key1=value1; key2=value2; ...] 형식 - 편의성&재사용성 제공 => ex) 로그인 여러 번 할 필요 X - 보안성 취약 - 브라우저 간 공유 불가능 - 용량 제한 (도메인 당 20개, 한.. 2023. 5. 2. 동기화 동기화(Synchronization) - 프로세스/스레드들이 실행되는 시점을 조절하여 서로가 알고 있는 데이터를 일치시킴으로써 공유 자원의 일관성을 유지하는 것 - 실행 순서 제어를 위한 동기화 = 프로세스/스레드를 올바른 순서대로 실행하게 하는 것 - 상호 배제를 위한 동기화 = 동시에 접근하면 안되는 자원에 접근할 때 한 개의 프로세스/스레드만 접근하도록 하는 것 임계 구역(Critical Section) - 동시에 실행하면 문제가 발생하는 공유 자원에 접근하는 코드 영역 - 임계 구역에 진입한 프로세스/스레드가 있다면 다른 프로세스/스레드는 임계 구역 밖에서 대기해야 함 - 레이스 컨디션(Race Condition) = 잘못된 실행으로 인하여 여러 프로세스/스레드가 동시에 임계 구역에 접근하는 상황.. 2023. 1. 23. CPU 스케줄링 정의 - OS가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것 => 우선순위가 높은 프로세스를 빨리 처리해야 효율적 (우선순위는 PCB에 명시됨) 프로세스 종류 - CPU 집중 프로세스 = CPU 버스트가 많은 프로세스 (CPU를 많이 사용해야하는 프로세스) ※ CPU 버스트 = CPU를 이용하는 작업 - 입출력(I/O) 집중 프로세스 = 입출력 버스트가 많은 프로세스 ※ 입출력(I/O) 버스트 = 입출력장치를 기다리는 작업 => 입출력 집중 프로세스의 우선순위가 CPU 집중 프로세스의 우선순위 보다 높음 스케줄링 큐 - 실행될 프로세스들이 여러 개가 있으면 큐에 삽입되고 그 중에서 하나만 우선 실행되고 나머지는 CPU가 자유로워질 때까지 큐에서 대기하는 방식 (일반적으로 선입선출(FIFO.. 2023. 1. 16. 스레드 스레드(Thread) - 프로세스를 구성하는 실행 흐름의 단위 - 하나의 프로세스는 하나 이상의 스레드를 가질 수 있음 - 단일 스레드 프로세스, 멀티 스레드 프로세스가 존재 - 멀티 스레드 프로세스에서 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하여 실행됨 구성 요소 - 스레드 ID - 레지스터 값 (프로그램 카운터 포함) - 스택 멀티 프로세스와 멀티 스레드 - 멀티 프로세스 = 동일한 작업을 수행하는 단일 스레드 프로세스를 여러 개 실행하는 것 - 멀티 스레드 = 하나의 프로세스를 여러 스레드로 실행하는 것 차이점 멀티 프로세스 멀티 스레드 프로세스끼리는 기본적으로 자원을 공유 X => 서로 독립적으로 실행 스레드끼리는 같은 프로세스 내의 자원을 공유 => 협력과 통신.. 2023. 1. 4. 프로세스 프로세스(Process) - 메모리 상에서 실행 중인 프로그램 - 프로그램은 실행되기 전까지는 그저 보조기억장치에 저장되는 데이터 덩어리지만 프로그램을 메모리에 적재하고 실행하는 순간 프로그램은 프로세스가 됨 - 프로세스들은 차례대로 돌아가며 정해진 시간만큼 CPU를 이용하고 시간이 종료됐음을 알리는 타이머 인터럽트가 발생하면 차례를 양보하고 다음 순서를 기다림 종류 - 포그라운드 프로세스(Foreground Process) = 사용자가 볼 수 있는 공간에서 실행되는 프로세스 => 앱 - 백그라운드 프로세스(Background Process) = 사용자가 보지 못하는 뒤편에서 실행되는 프로세스 - 데몬(Daemon), 서비스(Service) = 사용자와 상호작용하지 않고 정해진 일만 수행하는 백그라운드 .. 2023. 1. 2. 운영체제의 정의 운영체제(OS, Operating System) - 실행할 프로그램에 필요한 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램 - 응용 프로그램과 하드웨어 사이에서 하드웨어를 조작하여 응용 프로그램에 필요한 자원을 할당하고 응용 프로그램이 올바르게 실행되도록 관리하는 소프트웨어 => OS가 없다면 하드웨어를 조작하는 코드를 개발자가 직접 작성해야 함 - 응용 프로그램 (Application Program) = 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램 - 메모리 관리 = OS는 실행할 프로그램을 메모리에 적재하고 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리 - CPU 스케줄링 = 최대한 공정하게 여러 프로그램에 CPU 자원 할당 (우선순.. 2023. 1. 2. 이전 1 2 다음