Skip to content

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ๊ตญํ† ๊ตํ†ต๋ถ€ ๋ฐ์ดํ„ฐ ํ™œ์šฉ ๊ฒฝ์ง„๋Œ€ํšŒ ์„œ๋น„์Šค ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ

Notifications You must be signed in to change notification settings

Jeonse-ive/.github

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

8 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ  Jeonse-SoundMap: ์•ˆ์ „ํ•œ ์ฃผ๊ฑฐ์ง€ ํƒ์ƒ‰ ์„œ๋น„์Šค

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ๊ตญํ† ๊ตํ†ต๋ถ€ ๊ณต๊ณต๋ฐ์ดํ„ฐ ํ™œ์šฉ ๊ฒฝ์ง„๋Œ€ํšŒ ์ถœ์ „์ž‘


๐Ÿ“Œ ์„œ๋น„์Šค ํ•œ ์ค„ ์š”์•ฝ

์ง€์—ญ๋ณ„ ์ „์„ธ์‚ฌ๊ธฐ ํ”ผํ•ด์™€ ์†Œ์Œ ๋ฏผ์› ๋ฐ์ดํ„ฐ๋ฅผ ์ง€๋„์— ์‹œ๊ฐํ™”ํ•˜์—ฌ, ์•ˆ์ „ํ•œ ์ฃผ๊ฑฐ์ง€ ์„ ํƒ์„ ๋•๋Š” ์›น ์„œ๋น„์Šค


๐Ÿงญ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

2025 ๊ตญํ† ๊ตํ†ต๋ถ€ ๊ณต๊ณต๋ฐ์ดํ„ฐ ํ™œ์šฉ ๊ณต๋ชจ์ „์— ์ถœ์ „ํ•œ ๋ณธ ํ”„๋กœ์ ํŠธ๋Š”, ์ „์„ธ์‚ฌ๊ธฐ ํ”ผํ•ด ์ •๋ณด์™€ ์ƒํ™œ ์†Œ์Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€๋„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹œ๊ฐํ™”ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋‹ค ์•ˆ์ „ํ•˜๊ณ  ์พŒ์ ํ•œ ์ฃผ๊ฑฐ ํ™˜๊ฒฝ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.


๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

  • Backend: Spring Boot
  • Frontend: Vite + React
  • Database: PostgreSQL
  • DevOps: Docker, Docker Compose ์„ ํ™œ์šฉํ•ด ๊ฐœ๋ฐœ / ๊ตฌ๋„ / ์‹คํ–‰ ๊ฐ€๋Šฅ

๐Ÿ’ก ์„œ๋น„์Šค ๊ธฐํš ๋ฐฐ๊ฒฝ

์ „์„ธ์‚ฌ๊ธฐ์™€ ์†Œ์Œ ๋ฏผ์›์€ ์ฃผ๊ฑฐ์ง€ ์„ ํƒ ์‹œ ์ค‘์š”ํ•œ ์š”์†Œ์ง€๋งŒ, ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง๊ด€์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ์ •๋ณด๋Š” ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ์„œ์šธ ์ž์น˜๊ตฌ๋ณ„ ์ „์„ธ์‚ฌ๊ธฐ ํ”ผํ•ด ์ฃผํƒ ์ˆ˜์™€ ์†Œ์Œ ๋ฏผ์› ํ†ต๊ณ„๋ฅผ ํ†ตํ•ฉ ์‹œ๊ฐํ™”ํ•˜์—ฌ, ์ง€๋„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ์•ˆ์ „์„ฑ์„ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”— ์‚ฌ์šฉ ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜

[์†Œ์Œ ๋ฏผ์› ํ†ต๊ณ„] https://www.noiseinfo.or.kr/noise/statistics.do

[์ „์„ธ์‚ฌ๊ธฐ ํ”ผํ•ด ์ฃผํƒ ์ˆ˜] https://www.data.go.kr/data/15139145/fileData.do


