Skip to content

Isitempty/Isitempty-FE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš— IsItempty ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ

์ด ๋ฌธ์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ IsItempty ๋ฐฑ์—”๋“œ API์™€ ์—ฐ๋™ํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ(ํ˜„์žฌ README ์ถ”๊ฐ€ ์ˆ˜์ • ํ•„์š”!)

๐Ÿ“‹ ๋ชฉ์ฐจ

๐Ÿ”Œ ๋ฐฑ์—”๋“œ API ์—ฐ๊ฒฐ ์ •๋ณด

๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ URL์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค:

http://localhost:8080

๐Ÿ” API ์—”๋“œํฌ์ธํŠธ

ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ API ์—”๋“œํฌ์ธํŠธ:

์—”๋“œํฌ์ธํŠธ ๋ฉ”์„œ๋“œ ์„ค๋ช… ์‘๋‹ต ์˜ˆ์‹œ
/api/hello GET ํ…Œ์ŠคํŠธ์šฉ API "Hello, World!"
/api/parking-lots GET ๋ชจ๋“  ์ฃผ์ฐจ์žฅ ๋ชฉ๋ก ์กฐํšŒ ์ฃผ์ฐจ์žฅ ๊ฐ์ฒด ๋ฐฐ์—ด
/api/parking-lots/{id} GET ํŠน์ • ์ฃผ์ฐจ์žฅ ์กฐํšŒ ์ฃผ์ฐจ์žฅ ๊ฐ์ฒด
/api/parking-lots POST ์ƒˆ ์ฃผ์ฐจ์žฅ ์ถ”๊ฐ€ ์ƒ์„ฑ๋œ ์ฃผ์ฐจ์žฅ ๊ฐ์ฒด
/api/parking-lots/{id} PUT ์ฃผ์ฐจ์žฅ ์ •๋ณด ์ˆ˜์ • ์ˆ˜์ •๋œ ์ฃผ์ฐจ์žฅ ๊ฐ์ฒด
/api/parking-lots/{id} DELETE ์ฃผ์ฐจ์žฅ ์‚ญ์ œ ์ƒํƒœ ์ฝ”๋“œ

๐Ÿ“Š ์ฃผ์ฐจ์žฅ ์ •์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ!!!! :

์ฃผ์ฐจ์žฅ ๊ฐ์ฒด์˜ ๊ตฌ์กฐ:

{
  "id": 1,
  "name": "๊ฐ•๋‚จ์—ญ ์ฃผ์ฐจ์žฅ",
  "address": "์„œ์šธ์‹œ ๊ฐ•๋‚จ๊ตฌ ๊ฐ•๋‚จ๋Œ€๋กœ 396",
  "totalSpaces": 200,
  "availableSpaces": 120,
  "isOpen": true,
  "hourlyRate": 3000,
  "latitude": 37.498095,
  "longitude": 127.027610,
  "description": "๊ฐ•๋‚จ์—ญ ๊ทผ์ฒ˜ 24์‹œ๊ฐ„ ์ฃผ์ฐจ์žฅ",
  "lastUpdated": "2025-04-06T18:30:00"
}

๐Ÿงช API ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•

