개발 낙서장

[TIL] 내일배움캠프 3일차 - 백엔드 기초 - 본문

Java/Sparta

[TIL] 내일배움캠프 3일차 - 백엔드 기초 -

권승준 2023. 12. 26. 20:38

 

 

오늘의 학습 키워드📚

백엔드 기초 개념

인터넷🌐

인터넷은 컴퓨터들이 서로 통신 가능한 네트워크를 말하며 웹의 가장 핵심적인 기술이다.

✅ 단순한 네트워크

두 대의 컴퓨터 통신은 물리적(보통 이더넷 케이블) 혹은 무선(WIFI, Bluetooth 등)으로 연결된다. A, B, C 세 대의 컴퓨터가 통신한다고 하면 A-B, A-C, B-C 이런 방식으로 연결이 확장될 것이다.
그런데 만약 통신해야 하는 컴퓨터가 10대라면?

컴퓨터 하나당 나머지 9개의 컴퓨터에 각각 연결해야 하므로 총 45개의 케이블이 필요하다.😩
수십대, 수백대, 수천대... 점점 늘어날 수록 필요한 케이블의 수는 기하급수적으로 증가하기 때문에 이러한 방식으로는 일반적인 인터넷을 구성할 수 없다.

이 문제를 해결하기 위해 네트워크에 존재하는 각 컴퓨터는 라우터라고 하는 특수한 소형 컴퓨터에 연결된다. 라우터는 통신을 도와주는 컴퓨터로 어떤 컴퓨터가 다른 컴퓨터에게 신호를 보내면 그 신호가 잘 도착하도록 전달하고 확인하는 역할을 수행한다.

라우터를 통한 통신을 사용할 경우 각각의 컴퓨터가 라우터에 연결만 하면 되므로 연결이 굉장히 단순해진다.

✅ 네트워크 속의 네트워크

한 개의 라우터가 수백 수천 대의 컴퓨터에 연결하는 것은 불가능하다. 그럼 우리가 사용하는 지금의 인터넷처럼 수백, 수천, 수만 그 이상의 컴퓨터가 통신하려면 어떻게 해야될까?

라우터 또한 컴퓨터이기 때문에 라우터끼리 연결하면 된다.

이런 방식을 사용하면 아마 무한히 네트워크를 확장할 수 있을 것이다.

하지만 이런 방식은 케이블을 통한 물리적인 연결이기 때문에 아주 멀리 떨어져있는 컴퓨터와 연결하는 것은 어려울 것이다. 서울에서 부산끼리 통신하려면 연결에 필요한 케이블의 길이만 수백km니까 사실상 불가능하다고 볼 수 있다.

그래서 사용한 게 '전화선'이다. 전화 시설은 세계 곳곳에 있으며 서로 연결될 수 있기에 이걸 사용하면 거리에 제약 없이 통신이 가능할 것이다.
네트워크와 전화 시설을 연결해주는 특수 장비가 있는데 그게 바로 모뎀이다. 가정집에서 WIFI를 사용하게 해주는 그 모뎀인데 우리 네트워크의 정보를 전화 시설에서 처리 할 수있는 정보로 바꾸며, 그 반대의 경우도 마찬가지이다.

모뎀을 사용하여 네트워크와 전화선은 연결이 됐으니 이제 네트워크끼리 정보를 주고받을 수 있으면 비로소 우리가 사용하는 인터넷 통신이 되는데 그렇게 하기 위해서 네트워크를 인터넷 서비스 제공 업체 (Internet Service Provider, ISP)에 연결해야 한다.
ISP는 몇몇 특수한 라우터들을 관리하고 다른 ISP의 라우터에도 엑세스할 수 있는 회사이다.

한 컴퓨터가 보내는 정보는 ISP 네트워크를 통해 목표 네트워크로 전달된다.
인터넷은 이러한 전체 네트워크 인프라로 구성된다.

HTTP📡

HTTPHTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다.
HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 한다.

