ํ๋ก์ ํธ ์งํ ๊ธฐ๊ฐ
2024.02.22 ~ 2024.04.04 (6์ฃผ)
์ด ์ธ์
6๋ช
(Full-Stack)
ํ๋ก์ ํธ ์๊ฐ
โ ์ฝ ๋ดํฌ๋ฅผ ์์ด๋ฒ๋ ค๋ ์์ ์ด ๊ฐ์ง ์ฝ์ ํจ๋ฅ๊ณผ ๋ถ์์ฉ์ ์ฌ์ง ํ ์ฅ์ผ๋ก ํ์ธํ ์ ์๋๋ก ์ง์
โ ์ง๋จ์ ๋ฐ ์ฒ๋ฐฉ์ ์ ๋์งํธํํ๊ณ , ๋ณต์ฉ ์ค์ธ ์ฝ์ ๊ธฐ๋ก ๋ฐ ๊ด๋ฆฌํ ์ ์๋ ๋ง์ถคํ ๊ฑด๊ฐ ๊ด๋ฆฌ ์๋น์ค ์ ๊ณต
โ๋ด๊ฐ ๋ณต์ฉ ์ค์ธ ์ฝ์ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ํ์ธํ๊ณ ๊ธฐ๋กํ๊ณ ์ถ์ด์!โ
โ์ฝ๊ตญ ์์น๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ๊ณ ์ถ์ด์!โ
๐ธ ์ฃผ์ ๊ธฐ์
Backend
โข
Spring Boot, Spring Security, OAuth2, JWT
โข
Jsoup, JPA, MySQL
โข
Flask (YOLO ๋ชจ๋ธ ์ฐ๋)
Frontend
โข
Vue.js, PWA, Debounce, IntersectionObserver API
Infra
โข
AWS EC2, Docker, Jenkins, Nginx
๐ธ ๋ด๋น ์ญํ
Backend
โข
OAuth2 ๊ธฐ๋ฐ ์์
๋ก๊ทธ์ธ ๋ฐ JWT ์ธ์ฆ ๊ตฌํ
โข
Jsoup์ ํ์ฉํ ํน์ ์ฝ๊ตญ ์ ๋ณด ํฌ๋กค๋ง ๋ฐ ๋ฐ์ดํฐ ๊ฐ๊ณต
โข
์ฝํจ ๊ธฐ๋ก API
Frontend
โข
Kakao Map API๋ฅผ ํ์ฉํ ์ฝ๊ตญ ์์น ๊ฒ์ ํ์ด์ง ๊ตฌํ
โข
Debounce์ IntersectionObserver๋ฅผ ํ์ฉํ ๊ฒ์ ์ต์ ํ
โข
PWA ์ ์ฉ์ ํตํ ๋ชจ๋ฐ์ผ ์น์ฑ ์ง์
Etc
โข
ํ๋ก์ ํธ ์ค๊ฐ ๋ฐํ
๐ธ ERD
๐ธ ์์คํ ์ํคํ ์ณ
๐ธ ํธ๋ฌ๋ธ ์ํ ๋ฐ ๊ณ ๋ฏผ
๋ฌธ์ 1: PWA ์บ์๋ก ์ธํด ๊ธฐ์กด ๋ฒ์ ์ ์ง ๋ฌธ์
โข
๋ฌธ์
: ํ๋ก ํธ์๋ ์ฝ๋๋ฅผ ์์ ํ๊ณ ๋ฐฐํฌํ์์๋, ์ฌ์ฉ์ ํ๋ฉด์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์๋์ง ์๊ณ ์ด์ ๋ฒ์ ์ด ๊ณ์ ์ ์ง๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
โข
์์ธ
: ๊ตฌ๊ธ๋ง๊ณผ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ฉฐ ์๋น์ค ์์ปค(Service Worker)์ ์บ์ ๋์ ์๋ฆฌ๋ฅผ ์กฐ์ฌํ์ต๋๋ค. ์๋น์ค ์์ปค๊ฐ ๊ธฐ์กด ์บ์๋ฅผ ์ญ์ ํ์ง ์๊ณ ๊ณ์ ์ฐธ์กฐํ๊ณ ์์๊ณ , ์๋น์ค ์์ปค์ ๋ฒ์ ๊ด๋ฆฌ ๋ฐ ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ๊ฐ ์ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์์ ๊ฒ์ด ์์ธ์ด์์ต๋๋ค.
โข
ํด๊ฒฐ
: ์๋น์ค ์์ปค์ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ก์ง๊ณผ ์ด์ ์บ์๋ฅผ ์ญ์ ํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ก์ด ๋ฐฐํฌ ์๋ง๋ค ์ต์ ๋ฒ์ ์ด ์ ์ฉ๋๊ณ , ๊ธฐ์กด ์บ์๊ฐ ์๋์ผ๋ก ์ญ์ ๋๋๋ก ์์ ํ์ต๋๋ค. ์ดํ ๋ฐฐํฌ ๊ณผ์ ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ ๋ฐ์๋๋ ์์ ์ ์ธ ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์์์ต๋๋ค.
๐ธ ํ๋ก์ ํธ ๋ฆฌ๋ทฐ
์ด๋ฒ ํ๋ก์ ํธ์์๋ JWT ๊ธฐ๋ฐ ์ฌ์ฉ์ ์ธ์ฆ๊ณผ OAuth2 ์์
๋ก๊ทธ์ธ์ ์ฒ์์ผ๋ก ์ง์ ๊ตฌํํด๋ณด๋ฉฐ ์ธ์ฆ ํ๋ฆ ์ ๋ฐ์ ํ์ตํ ์ ์์์ต๋๋ค. JWT์ ๋ฐ๊ธ๊ณผ ๊ฒ์ฆ ๊ณผ์ ์ ์ดํดํ๊ณ , Spring Security๋ฅผ ํ์ฉํด ์ฌ์ฉ์ ์ธ์
์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ฒฝํํ์ต๋๋ค. ๋ํ OAuth2 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ฉํด ์์ฒด ๋ฆฌ๋ค์ด๋ ํธ ๋ฐ ์ธ์ฆ ๊ณผ์ ์ ๊ตฌ์ฑํ๋ฉฐ ์ธ์ฆ ์์คํ
์ ๋ํ ์ค์ง์ ์ธ ์ดํด๋ฅผ ๋์์ต๋๋ค.
ํ๋ก ํธ์๋ ์ธก๋ฉด์์๋ Debounce๋ฅผ ์ ์ฉํด ์ค์๊ฐ ๊ฒ์ ๊ณผ์ ์์ ๋น๋ฒํ API ํธ์ถ์ ์ ์ดํ๊ณ , IntersectionObserver API๋ฅผ ํ์ฉํด ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ์ด๋ฅผ ํตํด ํ์ด์ง ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ๊ณ ์๋ฒ ๋ถํ๋ฅผ ์ค์ด๋ฉฐ ์ฑ๋ฅ ์ต์ ํ์ ์ค์์ฑ์ ์ฒด๊ฐํ ์ ์์์ต๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ ํตํด ์ฑ๋ฅ์ ๊ณ ๋ คํ ๊ฐ๋ฐ์ ์ฌ๋ฏธ๋ฅผ ๋๊ผ๊ณ , ๋ค์ํ ์ต์ ํ ๊ธฐ์ ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ฌธ์ ์ ๊ทผ ๋ฐฉ์์ ๊ณ์ํด์ ํ์ตํ๊ณ ์ ์ฉํ๋ ๊ฐ๋ฐ์๊ฐ ๋์ด์ผ๊ฒ ๋ค๋ ๋ชฉํ๋ฅผ ๊ฐ๊ฒ ๋์์ต๋๋ค.
์ฝ๊ตญ ์ ๋ณด๋ฅผ ํฌ๋กค๋งํ๋ ๊ณผ์ ์์ ์๊ฐ์ด ๋ถ์กฑํ์ฌ ์์งํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ด๋ฆฌํ์ง ๋ชปํ๊ณ , ํ๋์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ก API๋ฅผ ๊ตฌํํ ์ ์ด ์์ฌ์์ผ๋ก ๋จ์์ต๋๋ค. ๋ฐํ ์ผ์ ์ ๋ง์ถ๊ธฐ ์ํด ํ์์๋ก ๋ฏธ๋ฃจ์์ง๋ง, ๊ฒฐ๊ตญ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ณ ๋ คํ์ง ๋ชปํ ์ํ๋ก ๋จ๊ธด ๊ฒ์ด ์์ฌ์ ์ต๋๋ค.
์ด๋ฒ ๊ฒฝํ์ ํตํด ๊ฐ๋ฐ ์ผ์ ๊ด๋ฆฌ์ ์ค์์ฑ๊ณผ ํจ๊ป, ์ด๊ธฐ ์ค๊ณ ๋จ๊ณ๋ถํฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ ์ ๋ต์ ์๋ฆฝํ๊ณ ๋จ์ ์์
๋์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๊ฒํ๋ ์ต๊ด์ ํ์์ฑ์ ์ ๊ฐํ์ต๋๋ค. ์์ผ๋ก๋ ์ด๋ฌํ ๋ถ๋ถ๊น์ง ๊ณ ๋ คํ์ฌ, ์์ฑ๋ ๋์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ์ ์๋๋ก ์ค๋นํ๊ณ ์ถ์ต๋๋ค.