Coding/내일배움캠프

[내일배움캠프] 최종 프로젝트 Day 10 | Node.js 4기 | Day 91 | 24.04.04.(목)

_Woo_ 2024. 4. 5. 00:54

[내일배움캠프] 최종 프로젝트 Day 10 | Node.js 4기 | Day 91 | 24.04.04.(목)

10. http, https의 차이점에 대해 설명해주세요.

[떠오른 것]

- 보안이 있냐 없냐?

[찾아본 것]

- HTTP(Hypertext Transfer Protocol)는 클라이언트와 서버 간 통신을 위한 통신 규첵 세트 또는 프로토콜. 사용자가 웹 사이트를 방문하면 사용자 브라우저가 웹 서버에 HTTP 요청을 전송하고 웹 서버는 HTTP 응답으로 응답한다. 웹 서버와 사용자 브라우저는 데이터를 “일반 텍스트”로 교환한다.

    - 일반 텍스트
        - 이진 형식이 아니라는 뜻, 인간이 이해할 수 있는 형태의 텍스트를 말하는 것이 아닐까?
        - 암호화되지 않은 텍스트를 뜻하는 것이지 않을까?

- 간단히 말해 HTTP 프로토콜은 네트워크 통신을 작동하게 하는 기본 기술이다. 이름에서 알 수 있듯이 HTTPS(Hypertext Transfer Protocol “Secure”)는 HTTP의 확장 버전 또는 더 안전한 버전이다. HTTPS의 확장 버전 또는 더 안전한 버전이다. HTTPS에서는 브라우저와 서버가 데이터를 전송하기 전에 안전하고 암호화된 연결을 설정한다.

[참고할 것]

- SSL/TSL 인증서
- CA(Certificate Authority)
- 신뢰 구축

[답변할 것]

- http와 https를 구분해주는 가장 큰 차이는 바로 보안 기능 적용 여부입니다. HTTP는 Hypertext Transfer Protocol의 약자이며, HTTPS는 Hypertext Transfer Protocol Secure의 약자입니다. 이름에서부터 알 수 있듯, HTTPS는 HTTP 요청 및 응답을 더 안전하게 처리하는 데 목적을 두고 있으며 최근에는 대부분의 웹 사이트가 기본적으로 https 프로토콜을 사용하고 있습니다. HTTPS 웹 사이트는 독립된 인증 기관(CA)으로부터 SSL/TLS 인증서를 획득하여 신뢰를 구축합니다. 이렇게 신뢰를 구축한 HTTPS는 검색엔진에서 HTTP에 비해 더 우선적으로 검색되는 이점을 가집니다. 또한 HTTPS 웹 어플리케이션은 HTTP 웹 어플리케이션보다 로드 속도가 더 빠르다는 이점 또한 가지고 있습니다.

[실제로 답변한 것]

- 가장 큰 차이점은 바로 보안입니다.
- HTTP는 하이퍼 텍스트 트랜스퍼 프로토콜의 약자고, HTP

- 보안

SSL/TCS? 인증서를 통해 보안을 적용하는 것으로 이해하고 있습니다.
HTTPS 통해 신뢰성 구축할 수 있고, 이를 통해 사용자의 만족도가 올라가고,  검색 엔진에서 더 우선순위로 검색되는 것을 알 수 있습니다.

16. OSI 7계층에 대해 아는대로 설명해주세요

[떠오른 것]

- TCP/Network/등등?

[찾아본 것]

OSI 7계층

- 개요
    - Open System Interconnection Reference Model 7 Layer
        - 개방형 시스템 상호연결 참조 모델 7계층
    - 국제 표준화 기구(ISO)에서 개발한 통신에 관한 계층화 표준 모델

