[go: nahoru, domu]

Skip to content

thandbag/thandbag_BE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

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

Repository files navigation

๐Ÿ‘Š ์ƒ๋“œ๋ฐฑ(Thandbag) - BackEnd

thandbag_main_thumbnail


๐Ÿ—‚ Summary

ํ•ญํ•ด99 4๊ธฐ, ์‹ค์ „ ํ”„๋กœ์ ํŠธ 7์กฐ

* ์„œ๋น„์Šค๋ช… : ์ƒ๋“œ๋ฐฑ (Think + Sandbag = Thandbag!)
* ์„œ๋น„์Šค ์„ค๋ช… : ์ผ์ƒ ์ƒํ™œ์†์—์„œ ๋ฐ›์€ ์ŠคํŠธ๋ ˆ์Šค, ๊ณ ๋ฏผ์„ ์ƒŒ๋“œ๋ฐฑ์„ ๋•Œ๋ฆฌ๋ฉด์„œ ์žฌ๋ฏธ์žˆ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ ˆ์Šค ํ•ด์†Œ ์„œ๋น„์Šค


๐Ÿ‘ฅ ๋ฉค๋ฒ„


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

  • 2021๋…„ 12์›” 18์ผ ~ 2022๋…„ 01์›” 28์ผ

โ™Ÿ Information Architecture

image


๐Ÿงฉ Architecture

architecture


๐Ÿ—บ ER Diagram

image


โš™๏ธ Back-End ๊ธฐ์ˆ  ์Šคํƒ

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
IDE
Language
Framework
Build Tool
DB
Memory DB
Server
CI/CD
Test
Load Test
VCS
Reverse Proxy
API Document Tool

๐Ÿ“Œ API ๋ช…์„ธ์„œ