๐ŸŽฏ MVP ๋ฉ”์ธ ํƒ€๊นƒ

"์„œ์šธ/์ˆ˜๋„๊ถŒ์—์„œ ์ฒซ ๋…๋ฆฝ์„ ์ค€๋น„ ์ค‘์ธ 20~30๋Œ€ ์‚ฌํšŒ์ดˆ๋…„์ƒ ๋ฐ ๋Œ€ํ•™์ƒ"

  • ์›๋ฃธ, ํˆฌ๋ฃธ, ์ „์„ธ/๋ฐ˜์ „์„ธ ๋งค๋ฌผ์„ ํƒ์ƒ‰ ์ค‘
  • ๋ถ€๋™์‚ฐ ๊ฒฝํ—˜ ๋ถ€์กฑ์œผ๋กœ ์‚ฌ๊ธฐ ์œ„ํ—˜์— ๋…ธ์ถœ
  • ์ง€๋ฆฌ์  ์ •๋ณด + ์•ˆ์ „ + ์ƒํ™œํ™˜๊ฒฝ ๋“ฑ ์ข…ํ•ฉ์  ํŒ๋‹จ ํ•„์š”
  • ๊ธฐ์กด ํ”Œ๋žซํผ(์ง๋ฐฉ/๋„ค์ด๋ฒ„ ๋ถ€๋™์‚ฐ)์—์„œ๋Š” ์‚ฌ๊ธฐ/์†Œ์Œ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•จ

โœ” ์šฐ๋ฆฌ์˜ ํ•ด๊ฒฐ์ฑ…

  • ์ „์„ธ์‚ฌ๊ธฐ ํ”ผํ•ด ๋ฐ์ดํ„ฐ + ์†Œ์Œ ๋ฏผ์› ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”
  • ํ•œ ํ™”๋ฉด์—์„œ ๋น„๊ต ๊ฐ€๋Šฅํ•œ ์ง€๋„ ๊ธฐ๋ฐ˜ ๋น„๊ต UI ์ œ๊ณต

๐Ÿ” ์„œ๋น„์Šค ์‚ฌ์šฉ ์ „ ํ›„ ๋น„๊ต

ํ•ญ๋ชฉ ์‚ฌ์šฉ ์ด์ „ ์‚ฌ์šฉ ์ดํ›„
์ •๋ณด ์ ‘๊ทผ์„ฑ ๊ณต๊ณต๋ฐ์ดํ„ฐ ์ง์ ‘ ํƒ์ƒ‰ ํ•„์š” ํ•œ ํ™”๋ฉด์—์„œ ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ ํ™•์ธ
์•ˆ์ „์„ฑ ํŒ๋‹จ ๊ธฐ์ค€ ๊ฒฝํ—˜/์ถ”์ธก์— ์˜์กด ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ํŒ๋‹จ ๊ฐ€๋Šฅ
์˜์‚ฌ๊ฒฐ์ • ์‹œํ•ต์‹œ๊ฐ„ ์ •๋ณด ํŒŒํŽธํ™”๋กœ ์‹œ๊ฐ„ ์†Œ์š” ์‹œ๊ฐํ™”๋กœ ๋น ๋ฅด๊ณ  ์ง๊ด€์  ํŒ๋‹จ
์‚ฌ๊ธฐยท์†Œ์Œ ํ”ผํ•ด ์‚ฌ๊ธฐ/์†Œ์Œ ํ”ผํ•ด ์œ„ํ—˜ ๋ฏธ์ธ์ง€ ๊ณ ์œ„ํ—˜ ์ง€์—ญ ์‚ฌ์ „ ํšŒํ”ผ ๊ฐ€๋Šฅ

โœจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์š”์•ฝ

  • ์ง€๋„ ๊ธฐ๋ฐ˜ ์‹œ๊ฐํ™”: ์ž์น˜๊ตฌ๋ณ„ ์ „์„ธ์‚ฌ๊ธฐ ํ”ผํ•ด ์ˆ˜ + ์†Œ์Œ ๋ฏผ์› ํ†ต๊ณ„๋ฅผ ์ƒ‰์ƒ/ํˆดํŒ ๊ธฐ๋ฐ˜์œผ๋กœ ํ‘œ์‹œ
  • ์ง€์—ญ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ: ์›ํ•˜๋Š” ์ž์น˜๊ตฌ ์„ ํƒ, ๋‹จ์ผ ๋ฐ์ดํ„ฐ(์ „์„ธ์‚ฌ๊ธฐ/์†Œ์Œ) ํ•„ํ„ฐ๋ง
  • ์œ„ํ—˜๋„ ๋ ˆ๋ฒจ๋ง: ์ƒ‰์ƒ ๋‹จ๊ณ„๋กœ ์œ„ํ—˜๋„ ํ‘œํ˜„

๐ŸŽฏ ๊ธฐ๋Œ€ ํšจ๊ณผ

  • ์ •๋ณด ๊ฒฉ์ฐจ ํ•ด์†Œ: ์‚ฌํšŒ์ดˆ๋…„์ƒ์ด ๊ฐ๊ด€์  ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ์ง‘ ์„ ํƒ ๊ฐ€๋Šฅ
  • ํ”ผํ•ด ์˜ˆ๋ฐฉ: ์‚ฌ๊ธฐ/์†Œ์Œ ๊ณ ์œ„ํ—˜ ์ง€์—ญ ์„ ๋ณ„ โ†’ ์œ„ํ—˜ ํšŒํ”ผ ๊ฐ€๋Šฅ
  • ์˜์‚ฌ๊ฒฐ์ • ํšจ์œจํ™”: ์‹œ๊ฐ์  ์ •๋ณด ์ œ๊ณต โ†’ ํƒ์ƒ‰ ์‹œ๊ฐ„ ์ ˆ๊ฐ
  • ๊ณต๊ณต๋ฐ์ดํ„ฐ ํ™œ์šฉ ์‚ฌ๋ก€ ํ™•์žฅ: ์‹ค์ƒํ™œ์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์„ฑ๊ณต์ ์ธ ๋ฐ์ดํ„ฐ ํ™œ์šฉ ๋ชจ๋ธ

ํŒ€์› ์†Œ๊ฐœ

๐Ÿ‘ฅ ํŒ€์› ์†Œ๊ฐœ


๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป๊น€๊ทœ์ผ
PM
์†Œ์Œ ๋ฐ์ดํ„ฐ ๋‹ด๋‹น

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป๋ฐ•์ค€์„ 
Backend Developer
ํšŒ์› ๊ธฐ๋Šฅ ๋‹ด๋‹น

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป์ด์›์ง„
Backend Developer
์ „์„ธ ์‚ฌ๊ธฐ ๋ฐ์ดํ„ฐ ๋‹ด๋‹น

๐ŸŽฅ ์‹คํ–‰ ํ™”๋ฉด

๐Ÿ‘ค ํšŒ์›๊ฐ€์ž…
default.mp4

๐Ÿ” ๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›์ •๋ณด ์ˆ˜์ •
default.mp4

๐Ÿšจ ์ „์„ธ์‚ฌ๊ธฐ ์ง€๋„
default.mp4

๐Ÿ”Š ์†Œ์Œ ์ง€๋„
default.mp4

โš™๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

image

๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ๊ธฐ์ˆ  ์Šคํƒ