프로토콜 : 컴퓨터 내부 혹은 컴퓨터 사이에서 데이터를 교환하는 방식을 정의하는 규칙 체계
클라이언트-서버 프로토콜 : 수신자(보통 웹브라우저) 측에 의해 요청이 초기화되는 프로토콜

클라이언트와 서버들은 보통 개별적인 메시지 교환에 의해 통신하는데, 클라이언트에서 전송되는 메세지를 요청(Request)이라고 하며 그에 맞는 서버로부터 오는 메시지를 응답(Response)라고 한다.
예를 들어, 쇼핑몰에서 A상품의 상세 정보를 보기 위해 클릭할 경우 서버에 해당 상품에 대한 정보 요청이 발생하고 서버는 해당 상품의 정보가 담긴 페이지를 응답해주어 웹 브라우저로 볼 수 있게 되는 것이다.

HTTP는 애플리케이션 계층의 확장 프로토콜로, 신뢰 가능한 전송 프로토콜이라면 이론상으로는 무엇이든 사용할 수 있으나 TCP 혹은 암호화된 TCP 연결인 TLS를 통해 전송됩니다.

TCP(전송 제어 프로토콜) : 두 개의 호스트를 연결하고 데이터 스트림을 교환할 수 있게 해주는 중요한 프로토콜. 데이터와 패킷이 순서대로 전달되는 것을 보장한다.
TLS(전송 계층 보안) : 어플리케이션들이 네트워크 상에서 안전하게 통신할 수 있도록 사용된 프로토콜. 이메일, 웹 브라우징, 메시징, 그리고 다른 프로토콜들의 감청을 통한 정보의 변형을 방지한다.

도메인📑

도메인은 인터넷에 연결된 컴퓨터를 사람들이 쉽게 기억하고 입력할 수 있도록 문자(영문, 한글, 숫자)로 구성된 인터넷 주소이다.
192.168.xx.xxx와 같은 IP주소나 www.naver.com  등 모든 것들이 도메인이다. 

도메인은 .(점) 또는 루트라 불리는 도메인 이하에 아래 그림과 같이 역트리(Inverted tree)구조로 구성되어 있다.
루트 도메인 바로 아래의 단계를 1단계 도메인 또는 최상위 도메인(TLD, Top Level Domain)이라고 부르며, 그 다음 단계를 2단계 도메인(SLD, Second Level Domain)이라고 부른다.

DNS🔖

도메인 이름 시스템(DNS)는 사람이 읽을 수 있는 도메인 이름(예 www.naver.com)을 머신이 읽을 수 있는 IP 주소(예 192.0.2.44)로 변환해주는 시스템이다.
사람은 우리가 읽기 편한 도메인 이름을 통해 온라인에 엑세스하고 웹 프라우저는 인터넷 프로토콜(IP) 주소를 통해 상호작용하기 때문에 변환 작업은 꼭 필요하다.

인터넷의 DNS 시스템은 도메인 이름과 숫자간 매핑을 관리해 마치 전화번호부와 같은 기능을 한다.
DNS 서버는 이름을 IP 주소로 변환하여 도메인 이름을 웹 브라우저에 입력할 때 최종 사용자를 어떤 서버에 연결할 것인지를 제어하는데 이 요청을 쿼리라고 부른다.

DNS 서비스 유형으로는 두 가지가 있는데 신뢰할 수 있는 DNS, 재귀적 DNS이다.
아직 잘 이해는 안되지만 내가 그나마 이해한 바로는 신뢰할 수 있는 DNS는 우리가 인터넷을 사용하면서 일반적으로 보는 웹 브라우저에 사용하는 도메인 시스템인 것 같다.
다만 보통 쿼리를 신뢰할 수 있는 DNS에서 직접 수행하지 않는데, 그걸 재귀적 DNS 서버에서 해준다.

브라우저💻

