[Day 113] CS 기초 지식

grl pwr·2022년 9월 14일

⚡ 브라우저 주소창에 www.google.com을 입력하면 어떤 일이 일어나나요?
⚡ GET과 POST의 차이는 무엇인가요?
⚡ 객체 지향 프로그래밍이란 무엇인가요?
⚡ 프로세스와 스레드에 대해 설명해주세요.
⚡ REST API에 대해 설명해주세요.

📌 브라우저 주소창에 www.google.com을 입력하면 어떤 일이 일어나나요?


  1. 브라우저가 캐시에서 조회해 해당 웹사이트가 이전에 방문한 적이 있는지 IP 주소가 알려져 있는지 확인

  2. 요청된 URL의 IP 주소를 찾을 수 없으면 운영 체제에 웹 사이트를 찾도록 요청합니다.

  3. 운영 체제가 지정한 URL의 주소를 확인하는 첫 번째 위치는 호스트 파일(Linux 및 Mac의 경우 /etc/hosts, Windows의 경우 c:\windows\system32\drivers\etc\hosts)입니다.

  4. URL이 이 파일 내에서 발견되지 않으면 OS는 웹 페이지의 IP 주소를 찾기 위해 DNS request를 합니다.

  5. 첫 번째 단계는 확인자(또는 인터넷 서비스 공급자) 서버에 캐시에서 조회하여 IP 주소를 알고 있는지 확인하도록 요청하는 것입니다. 확인자가 모르는 경우 루트 서버에 .COM TLD(상위 레벨 도메인) 서버 - URL이 .net으로 끝나는 경우 TLD 서버는 .NET 등입니다. TLD 서버는 요청된 IP 주소가 있는지 확인하기 위해 캐시를 다시 확인합니다.

컴퓨팅에서 캐시는 일반적으로 일시적인 특징이 있는 데이터 하위 집합을 저장하는 고속 데이터 스토리지 계층입니다. 따라서 이후에 해당 데이터에 대한 요청이 있을 경우 데이터의 기본 스토리지 위치에 액세스할 때보다 더 빠르게 요청을 처리할 수 있습니다. 캐싱을 사용하면 이전에 검색하거나 계산한 데이터를 효율적으로 재사용할 수 있습니다.

확인자가 모르는 경우 루트 서버에 .COM TLD(상단 레벨 도메인)서버 - URL이 .net으로 끝나는 경우 TLD 서버는 .NET 등 입니다. TLD 서버는 요청된 IP 주소가 있는지 확인하기 위해 캐시를 다시 확인합니다.
그렇지 않은 경우 해당 URL과 연결된 신뢰할 수 있는 이름 서버 중 하나 이상이 있으며 이름 서버로 이동한 후 URL과 연결된 IP 주소를 반환합니다.
OS가 IP 주소를 가지고 브라우저에 제공한 후 해당 IP 주소에 대해 GET(HTTP method 유형)을 만듭니다. 요청이 이루어지면 브라우저는 다시 OS에 요청을 보내고 앞에서 논의한 TCP 트래픽 protocol로 요청을 패킹하고 IP 주소로 보냅니다.
그 과정에서 OS와 서버의 방화벽 모두에서 보안 위반이 없는지 확인합니다. 그리고 요청을 수신하면 서버(일반적으로 해당 웹 사이트에 대해 사용 가능한 모든 서버로 트래픽을 전달하는 로드 밸런서)는 SSL(Secure Sockets Layer) 인증서와 함께 선택한 서버의 IP 주소가 포함된 응답을 보내 보안 세션(HTTPS).

마지막으로 선택된 서버는 HTML, CSS 및 JavaScript 파일(있는 경우)을 OS로 다시 보내고 OS는 이를 해석하도록 브라우저에 제공합니다. 그리고 웹사이트가 화면에 띠게 됩니다.

https://www.linkedin.com/pulse/what-happens-when-you-type-googlecom-any-other-url-buitrago-vargas/
https://www.youtube.com/watch?v=dh406O2v_1c
https://www.youtube.com/watch?v=vvpCnjyjTuU

📌 GET과 POST의 차이는 무엇인가요?


GET & POST 방식 모두 브라우저가 서버에 요청하는 것이다.

프로토콜

프로토콜은 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계입니다. 기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구합니다. 이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 합니다.

HTTP 프로토콜이란? HTTP(Hypertext Transfer Protocol)

웹에서는 브라우저와 서버 간에 데이터를 주고받기 위한 방식으로 HTTP 프로토콜을 사용하고 있습니다. 웹 뿐만 아니라 server-client 관계에서는 client가 요청(request)하면 서버가 요청을 처리한 후 client에게 응답(response)합니다. 단지 웹에서는 이 요청과 응답을 HTTP 방식으로 요청하고 응답하기로 한 것입니다.

HTTP 프로토콜로 데이터를 주고받기 위해서는 아래와 같이 요청(Request)을 보내고 응답(Response)을 받아야 합니다.

https://brilliantdevelop.tistory.com/33#:~:text=%EC%82%AC%EC%9A%A9%EB%AA%A9%EC%A0%81%20%3A%20GET%EC%9D%80%20%EC%84%9C%EB%B2%84,Create%20%EC%97%90%20%EA%B0%80%EA%B9%9D%EB%8B%A4%EA%B3%A0%20%EB%B3%B4%EB%A9%B4%20%EB%90%9C%EB%8B%A4.