๊ตฌ๋ถ„ ๊ธฐ์ˆ  ์Šคํƒ
Frontend React (Vite) + TypeScript, Axios, Recharts
Backend Spring Boot, Spring Security, OAuth2, JWT
Database PostgreSQL
Cache / Token ์ €์žฅ์†Œ Redis
์ธ์ฆ ๋ฐ ์ธ๊ฐ€ JWT Access & Refresh Token, OAuth2 (์นด์นด์˜ค ๋กœ๊ทธ์ธ)
Infra / DevOps Docker, Docker Compose, EC2 (Ubuntu), GitHub Actions
๋ฐฐํฌ Nginx, GitHub Actions + Docker Hub + EC2
๋ฒ„์ „ ๊ด€๋ฆฌ Git + GitHub
๊ธฐํƒ€ REST API, .env ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •, Git ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜ ์ ์šฉ

๐Ÿ“ ํ”„๋กœ์ ํŠธ ์„ค๊ณ„

๐Ÿ”„ API ํ๋ฆ„ ๊ตฌ์กฐ

  • ํด๋ผ์ด์–ธํŠธ โ†’ API ์„œ๋ฒ„(Spring Boot) โ†’ JWT ๋ฐœ๊ธ‰ / Redis ์ €์žฅ
  • ๋ฉ”์ธํŽ˜์ด์ง€ ๋ฐ ๋งˆ์ดํŽ˜์ด์ง€ API ์š”์ฒญ์— Access Token์„ ํ—ค๋”์— ํฌํ•จ
  • ์ง€๋„ API๋Š” ๋กœ๊ทธ์ธ ํ›„ ์ด๋™ํ•œ ํ™”๋ฉด์—์„œ ์ ‘๊ทผ
  • Refresh Token์€ Redis์—์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ›„ Access Token ์žฌ๋ฐœ๊ธ‰

๐Ÿ—ƒ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ERD

  • ์†Œ์Œ์ง€๋„
Entity ํ•„๋“œ๋ช… ํƒ€์ž… ์ œ์•ฝ ์กฐ๊ฑด / ๊ด€๊ณ„
NoiseStation(1) id Long PK, Auto Increment
location String ์ธก์ •์†Œ ์ด๋ฆ„/์œ„์น˜
latitude Double ์œ„๋„
longitude Double ๊ฒฝ๋„
NoiseReading(N) id Long PK, Auto Increment
decibel Double ๋ฐ์‹œ๋ฒจ ์ธก์ •๊ฐ’
timestamp LocalDateTime ์ธก์ • ์‹œ๊ฐ„
station NoiseStation FK, ManyToOne
  • ์ „์„ธ์‚ฌ๊ธฐ ์ง€๋„
Entity ํ•„๋“œ๋ช… ํƒ€์ž… ์ œ์•ฝ ์กฐ๊ฑด / ๊ด€๊ณ„
FraudReading id Long PK, Auto Increment
district String ์ž์น˜๊ตฌ ์ด๋ฆ„ (์˜ˆ: ๊ฐ•๋‚จ๊ตฌ)
fraudCount Integer ์ „์„ธ์‚ฌ๊ธฐ ๋ฐœ์ƒ ๊ฑด์ˆ˜
timestamp LocalDateTime ์ˆ˜์ง‘ ์‹œ๊ฐ„ ๋˜๋Š” ๊ธฐ์ค€ ์ผ์ž

๐Ÿงพ ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜

์ปค๋ฐ‹ ์œ ํ˜• ์˜๋ฏธ
Feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
Fix ๋ฒ„๊ทธ ์ˆ˜์ •
Docs ๋ฌธ์„œ ์ˆ˜์ •
Style ์ฝ”๋“œ formatting, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ, ์ฝ”๋“œ ์ž์ฒด์˜ ๋ณ€๊ฒฝ์ด ์—†๋Š” ๊ฒฝ์šฐ
Refactor ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
Test ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ๋ฆฌํŒฉํ† ๋ง ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€
Chore ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ˆ˜์ •, ๊ทธ ์™ธ ๊ธฐํƒ€ ์ˆ˜์ • ex) .gitignore
Design CSS ๋“ฑ ์‚ฌ์šฉ์ž UI ๋””์ž์ธ ๋ณ€๊ฒฝ
Comment ํ•„์š”ํ•œ ์ฃผ์„ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ
Rename ํŒŒ์ผ ๋˜๋Š” ํด๋” ๋ช…์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…๋งŒ์ธ ๊ฒฝ์šฐ
Remove ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•œ ๊ฒฝ์šฐ
!BREAKING CHANGE ์ปค๋‹ค๋ž€ API ๋ณ€๊ฒฝ์˜ ๊ฒฝ์šฐ
!HOTFIX ๊ธ‰ํ•˜๊ฒŒ ์น˜๋ช…์ ์ธ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์ณ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

