Skip to content

๐Ÿš˜ ๋ณด์ดˆ์šด์ „ ์ปค๋ฎค๋‹ˆํ‹ฐ

Notifications You must be signed in to change notification settings

bocho-drive/back

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš˜๋ณด์ดˆ ์šด์ „๐Ÿš˜

์—ฌ๋Ÿฌ๋ถ„์˜ ๋“ ๋“ ํ•œ ๊ฐ€์ด๋“œ, ๋ณด์ดˆ ์šด์ „


์šด์ „, ์ฒ˜์Œ์ด๋ผ ๋–จ๋ฆฌ์‹œ์ฃ ? ๊ฑฑ์ • ๋งˆ์„ธ์š”! ๋ณด์ดˆ ์šด์ „ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธด ์ดˆ๋ณด ์šด์ „์ž๋“ค์ด ๋ชจ์—ฌ, ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ์šด์ „ ํŒ๊นŒ์ง€ ์„œ๋กœ ๊ณต์œ ํ•˜๊ณ  ์„ฑ์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด์—์š”.
ํ•จ๊ป˜๋ผ๋ฉด ์ฒซ ์šด์ „๋„ ๋‘๋ ต์ง€ ์•Š์•„์š”! ์šด์ „, ๊ฐ™์ด ์ฆ๊ฒจ๋ด์š”! ๐Ÿš—๐Ÿ’จ

๐Ÿ“ŒInfo

โ— ํ”„๋กœ์ ํŠธ ๋ธŒ๋กœ์…” : ๋ณด์ดˆ์šด์ „ ๋ธŒ๋กœ์…”
โ— ๋ฐฐํฌ ๋งํฌ : https://www.bocho.p-e.kr/
โ— ํŒ€ ๋…ธ์…˜ : ๋ณด์ดˆ์šด์ „ ๋…ธ์…˜

๐Ÿ“†Period

2024.07.19 ~ 2024.08.15


๐ŸšœProject Members

๋ฐ•์ฐฌ์˜
ํ™์ฑ„ํ˜„
์กฐ์ˆ˜์ธ
๊น€์˜์•„
์ „ํšจ์—ด





FrondEnd/Leader FrondEnd BackEnd/Vice Leader BackEnd BackEnd

Service Architecture

๐Ÿ› ๏ธTools

backend



Infrastructure



Dev tools

ERD

๐ŸŒŸBackend ์ฃผ์š” ๊ธฐ์ˆ 

1. ๋กœ๊ทธ์ธ: JWT ํ† ํฐ ๋ฐฉ์‹, Spring Security

JWT(Json Web Token)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์ธํ•  ๋•Œ, ์„œ๋ฒ„๋Š” AccessToken๊ณผ RefreshToken์„ ๋ฐœ๊ธ‰ํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. AccessToken์€ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋งŒ๋ฃŒ๋˜๋ฉฐ, RefreshToken์„ ํ†ตํ•ด AccessToken์„ ์žฌ๋ฐœ๊ธ‰ํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ์„ ์œ ์ง€ํ•œ๋‹ค. Spring Security๋ฅผ ํ†ตํ•ด ์ธ์ฆ๊ณผ ์ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‚ฌ์šฉ์ž ์ •๋ณด์˜ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ–ˆ๋‹ค. ์†Œ์…œ ๋กœ๊ทธ์ธ(Kakao, Google) ๋˜ํ•œ Spring Security์™€ OAuth2๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ–ˆ๋‹ค.

2. WebSocket

WebSocket์„ ์ด์šฉํ•ด ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์˜์ƒ ๊ณต์œ  ๋ฐ ์—ฐ์ˆ˜ ๋งค์นญ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ–ˆ๋‹ค. HTTP์™€๋Š” ๋‹ฌ๋ฆฌ WebSocket์€ ์—ฐ๊ฒฐ์ด ์œ ์ง€๋œ ์ƒํƒœ์—์„œ ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋น ๋ฅธ ์‘๋‹ต ์‹œ๊ฐ„๊ณผ ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•œ๋‹ค.

3. ์ด๋ฏธ์ง€ S3 ์—…๋กœ๋“œ

AWS S3(Simple Storage Service) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํŒŒ์ผ์„ S3 ๋ฒ„ํ‚ท์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. S3๋Š” ๊ณ ๊ฐ€์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋„ ์•ˆ์ •์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์—…๋กœ๋“œ๋œ ์ด๋ฏธ์ง€๋Š” URL ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ, ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. S3์™€ ์—ฐ๋™๋œ ํŒŒ์ผ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์€ ๋น„์šฉ ํšจ์œจ์ ์ด๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ณด์•ˆ๊ณผ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค. ๋˜ํ•œ, S3 ๋ฒ„ํ‚ท์˜ ์ •์ฑ… ์„ค์ •์„ ํ†ตํ•ด ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํŒŒ์ผ์˜ ๊ณต๊ฐœ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ด ์ด๋ฏธ์ง€ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

โš ๏ธTrouble Shooting

๐Ÿšจ issue 1

๐Ÿ”๋กœ๊ทธ์ธ AccessToken, RefreshToken ๋ฐœ๊ธ‰

๋กœ๊ทธ์ธ ์‹œ accessToken์„ ๋ฐœ๊ธ‰ํ•  ๋•Œ loginFilter์—์„œ token์„ ๋ฐœ๊ธ‰ํ•˜์ง€ ์•Š๊ณ  controller์—์„œ ์ง์ ‘ accessToken์„ ๋ฐœ๊ธ‰ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

โ“ cause

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด loginFilter๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ controller๋กœ ๊ฐ€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ๋˜๊ณ  ์žˆ์—ˆ๋‹ค.

โ— solution

this.setFilterProcessesUrl("/signin");

์œ„์˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด UsernamePasswordAuthenticationFilter๊ฐ€ ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  URL์„ /signin์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์œผ๋กœ ์ธํ•ด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ /signin ๊ฒฝ๋กœ๋กœ ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ํ•ด๋‹น ํ•„ํ„ฐ๊ฐ€ ์ด ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„์–ด ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๐Ÿšจ issue 2

๐Ÿ“ท์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๊ด€๋ จ ์˜ค๋ฅ˜

์ด๋ฏธ์ง€ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•ด form-data๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋งคํ•‘ํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ํ•ด๋‹น ํ•„๋“œ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธ€์ด ์ž‘์„ฑ๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

โ“ cause

RequestDto ํด๋ž˜์Šค์— @Getter ์–ด๋…ธํ…Œ์ด์…˜์ด ์—†์–ด์„œ, Spring Boot๊ฐ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด๋‹น ํ•„๋“œ์— ์ ‘๊ทผํ•˜์—ฌ ๋งคํ•‘ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Spring์€ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์‹œ, ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด๋‹น ํ•„๋“œ์˜ Getter ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ’์„ ์ฝ์–ด์˜ค๊ณ , ๋˜ํ•œ ๊ฐ์ฒด๋ฅผ JSON์ด๋‚˜ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ๋„ Getter๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

โ— solution

RequestDto ํด๋ž˜์Šค์— @Getter ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ ํ•„๋“œ์— ๋Œ€ํ•œ Getter ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Spring์ด ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

About

๐Ÿš˜ ๋ณด์ดˆ์šด์ „ ์ปค๋ฎค๋‹ˆํ‹ฐ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •