λ³Έ 리λλ―Έλ λ³ΈμΈ(μ΄μΉν¬)μ΄ κΈ°μ μ μΌλ‘ κΈ°μ¬ν κΈ°λ₯ μ€μ¬μΌλ‘ μμ±λμμ΅λλ€.
κ°λ°κΈ°κ°: 2024.10.15 ~ 2024.11.03 (3μ£Ό)
λ΄λΉν μ£Όμ κΈ°λ₯μ λ€μκ³Ό κ°μ΅λλ€:
- λ§μΆ€ν μ½ν μΈ μΆμ² μμ€ν : μλ μ μ±ν₯μ λ§λ λμ μ½ν μΈ λ₯Ό μΆμ²ν©λλ€. μ¬μ©μμ μ’μμ/μ«μ΄μ νΌλλ°±μ λ°λΌ μΆμ² μ± μ΄ μ΅μΌ μλ²½μ λ³κ²½λ©λλ€.
- λμ μ‘°ν: λμ λͺ©λ‘κ³Ό μμΈ μ 보λ₯Ό μ‘°ννκ³ , κ²μ κΈ°λ₯μ μ 곡ν©λλ€.
- λμ μ’μμ: μ¬μ©μλ λμμ μ’μμλ₯Ό λλ₯Ό μ μμΌλ©°, ν΄λΉ λ°μ΄ν°λ λμ μΆμ² μμ€ν μ νμ©λ©λλ€.
- νΈλ¬λΈ μν λ° νμ΅ν λ΄μ©
- νλ‘μ νΈ νκ³
- νμλ‘
- API λͺ μΈμ
Backend
- Java 17, SpringBoot 3.3.4
- Spring Data JPA, JDBC
- Spring Batch
- MySQL 8.0, Redis
- JUnit5, Mockito, JMeter
- νΌλλ°±: μ’μμ/μ«μ΄μ λ°μ΄ν°κ° λ€λ λ°μν κ²μ κ³ λ €νμ¬ Redis μ μ μ₯ ν, μ΅μΌ μλ²½μ λ°°μΉ μ²λ¦¬λ₯Ό ν΅ν΄ MySQL λ‘ μ΄κ΄
- νΌλλ°± λ°°μΉ: μ΄ 4κ°μ Step μΌλ‘ ꡬμ±νμ¬ μλ
μ±ν₯μ λ°μ
- Step1. Redis μ μμ μ μ₯λμ΄ μλ μ’μμ/μ«μ΄μλ₯Ό MySQL μ μ΄κ΄
- Step2. μ€λμ νΌλλ°±μ μ½μ΄ μ±ν₯μ λ°μλ μ μ κ³μ° λ° λμ λ μ±ν₯ λ³νλ μ λ°μ΄νΈ
- Step3. λμ λ³νλ β₯ 5 μΌ κ²½μ°, μλ μ±ν₯ λ μ½λ μμ±
- Step4. MBTI λ³νκ° κ°μ§λ κ²½μ°, μλ‘μ΄ MBTI λ μ½λ μμ±
- Set μλ£κ΅¬μ‘°λ₯Ό νμ©ν΄ μΆμ² λμ λͺ©λ‘ μΆμΆ μ μ€λ³΅ μ μ₯μ λ°©μ§
- λλμ λ°μ΄ν°λ₯Ό νμ΄μ§ λ°©μμΌλ‘ λΆν μ²λ¦¬νμ¬ λ©λͺ¨λ¦¬ μ¬μ©λμ μ΅μνν μ μλ JdbcPagingItemReader μ¬μ©
%
κ° λ¬Έμμ΄ μμ μμ κ²½μ° μΈλ±μ€ μ¬μ©μ΄ λΆκ°λ₯νλ―λ‘ Full Table Scan λ°μ- μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ ν ν° λ°©μμ MySQL Ngram(Full-text Search)μ νμ©ν΄ λμ κ²μ μ΅μ ν
λͺ¨λ ν μ€νΈλ λ°μ΄ν° 10λ§μ κΈ°μ€μΌλ‘ μ§νν©λλ€.
- κΈ°μ‘΄ λ°°μΉ: κ° μ±ν₯λ³ λ³νλ νμΈλΆν° μ±ν₯ κ°±μ κΉμ§μ step μ 2κ°λ‘ λλμ΄ λ³΅μ‘ν λ‘μ§μΌλ‘ μ²λ¦¬ & μ±λ₯ μ ν
- κ°μ ν λ°°μΉ: 4κ°λ‘ λΆλ¦¬νμ¬ μμ°¨μ μΌλ‘ ν
μ΄λΈμ μ
λ°μ΄νΈνλλ‘ λ³κ²½
- Stepλ³ ν μ€νΈ κ²°κ³Ό: 1m 1s β 6m 6s β 22s β 46s = 8m 5s
- Job ν μ€νΈ κ²°κ³Ό: 7m 22s
- κ°μ νμ: λ³λͺ© μ§μ μΈ step2 μμ μλ
μ μ±
μ±ν₯μ μ‘°ννλ μΏΌλ¦¬κ° νλμ© λ μκ°λ λ¬Έμ ν΄κ²°
- κΈ°μ‘΄ λ°°μΉ: JPA Identity μ λ΅μΌλ‘ μΈν Bulk Insert λΆκ°λ₯
- κ°μ ν λ°°μΉ
- Processor κ°μ : IO λ₯Ό μ€μΌ μ μλ κ΅¬μ‘°λ‘ μ¬μ€κ³νμ¬ λ³λͺ© νμμ μ€μ
- Writer κ°μ : λλμ λ°μ΄ν°λ₯Ό νκΊΌλ²μ μ½μ ν INSERT μμ μ μ²λ¦¬ν μ μλλ‘ μμ ν μ΄λΈ μμ± & Batch Insert μ²λ¦¬
- λ°°μΉ μ²λ¦¬ μκ°μ 1μκ° β 45λΆ β 17λΆμΌλ‘ μ½ 72% λ¨μΆμν΄