
์นด์นด์ค ๋ก๊ทธ์ธ ์๋ฌ์ก๊ธฐ
๋ฌธ์ ์์ธ: CorsConfig.java๊ฐ servlet ๊ธฐ๋ฐ CorsFilter๋ฅผ ์ฌ์ฉํ๊ณ , RestTemplateConfig๋ servlet ๊ธฐ๋ฐ์ ๋๋ค. Gateway๋ WebFlux ๊ธฐ๋ฐ์ด๋ผ servlet ํํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. CORS๋ ์ด๋ฏธ application.yaml์ ์ค์ ๋์ด ์์ผ๋ฏ๋ก, ๋ ์ค์ ํ์ผ์ ์ญ์ ํ๊ฒ ์ต๋๋ค.

์ด ํ์ ๋ง์ถฐ์ ์์ฑํด์ผ ์ ๋๋ก ๋จนํ!


1. ๋ค์ด๋ฒ ๋ก๊ทธ์ธ – ๋ฐ๋์ ํด์ผ ํ 5๊ฐ์ง ์ค์ (์์๋๋ก ๋ฐ๋ผ ํ์ธ์)
- ๋ค์ด๋ฒ ๊ฐ๋ฐ์ ์ผํฐ ์ ์ https://developers.naver.com ์ ๋ค์ด๊ฐ์ ๋ก๊ทธ์ธํ์ธ์ (๋ค์ด๋ฒ ๊ณ์ ์ผ๋ก)
- Application → ์ ํ๋ฆฌ์ผ์ด์ ๋ชฉ๋ก → ๋ด๊ฐ ๋ง๋ ์ฑ ํด๋ฆญ (์ด๋ฆ ์์ ์ด๋ก์ “์ฌ์ฉํจ” ๋ ์์ด์ผ ํจ)
- ์ผ์ชฝ ๋ฉ๋ด์์ “๋ค์ด๋ฒ ๋ก๊ทธ์ธ” ํด๋ฆญ → ์๋ 5๊ฐ์ง๋ฅผ ์ ํํ ์
๋ ฅ/์ฒดํฌ
- ๊ฐ๋ฐ ์ค: http://localhost:3000
- ๋ฐฐํฌ ํ: https://www.myapp.com
- ๋๋ค์ → ์ฌ์ฉํจ
- ํ๋กํ ์ฌ์ง → ์ฌ์ฉํจ
- ์ด๋ฉ์ผ → ์ฌ์ฉํจ (์ด๋ฉ์ผ ๋ฐ์ผ๋ ค๋ฉด ๊ผญ ์ผ์ผ ํจ)
- โค ์ต์ข ์ ์ฅ → ๋งจ ์๋ “์ ์ฅํ๊ธฐ” ๋ฒํผ ๊ผญ ๋๋ฌ์ฃผ์ธ์!
- โข ๋์ํญ๋ชฉ ์ฒดํฌ (์ํ๋ ๊ฒ๋ง ์ผ๋ฉด ๋จ)
- โ ์๋น์ค URL (ํ์!) → ์ค์ ์๋น์ค ์ฃผ์ ์ ๋ ฅ ์์
- ๊ฐ๋ฐ ์ค์ด๋ผ๋ฉด localhost ์ฝ๋ฐฑ๋ ๊ผญ ๋ฃ์ด์ผ ํฉ๋๋ค! http://localhost:3000/auth/naver/callback (ํฌํธ๋ฒํธ๊น์ง ์ ํํ)
- ์๋ฃ! → ์ด์ ๋ค์ด๋ฒ๋ก ๋ก๊ทธ์ธ ๋ฒํผ ๋๋ฌ๋ณด๋ฉด ๋ฐ๋ก ๋์์ฐฝ ๋น๋๋ค
๋ค์ด๋ฒ
http://localhost:8080/auth/naver/callback