๐Ÿค Code Convention

  1. ๋ณ€์ˆ˜ ๋„ค์ด๋ฐ ๊ทœ์น™ : Camel Case
  2. ํ•œ ์ค„์˜ ๊ธ€์ž ์ˆ˜ : ์ตœ๋Œ€ 80์ž
  3. ํ•œ ์ค„ ์ฃผ์„ ํ‘œ๊ธฐ : /* */
  4. ์—ฌ๋Ÿฌ ์ค„ ์ฃผ์„ ํ‘œ๊ธฐ :
  /*-
   *
   *
   */
  1. ์‚ผํ•ญ์—ฐ์‚ฐ์ž ํ‘œ๊ธฐ :
  alpha = (BooleanExpression) ? beta
                              : gamma
  1. If๋ฌธ์—์„œ &&, ||' ํ‘œ๊ธฐ
  if((condition1 && condition2)
    || (condition3 && condition4) 
    || (condition5 && condition6) {
    do something();
  }

๐Ÿ‘€ ์œ ์ € ํ”ผ๋“œ๋ฐฑ

* ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘์ผ์ž : 2022๋…„ 1์›” 22์ผ ~ 2022๋…„ 1์›” 25์ผ
* ํ”ผ๋“œ๋ฐฑ ์ˆ˜ : ์ด 30๊ฐœ

  • ์„œ๋น„์Šค ๋งŒ์กฑ๋„ ํ‰๊ท  ์ ์ˆ˜ : 4.23์  (5์ )
  • ์ŠคํŠธ๋ ˆ์Šค ํ•ด์†Œ ๋งŒ์กฑ๋„ ์ ์ˆ˜ : 4.2์  (5์ )
  • ๊ธ์ •์ ์ธ ํ”ผ๋“œ๋ฐฑ Top3
    • ์ƒ๋“œ๋ฐฑ์„ ๋•Œ๋ฆฌ๋ฉด์„œ ์ŠคํŠธ๋ ˆ์Šค๋ฅผ ํ•ด์†Œํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๊ฐ€ ์ฐธ์‹ ํ•˜๊ณ  ์ข‹์•˜๋‹ค.
    • ์ƒ๋“œ๋ฐฑ์„ ๋•Œ๋ฆด ๋•Œ, ์ƒ๋“œ๋ฐฑ์ด ๋งž๋Š” ๋ชจ์…˜๊ณผ ํ•จ๊ป˜ ํƒ€๊ฒฉ๊ฐ์ด ์žˆ์–ด์„œ ์žฌ๋ฏธ์žˆ์—ˆ๋‹ค.
    • ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ต์ˆ™ํ•˜๋ฉด์„œ ํŽธํ•˜๋‹ค.
  • ๊ฐœ์„ ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ Top3
    • ์ผ๋ถ€ ํŽ˜์ด์ง€์—์„œ ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”๊ฐ€ ๋ณด์—ฌ์ง€์ง€ ์•Š์•„ ๋ถˆํŽธํ–ˆ๋‹ค. (๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”๋ฅผ ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„  ์™„๋ฃŒ)
    • ์ฑ„ํŒ…์„ ์–ด๋–จ ๋•Œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. (์ฑ„ํŒ… ๋ฉ”๋‰ด์—์„œ ์ด์šฉ์•ˆ๋‚ด ๊ฐ€์ด๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„  ์™„๋ฃŒ)
    • ์ฒซ ํ™”๋ฉด์ด ๋กœ๊ทธ์ธ์ด๋ผ์„œ, ๋กœ๊ทธ์ธ์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†๋‹ค. (๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ๋Š” ๋กœ๊ทธ์ธ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ๊ฐœ์„  ์™„๋ฃŒ)

๐Ÿ‘ฃ ๋Ÿฐ์นญ ์„ฑ๊ณผ

* ๋Ÿฐ์นญ์ผ์ž : 2022๋…„ 01์›” 22์ผ(ํ† )
* ์„ฑ๊ณผ ์ง‘๊ณ„์ผ์ž : 2022๋…„ 01์›” 27์ผ(๋ชฉ) 15:00

1. ์ธ์Šคํƒ€๊ทธ๋žจ ๊ด‘๊ณ  ์ง„ํ–‰ ์„ฑ๊ณผ ์š”์•ฝ

  • 3์ผ๊ฐ„ ์ธ์Šคํƒ€๊ทธ๋žจ ๊ด‘๊ณ  ์ง„ํ–‰์„ ํ†ตํ•ด ์•ฝ 2๋งŒ๋ช…์—๊ฒŒ ๋„๋‹ฌํ•˜์˜€์œผ๋ฉฐ ์ด ์ค‘, 182๋ช…์ด ์‚ฌ์ดํŠธ์— ๋ฐฉ๋ฌธํ•˜์˜€์Œ
  • ๋ฐฉ๋ฌธ์ž ์ค‘ ์•ฝ 67%๋Š” ์—ฌ์„ฑ์ด์—ˆ์Œ
  • ๋ฐฉ๋ฌธ์ž ์ค‘ ์•ฝ 91%๋Š” 13-17์„ธ์˜ ์—ฐ๋ น์ธต์ด์—ˆ์Œ
    image

2. ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ/ํฌ๋Ÿผ ํ™๋ณด ์„ฑ๊ณผ ์š”์•ฝ

  • Okky, ๋ฝ๋ฟŒ ๊ฐœ๋ฐœ์žํฌ๋Ÿผ์„ ํ†ตํ•ด ์„œ๋น„์Šค ํ™๋ณด๋ฅผ ์ง„ํ–‰ํ•˜์˜€์Œ
  • ์‚ฌ์šฉ์ž, ์„ธ์…˜์ˆ˜ ๋“ฑ์—์„œ ์ธ์Šคํƒ€๊ทธ๋žจ ๊ด‘๊ณ ๋ฅผ ํ†ตํ•œ ์„ฑ๊ณผ ์ง€ํ‘œ๋ณด๋‹ค ๋†’์€ ์„ฑ๊ณผ๋ฅผ ์–ป์—ˆ์Œ image

3. ๋Ÿฐ์นญ ์ดํ›„ ๋ˆ„์  ๋ฐ์ดํ„ฐ ๋ถ„์„ (DataBase)

  • ๊ฐ€์ž… ํšŒ์› ์ˆ˜ : 141๋ช…
  • ์ž‘์„ฑ๋œ ์ƒ๋“œ๋ฐฑ(๊ฒŒ์‹œ๊ธ€) ์ˆ˜ : ์ด 86๊ฐœ
  • ํ„ฐํŠธ๋ฆฐ ์ƒ๋“œ๋ฐฑ ์ˆ˜ : 36๊ฐœ (์ „์ฒด ๋Œ€๋น„ 41.8%)
  • ์ž‘์„ฑ๋œ ์žฝ(๋Œ“๊ธ€) ์ˆ˜ : ์ด 93๊ฐœ
  • ๊ฐ€์žฅ ๋งŽ์€ ์ƒ๋“œ๋ฐฑ์ด ์ž‘์„ฑ๋œ ๊ณ ๋ฏผ ์นดํ…Œ๊ณ ๋ฆฌ Top3 : ๊ธฐํƒ€(27๊ฐœ), ๊ณต๋ถ€(13๊ฐœ), ์ง„๋กœ๊ณ ๋ฏผ(13๊ฐœ)
  • ๊ธฐ๊ฐ„๋™์•ˆ ์ƒ๋“œ๋ฐฑ์ด ๋งž์€ ํšŸ์ˆ˜ : ์ด 6,995๋Œ€ (1์ธ ํ‰๊ท  49.6๋Œ€)

4. ๋Ÿฐ์นญ ์ดํ›„ ๋ˆ„์  ๋ฐ์ดํ„ฐ ๋ถ„์„ (Google Analytics)

  • ์‚ฌ์šฉ์ž : 741๋ช… (First Visit ๊ธฐ์ค€)
  • Page View : 1๋งŒ
  • ์ด๋ฒคํŠธ ์ˆ˜ : 1.5๋งŒ
  • ๋ชจ๋ฐ”์ผ / PC ๋น„์œจ : 6.5 / 3.5
  • ์‚ฌ์šฉ์ž ์žฌ๋ฐฉ๋ฌธ : 12.6%

๐Ÿ‘ ๊ผผ๊ผผํ•œ TestCode ์ž‘์„ฑ์„ ํ†ตํ•œ ์ฝ”๋“œ ์‹ ๋ขฐ๋„ ํ–ฅ์ƒ

* ์ด 154๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ
* 87%์˜ ์ปค๋ฒ„๋ฆฌ์ง€ ๋‹ฌ์„ฑ


image


โ›”๏ธ Trouble Shooting

1. ์ „์ฒดDB ์กฐํšŒ ์‹œ, ๋ฐ˜ํ™˜ ์†๋„๊ฐ€ ๋Š๋ฆฐ ๋ฌธ์ œ 

๐Ÿ›  ํ•ด๊ฒฐ๋ฐฉ๋ฒ• : DB ์ธ๋ฑ์‹ฑ์„ ํ†ตํ•œ data ๋ฐ˜ํ™˜ ์†๋„ ํ–ฅ์ƒ (์ดˆ๋‹น 122๊ฐœ ๋ฐ˜ํ™˜ -> ์ดˆ๋‹น 486๊ฐœ ๋ฐ˜ํ™˜)

โ—๏ธ ํ™•์ธ๋œ ๊ฐœ์„  ์‚ฌํ•ญ

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ธฐ์œ„ํ•ด spirng data JPA์—์„œ findByUsername๊ณผ findByNickname๊ณผ ๊ฐ™์€ query method๋“ฑ์˜ ์กฐํšŒ๊ฐ€ ์žฆ์Œ. Update๋‚˜ insert๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์กฐํšŒ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํŒ๋‹จ.

ex) ๋งˆ์ดํŽ˜์ด์ง€์—์„œ ์ •๋ณด ์ˆ˜์ •(๋‹‰๋„ค์ž„์ด ์•„๋‹ˆ๋ผ MBTI๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณ€๊ฒฝ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰)

