week 2 hyowon - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

week 2

JAVA

์ž๋ฐ”์—์„œ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋™๊ธฐํ™”๋˜๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  1. Thread ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค ๋Œ€์‹  ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.
  2. Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค ๋Œ€์‹  Thread ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด Thread์˜ static ๋ฉ”์„œ๋“œ์ธ currentThread()๋ฅผ ํ†ตํ•ด ์ฐธ์กฐํ•œ๋‹ค.

hashCode() ๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™๋‹ค๋ฉด ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์ง€๋‚˜์š”? hashcode()์™€ equls()๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•˜๊ณ  ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€?

hashCode()

  • ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ณ€ํ™˜ํ•˜์—ฌ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๊ณ ์œ ํ•œ ์ •์ˆ˜๊ฐ’. ๋™์ผ์„ฑ(identity) ๋น„๊ต

equals()

  • ๋‘ ๊ฐ์ฒด์˜ ๋‚ด์šฉ๋ฌผ(equality)์ด ๊ฐ™์€์ง€ ๋น„๊ต

์„ค๋ช…

  • ๋‘˜ ๋ชจ๋‘ Object ๊ฐ์ฒด์— ์กด์žฌํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‚˜, ์˜ค๋ฒ„๋ผ์ด๋“œ ๋˜์–ด ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ๋Š” ๋‹ค๋ฅธ ์—ญํ• ์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • equals() ๊ฐ€ true๋ผ๋ฉด hashCode() ๊ฐ’์€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
    ๊ทธ๋Ÿฌ๋‚˜, hashCode() ๊ฐ’์ด ๊ฐ™๋‹ค๊ณ  ํ•ด์„œ equals()๊ฐ€ true์ธ๊ฑด ์•„๋‹ˆ๋‹ค.
  • ์„œ๋กœ ๋‹ค๋ฅธ ๋‚ด์šฉ๋ฌผ์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ผ๋„ (ํฌ๋ฐ•ํ•œ ํ™•๋ฅ ๋กœ) hashCode ๊ฐ€ ๋™์ผํ•˜๊ฒŒ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

hashcode()์™€ equls()๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•˜๊ณ  ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€?

  • ๋งŒ์•ฝ hashCode() ๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™๋‹ค๋ฉด ์ถฉ๋Œ(Collusion) ์ด ์ผ์–ด๋‚œ๋‹ค.
    • ๋‹ค๋ฅธ k ๊ฐ’์ด ๋™์ผํ•œ h(k) ๊ฐ’์„ ๊ฐ€์ ธ ๋™์ผํ•œ ์Šฌ๋กฏ์— ์ €์žฅ๋˜๋Š” ๊ฒฝ์šฐ
    • h(k1) == h(k12)
  • HashCode() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ hash ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋„๋ก ๋งŒ๋“ค์–ด HashMap์— ์ €์žฅ์„ ํ•œ๋‹ค๋ฉด?
  • HashMap ๋‚ด๋ถ€์ ์œผ๋กœ ํ‚ค๋ฅผ ๊ตฌ๋ถ„ํ•  ๋•Œ ๋‘ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค. hashCode๊ฐ€ ๊ฐ™์€์ง€๋ฅผ ๋น„๊ตํ•œ ํ›„, equals()๋กœ ๊ฐ™์€ ๋‚ด์šฉ๋ฌผ์ธ์ง€๋ฅผ ๋น„๊ตํ•˜๊ฒŒ ๋˜๋Š”๋ฐ,
    ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ hash๊ฐ’์„ ๊ฐ€์ง€๋ฉด ์ฒซ๋ฒˆ์งธ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๋‘๋ฒˆ์งธ ๊นŒ์ง€ ๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ equals ๋น„๊ต๋Š” ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜ํ–‰์†๋„์— ๋ฌด๋ฆฌ๊ฐ€ ์ƒ๊ธธ ๊ฒƒ์ด๋‹ค.

 