2. ๊ตฌ๊ธ ๋ก๊ทธ์ธ – ๋ฐ๋์ ํด์ผ ํ 4๊ฐ์ง ์ค์ (์ด๋ณด์์ฉ ์์ธ ๊ฐ์ด๋)
- Google Cloud Console ์ ์ https://console.cloud.google.com
- ํ๋ก์ ํธ ์ ํ → ์๋จ์ ํ๋ก์ ํธ ์ด๋ฆ ๋ณด์ผ ๊ฑฐ์์. ํด๋ฆญ → ํด๋น ํ๋ก์ ํธ ์ ํ (์์ผ๋ฉด ์๋ก ๋ง๋ค๊ธฐ)
- ์ผ์ชฝ ๋ฉ๋ด → “API ๋ฐ ์๋น์ค” → “์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด”
- ์์ชฝ์ “์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ๋ง๋ค๊ธฐ” → “OAuth ํด๋ผ์ด์ธํธ ID” ํด๋ฆญ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํ: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ
- ์ด๋ฆ: ์๋ฌด๋ ๊ฒ๋ (์: “๋ด ์น์ฌ์ดํธ ๋ก๊ทธ์ธ”)
- ์ค์!! ์น์ธ๋ ๋ฆฌ๋๋ ์ URI (์ฌ๊ธฐ์ 99%๊ฐ ํ๋ฆผ) → ์๋ ๋ ์ค์ ์ ํํ ๋ณต์ฌํด์ ๋ถ์ฌ๋ฃ๊ธฐ (ํ ์ค์ฉ ์ถ๊ฐ ๋ฒํผ ๋๋ฌ์)๋ฐฐํฌ์ฉ http://localhost:8080/auth/google/callback// https://www.myapp.com/auth/google/callback
- → ๋ง์ง๋ง์ ์ฌ๋์(/) ์์ด๋ ๋๊ณ , https/http ์ ํํ ๋ง์ถฐ์ผ ํฉ๋๋ค!
- ๊ฐ๋ฐ์ฉ http://localhost:3000/auth/google/callback
- ๋ง๋ค๊ธฐ ํด๋ฆญ → ํด๋ผ์ด์ธํธ ID์ ํด๋ผ์ด์ธํธ ๋ณด์ ๋น๋ฐ ๋ฐ๋ก ๋์์ → ์ด๊ฑธ .env์ ๋ฃ์ผ๋ฉด ๋!
- OAuth ๋์ ํ๋ฉด ์ค์ (์ด๊ฑฐ ์ ํ๋ฉด “์ฑ์ด ๊ฒํ ๋์ง ์์” ๊ฒฝ๊ณ ๋ธ)
- ์ฑ ์ด๋ฆ: ๋ด ์๋น์ค ์ด๋ฆ (์: ๋ง์ด์ฑ)
- ์ฌ์ฉ์ ์ง์ ์ด๋ฉ์ผ: ๋ด ๊ตฌ๊ธ ๊ณ์ ์ด๋ฉ์ผ
- ๊ฐ๋ฐ์ ์ฐ๋ฝ์ฒ ์ ๋ณด: ๋ด ์ด๋ฉ์ผ
- ์ ์ฅํ๊ณ ๊ณ์ → ์ค์ฝํ๋ ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก → ์ ์ฅํ๊ณ ๊ณ์
- ํ ์คํธ ์ฌ์ฉ์ ์ถ๊ฐ (ํ ์คํธ ์ํ์ผ ๋๋ง ํ์) → ๋ด ๊ตฌ๊ธ ๊ณ์ ์ด๋ฉ์ผ ์ถ๊ฐ (์: myemail@gmail.com)
- ์ผ์ชฝ ๋ฉ๋ด → “API ๋ฐ ์๋น์ค” → “OAuth ๋์ ํ๋ฉด”