ex2) ์ฑ„ํŒ…๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜ ํšŒ์›๊ฐ€์ž… ์‹œ์—๋„ ํ•ด๋‹น query method๋ฅผ ํ˜ธ์ถœํ•จ.

indexing์„ ํ•˜๊ธฐ์—๋Š” ์•„์ง ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์ด ํฌ์ง€๋Š” ์•Š์œผ๋‚˜, ํ˜„์žฌ DB ํ…Œ์ด๋ธ”์—์„œ๋Š” user ํ…Œ์ด๋ธ”์ด ๊ฐ€์žฅ ํฌ๊ธฐ ๋•Œ๋ฌธ์—, indexing์„ ์ ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ™•์ธํ•ด ๋ณด๊ธฐ๋กœํ•จ.

โ—๏ธ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค

Given: 10000๋ช…์˜ ํšŒ์›์ด DB์— ์ €์žฅ๋˜์–ด ์žˆ์Œ.

When: ์ดˆ๋‹น 10๋ช…์ด ๋™์‹œ์— ์ž์‹ ์˜ ๋งˆ์ดํŽ˜์ด์ง€ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•จ

Then: DB์ธ๋ฑ์‹ฑ์„ ํ•ด์ค€๊ฒƒ์ด ์•„๋ž˜ ๊ฒฐ๊ณผ ์Šคํฌ๋ฆฐ ์‚ฟ๊ณผ ๊ฐ™์ด throughput์ด ์•ฝ 4๋ฐฐ ๊ฐœ์„ ๋จ.

