본문 바로가기
Study/Backend Roadmap

[roadmap.sh] Backend 1주차 정리

by Nahwasa 2022. 11. 19.

스터디 메인 페이지

목차

      완벽한 정리가 목적이 아니고, 로드맵을 보면서 기본 개념을 알고 차후 파고들어서 공부하기 위한 사전 준비 과정인 스터디이다. 따라서 이하 정리한 내용이 부실할 수 있다.

     

     

    Internet

    How does the internet work?

    • The Internet is a global network of computers connected to each other which communicate through a standardized set of protocols.
    • TCP/IP
      • 컴퓨터간의 통신을 위한 통신규약
      • 미국방위통신청에서 컴퓨터간의 통신을 위해서 TCP/IP를 사용하도록 한 것이 그 시초
      • HW, OS, 접속매체에 관계없이 동작할수 있다는 개방성때문에 인터넷 통신을 위한 핵심으로 선택됨.
    • TCP
      • 클라이언트와 서버간에 데이터를 신뢰성있게 전달하기 위해 만들어진 프로토콜. 3way handshake 같이
    • IP
      • 네트워크 상에서 컴퓨터의 고유한 주소. 인터넷에 접속할 때 컴퓨터 각각에 부여받음.
    • 인터넷
      • 각 컴퓨터들간에 TCP/IP 통신 프로토콜을 이용해 서로 데이터를 주고 받도록한 네트워크. 모든 컴퓨터를 하나의 통신망 안에 연결하고자 하는 의도.
    1. 컴퓨터와 컴퓨터를 케이블 또는 무선(WiFi, 블루투스) 연결. 1:1로 전부 연결하려면 NC2 필요.
    2. NC2는 무리이니 라우터
    3. 단일라우터 만으로는 N이 커질수록 감당하기 힘드니 라우터와 라우터를 연결
    4. 거리가 멀면 케이블과 무선으로 연결이 불가능 → 모뎀
    5. 네트워크에서 도달하려는 네트워크로 데이터를 보내기위해 ISP 연결
    • ISP (Internet Service Provider)
      • 개인이나 기업체에게 인터넷 접속 서비스, 웹사이트 구축 및 웹호스팅 서비스 등을 제공하는 회사. KT, SKT, LG U+ 등. 특수한 라우터를 관리하고 다른 ISP의 라이터에도 액세스할 수 있는 회사들임.

     

    What is HTTP?

    • HTTP is the TCP/IP based application layer communication protocol which standardizes how the client and server communicate with each other. It defines how the content is requested and transmitted across the internet.
    • HyperText Transfer Protocol
    • www (world wide web. W3)
      • 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보공간. (=웹)
    • www상에서 정보를 주고받을 수 있는 프로토콜.
      • 처음엔 HTML을 가져오는 목적의 프로토콜. GET만 되고.
    • 주로 TCP를 사용하고, HTTP/3부터는 UDP. 80번 포트 사용.
    • 클라이언트와 서버 사이에 이루어지는 요청, 응답 프로토콜.
    • HTTPS
      • HTTP + 추가 보안 계층 (TLS. 전송 계층 보안)
      • SSL이나 TLS 인증서로 보호되는 통신. 사실상 현재는 TLS로 보호되는 경우임.
    • SSL
      • v1 : 결함으로 공개된 적 없음
      • v2 : 1995년 공개, 2011 사용 금지
      • v3 : 1996년 공개, 2015 사용 금지
    • TLS
      • SSL 좀 더 향상 시킨건데, SSL이 더 보편적인 단어라 SSL이라고 하기도 함.
      • v1.0 : SSL v3이 가진 취약점 해결. 1999 공개, 2020까지만 사용
      • v1.1 : 2006년 공개, 2020년까지만 사용
      • v1.2 : 2008년 공개, 현재 대부분의 사이트에서 지원
      • v1.3 : 2018년 공개. 최초 연결시에 암호화 통신 개시 절차 간소화, 오래된 암호화 기술 폐기
    • Cipher Suites

     

    Browsers and how they work?

    • A web browser is a software application that enables a user to access and display web pages or other online content through its graphical user interface.
    • www를 기반으로 한 인터넷의 컨텐츠를 검색 및 열람하기 위한 응용 프로그램
    • 웹 표준
      • WHATWG : HTML, 웹 API의 표준 (기존 W3C가 하던거)
      • W3C : CSS의 표준
      • ECMA International - ECMAScript
    • 웹 표준에 따라 웹서핑을 할 수 있는 응용 소프트웨어
      • 기존엔 잘 안지켜짐. Internet Explorer가 독점이라. (Acid Tests - 자신이 사용하고 있는 웹 브라우저가 웹표준을 잘 지키고 있는지 테스트할 수 있음)
    • 네이버나 구글 진입 시 브라우저가 서버에 요청 → 응답받은 데이터인 HTML, CSS, 이미지 등을 웹 표준에 따라 해석해서 화면에 표시
    • 구조
      • 사용자 인터페이스 : URL 입력창, 뒤로가기 등
      • 브라우저 엔진(Webkit 등) : 사용자 인터페이스와 렌더링 엔진 사이의 동작 제어
      • 렌더링 엔진 : 요청한 컨텐츠를 표시. html, css 등을 파싱해서 화면에 표시
      • 자바스크립트 엔진(Chrome V8 등) : js를 해석

     

    DNS and how it works?

    • The Domain Name System (DNS) is the phonebook of the Internet. Humans access information online through domain names, like nytimes.com or espn.com. Web browsers interact through Internet Protocol (IP) addresses. DNS translates domain names to IP addresses so browsers can load Internet resources.
    • 도메인 → ip
    1. 웹 브라우저에 nahwasa.com 입력.
    2. 최상위 기관에서 .com 도메인 문의 → .com 네임 서버 알려줌
    3. .com 네임 서버에게 nahwasa.com 문의 → 가비아 네임 서버에 있다고 알려줌 (nahwasa.com은 가비아에 돈주고 받은 도메인임)
    4. 가비아 네임서버에게 nahwasa.com 문의 → 주소 알려줌.

     

    What is Domain Name?

    • A domain name is a unique, easy-to-remember address used to access websites, such as ‘google.com’, and ‘facebook.com’. Users can connect to websites using domain names thanks to the DNS system.
    • IP주소를 문자로 알아보기 쉽게 만든 인터넷 상의 주소
    • = 웹 주소
    • 넓은 의미로는 네트워크상에서 컴퓨터를 식별하는 호스트명
    • 좁은 의미로는 도메인 레지스트리에게서 등록된 이름

     

    What is hosting?

    • Web hosting is an online service that allows you to publish your website files onto the internet. So, anyone who has access to the internet has access to your website.
    • 서버 컴퓨터의 전체 또는 일정 공간을 이용할 수 있도록 임대해 주는 서비스
    • 종류
      • 웹 호스팅 : 개별 홈페이지용
      • 메일 호스팅 : 이메일 혹은 웹메일 계정과 공간
      • 쇼핑몰 호스팅
      • 서버 호스팅 : VPS(가상 서버 호스팅) 등. Naver Cloud의 Instance가 이거임.

     

    [ references ]

    https://development-crow.tistory.com/3

    https://namu.wiki/w/ISP

    https://developer.mozilla.org/ko/docs/Learn/Common_questions/How_does_the_Internet_work

    https://rsec.kr/?p=455

    https://www.digicert.com/kr/what-is-ssl-tls-and-https

    https://namu.wiki/w/웹 브라우저

    https://www.quora.com/What-is-the-relationship-between-ECMAScript-and-W3C

    https://development-crow.tistory.com/5

    https://hanamon.kr/dns란-도메인-네임-시스템-개념부터-작동-방식까지/

    https://velog.io/@m-vault/도메인-네임은-무엇인가요

    https://namu.wiki/w/호스팅

     

     


     

    Basic Frontend Knowledge

    HTML

    • HTML stands for HyperText Markup Language. It is used on the frontend and gives the structure to the webpage which you can style using CSS and make interactive using JavaScript.
    • 웹 사이트의 모습을 기술하기 위해 문서가 화면에 표시되는 형식을 나타낸 마크업 언어의 일종
      • 튜링 완전한 언어가 아니라서 프로그래밍 언어가 아님. → 충분한 메모리와 시간을 주면 문제를 풀 수 있는 언어가 아님.
    • 태그(Tag) : HTML을 기술하기 위하여 사용하는 명령어의 집합

     

    CSS

    • CSS or Cascading Style Sheets is the language used to style the frontend of any website. CSS is a cornerstone technology of the World Wide Web, alongside HTML and JavaScript.
    • HTML로 만들어진 콘텐츠에서 레이아웃과 디자인요소를 정의하는 기술
    • HTML 등의 마크업 언어로 작성된 문서가 실제로 웹사이트에 표현되는 방법을 정해주는 스타일 시트 언어.

     

    JavaScript

    • JavaScript allows you to add interactivity to your pages. Common examples that you may have seen on the websites are sliders, click interactions, popups and so on.
    • HTML이 웹 페이지의 기본 구조, CSS가 디자인, JS는 클라이언트 단에서 웹 페이지가 동작하는 것을 담당. 동적인 홈페이지가 필요없다면 필요없음.

     

    [ references ]

    https://namu.wiki/w/HTML

    https://dinfree.com/lecture/frontend/122_css_1.html

    https://namu.wiki/w/CSS

    https://namu.wiki/w/JavaScript

     


     

    OS and General Knowledge

    Terminal Usage

     

    How OSs work in General

    • An operating system is a main program on computer, that governs all other applications. It allows you to use browsers, play games, print documents, launch your favorite program.
    • 사용자가 컴퓨터를 쉽게 다룰 수 있게 해주는 인터페이스.
    • 하드웨어와 소프트웨어를 관리하는 소프트웨어 전체 (커널 포함)
    • 쉘, 유저 프로그램이 도는 유저영역, 시스템콜, 파일 시스템, 드라이버, 프로세스 메니지먼트가 들어간 커널 등이 OS에 해당함.

     

    Process Management

    • Process management involves various tasks like creation, scheduling, termination of processes, and a deadlock. Process is a program that is under execution, which is an important part of modern-day operating systems. The OS must allocate resources that enable processes to share and exchange information. It also protects the resources of each process from other methods and allows synchronization among processes.
    • 프로세스
      • = job, task
      • 메인 메모리에 할당되어 실행중인 상태인 프로그램. (프로그램은 메모리에 올라오지 않은 상태로 보조기억장치에 저장되어 일하고 있지 않은 상태)
      • 실행을 위해 커널에 등록되고, 커널의 관리를 받는 작업
    • PCB (Process Control Block) : 커널내에 존재하며 OS가 프로세스를 관리하기 위해 필요한 정보. PID, 프로세스 상태 등
    • 인터럽트 (I/O 인터럽트 등)
    • Context Switching

     

    Threads and Concurrency

    • A thread is the smallest unit of processing that can be performed in an OS. In most modern operating systems, a thread exists within a process - that is, a single process may contain multiple threads.
    • Concurrency refers to the execution of multiple threads at the same time. It occurs in an operating system when multiple process threads are executing concurrently. These threads can interact with one another via shared memory or message passing. Concurrency results in resource sharing, which causes issues like deadlocks and resource scarcity. It aids with techniques such as process coordination, memory allocation, and execution schedule to maximize throughput.
    • thread-safe
    • 자바의 synchronized
    • 프로세스보다 작은 실행 흐름의 최소 단위. 하나의 프로세스는 여러개의 스레드.
    • 장점은 여러개의 스레드가 메모리를 공유하여 작동할 수 있어서 생성과 속도가 빠름. 또 프로세스끼리 변경되려면 Context Switching이 이뤄져야하는데 멀티 스레드라면 그 부하도 적음.
    • 단점은 병목 현상, 데드락 등의 자원 선점과 동기화 문제가 발생

     

    Basic Terminal Commands

    • Working within the terminal is common practice for any Backend Developer and there are many commands and utilities that can help you achieve your tasks more efficiently.
    • The best way to learn these commands is to practice them in your own machine/environment. Specifically, these are related to Linux commands/utilities which are the most prevalent in the market.
    • To understand these commands, read through the manual pages by using man command e.g. man grep, man awk etc.
    • After enough exposure and practice to these commands, it will become easier to use these in practice
    • 리눅스 기본 명령어
    • 윈도우 기본 명령어

     

    Memory Management

    • The term Memory can be defined as a collection of data in a specific format. It is used to store instructions and process data. The memory comprises a large array or group of words or bytes, each with its own location. The primary motive of a computer system is to execute programs. These programs, along with the information they access, should be in the main memory during execution. The CPU fetches instructions from memory according to the value of the program counter.
    • To achieve a degree of multiprogramming and proper utilization of memory, memory management is important. There are several memory management methods, reflecting various approaches, and the effectiveness of each algorithm depends on the situation.
    • 구분
      • Address Binding - 주소할당 (논리적(가상), 물리적 주소. 물리적 주소가 프로세스가 실행되기 위해 실제로 메모리에 올라가있는 위치.
      • Swapping - 메모리 크기가 부족할 때 프로세스를 임시로 디스크로 보냈다가 다시 메모리로 로드
      • Allocation - 커널 영역과 사용자 프로세스 영역 중 후자의 메모리 할당. First-fit. Best-fit. Worst-fit
      • Fragmentation - 단편화. 메모리에 적재되고 제거되면서 메모리 틈 사이에 사용하지 못할만큼의 작은 공간들이 늘어나는 현상.
      • Paging - 페이징.
      • 페이지 교체 알고리즘 - LRU, FIFO, LFU, …

     

    Interprocess Communication

    • Interprocess communication (IPC) refers specifically to the mechanisms an operating system provides to allow the processes to manage shared data
    • 운영체제 상에서 실행 중인 프로세스 간에 정보를 주고받는 것.
    • C언어에서 다른 메모리 접근 시 Segementation Fault 나는 그거.
    • 대표적으로 리눅스의 파이프 (’ | ‘)

     

    I/O Management

    • One of the important jobs of an Operating System is to manage various I/O devices including mouse, keyboards, touchpad, disk drives, display adapters, USB devices, Bit-mapped screens, LED, Analog-to-digital converter, On/off switch, network connections, audio I/O, printers, etc.
    • 컴퓨터의 주요한 두 가지 작업은 연산 작업과 입출력 작업.
    • 컴퓨터와 하드웨어 장치 사이의 공통된 인터페이스 역할을 수행하는 것이 입출력 관리의 핵심.
    • 커널에서는 장치 구동기 모듈을 사용해 모든 하드웨어를 일관된 인터페이스로 표현해주며 이런 인터페이스를 그보다 상위층인 커널의 입출력 서브시스템에 제공해줌.

     

    POSIX Basics (stdin, stdout, stderr, pipes)

    • POSIX (Portable Operating System Interface) is a family of standards for maintaining compatibility between operating systems. It describes utilities, APIs, and services that a compliant OS should provide to software, thus making it easier to port programs from one system to another.
    • A practical example: in a Unix-like operating system, there are three standard streams , stdin , stdout  and stderr  - they are I/O connections that you will probably come across when using a terminal, as they manage the flow from the standard input  (stdin), standard output  (stdout) and standard error  (stderr).
    • So, in this case, when we want to interact with any of these streams (through a process, for example), the POSIX operating system API makes it easier - for example, in the <unistd.h>  C header where the stdin, stderr, and stdout are defined as STDIN_FILENO , STDERR_FILENO  and STDOUT_FILENO .
    • POSIX also adds a standard for exit codes, filesystem semantics, and several other command line utility API conventions.
    • IEEE가 제정한 유닉스의 API 규격. 이 규격에 따르면 유닉스와 직접적인 연관이 없어도 유닉스 호환 운영체제라고 부름(e.g. 리눅스)
    • 윈도우 WSL → 윈도우 10에 추가되면서 POSIX 환경을 이용할 수 있게 됨.

     

    Basic Networking Concepts

    • Computer networking refers to interconnected computing devices that can exchange data and share resources with each other. These networked devices use a system of rules, called communications protocols, to transmit information over physical or wireless technologies.
    • 서로 데이터를 교환하고 리소스를 공유할 수 있는 상호 연결된 컴퓨팅 디바이스.
    • 아키텍처 유형
      • 클라이언트 - 서버
      • P2P
    • 네트워크 유형
      • LAN
      • WAN
      • 클라우드

     

    [ references ]

    https://zetawiki.com/wiki/윈도우_CMD_명령어_목록

    https://www.mireene.com/webimg/linux_tip1.htm

    https://namu.wiki/w/CLI

    https://namu.wiki/w/운영체제

    https://merrily-code.tistory.com/88

    https://velog.io/@codemcd/운영체제OS-5.-프로세스-관리

    https://doh-an.tistory.com/28

    https://rebro.kr/178

    https://namu.wiki/w/프로세스간 통신

    https://velog.io/@ragi/Back-end-입출력IO-관리

    https://aws.amazon.com/ko/what-is/computer-networking/

    'Study > Backend Roadmap' 카테고리의 다른 글

    [roadmap.sh] Backend 4주차 정리  (0) 2022.12.10
    [roadmap.sh] Backend 3주차 정리  (0) 2022.12.03
    [roadmap.sh] Backend 2주차 정리  (0) 2022.11.26

    댓글