ํŒจ๋Ÿฌ๋ŸดGC, G1GC์˜ ์ฐจ์ด์  ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

  • JVM ๋ฒ„์ „์ด ์˜ฌ๋ผ๊ฐ์— ๋”ฐ๋ผ GC๋ฐฉ์‹์ด ์ถ”๊ฐ€๋˜๊ณ  ๋ฐœ์ „๋จ
  • Serial GC, Parallel GC,

Parallel GC

  • Minor CD๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋Š˜๋ ค ์ข€ ๋” ๋น ๋ฅธ ๋™์ž‘์ด ๊ฐ€๋Šฅ
  • Parallel GC ์ ์šฉ์„ ์œ„ํ•œ JVM ์˜ต์…˜ : -XX:+UseParallelGC, -XX:ParallelGCThreads (Minor GC ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜)

G1 GC

  • ํฐ heap ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์งง์€ GC ์‹œ๊ฐ„์„ ๋ณด์žฅํ•˜๋Š” ๋ชฉ์ 
  • G1 GC ์ ์šฉ์„ ์œ„ํ•œ JVM ์˜ต์…˜ : -XX:+UseG1GC

SPRING

Spring์˜ AOP์˜ ํŠน์ง•๊ณผ ์–ด๋“œ๋ฐ”์ด์Šค ์ข…๋ฅ˜์™€ ์‚ฌ์šฉ๋œ proxy ํŒจํ„ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

ํŠน์ง•

  • ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ต์‹ฌ ๋กœ์ง์— ์‹ ๊ฒฝ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•จ.

์–ด๋“œ๋ฐ”์ด์Šค ์ข…๋ฅ˜

  • JoinPoint : ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” '์‹œ์ '
  • Advice : JoinPoint์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ
    ํšก๋‹จ๊ด€์‹ฌ์‚ฌ์— ํ•ด๋‹น(ํŠธ๋žœ์žญ์…˜,๋กœ๊ทธ,๋ณด์•ˆ, ...)
  • Target : ์‹ค์งˆ์ ์ธ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ
    ํ•ต์‹ฌ๊ด€์‹ฌ์‚ฌ์— ํ•ด๋‹น(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)
  • PointCut : Targetํด๋ž˜์Šค์™€ Advice๊ฐ€ ๊ฒฐํ•ฉ๋  ๋•Œ ๋‘˜ ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๊ทœ์น™์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ
  • Aspect : Advice + Pointcut
  • Weaving : AOP์—์„œ JoinPoint๋“ค์„ Advice๋กœ ๊ฐ์‹ธ๋Š” ๊ณผ์ •
    Weavingํ•˜๋Š” ์ž‘์—…์„ ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด AOP ํˆด์˜ ์—ญํ• 

Spring AOP์˜ Proxy ํŒจํ„ด

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— Proxy Class๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ํ•ด๋‹น ๋กœ์ง ์ „ํ›„์— ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํšก๋‹จ๊ด€์‹ฌ์‚ฌ๋ฅผ ์‹คํ–‰ํ•จ.

 

์Šคํ”„๋ง์—์„œ @Transactional์€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋ฉฐ ์–ด๋–ค ์˜ต์…˜์ด ์žˆ๋Š”๊ฐ€?

ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ ์œ„์— @Transactional์ด ์ถ”๊ฐ€๋˜๋ฉด ์ด ํด๋ž˜์Šค์— ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋Šฅ์ด ์ ์šฉ๋œ ํ”„๋ก์‹œ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

์ด ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” @Transactional์ด ํฌํ•จ๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๊ฒฝ์šฐ, PlatformTransactionManager๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ณ , ์ •์ƒ ์—ฌ๋ถ€์— ๋”ฐ๋ผ Commit or Rollbackํ•œ๋‹ค.