โ—๏ธ ์ฝ”๋“œ

โ“ As-Is (Throughput : 122.4/sec)

๐Ÿ’ก To-Be (Throughput : 485.9/sec)



2. JPA์—์„œ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹œ ๋ฐœ์ƒํ•˜๋Š” n+1 ๋ฌธ์ œ

โ—๏ธ ๋ฌธ์ œ : Spring Data JPA๋ฅผ ํ†ตํ•ด ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์„ ์ „์ฒด ์กฐํšŒํ•  ๊ฒฝ์šฐ, ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด ํŽ˜์น˜ ์ „๋žต๊ณผ ์ƒ๊ด€ ์—†์ด ์ „๋ถ€ ์ถ”๊ฐ€๋กœ ์กฐํšŒ๋˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒ

๐Ÿ›  ํ•ด๊ฒฐ๋ฐฉ๋ฒ• : @Query๋ฅผ ์‚ฌ์šฉํ•œ ์ •์  ์ฟผ๋ฆฌ๋ฌธ์€ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์•„์„œ @EntityGraph๋กœ Eager๋กœ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š”๊ฒƒ๋งŒ fetch join์„ ํ•ด์ฃผ์–ด์„œ ์ฟผ๋ฆฌ๋ฌธ์ด ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๊ฒŒ ํ•ด์ฃผ์—ˆ๋‹ค.

โ“ As-Is

๐Ÿ’ก To-Be



3. ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‹คํ–‰ ์‹œ, ์‹ค์ œ DB๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฌธ์ œ

โ—๏ธ ๋ฌธ์ œ : ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” DB๋ฅผ ํ…Œ์ŠคํŠธ์—์„œ๋„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Memory DB์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ์•ผ ํ•จ

๐Ÿ’ก To-Be (SpringBootTest ์ง„ํ–‰ ์‹œ Test ํŒจํ‚ค์ง€์˜ application.properties์—, ๋ฉ”๋ชจ๋ฆฌDB ์‚ฌ์šฉ ์„ค์ •)

๐Ÿ’ก To-Be (RepositoryTest ์ง„ํ–‰ ์‹œ, @DataJpaTest ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌDB ํ™˜๊ฒฝ์—์„œ JPA ๊ด€๋ จ Bean๋“ค๋งŒ ์ฃผ์ž…๋ฐ›์•„ ํ…Œ์ŠคํŠธ)



4. ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ, 1mb ์ด์ƒ์˜ ํŒŒ์ผ์ด ์—…๋กœ๋“œ ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ (NginX)

