Skip to content

Latest commit

ย 

History

History
80 lines (62 loc) ยท 6.93 KB

TroubleShoot.md

File metadata and controls

80 lines (62 loc) ยท 6.93 KB

JPA

์šฐ์„  ํ•™์Šต์š•๊ตฌ๊ฐ€ ์ปธ๋‹ค. ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ”์„ ๋งดํ•‘ํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์ง€ํ–ฅ์ ์ด์ง€ ์•Š์€ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋ฉ”์„œ๋“œ๋กœ์„œ ๋‹ค๋ฃจ๊ธฐ ํž˜๋“  ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋Š” QueryDSL, JPQL๋กœ์„œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค ์ƒ๊ฐํ–ˆ๋‹ค.

MariaDB

ํ•™์Šตํ•ด์•ผํ•  ๊ธฐ์ˆ  ์Šคํƒ๋“ค์ด ๋งŽ์•˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ๋ฃจ๋“ค ๋ชจ๋‘๊ฐ€ ์•Œ๊ณ ์žˆ์–ด ์‰ฝ๊ฒŒ ๋‹ค๊ฐ€๊ฐˆ์ˆ˜ ์žˆ๋Š” Mysql๊ณผ ๊ณ ๋ฏผ์„ ํ–ˆ๋‹ค. ๊ทธ ์ค‘ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์ผ๋‹จ ๋ฌด๋ฃŒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  Mysql๋ณด๋‹ค ๋น ๋ฅด๊ณ  ๊ฐ€๋ณ๋‹ค. Mysql๊ณผ ๋†’์€ ํ˜ธํ™˜์„ฑ์„ ๊ฐ–๋Š”๋‹ค. MySQL์—์„œ MariaDB๋กœ ๋ฐ”๊พผ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

Spring Securtiy

์šฐ์„  ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „์— Form ํ˜•์‹์˜ ํšŒ์›๊ฐ€์ž…์„ ํ†ตํ•ด Member๋ฅผ ์ƒ์„ฑํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฌ๋˜ ๋„์ค‘ ์šฐ์—ฐํžˆ Stored XSS ๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ์—ฌ๋Ÿฟ ํŒ€๋“ค์—๊ฒŒ ์ƒˆ๋ฒฝ์— ๋ชฐ๋ž˜ ์ ์šฉํ•ด ๋ณด์•˜๋‹ค. ๊ฒฐ๊ณผ๋Š” ๋†€๋ž๊ฒ ๋„ ์‰ฝ๊ฒŒ ๊ณต๊ฒฉ์ด ๋จนํ˜”๋‹ค. ์ด ์‚ฌ๊ฑด์„ ๊ณ„๊ธฐ๋กœ ๋‹จ์ˆœํžˆ Https๋งŒ ์ ์šฉํ•œ๋‹ค๊ณ  ์‚ฌ์ดํŠธ์˜ ๋ณด์•ˆ์ด ์ถฉ๋ถ„ํžˆ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ตฌ๋‚˜ ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ณ  ๋†’์œผ ๋ณด์•ˆ ์ˆ˜์ค€์„ ๊ตฌ์ถ•ํ•ด๋‘” Spring Security๋ฅผ ์ด์šฉํ•ด ๋Œ€ํ˜• ์›น์„œ๋น„์Šค์‚ฌ์™€ ๋น„์Šทํ•œ ์ˆ˜์ค€์˜ ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๋ ค๊ณ  ์‚ฌ์šฉํ–ˆ๋‹ค. ์‹ค์ œ ์šด์˜๋  ์„œ๋น„์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์— ์ข€๋” ์‹ ๊ฒฝ์“ฐ๊ณ  ์‹ถ์—ˆ๊ณ  ๋ฌผ๋ก  ์ธ์ฆ ์ธ๊ฐ€์—๋Œ€ํ•ด ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์•ˆ์“ฐ๊ณ  ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋ฏธ ๋†’์€ ๋ณด์•ˆ ์ˆ˜์ค€์„ ๋‹ค ๊ตฌ์ถ•ํ•ด๋‘” ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ข€๋” ์•ˆ์ „ํ•œ ์„œ๋น„์Šค๊ฐ€ ๋˜์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ–ˆ๋‹ค.

OAuth2

