- TEAM MEMBER
- DEPLOY URL
- SPECIFICATION
- INTRODUCTION
- SKILLS
- SYSTEM ARCHITECTURE
- ERD
- SERVICE LAYOUT
- FUNCTION
- CHALLENGES
λ°μΈμ [νμ₯, BE, Infra] | μμ¬μ΄ [CTO, BE] | μ΄μ μ£Ό [BE] | μ΄ννΈ [BE] | μμν [FE] | ν©μ£Όμ [FE] |
- β front-server : https://j10a404.p.ssafy.io
- β back-server : https://j10a404.p.ssafy.io/api
- νλ‘μ ν¬μκ° κ°λ₯ν κ°μνν λͺ¨μ ν¬μ μλΉμ€
- νλ‘μ ν¬μ : λ€λ₯Έ μ¬λμκ² ν¬μνκ³ , κ·Έ μ¬λμ ν¬μ λ΄μκ³Ό λμΌνκ² μλ ν¬μλκ³ μ μ°λ°μ μ μλ κΈ°λ₯
λΆλ₯ | κΈ°μ μ€ν |
---|---|
BE | |
FE | |
Infra | |
νμ λꡬ |
λ©μΈ νμ΄μ§ | μμΈ | νΈκ° | κ±°λ |
ν¬μλ΄μ | νλ‘μ° | λνΉ | μλ¦Ό |
- μκ°λ λ³ μ½μΈ μμΈ μ°¨νΈ μ‘°ν
- μ€μκ° μ½μΈ μμΈ μ‘°ν λ° κ²μ
- μμ₯κ°(κ°νΈ κ±°λ) 맀μ, 맀λ
- μ§μ κ°(μμ½ κ±°λ) 맀μ, 맀λ
- κ°μνν 체결, 미체결 λ΄μ μ‘°ν
- κ±°λ 체결 μ μλ¦Ό
- κ΄μ¬ μ½μΈ μΆκ°, μ‘°ν, μμ
- 보μ μ½μΈ μ‘°ν
- 보μ μμ° λͺ©λ‘ μ‘°ν
- μΌλ³, μλ³ ν¬μ μμ΅ μ‘°ν
- κΈ°κ°/κ±°λμ’ λ₯/μμ°μ’ λ₯ λ³ μμ° λ³λ λ΄μ μ‘°ν
- νλ‘μ, νλ‘μ ν¬μ μμ° μ‘°ν
- νλ‘μ° κ±°λ, 보μ λ΄μ μ‘°ν
- λͺ¨λ κ°μνν 미체결 κ±°λ λ΄μ μ‘°ν
- νλ‘μ° μ μμ° λκΈ°ν
- νλ‘μμ ν¬μμ λ°λΌ μλ ν¬μ
- νλ‘μ° μ μ° μ μλ¦Ό
- μ κ° κΈ°μ€ 30λΆ λ§λ€ λνΉ μ λ°μ΄νΈ
- μ΄ νλ‘μ κΈμ‘μ λ°λ₯Έ λνΉ μ‘°ν
- μ΄ μμ°μ λ°λ₯Έ λνΉ μ‘°ν
π‘ νμμ 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 λ¨μλ‘ λ°μ΄ν°λ₯Ό μ½μ΄ νλ‘μΈμ±ν©λλ€.