โ—๏ธ ๋ฌธ์ œ : 1mb ๋ฏธ๋งŒ์˜ ํŒŒ์ผ์€ ์ •์ƒ์ ์œผ๋กœ ์—…๋กœ๋“œ ๋˜์ง€๋งŒ, 1mb ์ด์ƒ์€ ์—…๋กœ๋“œ ๋˜์ง€ ์•Š์Œ

โ“ ์›์ธ : NginX์—์„œ ํŒŒ์ผ์—…๋กœ๋“œ ์šฉ๋Ÿ‰์„ 1mb๋กœ ์ œํ•œํ•ด๋‘์—ˆ์Œ (๊ธฐ๋ณธ ์„ค์ •)

๐Ÿ’ก To-Be (nginx.conf ํŒŒ์ผ ์ˆ˜์ •์„ ํ†ตํ•œ ์—…๋กœ๋“œ ์ œํ•œ ์šฉ๋Ÿ‰ ๋ณ€๊ฒฝ)



5. ์ œ๋ชฉ, ๋‚ด์šฉ ๋“ฑ์— ๊ธด ๊ธ€ ์ž‘์„ฑ์ด ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

โ“ ์›์ธ : MySql์—์„œ Data Type์ด VARCHAR()๋กœ ๋˜์–ด ์žˆ์–ด์„œ, ๊ธ€์ž์ˆ˜ ์ œํ•œ์ด ์กด์žฌํ•˜์˜€์Œ

๐Ÿ’ก To-Be (LONGTEXT() ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐ)



6. Travis CI ๋ฅผ ํ†ตํ•œ ๋ฐฐํฌ์ž๋™ํ™” ์ง„ํ–‰ ์‹œ, properties ํŒŒ์ผ์˜ ๋ณด์•ˆ ์ฒ˜๋ฆฌ ๋ฌธ์ œ

โ“ ์›์ธ : properties ํŒŒ์ผ์˜ ์„ค์ •๊ฐ’์„ ์ฝ์–ด์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, .gitignore์— ์ถ”๊ฐ€ํ•˜๋ฉด ์„ค์ •์„ ์ฝ์„ ์ˆ˜ ์—†์–ด ๋นŒ๋“œ๋ฅผ ์‹คํŒจํ•จ

๐Ÿ’ก To-Be (์•”ํ˜ธํ™”๋ฅผ ํ•œ ํ›„ Travis CI์—์„œ ๋ฐฐํฌ ์‹œ ๋ณตํ˜ธํ™” ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •)

travis encrypt-file application.properties --add

image



7. ๊ฒŒ์‹œ๊ธ€, ์ฑ„ํŒ…์˜ ์‹œ๊ฐ„์ด ํ•œ๊ตญ ์‹œ๊ฐ„๊ณผ 9์‹œ๊ฐ„ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๋ฌธ์ œ

โ“ ์›์ธ : EC2, RDS์˜ ์‹œ๊ฐ„ ๊ธฐ๋ณธ๊ฐ’์ด UTC(ํ˜‘์ •์„ธ๊ณ„์‹œ)์œผ๋กœ ์„ค์ •๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ

๐Ÿ’ก To-Be (EC2 ์‹œ๊ฐ„๋Œ€ ๋ณ€๊ฒฝ)

# EC2 ์‹œ๊ฐ„๋Œ€ ๋ณ€๊ฒฝ
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

๐Ÿ’ก To-Be (RDS ์‹œ๊ฐ„๋Œ€ ๋ณ€๊ฒฝ)
image



8. ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ ์‹œ๋„ ์‹œ ํ† ํฐ ์ธ์ฆ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๋ฌธ์ œ

โ“ ์›์ธ : Bearer Token์„ ์‚ฌ์šฉํ•œ ํ›„ Bearer ํƒ€์ž…๊นŒ์ง€ ํฌํ•จ๋œ ํ† ํฐ ๋ฌธ์ž์—ด์„ ์ธ์ฆํ•˜๋ ค๊ณ  ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ

๐Ÿ’ก To-Be (Stomp Interceptor์—์„œ ํƒ€์ž… ๋ถ€๋ถ„์„ ์ž˜๋ผ๋ƒ„)

String jwtToken = accessor
        .getFirstNativeHeader("Authorization")
        .substring(7);

๐Ÿ”‘ Bearer Token์„ ์‚ฌ์šฉํ•œ ์ด์œ 

# Bearer Token์˜ ์ •์˜
A security token with the property that any party in possession of the token (a "bearer") can use the token
in any way that any other party in possession of it can. Using a bearer token does not require a bearer to 
prove possession of cryptographic key material(proof-of-possession).
ํ† ํฐ์„ ์†Œ์œ ํ•œ ๋ชจ๋“  ๋‹น์‚ฌ์ž๊ฐ€ ํ† ํฐ์„ ์†Œ์œ ํ•œ ๋‹ค๋ฅธ ๋‹น์‚ฌ์ž๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ† ํฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์ด ์žˆ๋Š” ๋ณด์•ˆ ํ† ํฐ์ด๋‹ค. 
๋ณด์œ ์ž ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณด์œ ์ž๊ฐ€ ์•”ํ˜ธํ™” ํ‚ค ์ž๋ฃŒ(์†Œ์œ  ์ฆ๋ช…)์˜ ์†Œ์œ ๋ฅผ ์ฆ๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
# ์ผ๋ฐ˜์ ์œผ๋กœ  ํ† ํฐ์€ ์š”์ฒญ ํ—ค๋”์˜ Authorization ํ•„๋“œ์— ๋‹ด์•„์ ธ ๋ณด๋‚ด์ง€๋Š”๋ฐ, Authorization์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.
- Authorization: [type] [credential]
- Bearer๋Š” Authorization Type์˜ ํ•œ ์ข…๋ฅ˜๋กœ, JWT / OAuth์— ๋Œ€ํ•œ ํ† ํฐ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.


9. EC2 ์šฉ๋Ÿ‰์ œํ•œ ๋ฌธ์ œ๋กœ ๋ฐฐํฌ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ

โ“ ์›์ธ : EC2์˜ ์šฉ๋Ÿ‰ ๊ธฐ๋ณธ ์„ค์ •์ด 8GiB๋กœ ์„ค์ •๋˜์–ด์žˆ์–ด์„œ, ์šฉ๋Ÿ‰ ๋ถ€์กฑ์œผ๋กœ Build ํŒŒ์ผ์ด ๋ฐฐํฌ๋˜์ง€ ์•Š์•˜์Œ

๐Ÿ’ก To-Be

# 1. AWS EC2 ์›นํŽ˜์ด์ง€์—์„œ ์šฉ๋Ÿ‰ ์„ค์ • ๋ณ€๊ฒฝํ•ด์ฃผ๊ธฐ (8Gib -? 16GiB)
# 2. EC2 Ubuntu์—์„œ ์šฉ๋Ÿ‰์ด ํ™•์žฅ๋œ ๋””์Šคํฌ ๋งˆ์šดํŠธ ์‹œ์ผœ์ฃผ๊ธฐ  
 ~$ sudo growpart /dev/xvda 1
# 3. Linux ํŒŒ์ผ์‹œ์Šคํ…œ์—์„œ ๋””์Šคํฌ ํ™•์žฅ ์ ์šฉ ํ•˜๊ธฐ
 ~$ sudo resize2fs /dev/xvda1

[์ž์„ธํ•œ ๋‚ด์šฉ - ๋ธ”๋กœ๊ทธ ๋ณด๊ธฐ]


๐Ÿ”“ ์ ์šฉํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„

1. ์ƒŒ๋“œ๋ฐฑ ํด๋ฆญ/ํ„ฐ์น˜ ์‹œ ๋™์‹œ์„ฑ ๋ฌธ์ œ