๋ณด์•ˆ์˜ ์ˆ˜์ค€์„ ์•Œ ์ˆ˜ ์—†๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ผ์ผ์ด ๊ณ„์ •์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋ฉด ID/PW๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๊ณ  ๊ฐœ์ธ์ •๋ณด๊ฐ€ ์œ ์ถœ๋˜๋ฉด ์—ฐ์‡„์ ์œผ๋กœ ํ”ผํ•ด๊ฐ€ ์‹ฌ๊ฐํ•ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์˜ ์ˆ˜์ค€์ด ์–ด๋Š์ •๋„ ๊ฒ€์ฆ๋œ ์‚ฌ์ดํŠธ(OAuth provider(ex. google, facebook))์˜ API๋ฅผ ์ด์šฉํ•ด์„œ ์ธ๊ฐ€ ์œ„์ž„ํ•ด ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•(OAuth)์ด ๋ณด์•ˆ์ƒ ์ข‹๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ์ด์œ ์™€ ๋น„์Šทํ•˜๋‹ค. OAuth๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด Password๊ฐ€ ๋…ธ์ถœ์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฏธ ๋ณด์•ˆ์ˆ˜์ค€์ด ๊ฒ€์ฆ๋œ ๋Œ€ํ˜• ์„œ๋น„์Šค์—๊ฒŒ ์ธ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ€์‹  ์œ„์ž„ํ•˜๋Š” OAuth๋ฅผ ์ด์šฉํ•ด ๋ณด์•ˆ์ƒ ์•ˆ์ „ํ•œ ์ธ์ฆ์ธ๊ฐ€๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

JWT

Session์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ฒ„ ํ™•์žฅ์‹œ ์„ธ์…˜์ •๋ณด์˜ ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๋ฐ˜์— ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ํ•˜๊ณ ์ž ํ–ˆ๊ธฐ์— ๋™์‹œ์„ฑ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๋น„์šฉ์ด ํฌ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆใ„ท. ๋˜ ์„ธ์…˜์€ ์„œ๋ฒ„์— ์ €์žฅํ•˜๋˜๊ฐ€ DB์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ƒ๊ธด๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. Restapi๋Š” ๋ฌด์ƒํƒœ์„ฑ์„ ์ง€ํ–ฅํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋–„๋ฌธ์— JWT์˜ statelessํ•œ ์„ฑ๊ฒฉ๊ณผ self-containedํ•œ ์„ฑ์งˆ์„ ๊ฐ–๊ณ  ์žˆ๊ณ  ์„œ๋ฒ„ ์ž์ฒด์—์„œ ํ† ํฐ์ธ์ฆ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋‹จ์ ์„ ๋ณด์™„ ํ• ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

jwt์˜ ๋‹จ์ ์œผ๋กœ๋Š” ๋‹ด์œผ๋ ค๋Š” data๊ฐ€ ๋งŽ์•„์ง€๋ฉด ํ† ํฐ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์ € ๋„คํŠธ์›Œํฌ์— ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๊ณ  ๋ฌด์ƒํƒœ์„ฑ์ด๊ธฐ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ ๋งŒ๋“ค๋ฉด ์„œ๋ฒ„์—์„œ ์ œ์–ด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ˜„์žฌ ํ† ํฐ์— ๋‹ด๋Š” ๋ฐ์ดํ„ฐ๋Š” ๊ทธ๋ฆฌ ํฌ์ง€ ์•Š๊ธฐ ๋–„๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•˜๊ณ  expiretime์„ ๊ฑธ์–ด์ฃผ์—ˆ๋‹ค.

์™œ Nginx?

์šฐ์„  apache์™€ nginx ์— ์žˆ์–ด์„œ ๊ณ ๋ฏผ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. apache๋Š” MPM(multi process module)์ด๋‹ค. Apache๋Š” MPM์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•˜๊ณ  ์žˆ๋‹ค.. MPM์€ 3๊ฐ€์ง€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ทผ๊ฐ„์œผ๋กœ ํ•˜๊ณ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค ์ค‘์‹ฌ์˜ ์ ‘๊ทผ๋ฒ•์ด๊ณ  ๊ฐ ์š”์ฒญ์—๋Œ€ํ•ด ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์š”์ฒญ์ด ๋Œ€๊ทœ๋ชจ๋กœ ์žˆ๋‹ค๋ฉด ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ๋งŽ์€ ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

