본문 바로가기

아카이브/dev-camp

dev-camp Day 2-1 : 예시 코드, 기본 개념 공부하기. 소셜 로그인 구현.

728x90

nest.js에서 index.ts를 쓰는 이유

  1. 모듈의 외부 인터페이스 제공:
    • index.ts 파일은 해당 모듈을 사용하는 다른 부분과 상호 작용할 때 모듈의 외부 인터페이스를 제공하는 역할을 합니다. 외부에서 해당 모듈을 가져다 사용할 때, 이 파일을 통해 모듈의 중요한 기능이나 클래스에 쉽게 액세스할 수 있습니다.
  2. 폴더 구조 간소화:
    • index.ts를 사용하면 디렉터리의 구조를 단순화할 수 있습니다. 외부에서 해당 모듈을 사용할 때, 모듈의 핵심 기능이나 클래스에 직접 액세스하고자 할 때 해당 디렉터리에 있는 index.ts 파일만 지정해주면 됩니다.
  3. 내보내는 항목의 집중화:
    • index.ts 파일을 사용하면 해당 모듈에서 외부로 내보내는 항목들을 중앙집중화할 수 있습니다. 이는 모듈의 변경이 생겼을 때, 외부에서 사용 중인 부분에 영향을 최소화하면서 내부 구현을 조정하기 쉽게 만듭니다.
  4. Import 구문 간결화:
    • index.ts를 사용하면 외부에서 해당 모듈을 가져올 때 import 구문이 더 간결해집니다. 외부에서는 단일 파일만을 참조하면 되기 때문에 코드가 간결하고 가독성이 좋아집니다.

 

Provider

Many of the basic Nest classes may be treated as a provider – services, repositories, factories, helpers, and so on. 

The main idea of a provider is that it can be injected as a dependency.

Providers are plain JavaScript classes that are declared as providers in a module.

 

services, repositories, factories, helpers 와 같은 기본 Nest Class들이 provider에 속한다. 

프로바이더는 종속성으로서 주입받을 수 있다.

Provider는 모듈 안에서 provider로 정의될 수 있는 자바스크립트 클래스를 뜻한다.

Promise

최종 결과를 반환하는 것이 아니고, 미래의 어떤 시점에 결과를 제공하겠다는 '약속'(프로미스)을 반환하는 것입니다.

대기 중인 프로미스는 값과 함께 이행할 수도, 어떤 이유(오류)로 인해 거부될 수도 있습니다. 

상태는 세 가지를 갖습니다.

  • 대기(pending): 이행하지도, 거부하지도 않은 초기 상태.
  • 이행(fulfilled): 연산이 성공적으로 완료됨.
  • 거부(rejected): 연산이 실패함.

호이스팅

인터프리터가 코드를 실행하기 전에 함수, 변수, 클래스 또는 임포트(import)의 선언문을

해당 범위의 맨 위로 끌어올리는 것처럼 보이는 현상입니다. 

SSL

네트워크에서 메시지 전송시 보안을 위해 개발된 표준 프로토콜입니다.
클라이언트 또는 서버에서 메시지를 만들어 상대에게 전달할때, 

응용계층에서 만들어진 메시지가 전송계층으로 가기전 SSL을 통해 데이터가 암호화가 됩니다. 

그 후 전송계층을 통해 네트워크로 데이터가 상대에게 전달이 됩니다

장점 : 기밀성(암호화), 데이터 무결성, 서버인증

 

CA

SSL 인증서를 발급하는 기관, 신뢰할 수 있는 기관들

 

SSL 인증서가 의도한 서비스임을 보장하는 방법

 

1. 브라우저는 이미 CA기관 리스트를 알고있습니다.

2. 브라우저를 통해 사용자가 웹 서비스에 접근합니다.

3. 웹서비스는 CA기관을 통해 발급받은 SSL인증서(인증기관의 비밀키로 암호화 되어있다.)를 사용자에게 전달합니다.

4. 브라우저는 SSL인증서가 CA리스트에 포함되어있는지를 확인합니다.

5. 포함되어 있다면, 브라우저는 해당 SSL인증서에 대응하는 CA리스트에 존재하는 공개키를 이용해 SSL인증서를 복호화 합니다.

 

HTTPS 

통신 프로토콜인 HTTP의 보안이 강화된 버전

HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신에, SSL, TLS 프로토콜을 통해 세션 데이터를 암호화한다. 

포트는 443

 

Oauth

Open Authorization

인터넷 사용자들이 비밀번호를 제공하지 않고

다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는,

접근 위임을 위한 개방형 표준이다.

 

  • 사용자(user): 서비스 제공자와 소비자를 사용하는 계정을 가지고 있는 개인
  • 소비자(consumer): Open API를 이용하여 개발된 OAuth를 사용하여 서비스 제공자에게 접근하는 웹사이트 또는 애플리케이션
  • 서비스 제공자(service provider): OAuth를 통해 접근을 지원하는 웹 애플리케이션(Open API를 제공하는 서비스)
  • 소비자 비밀번호(consumer secret) : 서비스 제공자에서 소비자가 자신임을 인증하기 위한 키
  • 요청 토큰(request token) : 소비자가 사용자에게 접근권한을 인증받기 위해 필요한 정보가 담겨있으며 후에 접근 토큰으로 변환된다.
  • 접근 토큰(access token) : 인증 후에 사용자가 서비스 제공자가 아닌 소비자를 통해서 보호된 자원에 접근하기 위한 키를 포함한 값.

Oauth 인증 방식

  1. 소비자가 서비스제공자에게 요청토큰을 요청한다.
  2. 서비스제공자가 소비자에게 요청토큰을 발급해준다.
  3. 소비자가 사용자를 서비스제공자로 이동시킨다. 여기서 사용자 인증이 수행된다.
  4. 서비스제공자가 사용자를 소비자로 이동시킨다.
  5. 소비자가 접근토큰을 요청한다.
  6. 서비스제공자가 접근토큰을 발급한다.
  7. 발급된 접근토큰을 이용하여 소비자에서 사용자 정보에 접근한다.

* OAuth는 사용자가 누구인지를 확인하는 인증(Authentication) 프로토콜이 아닌, (ID와 PW를 이용한 로그인)

사용자의 요청이 권한이 있는지를 확인하는 인가(Authorization) 프로토콜이다 (토큰 부여)

 

 

참고 자료 : ChatGPT

https://galid1.tistory.com/602 

 

오늘 구현한 것

feat : 카카오 로그인
https://github.com/verdantjuly/dev-camp/commit/92a8d1db02e70d8f5051fc4103108f7deca76e0c