๐Ÿ”— ํ”„๋กœ์ ํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ

๊ฐ€์ ธ์™€์„œ ์ฒ˜์Œ ์„ธํŒ…ํ•  ๋•Œ ํ•„์š”ํ•œ ํ–‰๋™

1. ์กฐ๊ฑด

  • Docker, Docker Compose ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • .env ํŒŒ์ผ์„ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

.env ํ…œํ”Œ๋ฆฟ:

DB_USERNAME=your_username
DB_PASSWORD=your_password

REDIS_PASSWORD=your_redis_password

JWT_SECRET_KEY=your_jwt_secret
JWT_ACCESS_EXPIRATION=3600000   # 1์‹œ๊ฐ„ (๋‹จ์œ„: ๋ฐ€๋ฆฌ์ดˆ)
JWT_REFRESH_EXPIRATION=604800000  # 7์ผ (๋‹จ์œ„: ๋ฐ€๋ฆฌ์ดˆ)

1.2 BE Build

  • BE ๋””๋ ‰ํ„ฐ๋ฆฌ ์œ„์น˜์—์„œ ๋นŒ๋“œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์ค๋‹ˆ๋‹ค.
./gradlew clean build -x test

2. ํŒŒ์ผ ๊ตฌ์„ฑ

  • Dockerfile
  • docker-compose.yml
  • start script (๊ฐœ๋ฐœ ๋ชจ๋“œ์šฉ)

์‹คํ–‰ ๋ฐฉ๋ฒ•

$ ./restart.sh
  • Spring Boot ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ ‘์† ๊ฒฝ๋กœ: http://localhost:8080
  • ์‹คํ–‰ ์‹œ PostgreSQL(DB)๋„ ํ•จ๊ป˜ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ / ๊ตฌ์„ฑ

ํŒŒ์ผ ์„ค๋ช…
Dockerfile Vite Dev Server๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•˜๋Š” ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์šฉ ์„ค์ •
docker-compose.yml db, server port ์—ฐ๊ฒฐ
restart.sh ์‹คํ–‰ ๋ช…๋ น์–ด ์Šคํฌ๋ฆฝํŠธ

์ฐธ๊ณ  ์‚ฌํ•ญ

  • Vite ๊ธฐ๋ณธ ํฌํŠธ๋Š” 5173์ž…๋‹ˆ๋‹ค.
  • Spring Boot ๊ธฐ๋ณธ ํฌํŠธ๋Š” 8080์ž…๋‹ˆ๋‹ค.
  • PostgreSQL ๊ธฐ๋ณธ ํฌํŠธ๋Š” 5432์ž…๋‹ˆ๋‹ค.
  • ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์‹œ API ์š”์ฒญ ์ฃผ์†Œ๋ฅผ http://localhost:8080์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœจ Tip: Ctrl+C๋กœ ์„œ๋ฒ„๋ฅผ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‚จ์•„์žˆ์œผ๋ฉด docker ps / docker rm ๋ช…๋ น์–ด๋กœ ์ •๋ฆฌํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

About

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ๊ตญํ† ๊ตํ†ต๋ถ€ ๋ฐ์ดํ„ฐ ํ™œ์šฉ ๊ฒฝ์ง„๋Œ€ํšŒ ์„œ๋น„์Šค ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published