Postman ์‚ฌ์šฉ

  1. Postman ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜: https://www.postman.com/downloads/
  2. ์ƒˆ ์š”์ฒญ ์ƒ์„ฑ ๋ฐ URL ์„ค์ • (์˜ˆ: http://localhost:8080/api/parking-lots)
  3. ์š”์ฒญ ๋ฉ”์„œ๋“œ ์„ ํƒ (GET, POST ๋“ฑ)
  4. POST/PUT ์š”์ฒญ์˜ ๊ฒฝ์šฐ Body ํƒญ์—์„œ JSON ๋ฐ์ดํ„ฐ ์ž…๋ ฅ
  5. Send ๋ฒ„ํŠผ ํด๋ฆญํ•˜์—ฌ ์š”์ฒญ ์ „์†ก

์˜ˆ์‹œ ์š”์ฒญ

์ฃผ์ฐจ์žฅ ๋ชฉ๋ก ์กฐํšŒ (GET)

GET http://localhost:8080/api/parking-lots

์ƒˆ ์ฃผ์ฐจ์žฅ ์ถ”๊ฐ€ (POST)

POST http://localhost:8080/api/parking-lots
Content-Type: application/json

{
  "name": "ํ…Œ์ŠคํŠธ ์ฃผ์ฐจ์žฅ",
  "address": "์„œ์šธ์‹œ ๊ฐ•๋‚จ๊ตฌ",
  "totalSpaces": 100,
  "isOpen": true,
  "hourlyRate": 2000,
  "latitude": 37.5665,
  "longitude": 126.9780,
  "description": "ํ…Œ์ŠคํŠธ ์ฃผ์ฐจ์žฅ์ž…๋‹ˆ๋‹ค."
}

๐Ÿ’ก ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ

CORS ์„ค์ •

๋ฐฑ์—”๋“œ๋Š” CORS๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ localhost์—์„œ์˜ ์š”์ฒญ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ธ์ฆ (ํ–ฅํ›„ ๊ตฌํ˜„ ์˜ˆ์ •)

ํ˜„์žฌ๋Š” ์ธ์ฆ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„ JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ์ด ์ถ”๊ฐ€๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

์ฃผ์ฐจ์žฅ ๊ฐ€์šฉ ๊ณต๊ฐ„์€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

// ์˜ˆ์‹œ: 30์ดˆ๋งˆ๋‹ค ์ฃผ์ฐจ์žฅ ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ 
setInterval(async () => {
  const response = await fetch('http://localhost:8080/api/parking-lots');
  const parkingLots = await response.json();
  updateParkingLotDisplay(parkingLots);
}, 30000);

๐Ÿ”ง ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • (์„ ํƒ์‚ฌํ•ญ)

โœ…ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์ž๋„ IntelliJ IDEA ์„ค์น˜ ์ถ”์ฒœ โ—โ—โ—

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋„ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฐฑ์—”๋“œ๋ฅผ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ๋ฐฑ์—”๋“œ ์ €์žฅ์†Œ ํด๋ก :

    git clone https://github.com/isitempty/backend.git
    cd backend
  2. SSH ํ„ฐ๋„ ์„ค์ •:

    ./scripts/setup-ssh-tunnel.sh
  3. ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰:

    ./gradlew bootRun

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐฑ์—”๋“œ ์ €์žฅ์†Œ์˜ README.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿš€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ

  • Node.js 18 ์ด์ƒ
  • npm ๋˜๋Š” yarn

ํ”„๋กœ์ ํŠธ ์„ค์ •

  1. ํ”„๋กœ์ ํŠธ ํด๋ก :
git clone https://github.com/isitempty/frontend.git
cd frontend
  1. ์˜์กด์„ฑ ์„ค์น˜:
npm install
# ๋˜๋Š”
yarn install
  1. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰:
npm run dev
# ๋˜๋Š”
yarn dev
  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000 ์ ‘์†

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

.env.local ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

NEXT_PUBLIC_API_URL=http://localhost:8080/api

โš ๏ธ ๋ฌธ์ œ ํ•ด๊ฒฐ

API ์—ฐ๊ฒฐ ์˜ค๋ฅ˜

  • ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ
  • ์˜ฌ๋ฐ”๋ฅธ URL๊ณผ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ
  • ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ

CORS ์˜ค๋ฅ˜

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Access to fetch at 'http://localhost:8080/api/parking-lots' from origin 'http://localhost:3000' has been blocked by CORS policy

[ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•]

  1. ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ CORS ์„ค์ • ํ™•์ธ ์š”์ฒญ
  2. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ CORS ํ”„๋ก์‹œ ์‚ฌ์šฉ:
    npm install -g local-cors-proxy
    lcp --proxyUrl http://localhost:8080
    ๊ทธ๋ฆฌ๊ณ  http://localhost:8010/proxy ์—”๋“œํฌ์ธํŠธ ์‚ฌ์šฉ

์ƒํƒœ ๊ด€๋ฆฌ ๊ด€๋ จ ๋ฌธ์ œ

  • Redux DevTools ๋˜๋Š” React DevTools๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ๋ณ€ํ™” ๋””๋ฒ„๊น…
  • ์ปดํฌ๋„ŒํŠธ ๋ฆฌ๋ Œ๋”๋ง ์ด์Šˆ๋Š” React.memo ๋˜๋Š” useMemo ๊ณ ๋ ค

๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ฐ€์ด๋“œ๋ผ์ธ

IsItempty ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค์Œ ํ™”๋ฉด ํฌ๊ธฐ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ๋ชจ๋ฐ”์ผ: 320px ~ 480px
  • ํƒœ๋ธ”๋ฆฟ: 481px ~ 768px
  • ๋ฐ์Šคํฌํ†ฑ: 769px ์ด์ƒ
/* ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์˜ˆ์‹œ */
@media (max-width: 480px) {
  .parking-lot-card {
    width: 100%;
  }
}

@media (min-width: 481px) and (max-width: 768px) {
  .parking-lot-card {
    width: 48%;
  }
}

@media (min-width: 769px) {
  .parking-lot-card {
    width: 30%;
  }
}

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์งˆ๋ฌธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ PM์—๊ฒŒ ๋ฌธ์˜ํ•˜์„ธ์š”

ยฉ 2025 IsItempty Team

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages