νλ‘μ ν¬μ κ° κ°λ₯ν κ°μνν λͺ¨μ ν¬μ μλΉμ€
νλ‘μ ν¬μ : λ€λ₯Έ μ¬λμκ² ν¬μνκ³ , κ·Έ μ¬λμ ν¬μ λ΄μκ³Ό λμΌνκ² μλ ν¬μλκ³ μ μ°λ°μ μ μλ κΈ°λ₯
λΆλ₯
κΈ°μ μ€ν
BE
FE
Infra
νμ
λꡬ
λ©μΈ νμ΄μ§
μμΈ
νΈκ°
κ±°λ
ν¬μλ΄μ
νλ‘μ°
λνΉ
μλ¦Ό
π‘ νμμ Spring Security & JWT & Oauth2.0 μ¬μ©νμ¬ κ΅¬κΈ μμ
λ‘κ·ΈμΈ κ΅¬ν
QueryDslItemReaderλ₯Ό νμ©νμ¬ Chunk-oriented ProcessingμΌλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬νμ¬ μ μ₯
λ§€μΌ μ€μ 6μμ μ λ μ κ±°λ λ΄μμΌλ‘ μΌλ³ ν΅κ³ λ΄μμ μμ±νλ Job
체결 λ΄μ ν
μ΄λΈμ λ°μ΄ν°λ₯Ό λμ κ³μ°νμ¬ λμΆλ μμ΅μ μμ μμ΅ ν
μ΄λΈμ μ μ₯νλ Step
μμ μμ΅ ν
μ΄λΈμ λ°μ΄ν°λ₯Ό μΌλ³ ν΅κ³ ν
μ΄λΈμ μ μ₯νλ Step
λ§€μ 1μΌ μμ μ μ λ¬μ μΌλ³ ν΅κ³ λ΄μμΌλ‘ μλ³ ν΅κ³ λ΄μμ μμ±νλ Job μ€ν
μ λ¬μ μΌλ³ ν΅κ³ ν
μ΄λΈμ λ°μ΄ν°λ₯Ό λμ κ³μ°νμ¬ μλ³ ν΅κ³ ν
μ΄λΈμ μ μ₯νλ Step
100μ¬ κ°μ μ½μΈμ μμΈλ₯Ό μ€μκ° μΉμμΌμΌλ‘ λ°μμ€λλ° λ³΄μ λ° κ΄μ¬ μ½μΈ 리μ€νΈμμλ λ°±μ¬ κ°μ μ½μΈ μμΈλ₯Ό μ€μκ°μΌλ‘ λ°μμ¬ νμκ° μμ΅λλ€
μΉμμΌμ λͺ¨λν νμ¬ λ€λ₯Έ νμΌμμλ μΉμμΌμ send μμ²μ λ³΄λΌ μ μλλ‘ νμ΅λλ€
λνΉμ μ΄μ© μ μμ΄ λ§€λ² μ΄ μμ°κ³Ό μ΄ νλ‘μ κΈμ‘μ ꡬν΄μΌνκΈ° λλ¬Έμ μ±λ₯μ λν κ³ λ―Όμ΄ μμ μ λ°μ μμμ΅λλ€.
μ€μκ°μ μΏΌλ¦¬κ° λ§μ΄ λ°μνμ¬ λ무 μλ²μ λΆλ΄μ΄ κ° κ² κ°μμ 30λΆλ§λ€ μ€μΌμ€λ§μ λλ € κ³μ°μ νκ³ κ³μ°ν κ°λ€μ λ λμ€μ λ£λλ‘ νμ΅λλ€.
μ‘°νκ° λ§μ΄ μΌμ΄λκΈ° λλ¬Έμ redis μ¬μ©μ κ³ λ €νμ΅λλ€.
μ λ ¬ κΈ°λ₯μ νμλ‘ νκΈ° λλ¬Έμ λ λμ€μ ZSetμ νμ©νμ¬ μ λ ¬μ νμκ³ μ‘°νν λλ§λ€ λ λμ€μμ μΊμ±νμ¬ λ³΄μ¬μ£Όμμ΅λλ€.
ZSet μ°μ°μ O(log(n))μΌλ‘ λ¨μν javaμ timsort, Arrays.sort()μ νκ· O(nlog(n))λ³΄λ€ ν¨μ¬ ν¨μ¨μ μ
λλ€.
zrangeμ μκ°λ³΅μ‘λλ O(log(n) + m(λ°νλ°λ λ©€λ²λ€μ κ°μ))λ‘ ν¨μ¨μ μΌλ‘ νμ΄μ§ μ²λ¦¬λ₯Ό νμ΅λλ€.
μλ²μμ μ€μκ°μΌλ‘ λ±λ‘λ μμ½ κ±°λκ° μ²λ¦¬λμ΄μΌ νλ€.
μλ²κ° μΉμμΌ ν΄λΌμ΄μΈνΈκ° λΌμ μ€μκ°μΌλ‘ λ©λͺ¨λ¦¬μ μ½μΈ μμΈλ€μ λ°μμ μ μ₯νλ€.
μμ½ κ±°λλ₯Ό λμμ± μ²λ¦¬λ₯Ό μν΄ ConcurrentHashMapμΌλ‘ κ΄λ¦¬νκ³ κ° μ½μΈ λ³ λ§€μ, λ§€λ μ°μ μμ νλ₯Ό μ¬μ©ν΄ μμΈλ₯Ό κ°μ§νμ¬ κ±°λκ° λ μ μλ λ°μ΄ν° λλ νλμ λ°μ΄ν°λ§ νμΈνλλ‘ O(1)λ‘ κ΅¬ννμ΅λλ€.
μ±λ₯ μ΅μ νλ₯Ό μν΄ μμ½ κ±°λμ λ±λ‘λ μ½μΈμ μμΈ λ°μ΄ν°λ§ μ λμ μΌλ‘ λ°μμ€λλ‘ μΉμμΌ λ©μμ§λ₯Ό λμ μΌλ‘ μ²λ¦¬νμ΅λλ€.
μ νν μμμ μ°μ°
νν
ν¬ νλ‘μ νΈ νΉμ± μ μ νν μμμ μ°μ°μ λ€λ€μΌ ν¨. μ°λ¦¬μ κ²½μ° μ νν μ½μΈ μλκ³Ό κ°κ²©μ λν μ ννκ³ μΌκ΄μ μΈ μ°μ° κ²°κ³Όκ° νμ.
BigDecimal Utility class λ₯Ό λ§λ€μ΄ μ μμΌλ‘ μ¬μ©ν¨μΌλ‘μ¨ μΌκ΄μ μΈ μ°μ°κ³Ό μ νν μμμ μ°μ°μ ν μ μκ² λλ€.
νμ΄μ§ 쿼리 μ΅μ ν
Offset λ°©μμ Paginationμ Offset κ°μ΄ 컀μ§μλ‘ κ·Έλ§νΌμ rowλ₯Ό μ½μ΄μΌνλ―λ‘ μ±λ₯μ νκ° μΌμ΄λ©λλ€.
κ°μνν κ±°λ μ¬μ΄νΈ νΉμ±μ 무μν λ§μ κ±°λ λ΄μμ΄ μ μ₯ λ κ²μ΄λ―λ‘ Cursor Paginationμ μ¬μ©νμ¬ μ‘°ν μ±λ₯μ μ΅μ ν νμμ΅λλ€.
μ΄λ¬ν λ°©μμ Batchμ ItemReaderμλ μ μ©νμμ΅λλ€.
μ λ μ λͺ¨λ κ±°λ λ΄μμΌλ‘ μΌλ³ ν΅κ³λ₯Ό μμ±νλ Jobμμ QueryDslNoOffsetItemReaderλ₯Ό μ¬μ©νμ¬ Offset μμ΄ Chunk λ¨μλ‘ λ°μ΄ν°λ₯Ό μ½μ΄ νλ‘μΈμ±ν©λλ€.