CS

    URL의 구성 요소와 웹 통신 과정

    1. URL이란? URL은 Uniform Resource Locator의 약자로 인터넷에 존재하는 리소스의 위치를 나타내는 주소이다. 자원을 식별하기 위해 사용하는 URI는 URL를 포함하는 더 넓은 개념이다. 2. 구성 요소 프로토콜(Protocol) 스키마(Scheme)라고도 하며, 사용하는 프로토콜의 이름이다. URL에서 사용되는 프로토콜의 유형을 지정하는 역할로 주로 http, https, ftp 등이 사용된다. 서브 도메인(Subdomain) 도메인의 하위 요소로 웹 사이트의 기능을 구분하거나 특정 서비스를 나타내기 위해 사용된다. 예를 들어, 'blog.naver.com', 'webtoon.naver.com' 처럼 도메인 내에서 다른 서비스에 접근할 수 있다. 2차 수준 도메인(Second-L..

    HTTP 버전별 특징 정리

    HTTP 0.9 (1991년) HTTP의 초기 버전 요청 메시지가 단일 라인으로 구성되고 GET 메서드만 사용 가능 요청 및 응답 헤더가 없고 HTML 문서만 전송 가능 응답 메시지에 상태 코드가 없고 문서 파일 자체만 전송 HTTP 1.0 (1996년) GET, POST, HEAD 메서드 사용 가능 메타데이터를 나타내는 헤더가 메시지에 추가됨. Content-Type 헤더를 사용해서 HTML외에 다른 형식의 데이터도 전송 가능 요청 메시지에 프로토콜 버전과 메서드를 포함 응답에 상태 코드가 추가됨. 요청을 보낼 때 마다 매번 TCP 연결을 새로 설정해야하는 단점 존재 HTTP 1.1 (1997년) Keep-Alive 기능을 통해 일정 시간 또는 횟수 동안 연결을 닫지않고 유지 Persistent Con..

    HTTP 메시지와 구성 요소

    1. HTTP 메시지 1) 개요 HTTP는 서버-클라이언트 구조로, 클라이언트가 요청하고 서버가 응답하는 단방향 통신이다. 이때 각 호스트가 보내는 데이터는 HTTP 메시지 구조를 가진다. HTTP 메시지는 요청 메시지와 응답 메시지로 나뉘고 크게 라인, 헤더, 바디로 구성된다. 2) 요청 메시지 클라이언트가 서버에게 전송하는 데이터 라인(Line) HTTP 메서드 요청할 리소스의 경로 또는 이름 (URI) 프로토콜 버전 헤더(Header) 요청 메시지의 메타데이터를 포함하는 부분 미디어 타입, 요청 호스트 정보 등 요청에 대한 부가적인 정보를 나타낸다. Host, User-Agent, Accept, Content-Type 등이 있다. Host와 User-Agent는 각각 요청 호스트 IP와 클라이언트 ..

    HTTP vs HTTPS (feat. 대칭키, 공개키)

    1. HTTP란? 1) 개요 HTTP(HyperText Transfer Protocol)는 두 네트워크 장치 간 하이퍼텍스트 전송을 위한 프로토콜이다. 주로 웹 브라우저와 서버가 웹 페이지(HTML) 문서를 주고 받을때 사용된다. HTML (HyperText Markup Language) 태그를 사용해 하이퍼텍스트로 이루어진 문서 또는 데이터를 구조화한 형식 응용 계층 프로토콜로서 TCP/IP를 사용하며 80번 포트를 사용한다. 전송 과정에서 평문으로된 데이터가 제3자에게 노출될 수 있어 보안에 취약하다. 2) 특징 A. 서버-클라이언트 구조 클라이언트가 요청하면 서버가 응답하는 단방향 통신이다. 서버가 먼저 클라이언트에게 요청 메시지를 보낼 수 없다. B. 무상태성 (Stateless) 서버는 클라이언..

    TCP vs UDP

    1. 개요 TCP와 UDP는 OSI(또는 TCP/IP) 모델의 전송(Transport) 계층에 속하는 프로토콜로서, 전송할 데이터를 패킷 단위로 나누고 IP를 이용해 데이터를 전송한다. 전송 계층은 네트워크 통신의 신뢰성을 보장하기 위한 역할을 수행하며 통신을 제어하고 관리한다. 패킷(Packet) 효율적인 전송을 위해 데이터를 작은 조각으로 나눈 단위를 의미한다. 데이터를 패킷 단위로 나누어 전송하면 일부가 유실되더라도 재전송할 수 있어서 신뢰성을 보장할 수 있고, 대용량 데이터를 전송할 때 작게 나누어 전송하므로 전송 속도를 높일 수 있다. 네트워크 계층의 PDU인 패킷(IP 패킷)과는 다른 의미이다. 2. TCP (Transmission Control Protocol) 1) 개요 TCP는 네트워크 ..

    OSI 7계층에 대하여

    1. 개요 1) 개념 OSI(Open Systems Interconnection) 7계층은 네트워크 프로토콜과 통신 과정을 7개의 계층(Layer)으로 구성한 ISO 표준 참조 모델이다. 2) 등장배경 네트워크는 여러 장치들이 통신을 위해 연결돼있는 집단을 말하는데, 장치 간 원거리 통신의 필요성이 대두되어 네트워크가 발달하게 됐다. 서로 다른 네트워크가 계속 생겨나면서 각 네트워크를 연결할 필요성이 생겼다. 네트워크를 연결하기 위해서는 시스템이 다른 장치 사이의 호환성 문제를 해결해야 했다. 이런 호환성 이슈를 해결하기 위해 ISO에서 제시한 표준화된 참조 모델이 OSI 모형이다. 3) 필요성 이 표준 모델을 참조해서 네트워크 장치를 만들면 앞서 말한 호환성 이슈를 해결할 뿐 아니라, 통신 과정을 한 ..

    데드락(Deadlock)에 대하여

    1. 개요 데드락은 교착상태라는 뜻으로, 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 사용하기 위해 서로 대기하면서 빠지는 무한 대기 상태를 말한다. 2. 발생 조건 아래 4가지 조건을 모두 만족해야 데드락이 발생한다. 1) 상호 배제 서로의 경쟁자를 없앤다는 뜻으로, 자원을 점유하는 프로세스는 한 번에 하나만 존재해야 한다. 즉, 둘 이상의 프로세스가 하나의 자원을 동시에 점유할 수 없어야 한다. 사용 중인 자원을 다른 프로세스가 사용하려면 자원이 해제될 때 까지 기다려야 한다. 2) 점유 대기 하나 이상의 자원을 점유하고, 다른 프로세스가 사용 중인 자원을 점유하기 위해 대기하고 있는 프로세스가 존재해야 한다. 3) 비선점 자원을 선점할 수 없어야 한다. 즉, 다른 프로세스에게 할당된 ..

    동기/비동기와 블록킹/논블록킹에 대하여

    1. 동기와 비동기 동기와 비동기는 작업(프로세스)의 수행 순서에 관한 개념으로, 처리해야할 작업들의 순서를 보장하는지 아닌지에 대한 관심사이다. 작업의 순서를 보장하기 위해서는 작업의 완료 여부가 중요하다. 작업이 완료된 후 바로 다음 순서의 작업을 수행해야 하기 때문이다. 만약 작업의 순서가 보장되어야 한다면 선행 작업이 완료될 때 까지 그 결과를 기다릴 것이고, 그렇지 않다면 기다리지 않고 각자의 작업을 수행한다. 즉, 동기/비동기는 특정 작업이 다른 작업의 완료를 신경쓰는지 여부에 대한 관심사이다. 1) 동기 (Synchronous) 동기라는 단어의 뜻은 동시에 일어난다는 뜻으로, 요청과 동시에 결과가 주어진다는 약속이다. 즉, 요청을 하면 시간이 얼마가 걸리던지 결과가 바로 주어져야 한다. (결..

    프로세스와 스레드에 대하여

    1. 프로세스(Process) 1) 프로세스란? 프로세스는 운영체제로부터 자원을 할당받아 실행중인 프로그램을 의미한다. 디스크에 저장된 프로그램을 실행하면 메모리가 할당되고 바이너리 코드가 메모리에 올라가게 된다. 이때, 메모리에 올라간(로드된) 프로그램의 인스턴스를 프로세스라고 부른다. 프로세스는 운영체제의 스케줄러가 관리하는 작업(task)의 단위로 사용되기도 한다. 스케줄러(Scheduler) 스케줄링 알고리즘에 따라 자원을 사용할 프로세스를 결정하는 운영체제의 모듈 2) 메모리 구조 프로세스가 할당받은 메모리는 4가지 영역으로 구성된다. Code 프로그램의 코드와 명령어가 기계어 형태로 저장되는 영역이다. CPU는 이 영역에 저장된 명령어를 순차적으로 가져와서 처리한다. 컴파일 시점에 메모리 크기..

    아키텍처 패턴에 대하여 (MVC, MVP, MVVM)

    1. 개요 아키텍처는 시스템을 구성하는 요소와 요소들 사이의 관계, 각 요소의 책임과 역할을 설정해서 소프트웨어를 구조화한 것을 의미하며, 소프트웨어의 뼈대(청사진) 역할을 한다. 아키텍처 패턴이란 소프트웨어의 아키텍처에서 발생하는 공통적인 문제들을 해결하기 위한 일반적이고 검증된 아키텍처를 형식화(패턴화)한 것을 의미한다. 디자인 패턴 vs 아키텍처 패턴 디자인 패턴은 소프트웨어 설계(디자인)에서 발생하는 공통적인 문제를 해결하기 위해 설계 방식을 형식화(패턴화) 한 것을 의미한다. 두 개념 모두 공통적이고 일반적인 문제에 대한 솔루션을 제공한다는 점에서 유사하다. 그러나 아키텍처 패턴은 추상적인(고수준, High-Level) 의미에서 구조와 뼈대를 다루지만 디자인 패턴은 코드 수준(비교적 저수준)의 ..