TIL/Spring

TIL 2024-10-30 (Spring 입문 - 2)

myoma 2024. 10. 30. 20:27

1 ) Web 기초

  • DNS ( Domain Name System)
    • 도메인 이름과 IP 주소를 서로 변환하는 역할을 수행한다. 
    • 즉, 사람이 읽을 수 있는 도메인 이름을 컴퓨터가 읽을 수 있는 IP 주소로 변환한다.
      • DNS가 나오게된 이유 
        1. 컴퓨터 간의 통신을 위해선 IP 주소가 필요하다.
        2. IP는 변경되는 주소이다.
      • DNS 동작 순서
        1. 원하는 이름과 도메인을 구매한 후, DNS 서버에 등록.
        2. 도메인 명을 입력하면 DNS 서버는 IP 주소를 반환한다.
        3. IP가 변경되면 DNS 서버에 등록된 IP 주소만 바뀌면 된다.
        4. 우리는 IP주소의 형태가 아닌 도메인의 형태로 웹에 접속된다.

 

  • URI (Uniform Resource Identifier)
    • 인터넷 자원을 나타내는 고유 식별자를 뜻한다.
      • Uniform : 자원을 식별하는 통일된 방식을 의미한다.
      • Resource : 자원(페이지, 텍스트, 이미지, 동영상, 파일 등)을 의미한다.
      • Identifier : 식별자를 의미한다.
  • URI vs URL
    • URI - 인터넷 자원을 식별할 수 있는 문자열, Locator, Name 혹은 둘 다 추가 분류될 수 있다.
    • URL - 자원의 위치를 의미, 일반적으로 도메인 주소로 알려짐, 프로토콜을 포함.

 

  • URL 방식의 한계
    • 자원의 위치를 변경하면 기존 URL은 사용할 수 없다.
  • URL 구조
    • scheme 
      • 주로 프로토콜을 사용한다. 웹에서는 http, https, ftp를 주로 사용.
      • 참고 : https는 http에 보안(Secure)을 추가한 것.
    • user[:password]
      • 사용자 정보
      • URL은 보안에 취약하여 사용하지 않는다.
    • host[:port]
      • 리소스의 경로
      • 계층 구조로 구성되어있다.
    • [?query]
      • key = value 형태로 구성된다.
      • Query Parameter, Query String 이라고도 한다.
        • 두 가지 모두 같은 말입니다. 자주 혼용되는 단어이니 잘 기억해주세요.
      • ?로 시작되고 &으로 구분된다.
    • [#fragment]
      • html 내부 북마크 등에 사용한다.
        • 접속받은 URL로 접속 시 특정 위치(fragment)로 이동할 수 있음.

 

 


2 ) 용어 모음집

 

  1. snake_case 
    • 문자와 문자 사이를 _ 언더바로 이어준다.
    • 모든 단어는 소문자이거나 대문자.
  2. camelCase
    • Java에서는 변수, 함수, 메서드 이름을 만들 때 사용한다.
    • 문자와 문자 사이로 대문자로 이어진다.
  3. PascalCase
    • 대부분의 프로그래밍 언어에서 클래스 이름을 지정하는데 파스칼 케이스가 사용된다.
    • 문자의 처음 시작을 대문자로 한다.
    • 문자와 문자 사이를 대문자로 이어준다.
  4. kebab-case
    • 문자와 문자 사이를 - 대시로 이어준다.
    • 모든 단어는 소문자이다.

 

 

  • Json - 클라이언트와 서버가 통신할 때 사용하는 데이터 양식이다. 클라이언트와 서버가 사용하는 언어에 관계 없이 통일된 데이터를 주고 받을 수 있도록 만든다.
    • 요약
      • JSON은 사람, 기계, 모두 이해하기 쉬우며 용량이 적다.
      • XML을 대체해서 데이터 전송 등에 많이 사용한다.
      • 마치 전세계 공통어로 영어를 사용하는 것 처럼 Web의 세계에서는 JSON을 공통어로 사용.
    • 클라이언트 to 서버의 통신에 JSON을 사용
    • 서버 to 서버의 통신에도 JSON 사용

 

 

  • Scale Up, Scale Out
    • Scale Up - 수직적 확장
      • 단일 서버의 하드웨어의 사용을 높인다.
      • 요청에 대한 처리를 더욱 빠르게 할 수 있도록 만든다.
    • Scale Out - 수평적 확장
      • 같은 사양의 서버를 여러 대 배치한다.
      • 동시에 더 많은 사용자 요청을 처리할 수 있도록 만든다.

 

 

 

  • Stateful, Stateless - 클라이언트와 서버 간의 통신 상태 유지 여부에 따라 나뉘는 특성
    • Stateful (상태유지)
      • 클라이언트 상태를 유지
      • 문제점
        • 같은 서버가 유지되어야한다.
        • 다양한 이유로 동작하지 않을 수 있다.
        • 요청 트래픽이 몰리게 되면 상태를 유지하는 것에 Resource가 많이 소모된다.
    • Stateless (무상태)
      • 클라이언트 상태를 유지하지 않는다.
      • 장점
        • 같은 서버를 유지할 필요가 없다.
        • Scale Out 수평 확장성이 높다.
          • 갑자기 요청량이 증가하여도 서버를 증설 하기 쉽다.
      • 단점
        • 클라이언트가 데이터를 추가적으로 전송해야한다.
          • 전송되는 데이터의 양이 많아진다.
    • Stateless 방식의 한계점.
      • WebApplication을 만들 때 서버의 확장성을 고려하는 최대한 Stateless하게 만들어야한다.
      • 하지만 실제로는 로그인과 같은 상태를 유지해야하는 경우가 발생한다.
      • 상태 유지를 최소화 시켜야한다( 추후에 배울 것들을 활용하여 한계 극복)

 

 

  • Connection 장단점
    • 장점 : 새로운 연결 과정을 거치지 않아도 된다, 그만큼 요청에 대한 응답 속도가 빨라진다.
    • 단점 : 클라이언트가 지속적으로 요청을 보낼 거라는 보장이 없다
  • Connectionless 장단점.
    • 장점 : 서버 자원을 효율적으로 사용할 수 있다.
    • 단점 
      1. 요청이 추가적으로 오게되면 연결을 새로 해야한다.
      2. 웹 사이트의 HTML, CSS,  JS 이미지등의 정적 자원 모두 다시 다운로드 한다.
      3. 현재는 HTTP 지속 연결로 문제 해결