๋ฐฑ์๋
์ด์ ์นด์นด์ค ์ฑ๊ณตํ์ด! ์นด์นด์ค OAuth๋ฅผ ๊ตฌํํ๋๋ก ๋ค์ด๋ฒ OAuth๋ ๊ตฌํํด์ค
ํ๋ก ํธ์๋
๋ค์ด๋ฒ OAuth ๊ตฌํ์ด ์๋ฃ๋์์ต๋๋ค.
๊ตฌํ ๋ด์ฉ:
NaverOAuthService ์์ :
State ํ๋ผ๋ฏธํฐ ์์ฑ ๋ฐ ๊ฒ์ฆ (CSRF ๋ฐฉ์ง)
URL ์ธ์ฝ๋ฉ ์ฒ๋ฆฌ
Access Token ๊ตํ ๋ฐ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ
UserService์ ๋ค์ด๋ฒ ์ฌ์ฉ์ ์์ฑ ๋ฉ์๋ ์ถ๊ฐ:
findOrCreateNaverUser() ๋ฉ์๋ ์ถ๊ฐ
NaverController ์์ :
์นด์นด์ค์ ๋์ผํ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝ
UserService์ JwtTokenProvider ์ฌ์ฉ
POST /login ์๋ํฌ์ธํธ์์ OAuth URL ๋ฐํ
์ฝ๋ฐฑ์์ ์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ ๋ฐ JWT ์์ฑ
๋ค์ด๋ฒ OAuth ํน์ง:
๋ค์ด๋ฒ๋ state ํ๋ผ๋ฏธํฐ๊ฐ ํ์์ ๋๋ค (CSRF ๋ฐฉ์ง)
๋ค์ด๋ฒ ์๋ต ๊ตฌ์กฐ: { "response": { "id": ..., "email": ..., ... } }
์๋น์ค ์ํ:
auth-service: ์ ์ ์คํ ์ค (8082 ํฌํธ)
"NaverController ์ด๊ธฐํ๋จ" ํ์ธ
ํ๋ก ํธ์๋์์ ๋ค์ด๋ฒ ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฌ ํ ์คํธํ์ธ์. ์นด์นด์ค์ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค.//๋ฐฑ์๋์์ ๋ค์ด๋ฒ oauth๊ตฌํํ๋๋ฐ ํ๋ก ํธ ์๋์์๋ ๋ค์ด๋ฒ oauth๋ฅผ ๊ตฌํํด์ค



์์ฑ๋๋ค! ๋ ๋ฟ๋ฏใ ใ ใ

๋ค์๋ฒ์๋ ์ด๋ฆ์ ํ๋ก๊ทธ๋จ๋ช ์ผ๋ก ํต์ผํด์ผ๊ฒ ๋ค.
ํ์ด์ฌ ๋๊ฐ๊ธฐ

์๋ฐ๋ณด๋ค ํ์ด์ฌ์ ํจ์ฌ ๊ฐ๋จํ๋ค.
requirements.txt -ํจํค์ง

ํ์ผ ๋ง๋ค๊ธฐ
@gateway/app/main.py ์ฌ๊ธฐ์ ๋ฉ์ธ ๋ผ์ฐํฐ๋ฅผ ์์ฑํด์ค
@gateway/app/main.py CORS์ค์ ํด์ค
@services/clawler-service/app/main.py ์ฌ๊ธฐ์ ์๋ธ๋ผ์ฐํฐ๋ฅผ ์์ฑํ๊ณ @gateway/app/main.py ๋ฉ์ธ๋ผ์ฐํฐ์ ์ฐ๊ฒฐํด์ค

์๋ฐ๋ - ์ธ ์ ์์ง๋ง, ํ์ด์ฌ์ ์๋จ! _์ธ๋ ๋ฐ ์จ์ผํจ


