Skip to content

πŸ† LG U+ 유레카 1κΈ° λ°±μ—”λ“œ λΉ„λŒ€λ©΄ μ΅œμš°μˆ˜μƒ μ’…ν•© ν”„λ‘œμ νŠΈ

Notifications You must be signed in to change notification settings

leeseunghee00/ibookjoa-backend

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

아이뢁쑰아 πŸ“š

λ³Έ λ¦¬λ“œλ―ΈλŠ” 본인(이승희)이 기술적으둜 κΈ°μ—¬ν•œ κΈ°λŠ₯ μ€‘μ‹¬μœΌλ‘œ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
κ°œλ°œκΈ°κ°„: 2024.10.15 ~ 2024.11.03 (3μ£Ό)

Intro.

λ‹΄λ‹Ήν•œ μ£Όμš” κΈ°λŠ₯은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  1. λ§žμΆ€ν˜• μ½˜ν…μΈ  μΆ”μ²œ μ‹œμŠ€ν…œ: μžλ…€μ˜ μ„±ν–₯에 λ§žλŠ” λ„μ„œ μ½˜ν…μΈ λ₯Ό μΆ”μ²œν•©λ‹ˆλ‹€. μ‚¬μš©μžμ˜ μ’‹μ•„μš”/μ‹«μ–΄μš” ν”Όλ“œλ°±μ— 따라 μΆ”μ²œ 책이 읡일 μƒˆλ²½μ— λ³€κ²½λ©λ‹ˆλ‹€.
  2. λ„μ„œ 쑰회: λ„μ„œ λͺ©λ‘κ³Ό 상세 정보λ₯Ό μ‘°νšŒν•˜κ³ , 검색 κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
  3. λ„μ„œ μ’‹μ•„μš”: μ‚¬μš©μžλŠ” λ„μ„œμ— μ’‹μ•„μš”λ₯Ό λˆ„λ₯Ό 수 있으며, ν•΄λ‹Ή λ°μ΄ν„°λŠ” λ„μ„œ μΆ”μ²œ μ‹œμŠ€ν…œμ— ν™œμš©λ©λ‹ˆλ‹€.


Documents.


Stack.

Backend

  • Java 17, SpringBoot 3.3.4
  • Spring Data JPA, JDBC
  • Spring Batch
  • MySQL 8.0, Redis
  • JUnit5, Mockito, JMeter

SW Architecture.

image


Feature.

1. ν”Όλ“œλ°± (μ’‹μ•„μš” & μ‹«μ–΄μš”)

  • ν”Όλ“œλ°±: μ’‹μ•„μš”/μ‹«μ–΄μš” 데이터가 λ‹€λŸ‰ λ°œμƒν•  것을 κ³ λ €ν•˜μ—¬ Redis 에 μ €μž₯ ν›„, 읡일 μƒˆλ²½μ— 배치 처리λ₯Ό 톡해 MySQL 둜 이관
  • ν”Όλ“œλ°± 배치: 총 4개의 Step 으둜 κ΅¬μ„±ν•˜μ—¬ μžλ…€ μ„±ν–₯에 반영
    • Step1. Redis 에 μž„μ‹œ μ €μž₯λ˜μ–΄ 있던 μ’‹μ•„μš”/μ‹«μ–΄μš”λ₯Ό MySQL 에 이관
    • Step2. 였늘자 ν”Όλ“œλ°±μ„ 읽어 μ„±ν–₯에 반영될 점수 계산 및 λˆ„μ λœ μ„±ν–₯ λ³€ν™”λŸ‰ μ—…λ°μ΄νŠΈ
    • Step3. λˆ„μ  λ³€ν™”λŸ‰ β‰₯ 5 일 경우, μžλ…€ μ„±ν–₯ λ ˆμ½”λ“œ 생성
    • Step4. MBTI λ³€ν™”κ°€ 감지될 경우, μƒˆλ‘œμš΄ MBTI λ ˆμ½”λ“œ 생성

image


