Search
๐Ÿ’Š

์ฒ™์ฒ™์•ฝ์‚ฌ

๊ธฐ์ˆ ์Šคํƒ
Java
SpringBoot
JPA
Vue.js
Docker
Jenkins
SpringSecurity
Jira
๊ธฐ๊ฐ„
2024.02 ~ 2024.03
1 more property

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๊ธฐ๊ฐ„

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๋ฅผ ๊ตฌํ˜„ํ•œ ์ ์ด ์•„์‰ฌ์›€์œผ๋กœ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค. ๋ฐœํ‘œ ์ผ์ •์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ํ›„์ˆœ์œ„๋กœ ๋ฏธ๋ฃจ์—ˆ์ง€๋งŒ, ๊ฒฐ๊ตญ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•œ ์ƒํƒœ๋กœ ๋‚จ๊ธด ๊ฒƒ์ด ์•„์‰ฌ์› ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ๊ฒฝํ—˜์„ ํ†ตํ•ด ๊ฐœ๋ฐœ ์ผ์ • ๊ด€๋ฆฌ์˜ ์ค‘์š”์„ฑ๊ณผ ํ•จ๊ป˜, ์ดˆ๊ธฐ ์„ค๊ณ„ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜๊ณ  ๋‚จ์€ ์ž‘์—…๋Ÿ‰์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ ๊ฒ€ํ•˜๋Š” ์Šต๊ด€์˜ ํ•„์š”์„ฑ์„ ์ ˆ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋Š” ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„๊นŒ์ง€ ๊ณ ๋ คํ•˜์—ฌ, ์™„์„ฑ๋„ ๋†’์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ฒ™์ฒ™์•ฝ์‚ฌ ์„œ๋น„์Šค ํ™”๋ฉด

์†Œ์…œ๋กœ๊ทธ์ธ

ํŒ๋งค ์•ฝ๊ตญ ๊ฒ€์ƒ‰

์•ฝํšจ๊ธฐ๋ก