Skip to content

eastjin/sometimesBE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

57 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Sometimes BE


๐Ÿ”— STEP1. ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ


"ใ„ฑr๋”" ์€ ์ถ”์–ต์˜ ์ต๋ช… ์†Œํ†ต ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

์˜›๋‚  ๋Š๋‚Œ ๊ทธ๋Œ€๋กœ๋ฅผ ๋Š๊ปด๋ณด๊ณ  ์‹ถ์ง€ ์•Š์œผ์‹ ๊ฐ€์š”?

  • ๊ทธ๋•Œ ๊ทธ ์‹œ์ ˆ ์†Œํ†ต๊ณต๊ฐ„ ๊ทธ๋Œ€๋กœ ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ต๋ช…์œผ๋กœ ์ž์‹ ์˜ ์ƒ๊ฐ์„ ์ „๋‹ฌํ•ด๋ณด์„ธ์š”!

๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์˜ ๊ธ€๋“ค์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด?

  • ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์˜ ๊ธ€์„ ์ฝ์–ด๋ณด๊ณ  ์ข‹์•„์š”๋ฅผ ๋ˆŒ๋Ÿฌ๋ณด์•„์š”!



๐Ÿ› ๏ธ STEP2. ํ”„๋กœ์ ํŠธ ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ

1. ํšŒ์› ๊ฐ€์ž… API

โ€ข username, nickname, password๋ฅผ Client์—์„œ ์ „๋‹ฌ๋ฐ›๊ธฐ

โ€ข username์€ ์ตœ์†Œ 4์ž ์ด์ƒ, 10์ž ์ดํ•˜์ด๋ฉฐ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž(a~z), ์ˆซ์ž(0~9)๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค.

โ€ข nickname์€ ์ตœ์†Œ 2์ž ์ด์ƒ, 10์ž ์ดํ•˜๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค.

โ€ข password๋Š” ์ตœ์†Œ 8์ž ์ด์ƒ, 24์ž ์ดํ•˜์ด๋ฉฐ ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž(a~z, A~Z), ์ˆซ์ž(0~9)๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค.

โ€ข DB์— ์ค‘๋ณต๋œ username์ด ์—†๋‹ค๋ฉด ํšŒ์›์„ ์ €์žฅํ•˜๊ณ  Client ๋กœ ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€, ์ƒํƒœ์ฝ”๋“œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

โ€ข ํšŒ์› ๊ถŒํ•œ ๋ถ€์—ฌํ•˜๊ธฐ (ADMIN, USER) - ADMIN ํšŒ์›์€ ๋ชจ๋“  ์นด๋“œ ์ˆ˜์ •/์‚ญ์ œ ๊ฐ€๋Šฅ

2. ๋กœ๊ทธ์ธ API

โ€ข username, password๋ฅผ Client์—์„œ ์ „๋‹ฌ๋ฐ›๊ธฐ

โ€ข DB์—์„œ username์„ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ๋œ ํšŒ์›์˜ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•˜๊ณ  ์žˆ๋‹ค๋ฉด password ๋น„๊ตํ•˜๊ธฐ

โ€ข ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ, ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•œ ์œ ์ €์˜ ์ •๋ณด์™€ JWT๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๊ณ ,

  ๋ฐœ๊ธ‰ํ•œ ํ† ํฐ์„ Header์— ์ถ”๊ฐ€ํ•˜๊ณ  ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€, ์ƒํƒœ์ฝ”๋“œ ์™€ ํ•จ๊ป˜ Client์— ๋ฐ˜ํ™˜ํ•˜๊ธฐ

3. ์ต๋ช… ์นด๋“œ ์ž‘์„ฑ API

โ€ข Spring Security๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ† ํฐ ๊ฒ€์‚ฌ ๋ฐ ์ธ์ฆํ•˜๊ธฐ : ํ† ํฐ์„ ๊ฒ€์‚ฌํ•œ ํ›„, ์œ ํšจํ•œ ํ† ํฐ์ด๋ฉด์„œ ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์นด๋“œ๋งŒ ๋“ฑ๋ก ๊ฐ€๋Šฅ

โ€ข nickname, ์ž‘์„ฑ ๋‚ด์šฉ์„ ์ €์žฅํ•˜๊ณ  ์ €์žฅ๋œ ๊ฒŒ์‹œ๊ธ€์„ Client ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ

4. ์นด๋“œ ์ „์ฒด ์กฐํšŒ API

โ€ข nickname, ์ž‘์„ฑ ๋‚ด์šฉ, ์ž‘์„ฑ์ผ์‹œ, ์ˆ˜์ •์ผ์‹œ๋ฅผ ์กฐํšŒํ•˜๊ธฐ

โ€ข ์ž‘์„ฑ ๋‚ ์งœ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ

