ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 7주차 개념노트
    메가테라 2022. 10. 2. 23:10

    Server와 Client

    client는 서버에게 리소스를 요청하고,
    server는 요청받은 리소스를 client에게 전달한다.
    서버는 요청을 받은 경우에만 클라이언트에게 리소스를 제공한다.

    Web application server

    웹 애플리케이션 서버는 프로그램의 실행환경을 제공하거나 데이터베이스에 대한 연결 기능을 제공하는 역할 등을 한다.
    즉, 동적 사이트를 전문적으로 처리해주는 역할을 한다.
    웹 시스템은 보통 웹 서버, 웹 애플리케이션 서버, 데이터베이스 서버로 구성되어 있는데,
    웹 애플리케이션 서버는 웹브라우저에서 받은 요청을 처리하는 웹 서버와 데이터를 저장하는 데이터베이스 사이를 이어주는 역할을 한다.
    웹 애플리케이션 서버는 Java애플리케이션 서버와 .NET애플리케이션 서버로 크게 나뉜다.
    웹 서버와 웹 애플리케이션 서버는 한 대의 물리 서버나 가상 머신에서 돌리는 경우도 있다.

    Http Server

    HTTP나 HTTPS 프로토콜로 리소스를 제공해주는 서버를 의미한다.
    웹 서버라고 봐도 된다.

    HTTP

    HTTP는 HTML 문서 등을 전송하는 어플리케이션 계층의 프로토콜(규약)이다.
    웹 서버와 웹 브라우저 사이의 소통을 위해 만들어졌지만, 다른 용도로도 사용할 수 있다.

    FTP

    file transfer protocol의 약어로, 파일을 전송하는 규약에 해당한다.
    FTP서버는 FTP를 이용해서 파일을 효율적으로 전송한다.

    패키지(Package)

    관심사가 비슷한 클래스들의 묶음이다.
    패키지를 이용해서 응집도를 높일 수 있다.
    물리적으로는 디렉토리에 해당한다.

    URL 과 URI

    URI는 URL을 포함하는 더 큰 개념이다.
    URI는 리소스를 구조와 함께 나타낸 식별자이다.
    위치 정보로 컴퓨터가 자원을 가져올 수 있다면 URL에 해당한다.
    웹 주소도 URL에 해당한다.

    https://www.charlezz.com/?p=44767

    프로토콜(protocol)

    통신할 때의 규칙에 해당한다.
    택배를 보낼 때 주소를 작성하는 규칙이 있듯이
    데이터를 전송하고 받을 때도 일정한 규칙에 따라 전송해야 하는데, 그 규칙을 프로토콜이라고 한다.
    전송하려는 데이터에 따라 적절한 프로토콜을 이용해 전송해야 한다.
    어플리케이션 계층에는 DHCP, DNS, FTP, HTTP, HTTPS, POP, SSH등의 프로토콜이 존재하고,
    트랜스포트 계층에 TCP, UDP등이, 네트워크 계층에 IP 등이, 링크 계층에 MAC등이 존재한다.

    호스트(host)

    호스트는 네트워크에 연결된 장치나 컴퓨터이다.
    모든 서버는 호스트에 해당한다.
    클라이언트의 요청을 받는 호스트가 서버에 해당한다.

    http://www.codns.com/b/B05-195

    포트(port)

    어플리케이션 계층에서 프로그램들을 구분해주는 데 사용된다.
    네트워크나 인터넷으로 통신하는 응용 프로그램이나 프로세스를 구분해준다.
    HTTP는 기본 포트가 80이고, 80인 경우 생략할 수 있다.
    80포트가 이미 사용 중인 경우 웹 서버를 위해 8080포트를 관습적으로 사용한다.

    path(경로)

    특정 리소스까지의 경로를 말한다.
    상대 경로와 절대 경로가 있다.
    상대 경로는 현재 위치를 기준으로 목적지까지의 경로이고,
    절대 경로는 최상위(root)부터 목적지까지의 경로에 해당한다.
    상대 경로는 현재 위치에 따라 달라질 수 있지만 절대 경로는 바뀌지 않는다.

    HTTP Exchange

    자바 클래스로, HTTP 요청과 응답을 한 개의 exchange로 캡슐화한다.
    request를 확인하거나 response를 보낼 때 사용할 수 있다.

    HTTP Request, Response (Header, Body)

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages

    HTTP request는 메소드, URI, 프로토콜 버전, 헤더 필드와 엔티티로 구성된다.
    HTTP response는 HTTP 버전, 상태 코드, 헤더 필드와 바디로 구성된다.
    헤더 필드에는 응답에 대한 정보들이 들어 있고,
    body에 실제 요청된 데이터가 들어 있다.
    body에는 값이 없을 수도 있다.

    HTTP 응답 코드 (HTTP Status Code)

    5가지 상태 코드 클래스가 있다.
    1XX는 Informational 클래스로 요청을 처리 중이라는 의미이다.
    2XX는 Success클래스로, 정상적으로 처리가 되었다는 뜻이다.
    3XX는 Redirection클래스로, 리디렉션 되었다는 뜻이다.
    4XX는 Client Error클래스로, 클라이언트 쪽에서 문제가 있는 경우에 해당한다.
    5XX는 Server Error클래스로, 서버에서 요청을 처리하지 못한 경우에 해당한다.
    각 코드마다 자세히 알아보면

    - 100 (Continue)
    클라이언트가 요청을 지속하거나 응답을 무시해야된다는 뜻이다.
    - 101 (Switching Protocols)
    Upgrade request header에 대한 응답 코드이다.
    - 102 (Processing)
    서버가 요청을 처리 중이라는 의미이다.

    - 200 (OK)
    요청이 성공적이었다는 의미이다.
    GET메소드인 경우 리소스가 받아와졌다는 의미이고,
    HEAD메소드인 경우 바디 없이 헤더가 잘 받아와졌다는 의미이고,
    PUT이나 POST의 경우 리소스가 잘 전달 되었다는 의미이다.
    - 201 (Created)
    request가 성공했고, 새로운 리소스가 생겼다는 의미이다.
    - 204 (No Content)
    request가 성공했고, 응답에 컨텐츠가 없는 경우에 해당한다.
    - 206 (Partial Content)
    Range header로 리소스의 일부가 요청됐을 때 성공한 경우에 해당한다.

    - 301 (Moved Permanently)
    요청된 URL이 영구적으로 수정된 경우에 해당한다. 응답에 새로운 URL도 주어진다.
    - 302 (Found)
    일시적으로 요청된 URL이 수정된 경우에 해당한다.
    - 303 (See other)
    다른 URI에 GET 요청을 하라는 의미이다.
    - 304 (Not Modified)
    캐시를 위해 사용된다.
    만약 304 응답이 오면 캐시된 버전을 사용하면 된다는 의미이다.

    - 400 (Bad Request)
    요청문이 잘못되었다는 뜻이므로 요청 내용을 다시 확인해 볼 필요가 있다.
    - 401 (Unauthorized)
    인증이 필요하다는 의미이다.
    - 403 (Forbidden)
    리소스 액세스가 거부된 것을 의미한다.
    퍼미션이나 액세스 권한 등과 관련이 있는 경우에 해당한다.
    - 404 (Not Found)
    요청한 리소스가 서버에 없는 경우에 해당한다.

    -500 (Internal Server Error)
    서버에서 처리를 하는 중 에러가 발생한 경우에 해당한다.
    - 503 (Service Unavailable)
    서버가 과부하 상태이거나 점검 중인 경우에 해당한다.

    추상 메서드

    구현부가 없는 메소드로,
    추상 메서드가 있는 클래스는 추상 클래스나 인터페이스에 해당한다.
    추상 메서드를 구현해야만 인스턴스를 생성할 수 있다.

    template method pattern

    디자인 패턴의 일종이다.
    어떤 같은 방식으로 처리되어야 하는 작업의 세부 방식을 다양화하고 싶을 때 사용한다.
    세부 방식을 각각의 자식 클래스에서 오버라이딩 하는 방식으로 구현하는데,
    부모 클래스에 전반적인 과정을 수행하는 메소드가 있고,
    그 메소드 안에 세부 메소드들이 있는데,
    자식 클래스에서는 그 세부 메소드를 오버라이딩해서 다양하게 구현할 수 있게 된다.

    https://designpatternsinjava.wordpress.com/2013/10/07/template-method-pattern/

    HTTP request methods

    GET: 리소스를 받을 때 사용한다.
    POST: 엔티티를 전송하기 위해 사용한다.
    PUT: 파일을 전송하기 위해 사용한다.
    PATCH: 리소스의 일부를 수정하기 위해 사용한다.
    HEAD: 메시지 헤더를 얻기 위해 사용한다.
    DELETE: 파일을 삭제하기 위해 사용한다.
    OPTIONS: 리소스가 제공하는 메소드를 조사하기 위해 사용한다.

    삼항연산자

    항이 세개인 연산자로, 조건문을 간단하게 표현할 수 있다.
    조건 ? true일 때 작동하고 싶은 코드 : false일 때 작동하고 싶은 코드
    와 같이 사용할 수 있다.
    if문이 더 간결한 경우 if문을 쓰는 것이 더 좋다.

    Service, Repository, Model

    계층화를 해두어 변화에 영향을 최소화하기 위해 Service, Repository, Model의 계층을 나눈다.
    Model은 핵심 비즈니스 로직을 다룬다.
    Controller는 사용자의 요청을 받는 부분이다.
    Service는 모델을 사용해서 Controller와 Repository사이에서 비즈니스 로직을 전반적으로 처리해주는 역할을 한다.
    Repository는 데이터 리소스가 어디서 오는지를 알 필요가 없도록 추상화해주는 역할을 한다.

    https://www.youtube.com/watch?v=4Pvd0KrTfvE

    Collection

    컬렉션 프레임 워크는 자료구조 및 알고리즘을 구현해 둔 라이브러리다.
    대표적으로 Set, List, Queue, Map 인터페이스들이 있다.
    데이터를 저장, 참조, 삭제하는 방법을 표현 해 둔 이름들이다.

    Stream API

    람다식을 이용해서 선언형으로 컬렉션 데이터를 처리하게 해주는 API이다.
    스트림을 통해 우리가 원하는 데이터를 추출하고, 적용하고, 계산하고, 출력하는 것을 쉽게 할 수 있다.
    스트림은 자료형에 관계없이 동일한 연산을 하고,
    한 번 생성하고 사용한 스트림은 다시 사용할 수 없다.
    그리고 기존 값을 변경하지 않고, 중간 연산과 최종 연산이 있는데,
    최종 연산이 호출될 때 중간 연산도 적용이 된다.

    Map

    Iterable Interface를 구현하지 않는다.
    따라서 Map을 대상으로 iterator를 얻을 수 없다.
    Map은 key-value구조로 값을 저장한다.
    key는 value를 참조할 수 있는 정보이다.
    key를 통해 value를 쉽게 찾을 수 있다.
    key는 중복되면 안되지만 value는 중복될 수 있다.

    HashMap

    Map을 구현하는 클래스인데, Hash를 이용해 데이터를 빨리 찾을 수 있게 된다.
    HashMap<key 타입, value 타입> 자료형으로 선언한다.

    Optional

    Optional<T>는 null이 올 수 있는 자료형이다.
    값이 있는 경우 isPresent()메소드가 true를 반환하고,
    get()으로 값을 가져올 수 있다.
    orElse(default value) 메소드로 값이 없을 때의 디폴트 값을 지정해 줄 수도 있다.

    의존성 주입 (Dependency Injection)

    다른 객체가 변했을 때 해당 객체가 영향을 받는 경우에 해당 객체가 다른 객체에 의존하고 있다고 볼 수 있다.
    A가 Bdp 의존한다는 말은 A가 B를 사용한다라는 말로 이해할 수 있다.
    의존성 주입은 객체 간 결합도를 낮추는 역할을 할 수 있다.

    깊은복사와 얕은복사

    깊은 복사는 모든 값을 그대로 새로운 메모리 공간에 복사하는 것을 의미한다.
    얕은 복사는 객체를 가지고 있을 때 객체가 참조하고 있는 주소 값만 복사한다.
    따라서 복사한 객체를 변경했을 때 기존 객체도 같은 주소 값을 보고 있기 때문에 변경된다.

    https://techvidvan.com/tutorials/python-deep-shallow-copy/

    Hypertext Transfer Protocol (HTTP)

    HTTP는 기본적으로 HTML을 전송하기 위한 프로토콜이다.
    웹 서버와 웹 브라우저는 HTTP를 통해 통신한다.
    클라이언트가 요청을 하면 응답을 받을 때까지 기다린다.

    인터넷

    인터넷은 전 세계에서 데이터 통신 서비스를 이용할 수 있게 해주는 컴퓨터 네트워크 시스템이다.

    OSI 7 계층

    OSI 7계층은 네트워크 시스템에 대한 모델의 한 종류이다.
    7계층으로 나뉘어 있고,
    응용계층은 사용자와 가장 가까운 프로토콜이 정의되어 있다.
    사용자는 응용 계층을 통해 데이터 송수신을 하게되고,
    이 요청이 하위 계층으로 순차적으로 전달되어 매 계층마다 캡슐화되고,
    제일 하위 계층인 물리 계층에서 캡슐화된 데이터가 목적지에 전송되어 하나씩 캡슐이 벗겨지면서 상위 계층으로 전달되어 전송이 마무리된다.

    https://goodgid.github.io/OSI-7-Layer/

    HTTP는 대표적인 응용계층의 프로토콜이다.
    응용계층에서 전송된 데이터는 프레젠테이션 계층에서 변환, 압축, 암호화가 진행된다.
    세션 계층은 세션을 열고 닫는 기능을 제공해준다.
    트랜스포트 계층을 거치면서 데이터에 프로세스의 포트 번호가 붙는다.
    트랜스포트 계층은 운영체제의 커널에 구현되어 있다.
    네트워크 레이어를 거치면서 목적지의 ip주소가 데이터에 붙게 된다.
    네트워크 레이어도 운영체제의 커널에 구현되어 있다.
    데이터링크 레이어를 거치면 MAC주소가 데이터에 붙게 된다.
    랜카드에 구현되어 있다.
    물리 계층은 0과 1의 디지털 신호를 물리적 신호로 바꾸어 전선으로 흘려보낸다.
    하드웨어적으로 구현되어 있다.
    받는 쪽에서는 하위 계층부터 하나씩 캡슐을 없애면서 데이터를 받게 된다.

    TCP/IP

    TCP/IP는 네트워크 시스템에 대한 모델의 한 종류이고, 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합이다.
    TCP/IP는 4개의 계층으로 이뤄져있었는데, 현재는 5계층으로 이뤄져있다.

    https://www.ibm.com/docs/ko/aix/7.1?topic=protocol-tcpip-protocols

    데이터를 전송할 때 상위 계층에서부터 하위 계층으로 캡슐화 처리를 하면서 전송용 데이터가 만들어진다.
    애플리케이션이 만든 데이터를 전송 계층에 전달하면 전송 계층이 받은 데이터를 TCP나 UDP캡슐에 넣어 네트워크 계층으로 전달하고,
    네트워크 계층은 받은 데이터를 IP캡슐에 넣어 데이터링크 계층으로 전달하고,
    데이터링크 계층은 받은 패킷을 이더넷 캡슐에 넣어 물리 계층으로 전달하고,
    물리 계층은 받은 데이터를 신호로 보내기 좋은 비트로 변환해서 전송하고,
    데이터를 받는 쪽에서는 하위 계층에서 부터 캡슐을 해제해 나가면서 데이터를 전송 받게 된다.

    클라이언트(Client)

    server에게 HTTP요청을 해서 리소스를 받는 프로그램이다.
    웹 브라우저가 대표적인 클라이언트에 해당한다.

    웹 서버 (Web Server)

    client에게 HTTP 요청을 받아서 리소스를 제공해주는 프로그램이다.
    웹서버는 웹사이트의 컴포넌트 파일들 (HTML문서, 사진, CSS 파일, JS파일 등)을 가지고 있어서 제공해줄 수 있다.
    정적 웹 서버는 HTTP서버가 있는 컴퓨터로 구성되어 있고, 매번 같은 파일을 브라우저에게 전송한다.
    동적 웹 서버는 정적 웹 서버와 추가적인 소프트웨어 (어플리케이션 서버와 데이터베이스 등) 으로 이뤄져있다.
    애플리케이션 서버가 데이터베이스를 바탕으로 파일들을 업데이트해서 브라우저에 전송해준다.
    Apache와 Nginx가 대표적인 웹 서버다.

    프록시 (Proxy)

    프록시는 대리라는 의미이다.
    프록시 서버는 클라이언트의 인터넷에 대한 통신을 대리로 수행하는 서버이다.
    프록시 서버는 클라이언트의 통신을 받아서 클라이언트를 대신하여 인터넷에 접속한다.
    캐시 서버라고도 부르기도 한다.
    프록시 서버를 이용하면 인터넷에 대한 통신을 프록시 서버로 일원적으로 관리할 수 있기 때문에 기업에서 주로 도입한다.
    프록시 서버는 URL 필터링, 안티 바이러스와 같은 보안 기능을 수행할 수도 있다.

    HTTP의 특징

    HTTP는 상태가 없다.
    상태가 없기 때문에 로그인 상태를 유지하고 싶은 경우 쿠키 등을 이용해서 상태를 계속 관리할 수 있다.

    HTTP cookie

    쿠키는 사이트를 방문할 때 브라우저에 저장되는 내용이다.
    쿠키는 stateless인 HTTP에서 상태를 유지하고 싶을 때 사용한다.
    서버가 웹 브라우저에 쿠키를 전송해주고, 브라우저는 서버에게 요청을 할 때 쿠키와 함께 요청해서
    서버가 쿠키를 바탕으로 사용자를 판단할 수 있게 된다.
    지워지거나 변조되어도 큰 문제가 없는 자동완성 등에 쿠키가 사용된다.

    HTTP session

    쿠키는 마음대로 수정할 수 있기 때문에 쿠키에서 관리하고 곤란한 정보들은 세션이 관리해준다.
    세션을 사용하는 사이트에 접속하면 서버에서 사용자를 구분하기 위한 기한이 짧은 임시키를 쿠키로 브라우저에 보낸다.
    서버에서는 사용자나 다른 누군가에게 노출되어서는 안 되고 서비스 제공자가 직접 관리해야 하는 정보들인 로그인 정보 등을 세션으로 관리한다.

    캐시

    가져오는데 비용이 드는 데이터를 임시로 저장해둔 것을 의미한다.

    요청(HTTP Request)과 응답(HTTP Response)

    클라이언트가 HTTP request를 서버에 보내면 서버가 HTTP response를 한다.
    클라이언트에서부터 통신이 시작되고, 서버는 요청 없이 응답하지 않는다.

    HTTPS

    HTTP를 SSL로 암호화한 HTTP보다 안전한 프로토콜이다.
    내가 어떤 웹사이트에 보내는 정보를 훔쳐보지 못하게 해주고,
    내가 보내는 데이터의 변조를 막고,
    접속한 사이트가 신뢰할 수 있는 사이트인지 판별해주는 기능을 제공한다.
    비대칭키와 공통키 방식을 함께 사용한다.

    REST(Representational state transfer)

    HTTP요청을 보낼 때 URI를 어떻게 작성할 지 어떤 메소드를 사용할 지에 대한 소프트웨어 아키텍처 스타일 중 하나이다.
    정보들을 주고 받는 데 있어서 널리 쓰이는 형식이다.
    각 요청이 어떤 동작이나 정보를 위한 것인지를 요청 자체로 쉽게 파악이 가능하다는 특징이 있다.
    GET, POST, DELETE, PUT, PATCH를 각 목적에 맞게 사용한다.
    GET은 데이터를 조회할 때 사용하고,
    POST는 새로운 데이터를 추가할 때 사용하고,
    DELETE는 데이터 삭제,
    PUT은 데이터를 통째로 수정할 때,
    PATCH는 데이터 일부를 수정할 때 사용한다.
    URI는 동사가 아닌 명사들로 이뤄져야 한다는 규칙이 있다.

    GraphQL

    필요하지 않은 것들도 한 번에 불러와지는 REST형식과 달리 필요한 것만 요청할 수 있다.
    또한 REST형식으로는 여러 번에 걸쳐 요청할 것도 한 번의 요청으로 처리할 수 있게 해주는 형식이다.

    '메가테라' 카테고리의 다른 글

    9주차 개념노트  (0) 2022.10.18
    8주차 개념노트  (0) 2022.10.09
    6주차 개념노트 (HTML, CSS 총정리)  (0) 2022.09.25
    4주차 개념노트  (0) 2022.09.11
    3주차 개념노트  (0) 2022.08.28

    댓글

Designed by Tistory.