
ctrl+,
indent
8->20

๋ด๊ฐ ํ๋ก ํธ์๋ ๋๊ฐ ๋ฐฑ์๋๊ฐ ์ธ๊ฐ์ผ ์ด ๋๊ฐ๋ฅผ api.seoeunjin.com ์ด ํด๋๋ฅผ ๊ฒ์ดํธ ์จ์ด๋ก ์ฌ์ฉํด์ ์ฐ๊ฒฐํ๋ msa ๊ตฌ์กฐ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์์ด.
์ฌ๊ธฐ์์ ๋ก์ปฌ db๋ก ๋์ปค+ํฌ์คํธ๊ทธ๋ฆฌ ์ฌ์ฉํ๊ณ ์๋๋ฐ ์ด๊ฑธ ๋ค์จdb์ UPSTASH_REDIS ์ด๊ฑฐ๋ก ๋ฐ๊ฟ๊บผ์ผ
๋๊ฐ ์คํํ ๋ด์ฉ๊ณผ ๋ด๊ฐ ํด์ผ ๋ ๊ฑธ ์์๋๋ก ์๋ ค์ค. ์คํํ์ง๋ ๋ง๊ณ .
๐ ์์ ์์
AI๊ฐ ์คํํ ์์ :
- ํ๋ก์ ํธ ์ด๊ธฐ ๊ตฌ์กฐ ์ค์
- ๊ฐ ์๋น์ค๋ณ ๊ธฐ๋ณธ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ์์ฑ
- package.json ํ์ผ ์์ฑ (Node.js ๊ธฐ์ค)
- TypeScript ์ค์ (tsconfig.json)
- API Gateway ์ค์ (api.seoeunjin.com)
- Express/Fastify ๊ธฐ๋ฐ ๊ฒ์ดํธ์จ์ด ์ค์
- ๋ผ์ฐํ ๋ฐ ํ๋ก์ ์ค์ (๊ฐ ๋ฐฑ์๋ ์๋น์ค๋ก ์ฐ๊ฒฐ)
- CORS, ์ธ์ฆ ๋ฏธ๋ค์จ์ด ์ค์
- ๋ฐฑ์๋ ์๋น์ค ์ค์
- service.seoeunjin.com, app.seoeunjin.com, ai.seoeunjin.com
- ๊ฐ ์๋น์ค๋ณ ๊ธฐ๋ณธ API ๊ตฌ์กฐ
- Prisma ORM ์ค์ (Neon DB์ฉ)
- Redis ํด๋ผ์ด์ธํธ ์ค์ (Upstash)
- ํ๋ก ํธ์๋ ์ค์
- admin.seoeunjin.com, www.seoeunjin.com
- Next.js/React ๊ธฐ๋ณธ ๊ตฌ์กฐ
- API Gateway ์ฐ๊ฒฐ ์ค์
- ํ๊ฒฝ ๋ณ์ ํ ํ๋ฆฟ ์์ฑ
- .env.example ํ์ผ๋ค ์์ฑ
- ํ์ํ ํ๊ฒฝ ๋ณ์ ๋ฆฌ์คํธ์
- Docker ์ค์ ์ ๊ฑฐ/๋์ฒด
- docker-compose.yml ์ ๊ฑฐ (์ด๋ฏธ ์์)
- ๋ก์ปฌ ๊ฐ๋ฐ์ ์ํ ์คํฌ๋ฆฝํธ ์ค์
๋น์ ์ด ํด์ผ ํ ์์ :
- Neon DB ๊ณ์ ์ค์
- Neon DB ํ์๊ฐ์
- ํ๋ก์ ํธ ์์ฑ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ (์๋น์ค๋ณ๋ก ๋ถ๋ฆฌํ ์ง ๊ฒฐ์ )
- Connection String ๋ณต์ฌ (ํ์: postgresql://[user]:[password]@[host]/[database]?sslmode=require)
- Upstash Redis ๊ณ์ ์ค์
- Upstash ํ์๊ฐ์
- Redis ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
- REST URL๊ณผ ํ ํฐ ๋ณต์ฌ:
- UPSTASH_REDIS_REST_URL
- UPSTASH_REDIS_REST_TOKEN
- ํ๊ฒฝ ๋ณ์ ์ค์
- ๊ฐ ๋ฐฑ์๋ ์๋น์ค ํด๋์ .env ํ์ผ ์์ฑ
- Neon DB์ Upstash ์ ๋ณด ์ ๋ ฅ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ (๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ)
- ๊ธฐ์กด PostgreSQL ๋ฐ์ดํฐ ๋คํ
- Neon DB๋ก ๋ฐ์ดํฐ ๋ณต์
- ํ ์คํธ ๋ฐ ๊ฒ์ฆ
- ๊ฐ ์๋น์ค๋ณ ๋ก์ปฌ ์คํ ํ ์คํธ
- API Gateway๋ฅผ ํตํ ํตํฉ ํ ์คํธ
- Redis ์บ์ฑ ๋์ ํ์ธ
๐ค ์ถ๊ฐ ์ง๋ฌธ
์์ ์ ์์ํ๊ธฐ ์ ์ ํ์ธ์ด ํ์ํฉ๋๋ค:
- ํ๋ ์์ํฌ/์ธ์ด: Node.js/TypeScript๋ฅผ ์ฌ์ฉํ์๋์? ์๋๋ฉด ๋ค๋ฅธ ์คํ์ธ๊ฐ์?
- ํ๋ก ํธ์๋: Next.js, React, Vue ์ค ์ด๋ค ๊ฒ์ ์ฌ์ฉํ์๋์?
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ: 3๊ฐ์ ๋ฐฑ์๋๊ฐ ๊ฐ๊ฐ ๋ณ๋์ DB๋ฅผ ์ฌ์ฉํ๋์, ์๋๋ฉด ํ๋์ DB๋ฅผ ๊ณต์ ํ๋์?
- ๊ธฐ์กด ์ฝ๋: ๋ค๋ฅธ ๊ณณ์ ์ด๋ฏธ ์์ฑ๋ ์ฝ๋๊ฐ ์๋์?
์ด ์ ๋ณด๋ฅผ ์๋ ค์ฃผ์๋ฉด ๋ฐ๋ก ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๊ณ ์ค์ ํด๋๋ฆฌ๊ฒ ์ต๋๋ค!

์ปจํ ์ด๋๋ ๋ชจ๋ ์ค์ง ์ํค๊ธฐ
@admin.seoeunjin.com @www.seoeunjin.com next+React+ node+TypeScript ์ด๊ฒ ํ๋ก ํธ ์๋ ํ๊ฒฝ์ด์ผ.
์๋ฐ๋ @api.seoeunjin.com ์ด ํด๋๋ ๊ฒ์ดํธ ์จ์ด์ญํ ์ ํ๋ ์์ด์ผ ๋๋ msa+ api gateway api์ ๋ต์ ์ฌ์ฉํ ๊ฑฐ๊ฑฐ๋ , @app.seoeunjin.com ์ด๊ฑฐ๋ ๋ชจ๋ฐ์ผ์ฉ์ด๊ณ @service.seoeunjin.com ์ด๊ฒ ๋ด๊ฐ ๋ง๋ lca ์๋น์ค ํ๋ก๊ทธ๋จ์ด ๋ค์ด๊ฐ ํด๋์ผ ์์ง ๊ตฌ์ฒด์ ์ธ๊ฑด ์ ํ์ง ์์์ด ์ด๊ฒ๋ค์ด ์๋ฐ์ผ ์คํ๋ง๋ถํธ+java21+๋์ปค ์ปดํฌ์ฆ ์ yaml+ํฌ์คํธ๊ทธ๋ฆฌ ์ด๊ฑฐ๋ก ์์ ํ๊ณ ์์ด.
ai๋ @ai.seoeunjin.com ํ์ด์ฌ +์๋์ฝ๋ค๋ก ์์ ํ๊ณ ์์ด. ์คํํ์ง๋ ๋ง๊ณ ๋๊ฐ ํ ๋ด์ฉ์ ๋จ๊ณ์ ์ผ๋ก ์๋ ค์ฃผ๊ณ ๋ด๊ฐํ ๋ด์ฉ๋ ์์๋๋ก ์๋ ค์ค
๐ค AI๊ฐ ์คํํ ์์ (์์๋๋ก)
1๋จ๊ณ: ํ์ฌ ํ๋ก์ ํธ ๊ตฌ์กฐ ๋ถ์
- ๊ฐ ํด๋์ ๊ธฐ์กด ์ค์ ํ์ผ ํ์ธ
- docker-compose.yml ๋ถ์
- Spring Boot application.yml / application.properties ํ์ธ
- PostgreSQL ์ฐ๊ฒฐ ์ค์ ํ์ธ
- Next.js ํ๊ฒฝ ์ค์ ํ์ธ
- Python ํ๋ก์ ํธ ์ค์ ํ์ธ
2๋จ๊ณ: API Gateway (api.seoeunjin.com) ์ค์ ์์
- application.yml ๋ฐฑ์ ์์ฑ
- PostgreSQL → Neon DB ์ฐ๊ฒฐ ์ค์ ๋ณ๊ฒฝ
- Redis ์ค์ ์ถ๊ฐ (Upstash Redis)
- Spring Cloud Gateway ๋ผ์ฐํ ์ค์ ๊ฒํ
- pom.xml / build.gradle์ Redis ์์กด์ฑ ์ถ๊ฐ
3๋จ๊ณ: ๋ฐฑ์๋ ์๋น์ค๋ค ์ค์ ์์
3-1. app.seoeunjin.com (๋ชจ๋ฐ์ผ ๋ฐฑ์๋)
- application.yml ๋ฐฑ์ ๋ฐ ์์
- Neon DB ์ฐ๊ฒฐ ์ค์
- Redis ์ธ์ /์บ์ ์ค์ ์ถ๊ฐ
- Redis ์์กด์ฑ ์ถ๊ฐ
3-2. service.seoeunjin.com (LCA ์๋น์ค)
- application.yml ๋ฐฑ์ ๋ฐ ์์
- Neon DB ์ฐ๊ฒฐ ์ค์
- Redis ์บ์ ์ค์ ์ถ๊ฐ
- Redis ์์กด์ฑ ์ถ๊ฐ
4๋จ๊ณ: AI ์๋น์ค (ai.seoeunjin.com) ์ค์ ์์
- Python ํ๊ฒฝ ์ค์ ํ์ผ ํ์ธ (requirements.txt, environment.yml)
- PostgreSQL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Neon DB ํธํ์ผ๋ก ํ์ธ (psycopg2)
- Redis ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ (redis-py ๋๋ upstash-redis)
- ํ๊ฒฝ ๋ณ์ ์ค์ ํ์ผ ์์
5๋จ๊ณ: ํ๋ก ํธ์๋ ํ๊ฒฝ ๋ณ์ ์ค์
- admin.seoeunjin.com/.env.example ์์ฑ
- www.seoeunjin.com/.env.example ์์ฑ
- API Gateway ์๋ํฌ์ธํธ ์ค์
6๋จ๊ณ: ํ๊ฒฝ ๋ณ์ ํ ํ๋ฆฟ ์์ฑ
๊ฐ ์๋น์ค๋ณ .env.example ํ์ผ ์์ฑ:
- api.seoeunjin.com/.env.example
- app.seoeunjin.com/.env.example
- service.seoeunjin.com/.env.example
- ai.seoeunjin.com/.env.example
7๋จ๊ณ: Docker Compose ์ค์ ์์
- docker-compose.yml์์ PostgreSQL ์๋น์ค ์ ๊ฑฐ ๋๋ ์ฃผ์์ฒ๋ฆฌ
- Redis ์ปจํ ์ด๋ ์ ๊ฑฐ (Upstash ์ฌ์ฉํ๋ฏ๋ก)
- ํ์์ ๋ก์ปฌ ๊ฐ๋ฐ์ฉ ์ค์ ๋ถ๋ฆฌ (docker-compose.dev.yml)
8๋จ๊ณ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ ์ค๋น
- Flyway/Liquibase ์ค์ ํ์ธ (์๋ ๊ฒฝ์ฐ)
- ๊ธฐ์กด ์คํค๋ง ์ถ์ถ ์คํฌ๋ฆฝํธ ์์ฑ
- Neon DB ์ด๊ธฐํ SQL ์คํฌ๋ฆฝํธ ์ค๋น
9๋จ๊ณ: README ๋ฐ ๋ฌธ์ ์ ๋ฐ์ดํธ
- ๋ฃจํธ README.md ์ ๋ฐ์ดํธ
- ๊ฐ ์๋น์ค๋ณ ์ค์ ๋ฐฉ๋ฒ ๋ฌธ์ํ
- ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ์ด๋ ์์ฑ
๐ค ๋น์ ์ด ํด์ผ ํ ์์ (์์๋๋ก)
1๋จ๊ณ: Neon DB ์ค์ โญ ๊ฐ์ฅ ๋จผ์ !
- Neon DB Console ์ ์ ๋ฐ ๋ก๊ทธ์ธ
- ํ๋ก์ ํธ ์์ฑ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ต ๊ฒฐ์ :
- ์ต์ A: ๊ฐ ์๋น์ค๋ณ ๋ณ๋ DB (๊ถ์ฅ - MSA ์์น)
- api_gateway_db
- app_mobile_db
- lca_service_db
- ai_service_db
- ์ต์ B: ํ๋์ DB์ ์คํค๋ง ๋ถ๋ฆฌ
- ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Connection String ๋ณต์ฌ (์์):
2๋จ๊ณ: Upstash Redis ์ค์ โญ
- Upstash Console ์ ์ ๋ฐ ๋ก๊ทธ์ธ
- Redis ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
- Redis ์ ๋ต ๊ฒฐ์ :
- ์ต์ A: ๊ฐ ์๋น์ค๋ณ ๋ณ๋ Redis (๊ถ์ฅ)
- ์ต์ B: ํ๋์ Redis์ namespace ๋ถ๋ฆฌ
- ๋ค์ ์ ๋ณด ๋ณต์ฌ:
3๋จ๊ณ: ๊ธฐ์กด ๋ฐ์ดํฐ ๋ฐฑ์ โ ๏ธ ์ค์!
- ํ์ฌ Docker PostgreSQL ์ปจํ
์ด๋ ํ์ธ:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋คํ:
- ๋ฐฑ์ ํ์ผ ์์ ํ ๊ณณ์ ๋ณด๊ด
4๋จ๊ณ: ํ๊ฒฝ ๋ณ์ ์ค์
AI๊ฐ ์์ฑํ .env.example ํ์ผ์ ์ฐธ๊ณ ํ์ฌ ๊ฐ ์๋น์ค๋ณ .env ํ์ผ ์์ฑ:api.seoeunjin.com/.env
app.seoeunjin.com/.env
service.seoeunjin.com/.env
ai.seoeunjin.com/.env
admin.seoeunjin.com/.env.local
www.seoeunjin.com/.env.local
5๋จ๊ณ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ง์ด๊ทธ๋ ์ด์
- Neon DB Console์์ SQL Editor ์ด๊ธฐ
- ๋ฐฑ์ ํ ๋คํ ํ์ผ ๋ด์ฉ์ ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณต์
- ๋๋ Flyway/Liquibase ๋ง์ด๊ทธ๋ ์ด์ ์คํ
- ๋๋ JPA spring.jpa.hibernate.ddl-auto=update ์ฌ์ฉ (๊ฐ๋ฐ์)
6๋จ๊ณ: Python ํ๊ฒฝ ์ฌ์ค์
7๋จ๊ณ: ์์กด์ฑ ์ค์น ๋ฐ ๋น๋
Java ์๋น์ค๋ค:
ํ๋ก ํธ์๋๋ค:
8๋จ๊ณ: ๋ก์ปฌ ํ ์คํธ
- ๊ฐ ๋ฐฑ์๋ ์๋น์ค ๊ฐ๋ณ ์คํ ๋ฐ ํ
์คํธ
- API Gateway ์คํ
- AI ์๋น์ค ์คํ
- ํ๋ก ํธ์๋ ์คํ
- ์ฐ๊ฒฐ ํ ์คํธ:
- API Gateway → ๊ฐ ๋ฐฑ์๋ ์๋น์ค ๋ผ์ฐํ
- ํ๋ก ํธ์๋ → API Gateway
- ๋ฐ์ดํฐ๋ฒ ์ด์ค CRUD ์๋ ํ์ธ
- Redis ์บ์ฑ ์๋ ํ์ธ
9๋จ๊ณ: Docker Compose ์ ๋ฆฌ (์ ํ์ฌํญ)
10๋จ๊ณ: ์ต์ข ๊ฒ์ฆ
- [ ] ๋ชจ๋ ์๋น์ค๊ฐ Neon DB์ ์ฐ๊ฒฐ๋๋์ง ํ์ธ
- [ ] Redis ์บ์ฑ์ด ์๋ํ๋์ง ํ์ธ
- [ ] API Gateway ๋ผ์ฐํ ์ด ์ ์ ์๋ํ๋์ง ํ์ธ
- [ ] ํ๋ก ํธ์๋์์ ๋ฐฑ์๋ API ํธ์ถ ํ์ธ
- [ ] ์๋ฌ ๋ก๊ทธ ํ์ธ
โ ๏ธ ์ฃผ์์ฌํญ
- ๋ฐฑ์ ์ ํ์: ๋ฐ์ดํฐ ์์ค ๋ฐฉ์ง๋ฅผ ์ํด ๋ฐ๋์ ๋ฐฑ์ ๋จผ์ !
- ๋จ๊ณ๋ณ ์งํ: ํ ๋ฒ์ ๋ชจ๋ ์๋น์ค๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ์ง ๋ง๊ณ ํ๋์ฉ
- ํ๊ฒฝ ๋ถ๋ฆฌ: ๊ฐ๋ฐ/์ด์ ํ๊ฒฝ ๋ณ์ ๋ถ๋ฆฌ ๊ด๋ฆฌ
- ๋ณด์: .env ํ์ผ์ ์ ๋ Git์ ์ปค๋ฐํ์ง ์๊ธฐ (.gitignore ํ์ธ)
- Connection Pool: Neon DB์ ๋ฌด๋ฃ ํ๋์ ๋์ ์ฐ๊ฒฐ ์ ์ ํ์ด ์์ผ๋ฏ๋ก Connection Pool ์ค์ ์กฐ์ ํ์
๊ทธ๋ฅ ๊ฐ์ฌ๋ ๊น์ ์ฌ๋ฆฐ๊ฑฐ ๋ฐ์์ ๋ค ๋ด์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํจ! ๊ทธ๊ฒ ์ ค ์๋ฌ ์๋๊ธฐ๋ํด์ ใ

์ด๋ถ๋ถ์ ๋ํด ์ผ๋จ ๋จผ์ ๊ฐ์ด ํ๊ธฐ๋ก ํจ
kaggle datasets ๊ฒ์ํด์ ๋ค์ด๋ก๋ ๋ฐ๋ ๊ฑด๋ฐ ํ์ดํ๋ ๋ชป์ฐพ์์ ๊ทธ๋ฅ ๋งํฌ๋ก ์ณ์ ๋ค์ด๊ฐ
Titanic - Machine Learning from Disaster | Kaggle
Titanic
Kaggle profile for Titanic
www.kaggle.com
data ํญ ๋๋ฅด๊ณ ๋ฐ์ผ๋ก ๋ด๋ฆฌ๋ฉด ๋ค์ด๋ก๋ all ์์ ! ๋ฒํผ ๋๋ฅด๊ธฐ

@ai.seoeunjin.com/titanicservice/app/main.py @ai.seoeunjin.com/titanicservice/app/train.csv ์ด ํ์ผ์ ์๋ ์ฌ๋๋ค ์ค ์์ 10๋ช ๋ง ํฐ๋ฏธ๋์ ๋ณด์ฌ์ฃผ๋ ์ฝ๋๋ฅผ ์์ฑํด์ค


๊ฒ์ดํธ์ฐใ ์ด๋ ํ๋(8080)์ด๊ณ ๋ฐฑ์๋, ํ๋ก ํธ์๋ ์ฐ๊ฒฐํ๋ฉด ๋จ


๋ด๊ฐ ํ๋ก ํธ์๋ ๋๊ฐ ๋ฐฑ์๋๊ฐ ์ธ๊ฐ์ผ ์ด ๋๊ฐ๋ฅผ api.seoeunjin.com ์ด ํด๋๋ฅผ ๊ฒ์ดํธ ์จ์ด๋ก ์ฌ์ฉํด์ ์ฐ๊ฒฐํ๋ msa ๊ตฌ์กฐ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์์ด.
์ฌ๊ธฐ์์ ๋ก์ปฌ db๋ก ๋์ปค+ํฌ์คํธ๊ทธ๋ฆฌ ์ฌ์ฉํ๊ณ ์๋๋ฐ ์ด๊ฑธ ๋ค์จdb์ UPSTASH_REDIS ์ด๊ฑฐ๋ก ๋ฐ๊ฟ๊บผ์ผ
@admin.seoeunjin.com @www.seoeunjin.com next+React+ node+TypeScript ์ด๊ฒ ํ๋ก ํธ ์๋ ํ๊ฒฝ์ด์ผ.
์๋ฐ๋ @api.seoeunjin.com ์ด ํด๋๋ ๊ฒ์ดํธ ์จ์ด์ญํ ์ ํ๋ ์์ด์ผ ๋๋ msa+ api gateway api์ ๋ต์ ์ฌ์ฉํ ๊ฑฐ๊ฑฐ๋ , @app.seoeunjin.com ์ด๊ฑฐ๋ ๋ชจ๋ฐ์ผ์ฉ์ด๊ณ @service.seoeunjin.com ์ด๊ฒ ๋ด๊ฐ ๋ง๋ lca ์๋น์ค ํ๋ก๊ทธ๋จ์ด ๋ค์ด๊ฐ ํด๋์ผ ์์ง ๊ตฌ์ฒด์ ์ธ๊ฑด ์ ํ์ง ์์์ด ์ด๊ฒ๋ค์ด ์๋ฐ์ผ ์คํ๋ง๋ถํธ+java21+๋์ปค ์ปดํฌ์ฆ ์
yaml+ํฌ์คํธ๊ทธ๋ฆฌ ์ด๊ฑฐ๋ก ์์
ํ๊ณ ์์ด.
ai๋ @ai.seoeunjin.com ํ์ด์ฌ +์๋์ฝ๋ค๋ก ์์
ํ๊ณ ์์ด. ์คํํ์ง๋ ๋ง๊ณ ๋๊ฐ ํ ๋ด์ฉ์ ๋จ๊ณ์ ์ผ๋ก ์๋ ค์ฃผ๊ณ ๋ด๊ฐํ ๋ด์ฉ๋ ์์๋๋ก ์๋ ค์ค
์ง๊ธ ์ด๋ ๊ฒ ๋๋ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๊ณ ์์ด. ๋๊ฐ ์คํํ ๋ด์ฉ๊ณผ ๋ด๊ฐ ํด์ผ ๋ ๊ฑธ ์์๋๋ก ์๋ ค์ค. ์คํํ์ง๋ ๋ง๊ณ .
'Project ESG+AI > [์ผ์ KPMG]ESG ๋ฐ์ดํฐ ํ์ฉ ํ์คํ ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 40์ผ์ฐจ. (0) | 2025.12.08 |
|---|---|
| 39์ผ์ฐจ. (0) | 2025.12.05 |
| 37์ผ์ฐจ. (0) | 2025.11.28 |
| 36์ผ์ฐจ. OAuth ๊ตฌํํ์ & ํ์ด์ฌ ์์ํ์ (0) | 2025.11.27 |
| 35์ผ์ฐจ. ์นด์นด์ค OAuth๋ฅผ ๊ตฌํํด๋ณด์ (0) | 2025.11.26 |