용어 모음

star_pooh·2024년 12월 3일
0

TIL

목록 보기
27/39
post-thumbnail

프로그래밍 명명규칙(Casing)

  1. snake_case
    • Python, DB Table, Column에 사용
    • 문자와 문자 사이를 _ 언더바로 연결
    • 모든 단어는 소문자이거나 대문자
  2. camelCase
    • Java, JavaScript, TypeScript에서는 변수, 함수, 메서드를 만들때 사용
    • 문자와 문자 사이를 대문자로 연결
  3. PascalCase
    • 대부분의 프로그래밍 언어에서 클래스 이름을 지정하는데 사용
    • 문자의 처음 시작은 대문자
    • 문자와 문자 사이를 대문자로 연결
  4. kebab-case
    • 문자와 문자 사이를 - 대시로 연결
    • 모든 단어는 소문자

JSON (JavaScript Object Notation)

클라이언트와 서버가 통신할 때 사용하는 데이터 양식으로서, 언어에 관계 없이 통일된 데이터를 주고 받을 수 있도록 함

  • 사람, 컴퓨터 모두 이해하기 쉬우며 용량이 작음
  • XML을 대체해서 데이터 전송 등에 많이 사용됨
  • Web에서는 JSON을 공통어처럼 사용
  • snake_case, camelCase 모두 사용 가능
  • key-value 형태로 구성
  • null, number, string, array, object, boolean 형태의 데이터 사용 가능
{
  "user": [
    {
      "first_name": "gildong",
      "last_name": "Hong",
      "age": 100,
      "phone_agree": false,
      "hobby": ["Java", "Spring"]
    },
    {
      "firstName": "younghee",
      "lastName": "Kim",
      "age": 200,
      "phone_agree": true,
      "hobby": ["React", "Spring", "Node"]
    },
  ]
}

Scale Up, Scale Out

서버의 성능 향상을 위한 방법

  • Scale Up (수직적 확장)
    • 단일 서버의 하드웨어의 사용을 높임 (CPU, 메모리 등의 스펙을 높임)
    • 요청에 대한 처리를 더욱 빠르게 할 수 있도록 함

  • Scale Out (수평적 확장)
    • 같은 사양의 서버(인스턴스)를 여러 대 배치함
    • 동시에 더 많은 사용자 요청을 처리할 수 있도록 함

Stateful, Stateless

클라이언트와 서버 간의 통신 상태(state) 유지 여부에 따라 나뉘는 특성

  • Stateful(상태 유지)
    • 클라이언트의 상태를 유지
    • 서버는 클라이언트의 요청들을 기억(상태 유지)하여 다음 처리가 가능
    • 같은 서버가 유지되어야 하기 때문에 요청 트래픽이 몰리게 되면, 상태를 유지하는 것에 많은 리소스가 소모됨
    • 리소스가 버티지 못하면 서버가 종료되거나 다음 요청에 대한 처리가 느려짐
  • Stateless(무상태)
    • 클라이언트의 상태를 유지하지 않음
    • 같은 서버를 유지할 필요가 없으며, 수평 확장성(Scale Out)이 높음
    • 클라이언트가 데이터를 추가적으로 전송해야하기 때문에 전송되는 데이터의 양이 많아짐

💡 Web Application을 만들 때 서버의 확장성을 고려하여 최대한 Stateless하게 만들어야 하지만, 로그인과 같은 상태를 유지해야 하는 경우가 발생함. 이런 문제는 Cookie, Session, Token 등을 활용하여 극복함.

Connection, Connectionless

클라이언트와 서버 간의 연결(Connection) 유지 여부에 따라 나뉘는 특성

  • Connection(연결)
    • 서버는 클라이언트와의 연결을 유지하기 위해 자원을 소모함
    • 클라이언트 2, 3에게서 아무런 요청이 없어도 연결을 유지
    • 새로운 연결 과정을 거치지 않아도 되기 때문에 요청에 대한 응답 속도가 빠름
    • 클라이언트가 지속적으로 요청을 보낼거라는 보장이 없기 때문에 연결을 위한 자원이 낭비됨

  • Connectionless(비연결)
    - 서버는 클라이언트와 연결을 유지하지 않음 때문에 최소한의 자원만 사용함
    - 서버는 최소한의 자원만 사용하기 때문에 자원을 효율적으로 사용할 수 있음
    - 추가적인 요청이 오게 되면 연결(3 Way HandShake)를 새로 해야하기 때문에 응답 시간이 증가함
    - 웹 사이트의 정적 자원(HTML, CSS, JS, ...)을 다시 다운로드 해야함
    💡 임시 저장(캐시, 브라우저 캐싱)을 활용하여 극복
    - 현재는 HTTP 지속 연결(Persistent Connections)로 문제를 해결

  • HTTP 지속 연결(Persistent Connections)
    - 하나의 요청에 필요한 요청들이 모두 응답될 때까지 연결을 유지
    - 연결을 한번만 맺고 끊기 때문에 속도가 향상됨(Connectionless보다 연결 횟수가 적음)