๋ผ์ฐํฐ ํ์ผ ๋ฐ๋ก ๋ง๋ค๋ฉด ์๋จ
@services/chatbot_service/Dockerfile @services/clawler_service/Dockerfile ๋์ปค ํ์ผ ์๋ฌ ํด๊ฒฐํด์ค
@docker-compose.yaml ์ฌ๊ธฐ์ @clawler_service ์ปจํ ์ด๋๋ก ๋ฑ๋กํด์ค
dockerfile ํฌํธ๋ฅผ ๋ฐ๊ฟ์ผํ ๊น?@services/chatbot_service/Dockerfile @services/clawler_service/Dockerfile
@services/clawler_service/requirements.txt ๋ฐฉ๊ธ ์ถ๊ฐํ ๊ฒ์ ํฌ๋กค๋ง์ ์ฌ์ฉํ ํจํค์ง์ผ. ํ์ฌ ์ต์ ๋ฒ์ ์ ๋ง๊ฒ ์์ ํด์ค




๋ฒ ์ค๋ฎค์ง ํด๋ ๋ง๋ค์์
@services/clawler_service/app/bs_demo/bugsmusic.py ์ฌ๊ธฐ์ bs4 ๋ก ์ ์ ํฌ๋กค๋ง์ ํ๋ ค๊ณ ํด.
https://music.bugs.co.kr/chart/track/realtime/total?wl_ref=M_contents_03_01 ์ฌ๊ธฐ์์ ์ด ์ปดํฌ๋ํธ์์ ์ฌ๊ธฐ์์ ์ด ์ปดํฌ๋ํธ์์ ์ด๋ฏธ์ง์ ์๋ ํ ์ด๋ธ ์์ ์๋ ํด๋์ค๊ฐ title, artist, album ์ ๋ก์ฐ๊ฐ์ json ํํ๋ก ํฐ๋ฏธ๋์์ ์ถ๋ ฅํ๋ ์ ๋ต์ ์์ฑํด์ค.
ํฌ์คํธ๋งจ ๋ค์ด๋ก๋ ๋ฐ๊ธฐ
https://www.postman.com/downloads/
Download Postman | Get Started for Free
Try Postman for free! Join 40 million users who rely on Postman, the collaboration platform for API development. Create better APIs—faster.
www.postman.com

@services/clawler_service/app/main.py ์ฌ๊ธฐ์์ @services/clawler_service/app/bs_demo/bugsmusic.py ์ด๊ฒ์ URI ๋ก ๋ฑ๋กํด์ /crawler/bugsmusic ์ POSTMAN์์ GET๋ฐฉ์์ผ๋ก ์์ฒญํ๋ฉด ์คํ๋๋๋ก ๋ผ์ฐํ ์ ์ถ๊ฐํด์ค
__init__.py ํ์ผ์ ์ญํ :
- ํจํค์ง ์ธ์: Python์ด ๋๋ ํ ๋ฆฌ๋ฅผ ํจํค์ง๋ก ์ธ์ํ๊ฒ ํฉ๋๋ค.
- Import ๊ฐ๋ฅ: from app.bs_demo.bugsmusic import ... ๊ฐ์ import๊ฐ ๋์ํฉ๋๋ค.
- ํจํค์ง ์ด๊ธฐํ: ํจํค์ง ๋ก๋ ์ ์คํํ ์ฝ๋๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค.
ํ์ฌ ํ๋ก์ ํธ์์์ ํ์์ฑ:
ํ์ฌ main.py์์ ๋ค์ import๋ฅผ ์ฌ์ฉํฉ๋๋ค:
์ด import๊ฐ ๋์ํ๋ ค๋ฉด:
- app ๋๋ ํ ๋ฆฌ๊ฐ ํจํค์ง์ฌ์ผ ํจ
- app/bs_demo ๋๋ ํ ๋ฆฌ๊ฐ ํจํค์ง์ฌ์ผ ํจ
Python ๋ฒ์ ๋ณ ์ฐจ์ด:
- Python 3.3 ์ด์ : __init__.py ํ์
- Python 3.3+: ๋ค์์คํ์ด์ค ํจํค์ง ์ง์์ผ๋ก ์์ด๋ ๋์ํ ์ ์์
๊ฒฐ๋ก :
ํ์ฌ ๋น __init__.py๋ ์์ด๋ ๋์ํ ์ ์์ง๋ง, ๋ช ์์ ์ผ๋ก ๋๋ ๊ฒ์ด ์ข์ต๋๋ค:
- ๋ช ํ์ฑ: ํจํค์ง์์ ๋ช ์
- ํธํ์ฑ: ๋ชจ๋ Python ๋ฒ์ ์์ ๋์
- ํ์ฅ์ฑ: ๋์ค์ ์ด๊ธฐํ ์ฝ๋ ์ถ๊ฐ ๊ฐ๋ฅ
ํ์ ์๋ค๊ณ ํ๋จ๋๋ฉด ์ญ์ ํด๋ ๋ฉ๋๋ค. ์ญ์ ํ ๊น์, ์๋๋ฉด ์ ์งํ ๊น์?