โ€ข ์นด๋“œ์— '์ข‹์•„์š”' ๊ฐœ์ˆ˜๋„ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•˜๊ธฐ

4. ์„ ํƒํ•œ ์นด๋“œ ์กฐํšŒ API

โ€ข ์„ ํ…ํ•œ ์นด๋“œ์˜ nickname, ์ž‘์„ฑ ๋‚ด์šฉ, ์ž‘์„ฑ์ผ์‹œ, ์ˆ˜์ •์ผ์‹œ๋ฅผ ์กฐํšŒํ•˜๊ธฐ

โ€ข ์ž‘์„ฑ ๋‚ ์งœ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ

โ€ข ์นด๋“œ์— '์ข‹์•„์š”' ๊ฐœ์ˆ˜๋„ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•˜๊ธฐ

5. ์„ ํƒํ•œ ์นด๋“œ ์ˆ˜์ • API

  โ€ข Spring Security๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ† ํฐ ๊ฒ€์‚ฌ ๋ฐ ์ธ์ฆํ•˜๊ธฐ : ํ† ํฐ์„ ๊ฒ€์‚ฌํ•œ ํ›„, ์œ ํšจํ•œ ํ† ํฐ์ด๋ฉด์„œ ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์นด๋“œ๋งŒ ์ˆ˜์ € ๊ฐ€๋Šฅ
  
  โ€ข ์ œ๋ชฉ, ์ž‘์„ฑ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๊ณ  ์ˆ˜์ •๋œ ์นด๋“œ๋ฅผ Client ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ
  
  โ€ข ์นด๋“œ์— '์ข‹์•„์š”' ๊ฐœ์ˆ˜๋„ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•˜๊ธฐ

6. ์„ ํƒํ•œ ์นด๋“œ ์‚ญ์ œ API

  โ€ข Spring Security๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ† ํฐ ๊ฒ€์‚ฌ ๋ฐ ์ธ์ฆํ•˜๊ธฐ : ํ† ํฐ์„ ๊ฒ€์‚ฌํ•œ ํ›„, ์œ ํšจํ•œ ํ† ํฐ์ด๋ฉด์„œ ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์นด๋“œ๋งŒ ์‚ญ์ œ ๊ฐ€๋Šฅ

  โ€ข ์„ ํƒํ•œ ๊ฒŒ์‹œ๊ธ€์„ ์‚ญ์ œํ•˜๊ณ  Client ๋กœ ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€, ์ƒํƒœ์ฝ”๋“œ ๋ฐ˜ํ™˜ํ•˜๊ธฐ



๐Ÿงฑ STEP 3 : ERD

Sometimes (1)



๐Ÿ—๏ธ STEP 4 : API Specification



๐Ÿ’ก STEP 5 : Core Tools




๐Ÿ“Œ STEP 6 : Trouble Shooting

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๋‚ด์šฉ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
์นด๋“œ ์‚ญ์ œ ๋ถ€๋ถ„, ๊ธ€์“ด์ด์˜ ์•„์ด๋””์™€ ์‹ค์ œ ์œ ์ € ์•„์ด๋”” ๋น„๊ต equals ==
๋กœ๊ทธ์ธ ์‹œ ํ† ํฐ ๋ฐœ๊ธ‰ ์•ˆ๋˜๋Š” ์ฆ์ƒ ๋ฐœ์ƒ HTTP Header ๋ถ€๋ถ„์ด ์ œ๋Œ€๋กœ return์ด ์•ˆ ๋˜์–ด ์žˆ์—ˆ์Œ.
์ค‘๋ณต๋œ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ํ˜น์€ ์‚ญ์ œ๋œ ์•„์ด๋””์˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ญ์ œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๋จ. Card๋ฅผ ์‚ญ์ œํ•  ๊ฒฝ์šฐ, LikeRepository์—์„œ ์ด๋ฏธ์ง€๊ฐ€ ์‚ญ์ œ ๋˜๋Š” ๊ฒƒ ์ˆ˜์ •.
โžก๏ธย oneToOne์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ์ง€๋ฅผ DB์—์„œ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ˆ˜์ •
IntelliJ MySQL ์—ฐ๊ฒฐ Host ๋ถ€๋ถ„ URL, Database ๋ถ€๋ถ„ ์ด๋ฆ„



๐Ÿ“Œ STEP 7 : ๊ฐœ์„ ์„ ์œ„ํ•œ ๊ณ ๋ ค์‚ฌํ•ญ

