Blog
About Me
citeFred’s Blog
Blog
About Me
citeFred’s Blog
Share
Blog
About Me
citeFred’s Blog
Developer Inyong Kim’s Blog
Post Gallery
Post List
Table
Search
수정 필요 부분
AuthModule
auth.module.ts
AuthModule 확인 필요
auth.module.ts
TypeError: Cannot read properties of undefined (reading 'challenge')
클라이언트 약식 소셜 로그인(OAuth)을 백엔드 서버 중심 인증방식으로 변경
•
보안 및 관례상 프로덕션 환경에서는 Credential 획득 및 관리를 백엔드에서 처리하는 것이 일반적인 관례이자 더 안전한 방식
•
따라서 이전 클라이언트 사이드로 Credential을 전달하던 약식 구현에서 백엔드 중앙집중식 구현으로 변경하고자 한다.
1. 백엔드에서의 Passport를 통한 구글 로그인 전략 구성
•
백엔드의 기존 JWT 활용 인증/인가 구현의 방식처럼 Passport를 통한 Google Auth Strategy를 추가 구성하려고 한다.
1-1. Google Auth 라이브러리 설치
•
아래 명령어를 통해 Google 인증 모듈을 설치할 수 있다. 이는 카카오 로그인 처럼 해당 모듈에 이미 정의된 내장 함수들을 통해 쉽고 빠르게 구현 할 수 있다.
1-2. GoogleStrategy 생성
•
기존 인증전략 파일이 모여있는 곳에 아래 코드를 작성한다.
[OAuth2.0] Google Social Login 구현 - 백엔드 중앙 관리식 로직 구현
소셜 로그인은 모두 비슷한 과정
•
이전 카카오 로그인 구현과 결과적으로 동일한 과정을 거친다.
•
실제 애플리케이션에서 구현하는 과정을 정리
1. 구글에서 애플리케이션 생성
console.cloud.google.com
•
프로젝트 만들기
1-1. 동의화면 구성
•
콘솔에서 OAuth 동의화면을 먼저 생성해준다.
[OAuth2.0] Google Social Login 구현 - 클라이언트 사이드 약식
문제 인식
해결 방안 탐색
해결 시도와 결과
Refused to display in a frame because it set 'X-Frame-Options' to 'sameorigin'.
도메인 구매 후, DNS 관리페이지 -> A Record 설정 -> 서버 외부 IP 연결
•
http://www.metaverseacademy.site
•
http://metaverseacademy.site/
•
두개의 접근 주소 HTTP 일반 배포 상태 확인 (이후 → SSL 발급 후 HTTPS 보안 배포로 연결)
포트포워딩 정리
[서버컴퓨터]
•
프론트엔드 Angular -> Nginx 웹서버 정적 서빙 내부 4200 포트 -> 외부(도메인) 80 포트 → SSL 443 포트
•
백엔드 NestJS -> Express 내장서버 동적 데이터 서빙(WAS) 내부 3100 포트 -> 외부(도메인) 3100 포트
•
데이터베이스 MySQL -> Docker 내부 네트워크 3306 포트 -> 내부 3306 포트 -> 백엔드와 통신
•
Pixel Streaming(UE) -> Turn/Stun Server 포트 -> 외부 85 포트 → SSL 외부 8443 포트
자체 서버(로컬) HTTPS 배포를 위한 WACS를 통한 자체 Let’s Encrypt 인증서 발급과 연결
샘플 모습
1.
프론트엔드의 파일 업로드 요청 시작
2.
백엔드 컨트롤러의 요청 흐름
3.
프론트엔드의 파일 데이터베이스 목록 조회 화면
4.
강의실의 시청 화면 진입 모습
5.
시청 화면 요청 시 NAS의 웹서버로부터 서빙되는 영상의 모습
백엔드서버→NAS API 파일 업로드→NAS 영상 서빙 뷰 페이지 반환까지의 구현 샘플
문제 인식
•
문제 상태 분석
해결 방안 탐색
•
특정 유저가 로그인하는 방식의 SSH 세션은 결국 해당 접속을 종료하면 세션이 종료되면서 관련 프로세스가 모두 종료됨
•
따라서, NAS가 계속하여 실행되는 root 유저로 접근하면 해결 할 수 있지만 root계정으로 터미널에 접근하는 것을 개방하는 것은 위험성이 있음
•
NAS 자체에서 제공하는
Docker를 통해 실행하면 root에서 실행하는것이므로 지속적인 프로세스를 유지 할 수 있음
문제 해결 과정
•
Docker를 활용
하기 위한 순서
추가적인 문제의 발생
•
해당 프로젝트는 이제 Docker 가상환경 내에서 작동하기 때문에 상대경로로는 해당 컴퓨터의 정확한 video라는 폴더에 접근 할 수 없었다.
•
공유폴더로 지정하고있는 video의 절대경로를 입력하여 정확한 공유폴더로 찾아 갈 수 있도록 지정
•
컨테이너 설정에서 컨테이너 볼륨을 공유폴더와 맵핑하는 부분이 있는것으로 보아 이부분에서도 해결 가능 할 것으로 보인다.
NAS 내 파일업로드 애플리케이션의 특정 SSH에 종속된 세션 만료 문제 + Docker와 Host의 컨텍스트 인식 문제
NAS 파일 스토리지를 활용하기
•
NAS:
•
서비스 백엔드 서버:
•
서비스 프론트엔드 서버:
•
추가 고려 사항
•
개발 과정 중 문제 해결과 현재 상태
NAS 파일서버 구축과 웹서버(Nginx)를 통한 파일 서빙
Standalone?
Angular에서 "Standalone" 컴포넌트는 Angular 14 이상에서 도입된 기능으로, 모듈 없이 독립적으로 사용할 수 있는 컴포넌트를 의미합니다. 이는 컴포넌트의 재사용성과 관리성을 높이며, 더 간편하게 애플리케이션을 구성할 수 있게 해줍니다.
Standalone 컴포넌트의 특징
1.
모듈 불필요: 기존의 Angular 컴포넌트는 반드시 모듈에 포함되어야 했지만, Standalone 컴포넌트는 독립적으로 사용할 수 있습니다.
2.
간편한 사용: 컴포넌트를 다른 컴포넌트에서 직접 사용할 수 있어, 불필요한 모듈 의존성을 줄일 수 있습니다.
3.
Lazy Loading 지원: Standalone 컴포넌트는 Lazy Loading을 지원하여, 필요할 때만 로드할 수 있습니다.
Standalone 컴포넌트 생성 예시 다음은 Standalone 컴포넌트를 생성하는 방법입니다.
Standalone 컴포넌트 사용 이제 다른 컴포넌트에서 Standalone 컴포넌트를 사용할 수 있습니다. 예를 들어, 부모 컴포넌트에서 사용해 보겠습니다.
모듈에 등록하지 않고 사용 Standalone 컴포넌트는 모듈에 등록할 필요가 없으므로, 다음과 같이 사용할 수 있습니다.
컴포넌트의 standalone의 필요성과 적용 범위 고려
데이터 바인딩을 위한 @Input 데코레이터
Angular에서 데이터 바인딩을 위한 데코레이터는 주로
@Input()
을 사용하여 부모 컴포넌트로부터 값을 받아오는 데 사용됩니다. 이 데코레이터는 자식 컴포넌트에서 부모 컴포넌트의 데이터를 바인딩할 수 있게 해줍니다.
다음은 Angular에서
@Input()
데코레이터를 사용하여 데이터 바인딩을 구현하는 간단한 예시입니다.
1.
자식 컴포넌트 생성 먼저 자식 컴포넌트를 생성하고,
@Input()
을 사용하여 데이터를 받을 준비를 합니다.
2.
부모 컴포넌트 생성 부모 컴포넌트에서 자식 컴포넌트를 사용하고, 데이터를 전달합니다.
3.
모듈에 컴포넌트 추가 모듈 파일에 자식 컴포넌트를 추가합니다.
4.
결과 이제 Angular 애플리케이션을 실행하면, 부모 컴포넌트에서 자식 컴포넌트로 데이터가 바인딩되어 표시됩니다. 자식 컴포넌트는 부모의 데이터를 받아서 화면에 출력하게 됩니다.
이렇게
@Input()
데코레이터를 사용하여 Angular에서 데이터 바인딩을 구현할 수 있습니다.
Angular의 @Input 데코레이터 사용 방법
https://folk.universitetetioslo.no/trygver/themes/mvc/mvc-index.html
1. MVC 디자인 패턴
2. MVC의 요소
[Node.js] 13. MVC 디자인 패턴과 리팩토링
1. 백엔드 NestJS+내장 Express 컨테이너화 및 실행
1.1 Dockerfile 및 .dockerignore 작성
•
MP_Project/Back-end/
Dockerfile
생성
•
MP_Project/Back-end/
.dockerignore
생성
1.2 이미지 빌드
•
터미널
MP_Project/Back-end/
경로(Root)에서
•
Docker-Desktop에서 생성된 NestJS 백엔드 프로젝트가 빌드된 이미지 확인
1.3 컨테이너 실행
•
CLI를 통한 이미지→컨테이너 실행 명령어
[Docker] Docker VM 활용 통합 배포와 CI/CD 파이프라인 구축
1. 플러그인 설치
Marketplace에서 아래 키워드로 검색하여 각각 설치한다.
•
SQLTools
•
@tag:sqltools-driver
2. 설치 후 커넥션 추가
•
좌측 하단 원통형 DB 아이콘이 생성되고 Add New Connection으로 DB와 연결해야 한다.
•
드라이버 플러그인도 설치가 정상적으로 되었다면 아래와 같이 아이콘이 나타난다. MySQL 선택
[Node.js] 12. 데이터베이스 GUI VSCode 플러그인
1. 프로그래밍 배경에서의 모듈
2. TypeScript에서의 모듈
Documentation - Modules
How JavaScript handles communicating across file boundaries.
새로운 폴더(metaverse/greeter/src/modules)
[TypeScript] 9. TypeScript의 Modules
1. Generics
Documentation - Generics
Types which take parameters
새로운 폴더(metaverse/greeter/src/generics)
|
Main Page
|
Category
|
Tags
|
About Me
|
Contact
|
Portfolio
[TypeScript] 8. TypeScript의 Generics
1. 네트워크
2. Client와 Server
3. Web Server와 Web Application Server
[CS] 서버 개발을 위한 기초 CS 지식 정리
1. Object
•
클래스(Class)를 다루기 위해서 객체(Object)에서부터 연관성을 이어나가도록 설명하고자 함
Documentation - Classes
How classes work in TypeScript
새로운 폴더(metaverse/greeter/src/class)
여러 객체가 있는 상황에서 수정이 필요한 상황
2. Class
[TypeScript] 7. TypeScript의 Object/Class
1. Union
Documentation - Everyday Types
The language primitives.
유니온 타입 (metaverse/greeter/src/types)
2. Type Alias & Interface
[TypeScript] 6. TypeScript의 타입 - 2편
1. 원시 타입
Documentation - Everyday Types
The language primitives.
새로운 폴더 (metaverse/greeter/src/types)
2. 배열
3. 변수와 함수에 대한 타입 표기
[TypeScript] 5. TypeScript의 타입 - 1편
1. TypeScript의 기본 사항
Documentation - The Basics
Step one in learning TypeScript: The basic types.
새로운 폴더 (metaverse/greeter/src/basic)
2.
TypeScript 다양한 서포트
3. 타입 지정 방식
[TypeScript] 4. TypeScript 의 기본 기능
1. TypeScript 시작하기
Documentation - TypeScript Tooling in 5 minutes
A tutorial to understand how to create a small website with TypeScript
새로운 프로젝트 (metaverse/greeter)
2.
TypeScript 파일 빌드
[TypeScript] 3. TypeScript 살펴보기
1. TypeScript란?
JavaScript With Syntax For Types.
TypeScript extends JavaScript by adding types to the language. TypeScript speeds up your development experience by catching errors and providing fixes before you even run your code.
TypeScript?
2. 코드를 통한 확인
2.1 Javascript의 코드
2.2 TypeScript의 코드
[TypeScript] 2. TypeScript 소개
0. IDE
1. Git
Git
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
[TypeScript] 1. 개발 환경 구축과 VCS
TypeScript 기초
TypeScript Tutorials
|
Main Page
|
Category
|
Tags
|
About Me
|
Contact
|
Portfolio
[TypeScript] 0. TypeScript 들어가기
1. 릴레이션(테이블)과 관련된 것들
2. 관계대수 vs 관계해석
[정처기] 데이터베이스구축-논리 데이터베이스 설계
Load more
About Me
Contact
Github
Category
Search
Programming Study
Projects
Thoughts
Life
Tags
Search
Project [LMS Platform]
9
Project [LMS Platform]
9
NestJS
27
NestJS
27
TypeScript
10
TypeScript
10
CS Study
73
CS Study
73
Node.js
13
Node.js
13
Spring-LDW
24
Spring-LDW
24
Spring
144
Spring
144
Java
45
Java
45
Algorithm&DataStructure
35
Algorithm&DataStructure
35
Project [TEAM258]
128
Project [TEAM258]
128
Project [iLanD]
35
Project [iLanD]
35
Project [CafeService]
17
Project [CafeService]
17
Project [GameInsight]
6
Project [GameInsight]
6
Project [Toy]
46
Project [Toy]
46
MySQL
30
MySQL
30
JPA
19
JPA
19
MongoDB
11
MongoDB
11
Elasticsearch
8
Elasticsearch
8
Git
4
Git
4
AWS
16
AWS
16
HTML,CSS
7
HTML,CSS
7
JavaScript
12
JavaScript
12
NAS&Docker
14
NAS&Docker
14
Flask
58
Flask
58
Python
17
Python
17
Interesting
0
Interesting
0
Blogging
6
Blogging
6
Kafka
1
Kafka
1
Mac
4
Mac
4
ETC
10
ETC
10
Redis
2
Redis
2
citeFred All Copyright Reserved. 2024