์ „ํŒŒ์†์„ฑ(propagation)

  1. REQUIRED
    • ๋””ํดํŠธ ์†์„ฑ, ๋ถ€๋ชจ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์‹คํ–‰ํ•˜๋ฉฐ ๋ถ€๋ชจ ํŠธ๋žœ์žญ์…˜์ด ์—†์„ ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•œ๋‹ค.
  2. SUPPORTS
    • ์ด๋ฏธ ์‹œ์ž‘๋œ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์œผ๋ฉด ์ฐธ์—ฌํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํŠธ๋žœ์žญ์…˜ ์—†์ด ์ง„ํ–‰ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.
  3. REQUIRES_NEW
    • ๋ถ€๋ชจ ํŠธ๋žœ์žญ์…˜์„ ๋ฌด์‹œํ•˜๊ณ  ๋ฌด์กฐ๊ฑด ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜์ด ์ƒ์„ฑ
  4. MANDATORY
    • REQUIRED์™€ ๋น„์Šทํ•˜๊ฒŒ ์ด๋ฏธ ์‹œ์ž‘๋œ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์œผ๋ฉด ์ฐธ์—ฌํ•œ๋‹ค.
    • ๋ฐ˜๋ฉด์— ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋œ ๊ฒƒ์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋Œ€์‹  ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
    • ํ˜ผ์ž์„œ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์ง„ํ–‰ํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.
  5. REQUIRES_NEW
    • ํ•ญ์ƒ ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•œ๋‹ค.
    • ์ด๋ฏธ ์ง„ํ–‰ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์œผ๋ฉด ํŠธ๋žœ์žญ์…˜์„ ์ž ์‹œ ๋ณด๋ฅ˜์‹œํ‚จ๋‹ค.
  6. NOT_SUPPORTED
    • ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค.
    • ์ด๋ฏธ ์ง„ํ–‰ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์œผ๋ฉด ๋ณด๋ฅ˜์‹œํ‚จ๋‹ค.
  7. NEVER
    • ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ๊ฐ•์ œํ•œ๋‹ค.
    • ์ด๋ฏธ ์ง„ํ–‰ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜๋„ ์กด์žฌํ•˜๋ฉด ์•ˆ๋œ๋‹ค ์žˆ๋‹ค๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  8. NESTED
    • ์ด๋ฏธ ์ง„ํ–‰์ค‘์ธ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์œผ๋ฉด ์ค‘์ฒฉ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•œ๋‹ค.
    • ์ค‘์ฒฉ ํŠธ๋žœ์žญ์…˜์€ ํŠธ๋žœ์žญ์…˜ ์•ˆ์— ๋‹ค์‹œ ํŠธ๋žœ์žญ์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.
    • ํ•˜์ง€๋งŒ ๋…๋ฆฝ์ ์ธ ํŠธ๋žœ์žญ์…˜์„ ๋งŒ๋“œ๋Š” REQUIRES_NEW์™€๋Š” ๋‹ค๋ฅด๋‹ค.

ReadOnly

ํŠธ๋žœ์žญ์…ฉ์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ณ , ์“ฐ๊ธฐ ์ž‘์—…์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ์˜๋„์ ์œผ๋กœ ๋ฐฉ์ง€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ ์˜ˆ์™ธ

์˜ต์…˜ : rollback-for, rollbackFor, rollbackForClassName, noRollBackFor

๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ ๋ง๊ณ ๋„ ๋กค๋ฐฑ์ด ์ผ์–ด๋‚˜๋„๋ก ํ•˜๊ฑฐ๋‚˜, ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ์—์„œ ๋กค๋ฐฑํ•˜์ง€ ์•Š์„ ์˜ˆ์™ธ๋ฅผ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑ

timeout ์†์„ฑ

์ง€์ •ํ•œ ์‹œ๊ฐ„ ๋‚ด์— ํ•ด๋‹น ๋ฉ”์„œ๋“œ ์ˆ˜ํ–‰์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ rollback ์ˆ˜ํ–‰.

 

์Šคํ”„๋ง์—์„œ ์ธ์ฆ๊ณผ ์ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

์ธ์ฆ(Authentication)

  • ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ๋ณธ์ธ์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ

์ธ๊ฐ€, ๊ถŒํ•œ๋ถ€์—ฌ(Authorization)

  • ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ๋œ ์ž์›์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ ˆ์ฐจ