[์ ๋ ๋์ ํฌ๋กค๋ง ์์ ] ๋ค๋์ ๋ฆฌ๋ทฐ ํฌ๋กค๋ง์ ์ํ ์ง์๊ฐ๋ฅํ ์ฝ๋ ๋ง๋ค๊ธฐ (1)
๋ค๋์ ํฌ๋กค๋ง ์์ — ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์ธ๊ธฐ3์ฌ ์ ํ์ ๋ณด ์์งํ๊ธฐโ ์ ๋ ๋์, ํฌ๋กฌ๋๋ผ์ด๋ฒ ์ค์น ์ ์ด๊ฑฐ๋ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ ์ตํ๊ธฐ ์ ์ด๋ผ๋ฉด, ์ค์น ์๋ฃํ๊ธฐ! ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ ์ตํ๋ณด๊ธฐ! 0๏ธโฃ ๋ค๋
sy-log.tistory.com
๋ค์ด๋ฒ ํฌ๋กค๋ง์ ์ ๋ ๋์์ผ๋ก ํ๋ ์์
https://jaydatum.tistory.com/60
[python] selenium ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ ํฌ๋กค๋ง(1)
์ฒซ๋ฒ์งธ ํฌ๋กค๋ง ์์ ์ด๋ค. ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ์ ๊ฒ์์ด ์ ๋ ฅ ํ์ ๋์ค๋ ๋ธ๋ก๊ทธ๋ค์ ํฌ๋กค๋งํ๊ณ ์ ์ฅํด๋ณธ๋ค. ๊ฒ์์ด๋ฅผ ์ ๋ ฅํ๊ณ ์คํฌ๋กค๊น์ง ๋๋ฅด๊ธฐ ๋๋ฌธ์ Selenium ๋ชจ๋์ ์ฌ์ฉํ๋ค. (์ฌ์ค selenium๋ง
jaydatum.tistory.com
'Project ESG+AI > [์ผ์ KPMG]ESG ๋ฐ์ดํฐ ํ์ฉ ํ์คํ ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 38์ผ์ฐจ. (0) | 2025.12.04 |
|---|---|
| 37์ผ์ฐจ. (0) | 2025.11.28 |
| 35์ผ์ฐจ. ์นด์นด์ค OAuth๋ฅผ ๊ตฌํํด๋ณด์ (0) | 2025.11.26 |
| 34์ผ์ฐจ. ์นด์นด์ค, ๋ค์ด๋ฒ, ๊ตฌ๊ธ, ์์ดํฐ ๋ก๊ทธ์ธ์ ๋ง๋ค์ (0) | 2025.11.25 |
| 33์ผ์ฐจ. ๋ฐฑ์๋์ ํ๋ก ํธ์๋๋ฅผ ์ฐ๊ฒฐํ์ (0) | 2025.11.24 |