Nginx๋Š” ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์“ฐ๋ ˆ๋“œ๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ด๋ฒคํŠธ ๊ฐœ๋…์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค. ๋‹จ์ผ Nginx Worker๊ฐ€ ๋™์‹œ์— ์ˆ˜์ฒœ๊ฐœ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. Nginx์˜ Worker๋“ค์ด ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ ๋  ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ๋น ๋ฅด๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚ด๋ถ€ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด๋ฒคํŠธ ์ค‘์‹ฌ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์ด๊ณ  ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ์—์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

nginx๋Š” ํšจ์œจ์„ฑ์— ์ค‘์ ์„ ๋‘์–ด ๋™์‹œ์›น ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋‹จ์ ์œผ๋กœ๋Š” ๋™์ ์ปจํ…์ธ ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋ณต์žกํ•ด ํ”„๋กœ์„ธ์Šค์˜ ํšจ์œจ์„ ์žก์•„ ๋จน๋Š”๋‹ค. ํ•˜์ง€๋งŒ ์ €ํฌ๋Š” ํ”„๋ก ํŠธ๋ฅผ apk๋กœ ๋‹ค๋ฃจ๊ธฐ ๋–„๋ฌธ์— nginx์—์„œ ๋™์  ์ปจํ…์ธ ๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š๊ธฐ ๋–„๋ฌธ์— ์•„ํŒŒ์น˜๋ณด๋‹ค nginx๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ํ›จ์”ฌ ํšจ์šธ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” nginx ๋ฅผ ํ”„๋ก์‹œ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

PreFork MPM (๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค)

  • Client ์š”์ฒญ์— ๋Œ€ํ•ด apache ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฒ˜๋ฆฌ.
  • ์š”์ฒญ์ด ๋งŽ์„ ๊ฒฝ์šฐ Process ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ Apache ์„ค์น˜์‹œ default ๋กœ ์„ค์ •
  • ํ•˜๋‚˜์˜ ์ž์‹ํ”„๋กœ์„ธ์Šค๋‹น ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ–์Œ (์ตœ๋Œ€ 1024๊ฐœ)
  • ์Šค๋ ˆ๋“œ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ๋ฅผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ๋…๋ฆฝ์ ์ด๊ธฐ์— ์•ˆ์ •์ ์ธ ๋ฐ˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ๊ฐ€ ํฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค

Worker MPM (๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค-์Šค๋ ˆ๋“œ)

  • Prefork ๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ ๊ณ  ๋™์‹œ์ ‘์†์ž๊ฐ€ ๋งŽ์€ ์‚ฌ์ดํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ
  • ์Šค๋ ˆ๋“œ ๊ฐ„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅ
  • ํ”„๋กœ์„ธ์Šค ๋‹น ์ตœ๋Œ€ 64๊ฐœ์˜ ์Šค๋ ˆ๋“œ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ๋งŒ์„ ๋ถ€์—ฌ

Event-Driven ๋ฐฉ์‹

  • ์ž‘์—…์„ ํ•˜๋‹ค I/O, socket read/write ๋“ฑ CPU๊ฐ€ ๊ด€์—ฌํ•˜์ง€ ์•Š๋Š” ์ž‘์—…์ด ์‹œ์ž‘๋˜๋ฉด ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰

  • ์ฐธ๊ณ 

  • ์ฐธ๊ณ 

MongoDB

RDB ๋Š” ์ •ํ˜•ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ค„ ๊ตฌ์กฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•์žฅํ•ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ธ DB์ธ๋ฐ ๋ฉ”์‹œ์ง€์™€ ๊ฐ™์€ ๋น„์ •ํ˜•๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ์—” ๋งž์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋ž˜์„œ Nosql์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ๋˜ ๊ทธ ์ค‘ MongoDB๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ๋‹ค๋ฅธ Nosql ๋ณด๋‹ค ์ ‘๊ทผ์„ฑ์ด ์‰ฌ์› ๋‹ค. ๋ฌธ์„œํ™”๊ฐ€ ์Šคํ‚ค๋งˆ๊ฐ€ ์—†์„ ๋ฟ๋”๋Ÿฌ ์Šคํ‚ค๋งˆ๊ฐ€ ์—†์œผ๋‹ˆ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ•„๋“œ๋ฅผ ์‰ฝ๊ฒŒ ๋ณ€ํ˜•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋˜ ๋ฒ”์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ CRUD์˜ ์ž‘์ ‘์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ด์ •๋„์˜ ์ด์œ ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํžˆ ์“ธ ๊ทผ๊ฑฐ๊ฐ€ ๋œ๋‹ค ์ƒ๊ฐํ•œ๋‹ค.