spring์˜ ์ธ์ฆ๋ฐฉ์‹

  • credential ๊ธฐ๋ฐ˜ ์ธ์ฆ : ์‚ฌ์šฉ์ž๋ช…๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ด์šฉํ•œ ๋ฐฉ์‹ (Spring์˜ ์ธ์ฆ ๋ฐฉ์‹)
  • ์ด์ค‘ ์ธ์ฆ(twofactor ์ธ์ฆ) : ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐœ์ธ ์ •๋ณด๋ฅผ ์ธ์ฆ ํ›„, ๋‹ค๋ฅธ ์ธ์ฆ ์ฒด๊ณ„(์˜ˆ: ๋ฌผ๋ฆฌ์ ์ธ ์นด๋“œ)๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‘๊ฐ€์ง€์˜ ์กฐํ•ฉ์œผ๋กœ ์ธ์ฆํ•˜๋Š” ๋ฐฉ์‹
  • ํ•˜๋“œ์›จ์–ด ์ธ์ฆ : ์ž๋™์ฐจ ํ‚ค์™€ ๊ฐ™์€ ๋ฐฉ์‹

์ธ์ฆ https://t1.daumcdn.net/cfile/tistory/99A7223C5B6B29F003

  • ์ธ์ฆ ๋งค๋‹ˆ์ €(Authentication Manager)๊ฐ€ ์ธ์ฆ์— ๋Œ€ํ•œ ์‹ค์ œ์  ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ์ฆ ๋งค๋‹ˆ์ €๋Š” ์ธ์ฆ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ •๋ณด๋ฅผ UserDetails ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š”, ์–ด๋–ป๊ฒŒ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€ ํŒ๋‹จํ•  UserDetailsService๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ UserDetailsService ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์ธ์ฆ ๋งค๋‹ˆ์ €์— ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ธ๊ฐ€

์œ ์ €์˜ ์š”์ฒญ์„ AuthenticationFilter์—์„œ Authentication ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด AuthenticationManager(ProviderManager)์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๊ณ , AuthenticationProvider(DaoAuthenticationProvider)๊ฐ€ ์‹ค์ œ ์ธ์ฆ์„ ํ•œ ์ดํ›„์— ์ธ์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด Authentication๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

  • AbstractAuthenticationProcessingFilter : ์›น ๊ธฐ๋ฐ˜ ์ธ์ฆ์š”์ฒญ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ POST ํผ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋‹ค๋ฅธ ํ•„ํ„ฐ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ Authentication ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ผ๋ถ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  • AuthenticationManager : ์ธ์ฆ์š”์ฒญ์„ ๋ฐ›๊ณ  Authentication์„ ์ฑ„์›Œ์ค€๋‹ค.
  • AuthenticationProvider : ์‹ค์ œ ์ธ์ฆ์ด ์ผ์–ด๋‚˜๊ณ  ๋งŒ์•ฝ ์ธ์ฆ ์„ฑ๊ณต์‹œ Authentication ๊ฐ์ฒด์˜ authenticated = true๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.

Spring Security ๋Š” ProviderManager ๋ผ๋Š” AuthenticationManager ์ธํ„ฐํŽ˜์ด์Šค์˜ ์œ ์ผํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ProviderManager ๋Š” ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ AuthenticationProvider ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. AuthenticationProvider๋Š” ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ProviderManager(AuthenticationManager ์˜ ๊ตฌํ˜„์ฒด) ์™€๋„ ์ž˜ ํ†ตํ•ฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

DATABASE/SQL