대표적인 HTTP Header

  • 표현 헤더(Representation)
    • 리소스에 대한 표현 정보(어떤 데이터 형식으로 보낼지)를 나타냄
    • 요청, 응답에 모두 사용
    • 종류
      • Content-Type : 데이터의 미디어 타입, 문자 인코딩
      • Content-Encoding : 압축 방식
      • Content-Language : 데이터의 언어 타입
      • Content-Length : 데이터 길이(byte 단위)
        ✅ 실제로는 표현 헤더가 아닌, 페이로드(Payload) 헤더
  • 컨텐츠 협상(Content Negotiation)
    • 클라이언트가 선호하는 표현을 요청
    • 요청시에만 사용되며, 우선 순위가 존재
      • Quality Values, 줄여서 q 값을 사용
      • 0 ~ 1 사이의 값으로 1에 가까울수록 우선순위가 높으며, 1인 경우는 생략이 가능
    • 서버에서 지원 가능하다면, 우선순위를 기반으로 응답 데이터를 표현
    • q가 생략되었다면 선언된 순서대로 우선순위를 가지며, 구체적으로 선언된 것이 우선 순위가 높음
      • ex) Accpet: text/*, text/plain, text/plain;format=flowed, */*
      • text/plain;format=flowedtext/plaintext/**/*
    • 종류
      • Accept : 선호하는 미디어 타입
      • Accept-Charset : 선호하는 문자 인코딩
      • Accept-Encoding : 선호하는 압축 인코딩
      • Accept-Language : 선호하는 언어
  • 일반 정보
    • 단순한 정보들을 나타냄
    • 종류
      • Referer : 현재 요청된 페이지의 이전 웹 페이지 주소
        • 유입 경로를 파악할 수 있으며 요청시 사용
      • User-Agent : 클라이언트 애플리케이션 정보(PC, Mobile 브라우저)
        • 어떤 환경에서 접속하는지, 문제가 발생하는지 파악 가능하며 요청시 사용
      • Server : 요청을 처리하는 ORIGIN 서버의 Software 정보
        • 응답에서 사용
      • Date : HTTP 요청이 발생한 날짜와 시간
        • 응답에서 사용
  • 특별 정보
    • 종류
      • Host : 요청한 도메인 정보
        • 필수적으로 포함해야하며, 요청시 사용
      • Location : 생성된 리소스 URI, 리다이렉트 주소
        • 응답코드 3xx와 함께 응답되면 리다이렉트 주소를 의미
        • 응답코드 201(Created)와 함께 응답되면 생성된 리소스의 URI를 의미
      • Allow : 허용 가능한 HTTP Method
        • 405 (Method Not Allowed) 응답과 함께 사용
      • Retry-After : 다음 요청까지 대기 해야하는 시간
        • 503 (Service Unavailable)와 함께 서비스가 언제까지 사용이 불가한지 알려줌
        • 초단위, 날짜단위 모두 표현 가능
  • 인증
    • 종류
      • Authorization : 클라이언트 인증 정보
        • 선택한 인증 방법에 따라 Value 작성
      • WWW-Authenticate : 리소스에 필요한 인증 방법
        • 401 (Unauthorized) 응답과 함께 사용
  • Cookie
    • HTTP는 Stateless 특성을 가지고 있기 때문에 매번 상태를 보내주어야하는데 Cookie를 사용하여 해결
    • 사용자 세션 관리, 광고 정보 트래킹에 많이 사용
    • 종류
      • Set-Cookie : 서버에서 응답시 클라이언트로 Cookie 값 전달
        • 만료기간(expire, max-age), 사용될 위치(domain, path) 설정 가능
          ⚠️ 항상 서버에 전달되므로 최소한의 정보만 사용하여 트래픽을 최적화 시켜야 함
          ⚠️ 탈취 당하기 쉬우니 보안에 민감한 정보는 저장하지 않음
      • Cookie : 클라이언트가 서버에서 받은 쿠키를 Cookie 헤더를 통해 전송한다.
      • Secure : https인 경우에만 쿠키를 전송
        • 기본적으로는 http, https 구분하지 않고 쿠키를 전송
      • HttpOnly : http 전송에만 사용한다.
        • 자바스크립트에서 쿠키를 접근하지 못하게 함
      • SameSite : 쿠키에 설정된 도메인이 같은 경우만 쿠키를 전송
  • Cache
    • 캐시가 없다면 같은 요청에 대한 응답 데이터가 같아도 매번 데이터를 새로 다운 받아야 함
    • 새로 다운 받는만큼 속도가 느려지고, 비용이 발생함
    • 종류
      • Cache-Control
        • 응답시 사용
        • Cache-Control: max-age
          • 캐시 유효 시간(초)
          • 캐시 유효 시간이 지나면 다시 서버를 통해 데이터를 응답받고 캐시를 갱신
        • Cache-Control: no-cache
          • 캐시 가능한 데이터지만, 서버에 검증하고 사용해야함
        • Cache-Control: no-store
          • 보안에 민감한 데이터로서 캐시하지 않음
      • if-modified-since : 캐시로 저장된 데이터 최종 수정일
        • 요청시 사용
      • Last-Modified : 데이터가 마지막으로 수정된 시간
        • if-modified-since 요청이 오면 응답
        • 304 (Not Modified) 상태코드와 함께 응답되면 수정되지 않았다는 것을 의미
      • ETag : 캐시용 데이터에 날짜, 시간이 아닌 이름을 지정
        • if-modified-since + Last-Modified 방식은 수정된 데이터가 같거나 캐시가 불필요한 경우를 구분하지 못함
        • 요청시 사용

0개의 댓글

관련 채용 정보