์ƒŒ๋“œ๋ฐฑ์„ ์—ฌ๋Ÿฌ ์œ ์ €๊ฐ€ ๋™์‹œ์— ํด๋ฆญํ•  ๊ฒฝ์šฐ, ๋™์‹œ์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด hit์ˆ˜๊ฐ€ ์ œ๋Œ€๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์˜€์Œ. ์›น์†Œ์ผ“์„ ์—ฐ๊ฒฐํ•˜์—ฌ, ์ ‘์†ํ•œ ์œ ์ €๋“ค์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒŒ๋“œ๋ฐฑ์˜ ํƒ€๊ฒฉ ์ˆ˜๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๊ณ  ํ•˜์˜€์œผ๋‚˜ ์‹œ๊ฐ„ ๊ด€๊ณ„ ์ƒ ์ ์šฉํ•˜์ง€ ๋ชปํ•˜์˜€์Œ.

  • ๋Œ€์•ˆ - ์ƒŒ๋“œ๋ฐฑ์„ ์น˜๋ ค๊ณ  ํŽ˜์ด์ง€์— ์ ‘์†ํ• ๋•Œ, ๋•Œ๋ฆฌ๊ธฐ ์ „๊ณผ ํ›„์˜ ํšŸ์ˆ˜๋ฅผ ๋ชจ๋‘ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜์—ฌ ๋‘ ํšŸ์ˆ˜์˜ ์ฐจ์ด๋งŒ ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ๋ณด์™„ํ•˜์˜€์Œ.

2. thandbag์„ ๋•Œ๋ฆฐ ์‚ฌ๋žŒ์˜ ๋žญํ‚น ์กฐํšŒ ๊ธฐ๋Šฅ

thandbag์„ ๋–„๋ฆฐ ์œ ์ €๋“ค์˜ ๋ชฉ๋ก๊ณผ ๋žญํ‚น์ด ์กฐํšŒ ๋˜๋„๋ก ํ•˜๊ฒŒ ํ•ด๋‹ฌ๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ์™”์œผ๋‚˜, ์„œ๋ฒ„์™€ ํ”„๋ก ํŠธ์—”๋“œ ์—์„œ ๋น ๋ฅด๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ์—ฌ์„œ ์ ์šฉํ•˜์ง€ ๋ชปํ•จ.

  • ๋ฐฑ์—”๋“œ์—์„œ๋Š” DB์ •๊ทœํ™”์™€ API ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ • ๋“ฑ์ด ํ•„์š”ํ•  ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋˜๋ฉฐ,
  • ํ”„๋ก ํŠธ์—”๋“œ์—์„œ๋Š” ์ƒŒ๋“œ๋ฐฑ๋•Œ๋ฆฌ๊ธฐ ๊ธฐ๋Šฅ์„ ์›น์†Œ์ผ“์„ ์‚ฌ์šฉํ•œ ์‹ค์‹œ๊ฐ„ ๊ธฐ๋Šฅ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋จ.

3. ๊ธฐํƒ€ ๊ณ ๋ ค ์‚ฌํ•ญ์ด์—ˆ์ง€๋งŒ ์‹œ๊ฐ„ ๊ด€๊ณ„์ƒ ์ ์šฉํ•˜์ง€ ๋ชปํ•œ ์ 
  • ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ๋ฐ ํƒ€์ž… ์—๋Ÿฌ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด queryDSL ์ ์šฉ
  • ์„œ๋ฒ„์— ๊ณผํ•œ ์š”์ฒญ์œผ๋กœ ๋ถ€ํ•˜๋ฅผ ์ฃผ๊ธฐ ์‰ฌ์šด like ์š”์ฒญ ์ œํ•œ ์ฒ˜๋ฆฌ(redis ์‚ฌ์šฉ)
  • MSA ์•„ํ‚คํ…์ณ ์„ค๊ณ„๋ฐฉ์‹์— ๋งž์ถฐ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์„œ๋ฒ„๋ฅผ ๋‚˜๋ˆ„์–ด ์„œ๋ฒ„ ์•ˆ์ •์„ฑ ๊ฐœ์„ 

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published