๊ฑด์ ์ฌ๋ฃ๋, ์ต์ ์ฌ๋ฃ๋ ๋จน์ง ์๋ ๊ฐ ๊ฐ์์ ๋จน๋๋ฐ ๊ฑด๊ฐ์ ์ข์์ง ๋ชจ๋ฆ ์ง์ ๋ง๋ค์ด์ฃผ๊ณ ์ถ์๋ฐ ์๋ฆฌ๋ฅผ ์ ๋ชปํจ ์ฟ ํน ํด๋์ค๋ฅผ ๊ฐ๋ณด๋ ค๊ณ ํด๋ ๋๋ฌด ๋ณธ๊ฒฉ์ ์.
- OS: Windows 10
- IDE: IntelliJ, VSCode
- Build Automation Tool: Gradle(v8.1.1)
- Frontend: Node.js(v18.17.0), React(v9.6.7)
- Backend: Spring boot(v3.1.1), Spring data JPA(v3.1.1), Spring Security(v6.1.1), Flask(v2.3.2)
- Database: h2(develop, v1.4.2), postgreSQL(deploy, v.15.3)
- JVM: azul-17
- WS: nginx(reverse proxy, v1.18.0)
- WAS : tomcat(spring-boot)
- WebRTC : OpenVidu(v2.28.0)
- CI/CD : Jenkins
- ์๋ฒ: AWS EC2 Ubuntu 20.04 LTS
- Cloud Storage : Amazon S3
- ์ด์ ๊ด๋ฆฌ: Jira
- ํ์ ๊ด๋ฆฌ: GitLab โ
a) VERSION=$(curlโsilent https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)
: Docker-compose์ ์ต์ ๋ฆด๋ฆฌ์ฆ ์ ๋ณด
b) DESTINATION=/usr/bin/docker-compose
: docker-compose ์คํ ํ์ผ์ด ์ ์ฅ๋ ์์น
c) Docker-compse โp frontend build
: Docker-compose๋ ๋ณดํต docker-compose.yml์ด ์ ์ฅ ๋ ๋๋ ํ ๋ฆฌ ๋ช
์ ํ๊ฒฝ๋ณ์๋ก ์ค์ ํ๋๋ฐ ๋ณธ ํ๋ก์ ํธ์์๋ docker-compose.yml์ด root์ ์์ด ์ด๋ฌํ ์๋ ํ๊ฒฝ๋ณ์ ์ค์ ์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ โp ๋ฅผ ์ด์ฉํด frontend๋ผ๊ณ ์๋์ผ๋ก ๋ช
๋ช
ํด์ฃผ์๋ค
a) sudo su
b) cd /opt/openvidu
c) ./openvidu start
d) cd /
e) sudo docker-compose โp frontend build
f) sudo docker-compose โp frontend up โd
g) sudo service nginx restart
a) Docker ์ฌ์ฉ: Backend, Frontend, Nginx, Jenkins, YoloV5, OpenVidu, DB๋ฅผ ๊ฐ๊ฐ์ Docker Container๋ก ๊ด๋ฆฌํ์ฌ ๋
๋ฆฝ์ฑ์ ๋ณด์ฅ์์ผฐ๋ค.
b) Docker-compose ์ฌ์ฉ: Docker-compose๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ์ Dockerfile์ ํตํด ์ฌ๋ฌ ๊ฐ์ ์ปจํ
์ด๋๋ฅผ build ํ ์์ฑํ์ฌ ๋ค์ค ์ปจํ
์ด๋ ๊ด๋ฆฌ, ์ค์ ์ ์ผ๊ด์ฑ, ๊ฐ๋ฐ ํจ์จ์ฑ์ ์ฆ๋์์ผฐ๋ค.
c) Jenkins pipeline ์ฌ์ฉ: jenkins pipeline์ผ๋ก ํ ํ๋ก์ ํธ์ ์๋ backend๋จ๊ณผ frontend๋จ์ ๋์์ ์๋ ๋ฐฐํฌ ํ์ฌ ๋ฐฐํฌ ํ๊ฒฝ ํ
์คํธ ํจ์จ์ฑ์ ์ฆ๊ฐ์์ผฐ๋ค.
d) Nginx์ reverse proxy ์ฌ์ฉ: ๊ฐ๋น์์์ ๊ตฌ์
ํ doggy-yummy ๋๋ฉ์ธ ๋ค์ /, /api, /v1 ๊ฒฝ๋ก๋ก reverse proxy ํ์ฌ ๊ฐ๊ฐ front, back, object
detection ๋จ์ผ๋ก ๋ณด๋ด์ฃผ์๋ค.
e) ๋ฐฐํฌ ์์๋ application-secure.properties
์ current.front
, current.back
์ ${deploy.front}
, ${deploy.back}
์ผ๋ก ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๋ค.
- https://console.cloud.google.com/apis/dashboard
- ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด โ Oauth2.0 ํด๋ผ์ด์ธํธ ID์ ์ถ๊ฐ
- ์ฑ ์ด๋ฆ ๋ฑ๋ก
- ์น์ธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์๋ณธ ์ถ๊ฐ
- ์น์ธ๋ ๋ฆฌ๋๋ ์ URI์ถ๊ฐ
- ๋ฐฐํฌ ํ๊ฒฝ: https://doggy-yummy.site/api/login/oauth2/code/google
- ๋ก์ปฌ ํ๊ฒฝ: http://localhost:8083/api/login/oauth2/code/google
- https://developers.naver.com/products/login/api/api.md
- ๋ก๊ทธ์ธ ํ ์ฑ ์ถ๊ฐ
- Application-๋ด ์ ํ๋ฆฌ์ผ์ด์ -๊ฐ์-์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์ Client Id, Client Secret์ ๋ณต์ฌํด application-secure.properties์ spring.security.oauth2.client.registration.naver.client-id, spring.security.oauth2.client.registration.kakao.client-secret์ ๋ถ์ฌ๋ฃ์
- ๋ด ์ ํ๋ฆฌ์ผ์ด์ -API ์ค์ ์์ ํ์ํ ํ์ ์ ๋ณด๋ฅผ ์ฒดํฌ
- ์๋์ ๋ก๊ทธ์ธ ์คํ API ์๋น์ค ํ๊ฒฝ์ ์๋น์ค URL ๋ฐ Callback URL์ ์ค์
- https://doggy-yummy.site/api/login/oauth2/code/naver
- http://localhost:8083/api/login/oauth2/code/naver
- https://developers.kakao.com/product/kakaoLogin
- ๋ก๊ทธ์ธ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ถ๊ฐ
- ์ฑ ์ค์ -์ฑ ํค-REST APIํค๋ฅผ application-secure.properties์ spring.security.oauth2.client.registration.kakao.client-id์ ์ถ๊ฐ
- ์ ํ ์ค์ -์นด์นด์ค ๋ก๊ทธ์ธ-๋ณด์-Client Secret-์ฝ๋๋ฅผ spring.security.oauth2.client.registration.kakao.client-secret์ ์ถ๊ฐ
- ์ ํ ์ค์ -์นด์นด์ค ๋ก๊ทธ์ธ-๋์ ํญ๋ชฉ์์ ํ์ํ ์ ๋ณด๋ค์ ์ฒดํฌ
- ์ ํ ์ค์ -์นด์นด์ค ๋ก๊ทธ์ธ์์ Redirect URI๋ฅผ ์ง์
- ๋ก์ปฌ ํ๊ฒฝ์์๋ http://localhost:8083/api/login/oauth2/code/kakao
- ๋ฐฐํฌ ํ๊ฒฝ์์๋ https://doggy-yummy.site/api/login/oauth2/code/kakao