Blog
About Me
citeFredโs Blog
/
Blog Post
Blog
About Me
citeFredโs Blog
/
Blog Post
Share
Blog
About Me
โ๐ป
Blog Post
Post Gallery
Post List
Table
Search
[1์ผ์ฐจ: C++ ๊ฐ์, ํ๊ฒฝ ๊ตฌ์ถ ๋ฐ ๊ธฐ์ด ์ ์ด๋ฌธ ๊ฐ์ ๋๋ณธ]
1. C++ ์ธ์ด ๊ฐ์ ๋ฐ ๊ฒ์ ๊ฐ๋ฐ์์์ ์ญํ
์ฌ๋ผ์ด๋ 1: ๊ฐ์ ์ค๋ฆฌ์ํ ์ด์ ๋ฐ ๊ณผ์ ์๊ฐ
[C++] 1.
C++ ๊ฐ์, ํ๊ฒฝ ๊ตฌ์ถ ๋ฐ ๊ธฐ์ด ์ ์ด๋ฌธ
1. ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต (Migration Strategy)
์์ ํ ๋ฐ์ดํฐ ์ด๊ด์ ์ํ ์์: "์คํค๋ง ๋จผ์ , ๋ฐ์ดํฐ๋ ๋์ค์โ
โข
MySQL๊ณผ PostgreSQL ๊ฐ ๋ฐ์ดํฐ ํ์ (
DATETIME
vs
TIMESTAMP
,
TINYINT
vs
BOOLEAN
๋ฑ) ์ฐจ์ด๋ก ์ธํ ์ง์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ค๋ฅ ๋ฐ์ ์ํ ์กด์ฌ.
โข
๋จ๊ณ๋ณ ์ ๋ต:
1.
JPA ์ฐ๋:
Spring Boot ์ ์ ์ ๋ณด๋ฅผ PostgreSQL๋ก ๋ณ๊ฒฝ.
2.
์คํค๋ง ์๋ ์์ฑ:
์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ํตํด JPA(Hibernate)๊ฐ ์ํฐํฐ(
@Entity
)๋ฅผ ๋ถ์, PostgreSQL์ฉ ๋น ํ ์ด๋ธ(์คํค๋ง) ์๋ ์์ฑ ์ ๋.
3.
๋ฐ์ดํฐ ์ ์ฌ:
์์ฑ๋ ๋น ํ ์ด๋ธ์ ๊ธฐ์กด MySQL ๋ฐ์ดํฐ๋ฅผ Export/Import ๋ฐฉ์์ผ๋ก ์ด๊ด.
ํด๋น ์ธ์ ์ ๋ชฉํ
โข
OS ํ๊ฒฝ์ ๊ตฌ์ ๋ฐ์ง ์๋
Docker ๊ธฐ๋ฐ์ PostgreSQL ๋ฐ
pgvector
ํ๊ฒฝ ๊ตฌ์ถ
โข
๊ธฐ์กด MySQL์ ์ ์ฌ๋ ์ ์๊ด(Exhibition) ๋ฐ ์ํ(Production)
๋ฐ์ดํฐ์ ์์ค ์๋ ์ด์
โข
Spring Boot ๋ฐฑ์๋์
์๋ก์ด DB์
JPA ์ฐ๋ ๋ฐ ๊ธฐ์กด API ์ ์ ๋์ ๊ฒ์ฆ
2. Spring Boot ๋ฐฑ์๋ ์ค์ ๋ณ๊ฒฝ (Backend Configuration)
2.1
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์กด์ฑ ๊ต์ฒด
[Spring AI/RAG] 3. Backend MySQLโPostgreSQL ๋ง์ด๊ทธ๋ ์ด์
1. ๋ง์ด๊ทธ๋ ์ด์ ๋ฐฐ๊ฒฝ ๋ฐ ๋ชฉํ (Background & Objective)
์ PostgreSQL๊ณผ pgvector์ธ๊ฐ?
โข
ํ์ฌ ๊ฐ์ ์ ์๊ด ์๋น์ค๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ
MySQL์ ๊ธฐ๋ฐ์ผ๋ก ์ด์
๋๊ณ ์๋ค.
โข
ํ์ง๋ง ํฅํ ๋์ ํ
RAG ์์คํ
์ ๋ฌธ์๋ฅผ ์๋ฒ ๋ฉํ ๊ณ ์ฐจ์ ๋ฐฐ์ด์ธ '๋ฒกํฐ(Vector)' ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ,
๋ฒกํฐ ๊ฐ์ '์ฝ์ฌ์ธ ์ ์ฌ๋'๋ฅผ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๊ณ์ฐํด ๋ผ ์ ์๋ ํน์ํ ๊ธฐ๋ฅ์ด ํ์
ํ๋ค.
โข
๊ธฐ์กด MySQL ํ๊ฒฝ์์๋ ์ด๋ฌํ ๊ณ ์ ๋ฒกํฐ ์ฐ์ฐ์ด ๋งค์ฐ ๋นํจ์จ์ ์ด๊ฑฐ๋ ์ง์๋์ง ์์ผ๋ฏ๋ก, Spring AI ์ํ๊ณ์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๊ณ ํธํ์ฑ์ด ๋ฐ์ด๋
PostgreSQL
๊ณผ ๊ทธ ํ์ฅ ํ๋ก๊ทธ๋จ์ธ
pgvector
๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๋ฉด ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ๋ก ๊ฒฐ์
ํ๋ค.
ํด๋น ์ธ์ ์ ๋ชฉํ
โข
OS ํ๊ฒฝ์ ๊ตฌ์ ๋ฐ์ง ์๋
Docker ๊ธฐ๋ฐ์ PostgreSQL ๋ฐ
pgvector
ํ๊ฒฝ ๊ตฌ์ถ
โข
๊ธฐ์กด MySQL์ ์ ์ฌ๋ ์ ์๊ด(Exhibition) ๋ฐ ์ํ(Production)
๋ฐ์ดํฐ์ ์์ค ์๋ ์ด์
โข
Spring Boot ๋ฐฑ์๋์
์๋ก์ด DB์
JPA ์ฐ๋ ๋ฐ ๊ธฐ์กด API ์ ์ ๋์ ๊ฒ์ฆ
2. ์ Docker๋ก ํ๊ฒฝ์ ๊ตฌ์ถํด์ผ ํ๋๊ฐ? (Why Docker?)
[Spring AI/RAG] 2. PostgreSQL + pgvector๋ฅผ ํตํ Vector Database ํ๊ฒฝ ๊ตฌ์ถ
1. ์ ์ ๋ฐฐ๊ฒฝ (Background)
ํ์ฌ ๊ตฌํ ๋จ๊ณ์ ํ๊ณ ๋ฐ ๋ฌธ์ ์ธ์
โข
ํ์ฌ ๊ฐ์ ์ ์๊ด(VExhibition)์ AI ๋์จํธ ์์คํ ์ ์ํ์ ์งง์ ์ค๋ช (Description)๊ณผ LLM(๋ํ ์ธ์ด ๋ชจ๋ธ)์ ์ฌ์ ํ์ต๋ ๋ด๋ถ ์ง์๊ณผ ํ๋กฌํํธ ์ ์(Prompt Engineering)์๋ง ์์กดํ์ฌ ๋๋ณธ์ ์์ฑํ๊ณ ์๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ ํ๊ณ์ ์ ์ง๋๋ค.
โฆ
ํ๊ฐ ํ์(Hallucination):
LLM์ด ์ํ์ ์๋๋ ์๊ฐ์ ๋ฐฐ๊ฒฝ์ ๋ํด ์กด์ฌํ์ง ์๋ ๊ฑฐ์ง ์ ๋ณด๋ฅผ ์ฌ์ค์ฒ๋ผ ์ง์ด๋ผ ์ํ์ฑ์ด ์กด์ฌํ๋ค.
โฆ
์ ๋ฌธ์ฑ ๋ฐ ์ ๋ณด์ ๊น์ด ๋ถ์กฑ:
๋จ์ํ ํ ์คํธ ๋ฌ์ฌ๋ฅผ ๋์ด์ ๊น์ด ์๋ ๋ฏธ์ ์ฌ์ ๋ฐฐ๊ฒฝ, ์๊ฐ์ ์ฒ ํ, ์ ์ ๊ธฐํ ์๋ ๋ฑ์ ์์ธํ ์ ๋ฌํ๊ธฐ ์ด๋ ต๋ค.
โฆ
์ต์ ๋ฐ์ดํฐ ๋ฐ์์ ํ๊ณ:
์ ์ํ ๋ผ์ธ์ ์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ์๋ก์ด ์ํ์ด ์ถ๊ฐ๋ ๋๋ง๋ค LLM์ ๋ฏธ์ธ ์กฐ์ (Fine-tuning)ํ๋ ๊ฒ์ ๋น์ฉ๊ณผ ์๊ฐ ์ธก๋ฉด์์ ๋นํจ์จ์ ์ด๋ค.
RAG๋ฅผ ํตํ AI 1์ฐจ ๊ณ ๋ํ
โข
์ ๋ขฐํ ์ ์๋ ์ธ๋ถ ์ง์(์ ์ ๋๋ก, ๋ฏธ์ ์ฌ ๋ฌธํ ๋ฑ)์ ๊ฒ์ํ์ฌ ํ๋กฌํํธ์ ์ ๊ณตํ๋
RAG(๊ฒ์ ์ฆ๊ฐ ์์ฑ, Retrieval-Augmented Generation)
ํ์ดํ๋ผ์ธ์ ๋์ ํ๊ณ ์ ํ๋ค.
2.
๊ธฐ๋ ํจ๊ณผ (Expected Benefits)
[Spring AI/RAG] 1. AI ์๋น์ค ๊ณ ๋ํ ๊ฐ์์ ํต์ฌ ์ฉ์ด ์ ๋ฆฌ (feat. LLM ํ์ฉ ๋์จํธ ์ฌ๋ก)
1. Why React? Vite?
1. React๋?
React
โข
Node.js ๊ธฐ๋ฐ ํ๋ ์์ํฌ
โข
์ปดํฌ๋ํธ
๊ธฐ๋ฐ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ
โข
๊ฐ์ DOM ๊ตฌํ์ฒด๋ฅผ ํตํ ๋น ๋ฅธ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ฐ ํ์ด์ง ๋ก๋ฉ
โข
์ ์ธ์ UI(์ปดํฌ๋ํธ ๋ชจ๋)
์ JSX(JavaScript ๊ธฐ๋ฐ XML) ์ง๊ด์ ์ธ ์ฝ๋(๊ฐ์ฒด์งํฅ)
2. Vite๋?
Vite
โข
[React+vite] 1. ํ๋ก์ ํธ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ๊ณผ ํต์ฌ ์ฉ์ด ์ ๋ฆฌ
6์ผ์ฐจ: ์ต์ข ์์คํ ํตํฉ ๋ฐ ๋ฐ๋ชจ (FastAPI)
๋ถ์ :
๋ฅ๋ณด์ด์ค/๋ฅํ์ดํฌ ํ์ง ๋ชจ๋ธ์ ํ์ฉํ
์ถ๋ก API ์๋ฒ
๊ตฌ์ถ ๋ฐ
์ ์ฒด ํตํฉ
Agenda: 6์ผ์ฐจ ํ์ต ๋ชฉํ ๋ฐ ์ผ์ (8H)
โข
๋ชจ๋ 1 (์ด๋ก /์ค์ต):
FastAPI ์๋ฒ ํ๊ฒฝ ์ค์ ๋ฐ ํ๋ก์ ํธ ๊ตฌ์กฐ ๊ตฌ์ฑ
โฆ
Python ํ๊ฒฝ ์ค์ ๋ฐ FastAPI, Uvicorn, TensorFlow ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
โฆ
models/
ํด๋์ 5์ผ์ฐจ ๋ชจ๋ธ ํ์ผ ๋ฐฐ์น
โข
๋ชจ๋ 2 (์ค์ต):
๋ฅ๋ณด์ด์ค ํ์ง API ๊ฐ๋ฐ (FastAPI)
โฆ
model_audio.h5
๋ก๋ ๋ฐ ์ถ๋ก ํจ์ ๊ตฌํ
โฆ
/deepfake/audio
์๋ํฌ์ธํธ ๊ตฌํ (์์ฑ ํ์ผ ์์ ๋ฐ ์ง์ ํ๋ณ)
โข
๋ชจ๋ 3 (์ค์ต):
๋ฅํ์ดํฌ ์ด๋ฏธ์ง ํ์ง API ๊ฐ๋ฐ (FastAPI)
โฆ
model_image.h5
๋ก๋ ๋ฐ ์ถ๋ก ํจ์ ๊ตฌํ
โฆ
/deepfake/image
์๋ํฌ์ธํธ ๊ตฌํ (์ด๋ฏธ์ง ํ์ผ ์์ ๋ฐ ์ง์ ํ๋ณ)
[AI๋ฅํ์ดํฌ] 6.
๋ฅํ์ดํฌ ํ์ง ํ๋ก์ ํธ(2) - Inference API + Frontend + Backend โ Docker ์ ํ๋ฆฌ์ผ์ด์ ํตํฉ
5์ผ์ฐจ: ๋ฅํ์ดํฌ ํ์ง ์ฑ ๊ฐ๋ฐ(1) ํ๋ก์ ํธ
(์ฌ๋ผ์ด๋ 1: ํ์ง)
"์๋ ํ์ญ๋๊น. 5์ผ์ฐจ ๊ฐ์๋ฅผ ์์ํ๊ฒ ์ต๋๋ค. ์ค๋์ 'ํ๋ก์ ํธ๋ฅผ ํตํ AI ์ญ๋๊ฐํ ๊ณผ์ ' ์ค **'๋ฅํ์ดํฌ ํ์ง ์ฑ ๊ฐ๋ฐ(2) ํ๋ก์ ํธ'**์ ๋ํด ๋ค๋ฃจ๊ฒ ์ต๋๋ค. ์ด์ ๊น์ง ๋ง๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ผ๋์, ์ค์ ์ง๋ฅ์ ๋ถ์ด๋ฃ๋ AI ๋ชจ๋ธ ํํธ๋ฅผ ์ง์ค์ ์ผ๋ก ํ์ตํ๊ฒ ์ต๋๋ค."
๋ถ์ :
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ, ๋ฅ๋ณด์ด์ค ๋ฐ ๋ฅํ์ดํฌ ์ด๋ฏธ์ง ๋ชจ๋ธ ๋ถ์๊ณผ ํ๋ จ
Agenda: 5์ผ์ฐจ ํ์ต ๋ชฉํ ๋ฐ ์ผ์
โข
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ:
๊ฐ๋ ์ดํด ๋ฐ ๋ฅํ์ดํฌ ํ์ง๋ฅผ ์ํ ๊ธฐ์ด ๋ฐ์ดํฐ ํ๋ณด.
โข
๋ฅ๋ณด์ด์ค ๋ชจ๋ธ ๋ถ์:
์์ฑ ํน์ง ํ์ต ๋ฐ ์ง์ ํ๋ณ ๋ฉ์ปค๋์ฆ ์ดํด.
[AI๋ฅํ์ดํฌ] 5.
๋ฅํ์ดํฌ ํ์ง ํ๋ก์ ํธ(1) - AI ๋ชจ๋ธ ํ์ต
4์ผ์ฐจ: ๋ฐฑ์๋ ํ๋ก๊ทธ๋๋ฐ (NestJS)
๋ถ์ :
Node.js, TypeScript, NestJS ํต์ฌ ๊ฐ๋ ๊ณผ RESTful API ์๋ฒ ๊ตฌ์ถ
Agenda: 4์ผ์ฐจ ํ์ต ๋ชฉํ ๋ฐ ์ผ์
1.
NestJS ์ด๋ก (1):
ํต์ฌ ๊ฐ๋ , ์ํคํ ์ฒ (DI, Module)
2.
NestJS ์ค์ต (1):
Nest CLI ํ๊ฒฝ ๊ตฌ์ถ ๋ฐ ํ๋ก์ ํธ ์์ฑ (Resource)
3.
NestJS ์ด๋ก (2):
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ORM (TypeORM)
[AI๋ฅํ์ดํฌ] 4.
๋ฐฑ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ
(
NestJS
)
3์ผ์ฐจ - ํ๋ก ํธ์๋ ๊ฐ๋ฐ: React ๊ธฐ์ด
๋ถ์ :
JavaScript ํต์ฌ ๋ฌธ๋ฒ, React ์ปดํฌ๋ํธ, Hooks๋ฅผ ํ์ฉํ ๋ฅํ์ดํฌ ํ์ง ์น UI ๊ตฌํ
Agenda: 3์ผ์ฐจ ํ์ต ๋ชฉํ ๋ฐ ์ผ์
1.
JavaScript Core (์ด๋ก ):
ES6+ ์ฃผ์ ๋ฌธ๋ฒ, ๋น๋๊ธฐ ์ฒ๋ฆฌ (Promise, async/await).
2.
React Core (์ด๋ก ):
SPA, JSX, Component, Props, State ๊ฐ๋ .
3.
์ค์ต 1 (ํ๊ฒฝ ๊ตฌ์ถ):
React ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ (Vite), ๊ธฐ๋ณธ ์ปดํฌ๋ํธ ๋ฐ Props.
[AI๋ฅํ์ดํฌ] 3. ํ๋ก ํธ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ (React)
2์ผ์ฐจ: ์ค๋งํธ์ํฐ ์ฐ์ ๋ํฅ ๋ฐ ๋ฅํ์ดํฌ ํ์ง ํ๋ก์ ํธ ์ค๊ณ
๋ถ์ :
๋ฅํ์ดํฌ ํ์ง ๊ธฐ์ ์ ์ค๋งํธ์ํฐ ์ ์ฉ ๋ฐฉ์ ๋ชจ์ ๋ฐ ์น ์๋น์ค ๊ธฐํ
2์ผ์ฐจ ํ์ต ๋ชฉํ ๋ฐ ์ผ์
1.
์ด๋ก (2H):
์ค๋งํธ์ํฐ ์ฐ์ ๋ํฅ ๋ฐ ๋ฅํ์ดํฌ ํ์ง ๊ธฐ์ ์ ์ฉ ๋ฐฉ์
2.
์ค์ต (6H):
๋ฅํ์ดํฌ ํ์ง ์น ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก์ ํธ ์ค๊ณ
โข
๋ชฉํ ์ค์ (SMART) ๋ฐ ๊ธฐ๋ฅ ์ ์
โข
์์คํ ์ํคํ ์ฒ ๋ฐ UI/UX
โข
๋ฐ์ดํฐ๋ฒ ์ด์ค (ERD) ๋ฐ API ์ค๊ณ
3.
๋ฐํ ๋ฐ ํผ๋๋ฐฑ:
ํ๋ณ ์ค๊ณ ๋ด์ฉ ๋ฐํ
[AI๋ฅํ์ดํฌ] ๏ผ.
์ค๋งํธ์ํฐ ์ฐ์ ๊ณผ AI
1์ผ์ฐจ: AI ํ์ ๊ณผ ์ค๋งํธ์ํฐ: ๋ฅํ์ดํฌ ํ์ง ์ฒซ๊ฑธ์
๋ถ์ :
AI ๊ธฐ๋ณธ๊ธฐ, ์ค๋งํธ์ํฐ ์ ์ฉ, ๊ทธ๋ฆฌ๊ณ ๋ฅํ์ดํฌ ๋ฌธ์ ์ ์ดํด
Agenda: 1์ผ์ฐจ ํ์ต ๋ชฉํ ๋ฐ ์ผ์
1.
AI/DL ์ด๋ก :
AI, ๋จธ์ ๋ฌ๋, ๋ฅ๋ฌ๋ ๊ฐ๋ ๋ฐ ์ฐจ์ด์ ์ดํด
2.
์ค์ต 1 (ํ๊ฒฝ):
Colab ๋ฐ Python ๋ฐ์ดํฐ ๋ถ์ ๋๊ตฌ (Numpy/Pandas) ํ์ฉ
[AI๋ฅํ์ดํฌ] 1. AI ๋ฐ ์ค๋งํธ์ํฐ
1,2,3 ์ฅ์์์ ์ค์ต๊ณผ ์ค๋ช ์ ๋น์ ๊ณต, ์น๊ฐ๋ฐ ๊ฒฝํ์ด ์๋ ๋์์ ์ํด ์๋ดํ์ง๋ง, ์ด ๊ณผ์ ๋ ๋ค์ ์ด๋ ต๊ฒ ๋๊ปด์ง ์ ์๋ ์์ด๋ณด๋ค์ ์ํ AI ํ์ฉ ๋ฐฉ๋ฒ์ด๋ค.
1. AI์๊ฒ ๊ตฌ์ฑ ๋ง๋ค๋๋ก ํ๊ธฐ
โข
Framer ํํ์ด์ง์์
Start with AI
์ ํ
โข
ํ๋ก์ ํธ ์๊ฐ ํ์ด์ง๋ฏ๋ก
Landing Page
์ ํ ๋ฐ
์ ์ก
โข
์์์ ์๋ํฐ๊ฐ ์ด๋ฆฌ๋ฉด์, ๊ธฐ๋ณธ ๋ ์ด์์์ AI๊ฐ ์์ฑํ๋ค.
โข
์ผ์ชฝ Ask Framerโฆ ์์ ์ํ๋ ๊ฒ์ ์ ๋ ฅํด๋ณด๋ ค๊ณ ํ๋ค.
โฆ
์ฒ์ ์ ๋ ฅํ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋๋ ๊ฐ์์ ์๊ด VEXPO๋ผ๋ ์ธ๋ฆฌ์ผ์์ง ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ์ด ์ด๊ฒ์ ๋ํ ํ๋ก์ ํธ ์๊ฐ ํ์ด์ง๋ก ๊ตฌ์ฑํด์ค ํ๋ก์ ํธ ์ค๊ณ ๊ณผ์ ์ด๋ฏธ์ง๋ค๊ณผ ๋ ๋ฒจ๋์์ธ ๋ชจ์ต ๋ด๋ถ/์ธ๋ถ ์ฌ๋ฌ ๋ชจ์ต์ด ์๊ณ , ๊ธฐ๋ฅ ๊ตฌํ์ ๋ํ ๋ธ๋ฃจํ๋ฆฐํธ ๋ก์ง ์ ๋์ ์ด๋ฏธ์ง๊ฐ ์์ด. ์ด๊ฑธ ํฌํจ ํ ์ ์๋๋ก ์ค๋นํด์ค ์๋ก์ด ํ์ด์ง๋ฅผ ๋ง๋ค์ง๋ง๊ณ ํ์ ๋ณ๊ฒฝํด์ค ๋ถํ์ํ ์ฐ๋ฝํ๊ธฐ, ํ์ฌ ๋ฑ์ ์ ๊ฑฐํด์ค๋ ๋
Shell
๋ณต์ฌ
โข
์ค์๊ฐ์ผ๋ก AI๊ฐ ํ์ด์ง๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์์ํ๋ค.
[Framer] 4. AI Framer๋ฅผ ํ์ฉ ์น์ฌ์ดํธ์ ๋ง๋ค๊ธฐ(์ด์ฌ์์ถ์ฒ)
1. ์น ์๋น์ค์ ๋์์ ๋ํด ์ดํดํ๊ธฐ
โข
ํํ์ด์ง๋ ์ฐ๋ฆฌ๊ฐ ๋ณด์ฌ์ฃผ๋ ๊ฒ ๋ง๊ณ ๋ ํด๋ฆญํด์ ๋๋ ์๋ ๋์ํ๋ ๊ฒ๋ค์ด ํฌํจ๋๋ค. ์ด ํํ์ด์ง์ ์์๋ก๋ ์๋ ์ฌ์ง๊ณผ ๊ฐ๋ค.
โข
์ฐ๋ฆฌ๋ ๊ฐ์ ๋ก ์ฐ๋ฆฌ ํ๋ก์ ํธ ์ด๋ฏธ์ง๋ฅผ ๋ฃ๊ธดํ์ง๋ง, ์ ๋ ๊ฒ ํ๋ก์ ํธ ๋ฉ๋ด๋ก ์ด๋ํ๋
์ฐ๋ฆฌ๊ฐ ์์ ํ์ง ๋ชปํ๋ ๋ถ๋ถ๋ค์ด ์๋ ๊ฒ์ ํ์ธ
ํ๋ค.
โข
์ค์ ํํ์ด์ง๋ค์ ๋์์ ๋จ์ํ ์ด๋ฏธ์ง๋ฅผ ๊ต์ฒดํ๋ ์ ๋๋ก๋ ํ๊ณ๊ฐ ์๊ณ ,
โฆ
์ด ํํ์ด์ง์ ํ๋ก์ ํธ๋ ํ๋ก์ ํธ ์ ๋ณด, ์ฌ์ง ๊ฐ์ ๊ฒ์ ๋ฑ๋กํ๊ณ ํํ์ด์ง์์ ๋ณด์ด๋๋ก ์ฐ๊ฒฐ๋์ด ์๋ค. ์ด๊ฒ์ ์ฝํ ์ธ ๊ด๋ฆฌ ์์คํ (Contents Management System)์ด ๋ค์ด๊ฐ ํํ์ด์ง๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
โฆ
ํ์ง๋ง ์ด๊ฒ์ ์น๊ฐ๋ฐ์์ ๊ฒฝ์ฐ ์ค์ ์ฝ๋๋ก ์ด์ฒ๋ผ ์ด์๋๋๋ก ๊ตฌ์ฑํ์ง๋ง, ์ด
์ฌ์์ ๊ฒฝ์ฐ ์ฝ๋๋ก ์ ์ฉํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์
๊ฐ ์๋ค.
โข
ํ์ง๋ง
Framer์์๋ ์ด๋ฌํ ๋ณต์กํจ์ ๊ฐ๋จํ ํ์ด์ง ๊ตฌ์ฑ์ ํตํด ํด๊ฒฐ
ํ ์ ์๋ค.
[Framer] 3. Framer๋ฅผ ํ์ฉ ์น์ฌ์ดํธ์ ์ฝํ ์ธ ๋ฅผ ๋ฐ๊ฟ๋ณด๊ธฐ ์ฌํ(์ฝํ ์ธ ๊ด๋ฆฌ์์คํ CMS?)
1. Framer ํ์๊ฐ์
โข
ํ์๊ฐ์ ํ๊ธฐ
โข
๊ตฌ๊ธ๋ก ๊ฐํธ ํ์๊ฐ์ ํ๊ธฐ
โข
๊ตฌ๊ธ ํ์ ๊ฐ์ ์งํ, ์๋ง๋ ์ ๋ณด ์ ๋ ฅํ์ฌ ํ์ ๊ฐ์ ์๋ฃํ๊ธฐ
โข
ํ์๊ฐ์ ํ ๋ํ๋๋ ๋ฉ์ธ ์๋ํฐ ํ์ด์ง
2. ํ ๋ง ์ฐพ๊ธฐ
[Framer] 2. Framer๋ฅผ ํ์ฉ ์น์ฌ์ดํธ ๋์์ธ๊ณผ ๋ฐฐํฌํด๋ณด๊ธฐ
1. Framer๋ ๋ฌด์์ธ๊ฐ?
Framer: Create a professional website, free. No code website builder loved by designers.
Framer(ํ๋ ์ด๋จธ)๋ ๋์์ด๋๊ฐ ์ฝ๋ฉ ์์ด๋ ์ค์ ์๋ํ๋ ์ ๋ฌธ๊ฐ ์์ค์ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ์ ์๋๋ก ํ๋
ํ์ ์ ์ธ ์น ๋น๋ฉ ํ๋ซํผ
์ ๋๋ค.
๊ณผ๊ฑฐ์๋ ๋์์ด๋๊ฐ ๋ง๋ ์์์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ก ๊ตฌํํ๋ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ด์์ง๋ง, Framer๋
๋์์ธ๊ณผ ๊ฐ๋ฐ ์ฌ์ด์ ๊ฐ๊ทน์ ํ๋ฌผ์ด
๋์์ธ ํด์์ ์์ ํ๋ฏ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค๊ณ ํด๋ฆญ ํ ๋ฒ์ผ๋ก ๋ฐ๋ก ์ธํฐ๋ท์ ๊ฒ์(๋ฐฐํฌ)ํ ์ ์๊ฒ ํด์ค๋๋ค.
์ฝ๊ฒ ๋งํด, "๋์์ธ ํด(Figma ๋ฑ)์ ์์ ๋ + ์น ๋น๋(Wix, Squarespace ๋ฑ)์ ํธ๋ฆฌํจ + ์ค์ ์น ๊ธฐ์ (React)์ ๊ฐ๋ ฅํจ"์ ํฉ์ณ๋์ ๋๊ตฌ๋ผ๊ณ ์ดํดํ์๋ฉด ๋ฉ๋๋ค.
[Framer] 1. ์ด๋ณด, ๋น์ ๊ณต์๋ฅผ ์ํ Framer๋ก ํํ์ด์ง ๋ง๋ค๊ธฐ ์๊ฐ
Python์ด๋ ๋ฌด์์ธ๊ฐ?
Python(ํ์ด์ฌ)์ 1991๋ ๋ค๋๋๋์ ํ๋ก๊ทธ๋๋จธ
๊ท๋ ๋ฐ ๋ก์ฌ(Guido van Rossum)
์ด ๊ฐ๋ฐํ ๊ณ ๊ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค. 'Monty Python's Flying Circus'๋ผ๋ ์๊ตญ์ ์ฝ๋ฏธ๋ ํ๋ก๊ทธ๋จ์์ ์ด๋ฆ์ ๋ฐ์จ Python์
"๊ฐ๋จํ๊ณ ์ฝ๊ธฐ ์ฌ์ด"
์ฒ ํ์ ๋ฐํ์ผ๋ก ์ค๊ณ๋์๋ค.
Python์ ํต์ฌ ํน์ง
1. ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ๋ฌธ๋ฒ
Python์ ๊ฐ์ฅ ํฐ ์ฅ์ ์
์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด ๋ฌธ๋ฒ
์ด๋ค. ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋นํด ์ฝ๋๊ฐ ์์ด์ ๋น์ทํ์ฌ ์ด๋ณด์๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
[Python] Python์ด๋ ๋ฌด์์ธ๊ฐ? - ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ์๋ฅผ ์ํ
ํ๋ก๊ทธ๋๋ฐ์ ์ํ Python ๋ฌธ๋ฒ ๊ธฐ์ด
Python Tutorials
[Python] Python์ด๋ ๋ฌด์์ธ๊ฐ? - ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ์๋ฅผ ์ํ
[Python] 0. Python ๋ค์ด๊ฐ๊ธฐ
์์ ํ์ ๋ถ๋ถ
AuthModule
auth.module.ts
AuthModule ํ์ธ ํ์
TypeError: Cannot read properties of undefined (reading 'challenge')
ํด๋ผ์ด์ธํธ ์ฝ์ ์์ ๋ก๊ทธ์ธ(OAuth)์ ๋ฐฑ์๋ ์๋ฒ ์ค์ฌ ์ธ์ฆ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ
โข
๋ณด์ ๋ฐ ๊ด๋ก์ ํ๋ก๋์ ํ๊ฒฝ์์๋ Credential ํ๋ ๋ฐ ๊ด๋ฆฌ๋ฅผ ๋ฐฑ์๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ๊ด๋ก์ด์ ๋ ์์ ํ ๋ฐฉ์
โข
๋ฐ๋ผ์ ์ด์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋๋ก Credential์ ์ ๋ฌํ๋ ์ฝ์ ๊ตฌํ์์ ๋ฐฑ์๋ ์ค์์ง์ค์ ๊ตฌํ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ ํ๋ค.
[OAuth2.0] Google Social Login ๊ตฌํ - ๋ฐฑ์๋ ์ค์ ๊ด๋ฆฌ์ ๋ก์ง ๊ตฌํ
์์ ๋ก๊ทธ์ธ์ ๋ชจ๋ ๋น์ทํ ๊ณผ์
โข
์ด์ ์นด์นด์ค ๋ก๊ทธ์ธ ๊ตฌํ๊ณผ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋์ผํ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
1.
์ธ์ฆ ์ ๊ณต์(Provider)์ธ Google ๋๋ฒจ๋กํผ ์ฝ์์ ์ ๊ทผํด์ API ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑ
2.
REST API ํค
๋ฑ ์ธ์ฆ ํค, ํ ํฐ ๋ฑ์ ๋ฐ์
3.
ํด๋น ํ ํฐ๊ณผ ํจ๊ป ๋ฐฑ์๋์๋ฒ๊ฐ ํ๋ก๋ฐ์ด๋ ์๋ฒ๋ก ์์ฒญํ๋ ์ค์ฒฉ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ฒ ๋จ
โข
์ผ๋ฐ๋ก๊ทธ์ธ :
์ฌ์ฉ์ โ ์๋ฒ(์๋น์ค ์๋ฒ) โ ์ฌ์ฉ์
โข
์์ ๋ก๊ทธ์ธ : ์ฌ์ฉ์ โ ์๋ฒ(
์๋น์ค ์๋ฒ โ ํ๋ก๋ฐ์ด๋ ์๋ฒ โ ์๋น์ค ์๋ฒ
) โ ์ฌ์ฉ์
โข
์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ตฌํํ๋ ๊ณผ์ ์ ์ ๋ฆฌ
[OAuth2.0] Google Social Login ๊ตฌํ - ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์ฝ์
๋ฌธ์ ์ธ์
HTTPS ๋ฐฐํฌ๋ฅผ ํตํด ๋ชจ๋ ์๋ฒ๋ค์ SSL์ ํตํด HTTPS ์์ฒญ/์๋ต์ ๋ฐ๋ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝ๋๊ณ ์์
โข
์ด ์ค PixelStreaming์ ํ๋ ์น์๊ทธ๋๋ง์๋ฒ(WebRTC/Stun-Turn Server)๊ฐ ๋์ผํ ๋๋ฉ์ธ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ฉด์ ํ๋ก ํธ์๋ ์๋น์ค ๋ด์ iFrame์ผ๋ก PixelStreaming ํ๋ฉด์ ์๋ฒ ๋ฉ ํ๋ ๋ถ๋ถ์ ์ค๋ฅ๊ฐ ๋ฐ์
โข
๋์ผ ์ค๋ฆฌ์ง์ ๋ฐ๋ฅธ ๋ฌธ์
โข
chrome-error://chromewebdata/:1 Refused to display '
https://metaverseacademy.site:8443/
' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
ํด๊ฒฐ ๋ฐฉ์ ํ์
ํด๊ฒฐ ์๋
โข
๋ณด์์ ์ํ์ฌ ๋ค๋ฅธ ์ฌ์ดํธ์์ ๋ก๋ํ ๋ ํ์ฉ ๋ฒ์๊ฐ ์ง์ ๋์ด ์๋ค.
โข
ํธ์ถํ๋ ์ฌ์ดํธ(A ํ๋ก์ ํธ)๋ย ํธ์ถ ๋นํ๋ ์ฌ์ดํธ(B ํ๋ก์ ํธ)์์ ๋ง์๊ฑฐ๋ผ ํ ์ ์๋ ์ผ์ ์๋ค.
โข
ํธ์ถ ๋นํ๋ ์ฌ์ดํธ(B ํ๋ก์ ํธ)์์ X-Frame-Options ์ค์ ์ ํด์ค๋ค.
โฆ
DENY:ย ์๋ํ๋ ์ฌ์ดํธ์ ๊ด๊ณ์์ด ํ์ด์ง๋ฅผ ํ๋ ์์ ํ์ X
โฆ
SAMEORIGIN:ย ํ์ด์ง๋ ๋ชจ๋ ์กฐ์ ํ๋ ์์ด ํ์ด์ง ์์ฒด์ ๋์ผํ ์ถ์ฒ์ธ ๊ฒฝ์ฐ์๋ง ํ์
โข
ํธ์ถ๋นํ๋ ์ ์ฅ์ธ B ํ๋ก์ ํธ์์ ์๋ต ํค๋์ย X-Frame-Options๋ฅผ ์ธํ ํด์ ๋ณด๋ด์ฃผ์ด์ผ ํ๋ค.
โข
httpResponse.setHeader("X-Frame-Options", "allow-fromย Aํ๋ก์ ํธ IP์ฃผ์:ํฌํธ๋ฒํธ");
httpResponse
.
setHeader
(
"X-Frame-Options"
,
"allow-from http://localhost:8080"
)
;
Java
๋ณต์ฌ
ํด๊ฒฐ ์๋์ ๊ฒฐ๊ณผ
ํธ์ถ ๋นํ๋ ์ ์ฅ์ธ Pixel Streaming์ ์๋ฒ์์ ํค๋ ์ถ๊ฐ ์ค์ ํ์
โข
์๋๋ SignalingWebServer์ cirrus.js์ ๋ถ๋ถ์ด๋ค.
โข
ํด๋น ์๋ฒ ํ๋ก์ ํธ๋
helmet
์ HTTP ํค๋๋ฅผ ์ค์ ํ์ฌ ์ฑ์ ์ผ๋ฐ์ ์ธ ์น ์ทจ์ฝ์ ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๋ฐ ๋์์ด ๋๋ Express.js ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ผ๋ก ํ์ ๋์๋ค.
if
(
config
.
UseHTTPS
)
{
app
.
use
(
helmet
(
)
)
;
app
.
use
(
hsts
(
{
maxAge
:
15552000
// 180 days in seconds
}
)
)
;
//Setup http -> https redirect
console
.
log
(
'Redirecting http->https'
)
;
app
.
use
(
function
(
req
,
res
,
next
)
{
if
(
!
req
.
secure
)
{
if
(
req
.
get
(
'Host'
)
)
{
var
hostAddressParts
=
req
.
get
(
'Host'
)
.
split
(
':'
)
;
var
hostAddress
=
hostAddressParts
[
0
]
;
if
(
httpsPort
!=
443
)
{
hostAddress
=
`
${
hostAddress
}
:
${
httpsPort
}
`
;
}
return
res
.
redirect
(
[
'https://'
,
hostAddress
,
req
.
originalUrl
]
.
join
(
''
)
)
;
}
else
{
console
.
error
(
`
unable to get host name from header. Requestor
${
req
.
ip
}
, url path: '
${
req
.
originalUrl
}
', available headers
${
JSON
.
stringify
(
req
.
headers
)
}
`
)
;
return
res
.
status
(
400
)
.
send
(
'Bad Request'
)
;
}
}
next
(
)
;
}
)
;
}
JavaScript
๋ณต์ฌ
โข
์ค์ ๋ก ํ๋ผ๋ฏธํฐ๋ก UseHttps boolean์ ๋ฐ๋ ๊ฒ์ผ๋ก ๋ณด์
HTTPS ์ฌ์ฉ ์์๋ง
helmet
์ ์ฉ:
helmet
๋ฏธ๋ค์จ์ด๋
config.UseHTTPS
๊ฐ
true
์ผ ๋๋ง ํ์ฑํ๋๊ณ ์๋ค.
โข
helmet
์ค์ ๋ณ๊ฒฝ์ผ๋ก
helmet()
ํธ์ถ ์์
frameguard
์ต์ ์ ๋ช ์์ ์ผ๋ก ์ค์ ํ์ฌ
X-Frame-Options
ํค๋์ ๋์์ ๋ณ๊ฒฝํ๊ณ ์ ํ๋ค.
1.
์ฒซ๋ฒ์งธ๋ก ํด๋น ๋ถ๋ถ์ด ์ค์ง์ ์ผ๋ก ์ ๋ฌธ์ ๋ฅผ ๋ฐ์์ํค๋์ง ํ์ธ
ํ๊ธฐ ์ํ์ฌ
frameguard
์ต์ ์์ฒด๋ฅผ ๋นํ์ฑํ ํด๋ณธ๋ค.
if
(
config
.
UseHTTPS
)
{
app
.
use
(
helmet
(
{
frameguard
:
false
// frameguard ๋ฏธ๋ค์จ์ด ๋นํ์ฑํ
}
)
)
;
app
.
use
(
hsts
(
{
maxAge
:
15552000
// 180 days in seconds
}
)
)
;
JavaScript
๋ณต์ฌ
โข
์ด๋ฅผ ํตํด ํด๋น
helmet
๋ฏธ๋ค์จ์ด๊ฐ ํด๋น ๋ถ๋ถ์ ์ ์ดํ๊ณ ์๋ ๊ฒ์ผ๋ก ํ์
๋์๋ค.
2.
์ด ์ํ๋ก๋ ๋ณด์์ ์ทจ์ฝ์ ์ ๋ฐ์ ์ํฌ ์ ์์ผ๋ฏ๋ก ๋ช ์์ ์ผ๋ก ํด๋น ๋๋ฉ์ธ์ ๋ํ ์ถ์ฒ ํ์ฉ์ผ๋ก ์ค์ฝํ๋ฅผ ์ขํ๊ณ ์ ํ๋ค.
if
(
config
.
UseHTTPS
)
{
app
.
use
(
helmet
(
{
frameguard
:
false
// frameguard ๋ฏธ๋ค์จ์ด ๋นํ์ฑํ
}
)
)
;
app
.
use
(
(
req
,
res
,
next
)
=>
{
res
.
setHeader
(
"Content-Security-Policy"
,
`
frame-ancestors 'self' https://metaverseacademy.site:443 https://www.metaverseacademy.site:443;
`
)
;
next
(
)
;
}
)
;
app
.
use
(
hsts
(
{
maxAge
:
15552000
// 180 days in seconds
}
)
)
;
...
JavaScript
๋ณต์ฌ
์ด๋ ๊ฒ ํค๋๋ฅผ ์ถ๊ฐ ์ค์ ํด์ค๋ค. ์ดํ ๋ชจ๋ฐ์ผ๋ก๋ ๋ฌธ์ ์์ด ์คํ๋๋ ๋ชจ์ต
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 ๋ณด์ ๋ฐฐํฌ๋ก ์ฐ๊ฒฐ)
์์ฒด ์๋ฒ(๋ก์ปฌ) HTTPS ๋ฐฐํฌ๋ฅผ ์ํ WACS๋ฅผ ํตํ ์์ฒด Letโs Encrypt ์ธ์ฆ์ ๋ฐ๊ธ๊ณผ ์ฐ๊ฒฐ
์ํ ๋ชจ์ต
1.
ํ๋ก ํธ์๋์ ํ์ผ ์ ๋ก๋ ์์ฒญ ์์
2.
๋ฐฑ์๋ ์ปจํธ๋กค๋ฌ์ ์์ฒญ ํ๋ฆ
a.
(๋ฐฑ์๋) ์ปจํธ๋กค๋ฌ ์์ฒญ ๋์ฐฉ โ (๋ฐฑ์๋) ํ์ผ ์๋น์ค ์ ๋ฌ
b.
(๋ฐฑ์๋) ํ์ผ ์๋น์ค โ (NAS) ํ์ผ ์ ์ฅ ์๋ฒ ์ปจํธ๋กค๋ฌ๋ก ์์ฒญ
c.
(NAS) ํ์ผ ์ ์ฅ ์ปจํธ๋กค๋ฌ โ NAS ํ์ผ ์๋น์ค โ NAS ์คํ ๋ฆฌ์ง ๋ด ์ ์ฅ
d.
(๋ฐฑ์๋) ํ์ผ ์ ๋ณด ๋ฐ NAS ์ ์ ์๋น ๊ฒฝ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ
3.
ํ๋ก ํธ์๋์ ํ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก ์กฐํ ํ๋ฉด
4.
๊ฐ์์ค์ ์์ฒญ ํ๋ฉด ์ง์ ๋ชจ์ต
5.
์์ฒญ ํ๋ฉด ์์ฒญ ์ NAS์ ์น์๋ฒ๋ก๋ถํฐ ์๋น๋๋ ์์์ ๋ชจ์ต
๋ฐฑ์๋์๋ฒโNAS API ํ์ผ ์ ๋ก๋โNAS ์์ ์๋น ๋ทฐ ํ์ด์ง ๋ฐํ๊น์ง์ ๊ตฌํ ์ํ
๋ฌธ์ ์ธ์
โข
๋ฌธ์ ์ํ ๋ถ์
โฆ
๊ฐ๋ฐPC์์ SSH๋ก NAS์ ์ ๊ทผ(ํน์ ๊ณ์ ์ ์ธ์ ex)citefred ์ ์ ๋ก SSH์ธ์ ์์ฑ๋จ)
โฆ
ํ์ผ์ ๋ก๋ ๊ด๋ จ ์ ํ๋ฆฌ์ผ์ด์ ์คํ(npm run start) - ํด๋น ์ ์ ์ ์ธ์ ์์ ์คํ๋๊ณ ์์
โฆ
๊ฐ๋ฐPC์ SSH๋ก ์ ์ํ ํฐ๋ฏธ๋์ ์ข ๋ฃ ๋๋ ๋ง๋ฃ๋ก ์ข ๋ฃ ๋๋ฉด NAS์์๋ ํด๋น ์ธ์ ์ ์ข ๋ฃ ์ํค๋ฉด์ ํ์ผ์ ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ํจ๊ป ์ข ๋ฃ๋จ
ํด๊ฒฐ ๋ฐฉ์ ํ์
โข
ํน์ ์ ์ ๊ฐ ๋ก๊ทธ์ธํ๋ ๋ฐฉ์์ SSH ์ธ์ ์ ๊ฒฐ๊ตญ ํด๋น ์ ์์ ์ข ๋ฃํ๋ฉด ์ธ์ ์ด ์ข ๋ฃ๋๋ฉด์ ๊ด๋ จ ํ๋ก์ธ์ค๊ฐ ๋ชจ๋ ์ข ๋ฃ๋จ
โข
๋ฐ๋ผ์, NAS๊ฐ ๊ณ์ํ์ฌ ์คํ๋๋ root ์ ์ ๋ก ์ ๊ทผํ๋ฉด ํด๊ฒฐ ํ ์ ์์ง๋ง root๊ณ์ ์ผ๋ก ํฐ๋ฏธ๋์ ์ ๊ทผํ๋ ๊ฒ์ ๊ฐ๋ฐฉํ๋ ๊ฒ์ ์ํ์ฑ์ด ์์
โข
NAS ์์ฒด์์ ์ ๊ณตํ๋
Docker๋ฅผ ํตํด ์คํํ๋ฉด root์์ ์คํํ๋๊ฒ์ด๋ฏ๋ก ์ง์์ ์ธ ํ๋ก์ธ์ค๋ฅผ ์ ์ง ํ ์ ์์
NAS ๋ด ํ์ผ์ ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ SSH์ ์ข ์๋ ์ธ์ ๋ง๋ฃ ๋ฌธ์ + Docker์ Host์ ์ปจํ ์คํธ ์ธ์ ๋ฌธ์
NAS ํ์ผ ์คํ ๋ฆฌ์ง๋ฅผ ํ์ฉํ๊ธฐ
โข
NAS:
โฆ
์ญํ : ๋์ฉ๋ ์คํ ๋ฆฌ์ง๋ก์ AWS S3์ ์คํ ๋ฆฌ์ง ์๋น์ค ์ญํ ๋์ฒด
โฆ
Nginx:
โช
์ญํ : NAS์ ์ ์ ํ์ผ์ ์๋น
โช
๊ธฐ๋ฅ: AWS S3์ ์ ์ ํ์ผ URL ์ ๊ณต ์ญํ ๋์ฒด
โฆ
NAS ๋ด๋ถ ํ์ผ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ :
โช
์ญํ : NestJS API๋ก ํ์ผ ์์คํ ์ ์ฉ ์๋ฒ ๊ธฐ๋ฅ: ์๋น์ค ๋ฐฑ์๋ ์๋ฒ์ ํ์ผ ์์คํ (I/O) ๊ธฐ๋ฅ์ด ๋ ๋ฆฝํ๋ ๋ณ๋ ์๋น์ค
โช
๋งค๊ฐ์ฒด ์ญํ : NAS์ ์๋น์ค ๋ฐฑ์๋ ์๋ฒ ๊ฐ์ ํ์ผ ๊ด๋ จ ๋งค๊ฐ์ฒด ์ญํ ์ํ (๋ฆฌ๋ฒ์ค ํ๋ก์)
โข
์๋น์ค ๋ฐฑ์๋ ์๋ฒ:
โฆ
์ญํ : NestJS ๊ธฐ๋ฐ์ ์๋น์ค ๊ด๋ จ API ์๋ฒ
โฆ
๊ธฐ๋ฅ: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ์ ์ธ CRUD ๊ธฐ๋ฅ ์ ๊ณต
โฆ
๋ฐ์ดํฐ ์ ์ฅ: ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ URL Path ํํ๋ก ์ ์ฅ
โข
์๋น์ค ํ๋ก ํธ์๋ ์๋ฒ:
โฆ
์ญํ : ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด ๋ทฐ ํ์ด์ง ๋ ๋๋ง ๋ด๋น
โฆ
๊ธฐ๋ฅ: ๋ฐฑ์๋ API์ ํต์ ์ ํตํ ๋์ ํ์ด์ง ๋ ๋๋ง ํ์ผ ์ ๊ณต: ๊ฐ์ข ํ์ผ์ ๋ฐฑ์๋๋ก๋ถํฐ ์ ๋ฌ๋ฐ๋ URL Path๋ฅผ ํตํด ์ ๊ณต
NAS ํ์ผ์๋ฒ ๊ตฌ์ถ๊ณผ ์น์๋ฒ(Nginx)๋ฅผ ํตํ ํ์ผ ์๋น
Load more