- 7계층
    - Layer 1 : 물리 계층 (Physical Layer)
        - 물리적인 장치의 전기적, 전자적 연결에 대한 명세
        - 디지털 데이터를 아날로그적인 전기적 신호로 변환하여 물리적인 전송이 가능케 한다.
        - 주소 개념이 없으며 물리적으로 연결된 노드간에 신호를 주고 받는다.
    - Layer 2 : 데이터 링크 계층 (Data Link layer)
        - 인접한 노드간의 신뢰성 있는 데이터(단위 : 프레임) 전송을 제어(Node-to-Node Delivery)
        - 네트워크 카드의 MAC(Media Access Control 주소를 통해 목적지를 찾아간다.
        - 신뢰성 있는 전송을 위해 흐름제어(Flow Control), 오류제어(Error Control), 회선제어(Line Control)을 수행한다.
        - 논리링크제어계층, 매체접근제어계층이라는 두 개의 부계층으로 나뉜다.
    - Layer 3 : 네트워크 계층 (Network layer)
        - 종단간 전송을 위한 경로 설정을 담당한다. (End-To-End 혹은 Host-To-Host Delivery)
        - 호스트로 도달하기 위한 최적의 경로를 라우팅 알고리즘을 통해 선택하고 제어한다.
        - 종단간 전송을 위한 주소로 IP주소를 사용한다.
    - Layer 4 : 전송 계층 (Transport layer)
        - 종단간 신뢰성 있는 데이터 전송을 담당한다.
        - 종단(Host)의 구체적인 목적지(Process)까지 데이터가 도달할 수 있도록 한다. (Process-To-Process Communication)
        - Process를 특정하기 위한 주소로 Port Number를 이용한다.
        - 신뢰성 있는 데이터 전송을 위해 분할과 재조합, 연결제어, 흐름제어, 오류제어, 혼잡제어를 수행한다.
    - Layer 5 : 세션 계층 (Session layer)
        - 응용 프로그램간의 논리적인 연결(세션) 생성 및 제어를 담당한다.
        - TCP/IP 통신 연결을 수립/유지/중단
    - Layer 6 : 표현 계층 (Presentation layer)
        - 데이터 표현방식, 상이한 부호체계 간의 변화에 대해 규정한다.
        - 인코딩/디코딩, 압축/해제, 암호화/복호화 등의 역할을 수행한다.
    - Layer 7 : 응용 계층 (Application layer)
        - 응용서비스 HTTP, SMTP

[참고할 것]

- TCP/IP 4계층과 5계층 충돌되는 설명이 있는데, 기존에 있던 하나의 레어이어를 두 개의 레이어로 쪼개게 되면서 TCP/IP Updated 모델이 탄생했다. TCP/IP 모델은 4계층 모델, TCP/IP Updated 모델은 5계층 모델이라고 보면 될 것 같다.
- 물데네전세표응
    - 물리
    - 데이터
    - 네트워크
    - 전송
    - 세션
    - 표현
    - 응용

[답변할 것]

- OSI 7계층이란, 개방형 시스템 상호연결 참조 모델 7계층으로 국제 표준화 기구인 ISO에서 개발한 통신에 관한 계층화 표준 모델입니다. 1번 계층부터 7번 계층까지 물리, 데이터, 네트워크, 전송, 세션, 표현, 응용 계층이 있습니다.

[실제로 답변한 것]

네트워크 전송 프로토콜입니다. ISO에서 정식적으로 규정한 프로토콜 규칙?입니다.

1계층 7계층까지 있고,

1 - 물리
2 - 데이터
3 - 네트워크

[피드백]

http에서 https로 바꿀 때, 중요한 방식이 있다.
어떻게 secure로 확보하는 것이 없어서 .. 

SSL .. 뭐 인증서 있는데 ~ 인증하는 방식이 있다 

HTTP와 HTTPS의 본질적인 차이? 어떻게 해서 보안이 좋아지는지?
그 과정까지 알아야 그걸 이해할 수 있어야 하겠다.

프로젝트에서 가장 중요하게 생각되는 계층에 대해서?

7계층에 대해 다 외워야 하나요?

- 외운다는 느낌보다는 어떻게 해서 동작을 하는지를 알아야 한다.. 밑으로 내려가면서 데이터 추가하면서 내려가고 올라올 때 데이터 까면서 올라와야 하고 .. 로드 밸런싱에 쓴다고 했을 때 .. 계층 2개로 나눠서 분산할 수 있고 .. 이런 부분도 알아야 쓸 수 있어서 알면 좋을 것 같다 ~
- 일일이 외우는 건 어렵고 .. 네트워크 - ip / 전송 - tcp/ip / ssh tls .. 응용 / http .. 각 계층에서 중요한 개념 알고 있으면 좋을 것 같다 ~ 연결된 개념들 엮어서 자연스럽게 이해해보기? 중요한 개념부터 먼저 하고 나중에 각 계층에 대한 이해를 하는 것이 좋겠다.

이해를 하고 말하는 느낌 .. SSL 인증 방식에 대해 그림을 그려서 인증할 수 있는지? 인증서 누가 발급하는가? 


출처

https://aws.amazon.com/ko/compare/the-difference-between-https-and-http/

https://velog.io/@theon2/http-https-차이점에-대해-설명해주세요

https://itwiki.kr/w/OSI_7계층

https://inflearn.com/questions/504619/tcp-ip-4계층-5계층

https://co1nam.tistory.com/75



Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net 1602:16)