SQL์˜ HINT๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • SQL HINT : SQL ์‹คํ–‰๊ณ„ํš์„ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์ชฝ์œผ๋กœ ์œ ๋„ํ•˜๋Š” ๋„๊ตฌ
  • OPTIMAZER์—๊ฒŒ SQL๋ฌธ ์‹คํ–‰์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์Šค์บ๋‹ ๊ฒฝ๋กœ, ์กฐ์ธ ๋ฐฉ๋ฒ• ๋“ฑ์„ SQL๋ฌธ์œผ๋กœ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ.
  • ํŠน์ง•
    • ์‹คํ–‰๊ณ„ํš์„ ์ œ์–ดํ•œ๋‹ค : ์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‹คํ–‰๊ณ„ํš์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ hint๋กœ ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ ์›ํ•˜๋Š” ์‹คํ–‰๊ณ„ํš์„ ์ƒ์„ฑํ•˜๋„๋ก ์œ ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค : ์ž˜๋ชป ์ž…๋ ฅํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‹ค๋งŒ ํžŒํŠธ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์„ ๋ฟ์ด๋‹ค.
    • ์„ ํƒ ๋˜๋Š” ์ทจ์‚ฌ๋  ์ˆ˜ ์žˆ๋‹ค : ์˜ณ์€ ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•ด๋„ ์˜ตํ‹ฐ๋งˆ์ด์ €์— ์˜ํ•ด ๋ฒ„๋ ค์งˆ ์ˆ˜๋„, ์„ ํƒ๋  ์ˆ˜๋„ ์žˆ๋‹ค.
    • ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค : ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ํžŒํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋ฒ„์ „์—… ๋ ๋•Œ๋งˆ๋‹ค ์ถ”๊ฐ€๋œ๋‹ค.
  • ์ข…๋ฅ˜(sql)
    • ์กฐ์ธ์ˆœ์„œ : STRAIGHT_JOIN (from์ ˆ์— ๋‚˜ํƒ€๋‚œ ์ˆœ์„œ๋Œ€๋กœ ์กฐ์ธ, mysql)
    • ์กฐ์ธํ˜•์‹ : {LOOP | MERGE | HASH } JOIN
    • ์ง‘๊ณ„ํ˜•์‹ : {HASH | ORDER } GROUP
    • UNION : {CONACT | HASH | MERGE } UNION
    • ์กฐ์ธ์ˆœ์„œ์œ ์ง€ : FORCE ORDER
    • ์ง€์ •ํ•œ ์ฒ˜์Œ ํ–‰๋“ค์„ ๋นจ๋ฆฌ ๊ฒ€์ƒ‰ : FAST number_rows
    • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์ œํ•œ : MAXDOP number
  • ์ฟผ๋ฆฌ ์ตœ์ ํ™” ํ”„๋กœ๊ทธ๋žจ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด ์ตœ์ƒ์˜ ์‹คํ–‰ ๊ณ„ํš์„ ์„ ํƒํ•˜๋ฏ€๋กœ <query_hint>๋ฅผ ๋น„๋กฏํ•œ ํžŒํŠธ๋Š” ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž๊ฐ€ ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜์ž.
  • ์ ์–ด๋„ SQL SERVER ์—์„œ๋Š” ํžŒํŠธ๊ฐ€ ํ‘œ์ค€ ์ฟผ๋ฆฌ ๊ธฐ๋ฒ•์ด ์•„๋‹ˆ๋‹ค.

 

memcached์™€ redis์˜ ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์ ์€?