https://brilliantdevelop.tistory.com/32

📌 객체 지향 프로그래밍이란 무엇인가요?


객체 지향 프로그래밍(OOP)은 클래스와 객체의 개념에 의존하는 프로그래밍 패러다임입니다. 객체의 개별 인스턴스를 생성하는 데 사용되는 단순하고 재사용 가능한 코드 bluprints(일반적으로 class)으로 소프트웨어 프로그램을 구조화하는 데 사용됩니다. JavaScript, C++, Java 및 Python을 비롯한 많은 객체 지향 프로그래밍 언어가 있습니다.

객체지향 프로그래밍이 등장하기 이전의 프로그래밍 패러다임

순차적 (비구조적) 프로그래밍
정의한 기능의 흐름에 따라 순서대로 동작을 추가하며 프로그램을 완성하는 방식이다. 간단한 프로그램의 경우, 이렇게 코드를 짜게 되면 흐름이 눈으로 보이기 때문에 매우 직관적일 것이다. 그러나, 조금이라도 프로그램의 규모가 커지게 되면 곤란해진다. 만일 A → B → C 라는 동작을 구현하다가, C 에서 A 로 돌아가야할 상황이라면 goto 를 활용해야 한다.

goto 문을 무분별하게 활용하게 되면, 그야말로 스파게티 그 자체가 완성된다. 쭉 나열된 코드 속에서 위로 갔다가 아래로 갔다가 난리도 아니게 된다. 그렇게 되면 동작이 직관적이지 못하게 되고, 유일한 장점이 사라지는 셈이다.

그래서 등장한 것이 절차적, 구조적 프로그래밍이다.

절차적 (구조적) 프로그래밍
절차적 프로그래밍에서 '절차'는 함수를 의미한다. 따라서 절차적 프로그래밍이란, 반복되는 동작을 함수 및 프로시저 형태로 모듈화하여 사용하는 방식이다.

프로시저란?
리턴값이 없는 함수다. 예를 들어 데이터를 출력하는 용도로 사용하는 printf 와 같은 함수를 프로시저라고 한다. (엄밀히 따지면 printf 도 리턴값이 있지만 본래 목적은 이 리턴과 무관하기 때문에 프로시저에 가까움)

반복 동작을 모듈화하여 코드를 많이 줄일 수 있다. 하지만 프로시저라는 것 자체가 너무 추상적이라는 단점이 있다. 무슨 말인지 이해하기 위해 아래 예시를 살펴보자.

도서관의 도서 관리 프로그램을 개발한다고 하자.

  • '책'이라는 자료형을 구현해야 함
  • 책에 대한 함수를 구현해야 함

그러나, 구조적 프로그래밍에서는 이 둘을 따로 생각할 수 밖에 없다. 책은 책이고 책에 관한 함수는 따로 있기 때문에, 같은 소스코드 파일 내에 있더라도 이 둘의 연관 여부는 단 번에 알아차리기 어렵다. 즉, 논리적으로 묶여있을 수 없는 구조이기 때문에 동작이 추상적인 것이다.

따라서, 이를 묶기 위한 패러다임으로 '객체지향 프로그래밍' 이 등장하게 된 것이다.

객체지향 프로그래밍의 등장
어떤 개념에 대한 자료형과 함수를 '객체' 형태로 함께 묶어서 관리하기 위해 객체지향 프로그래밍 패러다임이 등장하게 되었다. 핵심 포인트는 객체 내부에 자료형 필드와 함수가 함께 존재하는 것이다. 가능한 모든 물리적, 논리적 요소를 객체로 만드는 것이 객체지향 프로그래밍이다.

위에서 들었던 예시인 '도서 관리 프로그램'도, 객체지향으로 구현하게 되면 책의 제목, 저자, 페이지수와 같은 자료형 필드와 대출하기, 반납하기 등의 메소드를 책이라는 객체에 몽땅 묶어서 관리하는 것이 가능해진다. 이렇게 되면, 추상적이었던 동작도 훨씬 직관적으로 보이게 되어 코드 가독성이 증가한다!

결론적으로 객체 간의 독립성이 뚜렷하게 생기고, 중복되는 코드의 양이 줄어든다. 따라서 유지보수에 용이해질 것이다.

https://velog.io/@haero_kim/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
https://www.educative.io/blog/object-oriented-programming

📌 프로세스와 스레드에 대해 설명해주세요


프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다.

프로세스는 실행될 때 운영체제로부터 프로세서, 필요한 주소 공간, 메모리 등 자원을 할당 받습니다. 스레드란 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행됩니다.

https://brunch.co.kr/@kd4/3#:~:text=%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%8A%94%20%EC%8B%A4%ED%96%89%EB%90%A0%20%EB%95%8C%20%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C,%EB%81%BC%EB%A6%AC%20%EA%B3%B5%EC%9C%A0%ED%95%98%EB%A9%B4%EC%84%9C%20%EC%8B%A4%ED%96%89%EB%90%A9%EB%8B%88%EB%8B%A4.

📌 REST API에 대해 설명해주세요.


https://www.youtube.com/watch?v=lsMQRaeKNDk

profile
4대륙 개발자

0개의 댓글