웹 브라우저 또는 웹 탐색기는 웹 서버에서 이동하며 쌍방향으로 통신하고 HTML 문서나 파일을 출력하는 그래픽 사용자 인터페이스 기반의 응용 소프트웨어다. 웹 브라우저는 대표적인 HTTP 사용자 에이전트의 하나이기도 하다.
즉, 웹 페이즈를 가져오기 위해서 HTTP를 이용해 웹 서버와 통신을 하는 애플리케이션이다.(파이어폭스, 크롬, 네이버웨일 등등)

브라우저의 대표적인 기능은 사용자가 정보를 서버에 요청하고 이를 브라우저에 표시해주는 것이다.
보통 HTML이지만 PDF나 이미지 등 여러가지 형태가 될 수 있다.
부가 기능으로 우리가 편히 쓰는 다운로드 관리, 북마크, 캐시, 확장 플러그인 등등이 있다.

브라우저는 HTML과 CSS 명세에 따라 HTML 파일을 해석해서 표시하는데 이 명세는 웹 표준화 기구인 W3C(World Wide Web Consortium)에서 정한다.
과거에는 각 브라우저들이 각자만의 방법으로 웹 페이지를 표시했기 때문에 사용자도 제작자도 불편했다고 한다. 그래서 하나 둘 규칙을 만들기 시작했고 최근에는 대부분의 브라우저들이 표준 명세를 따르게 됐다고 한다.
(과거의 개발자님들은 정말 대단하신 것 같다👍🏻)

웹 브라우저의 표준 명세에서 제시하는 기능

  • HTTP, HTTPS
  • HTML, XML, XHTML
  • GIF, PNG 등 그래픽 파일 포맷
  • CSS, JavaScript
  • 쿠키와 디지털 인증서
  • 즐겨찾기 아이콘 및 플러그인 지원

 브라우저의 구조

  • 사용자 인터페이스(UI, User Interface) : 웹 페이지를 제외한 거의 모든 요소들. 주소창, 탭, 메뉴, 새로고침 버튼 등등
  • 브라우저 엔진(Browser Engine) : 사용자 인터페이스와 렌더링 엔진 사이의 동작을 제어한다.
  • 렌더링 엔진(Rendering Engine) : 요청한 컨텐츠를 표시해준다. 만약 HTML을 요청하면 HTML과 CSS를 파싱하여 보여준다.
  • 통신(Networking) : HTTP 요청과 같은 네트워크 호출에 사용된다. 플랫폼의 독립적인 기능이며 각 플랫폼의 하부에서 실행된다.
  • UI 백엔드(UI Backend) : 콤보 박스나 글 입력 폼 등의 기본적인 장치를 그린다. 플랫폼에서 명시하지 않은 일반적인 인터페이스로, OS 사용자 인터페이스 체계를 사용한다.
  • 자바스크립트 해석기(Javascript Interpreter) : 자바스크립트 코드를 해석하고 실행한다.
  • 자료 저장소(Data Storage) : 자료를 저장하는 계층이다. 쿠키를 저장하는 것과 같이 모든 종류의 자원을 하드 디스크에 저장할 필요가 있다. HTML5 명세에는 브라우저가 지원하는 '웹 데이터 베이스'가 정의되어 있다.

오늘의 회고💬

개념적인 부분을 공부하긴 했는데 대부분 익숙치 않은 용어들과 설명들이 난무해서 쉽게 머리에 들어오지 않았던 것 같다. 그리고 코딩이랑 다르게 역시 재미가 없어서😢 집중하기도 쉽지 않았다.
그래도 이렇게 TIL로 남겨놨으니 생각날 때마다 보면서 용어에 대해 익숙해지고 더 심화 부분도 배울 필요가 있을 것 같다.

 

내일의 계획📜

사실 오늘 계획이었지만 Java로 코딩 테스트 문제를 좀 많이 풀어봐야겠다. 자바가 오랜만이라 클래스나 메소드들을 아직 헷갈려서 검색하면서 찾아봐야 하는데 코테 문제를 풀면서 머리도 굴리고 자바도 많이 익숙해질 필요가 있을 것 같다.

Comments