Redis Memcached
์ €์žฅ์†Œ In Memory Storage
์ €์žฅ ๋ฐฉ์‹ Key-Value
๋ฐ์ดํ„ฐ ํƒ€์ž… String, Set, Sorted Set, Hash, List String
๋ฐ์ดํ„ฐ ์ €์žฅ Memory, Disk Only Memory
๋ฉ”๋ชจ๋ฆฌ ์žฌ์‚ฌ์šฉ ๋ฉ”๋ชจ๋ฆฌ ์žฌ์‚ฌ์šฉ ํ•˜์ง€ ์•Š์Œ(๋ช…์‹œ์ ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ๊ฐ€๋Šฅ) ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์‹œ LRU ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ํ›„ ๋ฉ”๋ชจ๋ฆฌ ์žฌ์‚ฌ์šฉ
์Šค๋ ˆ๋“œ Single Thread Multi Thread
์บ์‹ฑ ์šฉ๋Ÿ‰ Key, Value ๋ชจ๋‘ 512MB Key name 250 byte, Value 1MB
  • Redis์˜ ์žฅ์ 
    • ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ง€์›
    • ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅ
      • ๋ฐ์ดํ„ฐ๋ฅผ Disk์—๋„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ๋ฐœ ์ข…๋ฃŒ๋˜๋Š” ์ƒํ™ฉ์—์„œ ์œ ์‹ค๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Œ
    • ๋‹ค์–‘ํ•œ Data Eviction ์ •์ฑ…์„ ์ง€์›
      • LRU์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•œ Eviction()์„ ์ง€์›ํ•˜๋Š” Memcached์™€๋Š” ๋‹ฌ๋ฆฌ,
        Redis๋Š” 6๊ฐ€์ง€ Ecivtion ์ •์ฑ…์„ ํ†ตํ•ด ๋”์šฑ ์„ธ๋ฐ€ํ•œ Eviction ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅ
    • Memcached์— ๋น„ํ•ด ๊ด€๋ จ ๋ฌธ์„œ๊ฐ€ ๋” ๋งŽ๋‹ค.
  • Memcached์˜ ์žฅ์ 
    • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›
    • Redis์— ๋น„ํ•ด ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”๊ตฌ
      • html๊ณผ ๊ฐ™์€ ์ •์  ๋ฐ์ดํ„ฐ ์บ์‹ฑ์— ์œ ๋ฆฌ.
        Redis๋Š” Copy&Write ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”๊ตฌ

 

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ (Isolation Level) ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.

  • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋ž€ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์˜ isolated๊ฐ€ ์„ฑ๊ณตํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์ธก์ •ํ•  ๋•Œ ์“ฐ์ด๋Š” ๋ฐฉ๋ฒ•

  • READ UNCOMMITTED

    • ํŠธ๋žœ์žญ์…˜์ด ๊ฒฉ๋ฆฌ๋˜์–ด์žˆ์ง€ ์•Š์Œ
    • Dirty-Reads๊ฐ€ ๋ฐœ์ƒํ•จ
      (Dirty-reads : ์•„์ง ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ Read)
  • READ COMMITTED

    • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด write-locked๋œ ๊ฒƒ์ด ํ’€๋ฆด ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ.
    • Nonrepeatable Reads๊ฐ€ ๋ฐœ์ƒ
      (Nonrepeatable Reads : ํ•œ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ™์€ ๋‚ด์šฉ์œผ๋กœ ๋‘ ๋ฒˆ selectํ–ˆ์„ ๋•Œ ๋‹ค๋ฅธ ๊ฐ’์ด ๋‚˜์˜ค๋Š” ๋ฌธ์ œ)
  • REPEATABLE READ

    • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด write-locked๋œ ๊ฒƒ์ด ํ’€๋ฆด ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ. ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์ปค๋ฐ‹๋œ ๋‚ด์šฉ๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅ
    • Phantoms ๊ฐ€ ๋ฐœ์ƒ
      (Phantoms : ์›๋ž˜๋Š” select์‹œ ๋‚˜์˜ค์ง€ ์•Š์•˜์œผ๋‚˜ ๋‹ค์‹œ select์‹œ ๋‚˜์˜ค๋Š” row)
  • SERIALIZABLE

    • ์ฝ๊ธฐ ์ž‘์—…์—๋„ ์ž ๊ธˆ์„ ๊ฒ€.
    • ํ•œ ํŠธ๋žœ์žญ์…˜์ด DB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ.
       
    Transaction isolation level Dirty reads Nonrepeatable reads Phantoms
    Read uncommitted X X X
    Read committed -- X X
    Repeatable read -- -- X
    Serializable -- -- --

์ฐธ๊ณ 

redis vs memcached : (https://deveric.tistory.com/65)
Isolation Level : (https://docs.microsoft.com/ko-kr/sql/odbc/reference/develop-app/transaction-isolation-levels?view=sql-server-ver15) Transactional : (https://goddaehee.tistory.com/167) ์ธ์ฆ, ์ธ๊ฐ€ : (https://coding-start.tistory.com/153)

โš ๏ธ **GitHub.com Fallback** โš ๏ธ