2. μΆ”μ²œμ±… μ„œλΉ„μŠ€

  • Set 자료ꡬ쑰λ₯Ό ν™œμš©ν•΄ μΆ”μ²œ λ„μ„œ λͺ©λ‘ μΆ”μΆœ μ‹œ 쀑볡 μ €μž₯을 λ°©μ§€
  • λŒ€λŸ‰μ˜ 데이터λ₯Ό νŽ˜μ΄μ§• λ°©μ‹μœΌλ‘œ λΆ„ν•  μ²˜λ¦¬ν•˜μ—¬ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ΅œμ†Œν™”ν•  수 μžˆλŠ” JdbcPagingItemReader μ‚¬μš©

image


3. λ„μ„œ 검색

  • %κ°€ λ¬Έμžμ—΄ μ•žμ— μžˆμ„ 경우 인덱슀 μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•˜λ―€λ‘œ Full Table Scan λ°œμƒ
  • 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 토큰 λ°©μ‹μ˜ MySQL Ngram(Full-text Search)을 ν™œμš©ν•΄ λ„μ„œ 검색 μ΅œμ ν™”
    • 검색 μ‘λ‹΅μ‹œκ°„μ„ κΈ°μ‘΄ 178ms μ—μ„œ 35ms 둜 단좕 image

Trouble Shooting.

λͺ¨λ“  ν…ŒμŠ€νŠΈλŠ” 데이터 10λ§Œμ„ κΈ°μ€€μœΌλ‘œ μ§„ν–‰ν•©λ‹ˆλ‹€.

1. ν”Όλ“œλ°± 배치

  • κΈ°μ‘΄ 배치: 각 μ„±ν–₯별 λ³€ν™”λŸ‰ 확인뢀터 μ„±ν–₯ κ°±μ‹ κΉŒμ§€μ˜ step 을 2개둜 λ‚˜λˆ„μ–΄ λ³΅μž‘ν•œ 둜직으둜 처리 & μ„±λŠ₯ μ €ν•˜
  • κ°œμ„ ν•œ 배치: 4개둜 λΆ„λ¦¬ν•˜μ—¬ 순차적으둜 ν…Œμ΄λΈ”μ„ μ—…λ°μ΄νŠΈν•˜λ„λ‘ λ³€κ²½
    • Step별 ν…ŒμŠ€νŠΈ κ²°κ³Ό: 1m 1s β†’ 6m 6s β†’ 22s β†’ 46s = 8m 5s
    • Job ν…ŒμŠ€νŠΈ κ²°κ³Ό: 7m 22s
  • κ°œμ„  ν•„μš”: 병λͺ© 지점인 step2 μ—μ„œ μžλ…€μ™€ μ±… μ„±ν–₯을 μ‘°νšŒν•˜λŠ” 쿼리가 ν•˜λ‚˜μ”© λ‚ μ•„κ°€λŠ” 문제 ν•΄κ²° image

2. μΆ”μ²œμ±… 배치

  • κΈ°μ‘΄ 배치: JPA Identity μ „λž΅μœΌλ‘œ μΈν•œ Bulk Insert λΆˆκ°€λŠ₯
  • κ°œμ„ ν•œ 배치
    • Processor κ°œμ„ : IO λ₯Ό 쀄일 수 μžˆλŠ” ꡬ쑰둜 μž¬μ„€κ³„ν•˜μ—¬ 병λͺ© ν˜„μƒμ„ μ€„μž„
    • Writer κ°œμ„ : λŒ€λŸ‰μ˜ 데이터λ₯Ό ν•œκΊΌλ²ˆμ— μ‚½μž…ν›„ INSERT μž‘μ—…μ„ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ μž„μ‹œ ν…Œμ΄λΈ” 생성 & Batch Insert 처리
    • 배치 처리 μ‹œκ°„μ„ 1μ‹œκ°„ β†’ 45λΆ„ β†’ 17λΆ„μœΌλ‘œ μ•½ 72% λ‹¨μΆ•μ‹œν‚΄

image


Test.

image

About

πŸ† LG U+ 유레카 1κΈ° λ°±μ—”λ“œ λΉ„λŒ€λ©΄ μ΅œμš°μˆ˜μƒ μ’…ν•© ν”„λ‘œμ νŠΈ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 60.9%
  • JavaScript 20.1%
  • CSS 11.1%
  • HTML 7.6%
  • Lua 0.3%