- Redis 설치가 되지 않아 발생한 오류인 것으로 보인다.



Redis 설치 위해 docker 학습 중 …



docker 연결 성공!



docker/index.html 파일 내용 변경!



redis 설치!





Starting inspector on 127.0.0.1:9229 failed: address already in use

- 해결 못함



[Nest] 24605  - 2024. 04. 04. 오후 9:51:34   ERROR [ExceptionsHandler] No metadata for "Mission" was found.
EntityMetadataNotFoundError: No metadata for "Mission" was found.

Q. 보통 3계층이 controller, service, repository로 구성되는 것으로 알고 있는데, 지금 보니까 nestjs에서는 controller과 serivce 두 개만 사용하는 것 같아. 왜 그런지에 대해서 미친 디테일로 설명해주고, repository 파일은 따로 없어도 되는지에 대해서 미친 디테일로 설명해줘.

A. NestJS는 TypeScript로 구축된 Node.js를 위한 프레임워크로, 효율적이고 신뢰할 수 있는 서버 사이드 애플리케이션을 개발하기 위해 설계되었습니다. 

NestJS는 Angular의 디자인 패턴과 모듈성을 차용하여, 백엔드 개발에도 프론트엔드에서의 경험을 가져오려고 합니다. 이 때문에 NestJS는 Angular와 유사한 구조를 가지게 되며, 이는 개발자들에게 일관된 개발 경험을 제공합니다.

Controller와 Service의 사용

NestJS에서는 주로 Controller와 Service 블록을 사용합니다. Controller는 클라이언트의 요청을 받아서 적절한 서비스 함수를 호출하고, 그 결과를 다시 클라이언트에게 반환하는 역할을 합니다. Service는 비즈니스 로직이 구현되는 곳으로, 데이터의 처리 및 저장, 외부 API 호출 등의 작업을 담당합니다.

왜 Repository가 기본적으로 포함되지 않는가?

NestJS에서 Repository 패턴은 필수적인 구성 요소로 간주되지 않습니다. 이는 NestJS가 데이터 접근 방식에 대해서는 상대적으로 유연하기 때문입니다. 대신, NestJS는 TypeORM, Mongoose와 같은 ORM(Object-Relational Mapping) 또는 ODM(Object-Document Mapping) 툴을 통해 데이터베이스와의 상호작용을 추상화합니다. 이러한 툴들은 자체적으로 Repository 패턴을 구현하고 있으며, 개발자는 이를 활용하여 데이터베이스 엔티티에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행할 수 있습니다.

Repository 파일은 따로 필요하지 않은가?

ORM/ODM을 사용하는 경우, 대부분의 경우에는 별도의 Repository 파일을 작성할 필요가 없습니다. 예를 들어, TypeORM을 사용하는 경우, 엔티티 클래스는 데이터베이스 테이블과 매핑되며, TypeORM의 Repository API를 통해 데이터 접근 및 조작이 이루어집니다. 이는 개발자가 직접 Repository 인터페이스나 구현체를 작성하는 대신, ORM/ODM의 기능을 활용하여 보다 쉽고 빠르게 데이터베이스 작업을 수행할 수 있게 해줍니다.

그러나 특정 비즈니스 로직이 복잡하거나, 커스텀 쿼리가 필요한 경우에는 사용자 정의 Repository를 생성할 수 있습니다. 이 경우, Repository는 Service와 유사한 방식으로 구현되며, 주로 데이터베이스와의 상호작용을 캡슐화하는 역할을 합니다. 

따라서, 복잡한 쿼리 로직이나, 특정 데이터 접근 패턴을 재사용하고 싶을 때 사용자 정의 Repository를 만들어 사용할 수 있습니다.

결론

NestJS에서는 Controller와 Service를 주요 구성 요소로 사용하며, Repository 패턴은 ORM/ODM의 추상화를 통해 간접적으로 사용됩니다. 이는 개발자가 데이터 접근 로직을 보다 유연하게 관리할 수 있게 해주며, 필요에 따라 사용자 정의 Repository를 생성하여 사용할 수 있는 옵션을 제공합니다.