๊ฐœ์„  ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„ ์˜๋…ผํ•œ ๊ฐœ์„  ๋ฐฉ์•ˆ
์ข‹์•„์š” ๊ฐฏ์ˆ˜ โ†’ ๋งŽ์•„์กŒ์„ ๋•Œ scheduler ๋กœ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ• โ†’ ๋™์‹œ์„ฑ
AccessToken์ด ํƒˆ์ทจ๋˜์—ˆ์„๋•Œ์˜ ๋ฌธ์ œ์  ๋ฐ ๋Œ€์ฒ˜ refreshToken์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์„  ๊ฐ€๋Šฅ. ์ถ”๊ฐ€๋กœ accessToken๊ณผ refreshToken์˜ ์‹œ๊ฐ„ ์„ค์ •๊ณผ ๋ณด์•ˆ๋„ ๊ณ ๋ ค ๊ฐ€๋Šฅ
https://hudi.blog/refresh-token/
https://tecoble.techcourse.co.kr/post/2021-10-20-refresh-token/
https://velog.io/@jkijki12/Jwt-Refresh-Token-์ ์šฉ๊ธฐ
Optional ์ž˜ ์“ฐ๋Š” ๋ฒ•. https://mangkyu.tistory.com/70
https://hbase.tistory.com/212
https://coding-factory.tistory.com/547
content (text, blob ๋“ฑ์˜ ์ž๋ฃŒํ˜•๊ณผ ๋น„๊ต) content๋Š” ์ฃผ๋กœ ์งง์€ ๊ธ€์— ์“ฐ์ด๊ณ , ํ”„๋กœ์ ํŠธ ์ทจ์ง€์— ์ž˜ ๋งž์Œ.
๋งŒ์•ฝ ๊ธ€์ž ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด text๋‚˜ Lob ํƒ€์ž…์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๊ณ ,ํ˜„์žฌ ์ƒํ™ฉ์—๋Š” text๊ฐ€ ๋” ์ ์ ˆํ•จ.
https://eastjin.tistory.com/61

๊ณ ๋ คํ•ด์•ผ ๋  ์‚ฌํ•ญ

  • ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„: ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ณ  ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ณด์•ˆ: ๋งŽ์€ ๊ฐœ์ธ์ •๋ณด์™€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ๋ณด์•ˆ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ํ•„์š”ํ•˜๋‹ค. (Spring Security ๋„์ž…)
    • ์ธ์ฆ ๋ฐฉ์‹, ์ธ์ฆ ์—๋Ÿฌ ๋“ฑ์„ ๊ณ ๋ คํ•œ๋‹ค. Role ํƒ€์ž…์˜ ์ธ์ฆ์„ ๊ตฌํ˜„ํ•œ๋‹ค.
    • CSRF์˜ ๋œป์„ ์•Œ๊ณ  ์ ์šฉ ๋ฐฉ๋ฒ• ํ™•์ธํ•œ๋‹ค.
  • ๋ฒ„์ „ ๊ด€๋ฆฌ (Tool : GitHub)
    • ๋ธŒ๋žœ์น˜ ๊ทœ์น™ ์น™ ๋“ฑ ์ •ํ•˜๊ธฐ : ๋ธŒ๋žœ์น˜ ์ „๋žต์€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋™์‹œ์— ์ž‘์—…ํ•  ๋•Œ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ , ์ฝ”๋“œ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ํŠน์„ฑ์— ๋งž๋Š” ๋ธŒ๋žœ์น˜ ์ „๋žต์„ ์ •์˜ํ•˜์—ฌ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
    • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ ๊ทœ์น™ ์ •์˜: ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ, ์–ด๋–ค ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  • ํ™•์žฅ์„ฑ: ์‹œ์Šคํ…œ์ด ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ์‚ฌ์šฉ์„ฑ: ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก UI/UX๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
  • ์„ฑ๋Šฅ : ๋น ๋ฅธ ์ฒ˜๋ฆฌ์†๋„์™€ ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋ณด์™„ํ•ด์•ผ ํ•  ์ 

  • ์œ ์ง€๋ณด์ˆ˜์„ฑ: ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์–ด๋ ต๊ฒŒ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ ธ์„œ ๊ฐ€๋…์„ฑ๊ณผ ๋ชจ๋“ˆํ™”๋ฅผ ๊ณ ๋ คํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์ด ํ•„์š”ํ•˜๋‹ค.
  • ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ : ํšŒ์› ํƒˆํ‡ด, ๋Œ“๊ธ€ ๋“ฑ.



๐Ÿ“Œ STEP 8 : ํŒ€์› ์ •๋ณด ๋ฐ ํŒ€ ๋…ธ์…˜

์ด๋ฆ„ ๊นƒํ—ˆ๋ธŒ ์ฃผ์†Œ
์ด์Šน๋ ฌ https://github.com/LEESEUNGRYEOL
๊น€์—ฌ์› https://github.com/YeowonKIM
ํ•จ๋™์ง„ https://github.com/eastjin
ํ™ฉ์›์ค€ https://github.com/1juuun

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages