Skip to content

๐Ÿ† LG U+ ์œ ๋ ˆ์นด 1๊ธฐ ๋ฐฑ์—”๋“œ ๋น„๋Œ€๋ฉด ์ตœ์šฐ์ˆ˜์ƒ ์ข…ํ•ฉ ํ”„๋กœ์ ํŠธ

Notifications You must be signed in to change notification settings

ureca-Integrated/backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

์•„์ด๋ถ์กฐ์•„ ๐Ÿ“š

๐Ÿ† ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” LG U+ ์œ ๋ ˆ์นด 1๊ธฐ ๋ฐฑ์—”๋“œ ๋น„๋Œ€๋ฉด ์ตœ์šฐ์ˆ˜์ƒ ์ข…ํ•ฉ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ๊ธฐ๊ฐ„: 2024.10.15 ~ 2024.11.03 (3์ฃผ)

Intro.

ํ”„๋กœ์ ํŠธ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ์ž๋…€ ์„ฑํ–ฅ ์ง„๋‹จ ์‹œ์Šคํ…œ: ์ž๋…€์˜ MBTI ์„ฑํ–ฅ์„ ์ง„๋‹จ ๋ฐ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์‚ญ์ œ ์š”์ฒญ์— ๋”ฐ๋ผ ์ง„๋‹จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์‚ญ์ œ๋˜๋ฉฐ, ํ•œ๋‹ฌ ํ›„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  2. ๋งž์ถคํ˜• ์ฝ˜ํ…์ธ  ์ถ”์ฒœ ์‹œ์Šคํ…œ: ์ž๋…€์˜ ์„ฑํ–ฅ์— ๋งž๋Š” ๋„์„œ ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ข‹์•„์š”/์‹ซ์–ด์š” ํ”ผ๋“œ๋ฐฑ์— ๋”ฐ๋ผ ์ถ”์ฒœ ์ฑ…์ด ์ต์ผ ์ƒˆ๋ฒฝ์— ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
  3. ์„ ์ฐฉ์ˆœ ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ: ๋งค์ผ ์˜คํ›„ 1์‹œ์— 10๋งŒ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.


Documents.


ER Diagram.

image

Stack.

Backend

  • Java 17, SpringBoot 3.3.4
  • JWT, Spring Security, OAuth 2.0
  • Spring Data JPA, JDBC
  • Spring Batch
  • MySQL 8.0, Redis
  • ChatGPT API
  • JUnit5, Mockito, JMeter

Frontend

  • HTML, JavaScript

Collaborations

  • Jira
  • Slack
  • Notion

SW Architecture.

image


Member.

๊น€๋ฒ”์ˆ˜ ๋ฐ•์‹œ์€ ์ด๋„๋ฆผ ์ด๋ฏผ์ˆ˜ ์ด์Šนํฌ ์ด์‹ ์ง€

@KIMBUMSU123

@ssIIIn

@LeeDoRim

@99MinSu

@leeseunghee00

@kuma0112

Role.

ํšจ์œจ์ ์ธ ํ˜‘์—…๊ณผ ์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒ์„ ์œ„ํ•ด ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ ์™„๋ฃŒ ์‹œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์•ˆ์ •์ ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ์ธ์ฆ/์ธ๊ฐ€: ๊น€๋ฒ”์ˆ˜, ๋ฐ•์‹œ์€
  • ์„ฑํ–ฅ ์ง„๋‹จ: ์ด๋„๋ฆผ, ์ด๋ฏผ์ˆ˜
  • ํ”ผ๋“œ๋ฐฑ & ์ถ”์ฒœ: ์ด์Šนํฌ, ์ด์‹ ์ง€
  • ์‘๋ชจ ์ด๋ฒคํŠธ: ๋ฐ•์‹œ์€, ์ด๋„๋ฆผ, ์ด๋ฏผ์ˆ˜
  • AI & ๋ฐฐ์น˜ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ: ๊น€๋ฒ”์ˆ˜, ์ด์Šนํฌ, ์ด์‹ ์ง€

Sequence Diagram.

1. ์ผ๋ฐ˜ ๋กœ๊ทธ์ธ & ์นด์นด์˜ค ๋กœ๊ทธ์ธ

  • ์ผ๋ฐ˜ ๋กœ๊ทธ์ธ: ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋กœ๊ทธ์ธ ์š”์ฒญ โ†’ ์กด์žฌํ•˜๋Š” ํšŒ์›์ผ ๊ฒฝ์šฐ, ํ—ค๋”์— AccessToken, ์ฟ ํ‚ค์— RefreshToken ๋‹ด์•„์„œ ์ „๋‹ฌ
  • ์นด์นด์˜ค ๋กœ๊ทธ์ธ: /oauth2/authorization/kakao ๋กœ ์ธ์ฆ ์š”์ฒญ โ†’ OAuth Success Handler ๊ฐ€ ์„ฑ๊ณต ์š”์ฒญ์„ ์ธ์ง€ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ •๋ณด ํš๋“ โ†’ ํ† ํฐ ๋ฐœ๊ธ‰

image


2. ํ”ผ๋“œ๋ฐฑ (์ข‹์•„์š” & ์‹ซ์–ด์š”)

  • ํ”ผ๋“œ๋ฐฑ: ์ข‹์•„์š”/์‹ซ์–ด์š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋Ÿ‰ ๋ฐœ์ƒํ•  ๊ฒƒ์„ ๊ณ ๋ คํ•˜์—ฌ Redis ์— ์ €์žฅ ํ›„, ์ต์ผ ์ƒˆ๋ฒฝ์— ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด MySQL ๋กœ ์ด๊ด€
  • ํ”ผ๋“œ๋ฐฑ ๋ฐฐ์น˜: ์ด 4๊ฐœ์˜ Step ์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์ž๋…€ ์„ฑํ–ฅ์— ๋ฐ˜์˜
    • Step1. Redis ์— ์ž„์‹œ ์ €์žฅ๋˜์–ด ์žˆ๋˜ ์ข‹์•„์š”/์‹ซ์–ด์š”๋ฅผ MySQL ์— ์ด๊ด€
    • Step2. ์˜ค๋Š˜์ž ํ”ผ๋“œ๋ฐฑ์„ ์ฝ์–ด ์„ฑํ–ฅ์— ๋ฐ˜์˜๋  ์ ์ˆ˜ ๊ณ„์‚ฐ ๋ฐ ๋ˆ„์ ๋œ ์„ฑํ–ฅ ๋ณ€ํ™”๋Ÿ‰ ์—…๋ฐ์ดํŠธ
    • Step3. ๋ˆ„์  ๋ณ€ํ™”๋Ÿ‰ โ‰ฅ 5 ์ผ ๊ฒฝ์šฐ, ์ž๋…€ ์„ฑํ–ฅ ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ
    • Step4. MBTI ๋ณ€ํ™”๊ฐ€ ๊ฐ์ง€๋  ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด MBTI ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ

image


3. ์ถ”์ฒœ์ฑ… ์„œ๋น„์Šค

  • ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŽ˜์ด์ง• ๋ฐฉ์‹์œผ๋กœ ๋ถ„ํ•  ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” JdbcPagingItemReader ์‚ฌ์šฉ

image


Trouble Shooting.

1. PasswordEncoder ์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ

  • ๋ฌธ์ œ ์›์ธ: PasswordEncoder ๊ฐ€ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” SecurityConfig ๊ฐ€ ๋‹ค์‹œ MemberService ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด์„œ ์ˆœํ™˜์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•จ์„ ์ธ์ง€
  • ํ•ด๊ฒฐ: PasswordEncoder ๋ฅผ ๋…๋ฆฝ์ ์ธ Config ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•ด๊ฒฐ
  • ์ •๋ฆฌํ•œ ๋ฌธ์„œ: ์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

2. ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์„ฑ๊ณต ํ›„, ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ ํ—ค๋”์— ๋‹ด์€ AccessToken ์ด ์ „์†ก๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ

  • ํ•ด๊ฒฐ1: ์†Œ์…œ ๋กœ๊ทธ์ธ ์„ฑ๊ณต ํ›„ RefreshToken ์€ ์ฟ ํ‚ค์—, AccessToken ์€ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ URL ์— ๋‹ด์•„์„œ ์ „๋‹ฌ.
  • ํ•ด๊ฒฐ2: url ์— ์ง์ ‘์ ์œผ๋กœ AccessToken ๋‹ด๋Š” ๋ฐฉ์‹์€ ํ† ํฐ ํƒˆ์ทจ์— ๋งค์šฐ ์ทจ์•ฝํ•˜๋ฏ€๋กœ, OTT(One-Time Token) ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•จ.
  • ์ •๋ฆฌํ•œ ๋ฌธ์„œ: ํ† ํฐํƒˆ์ทจ ๋ฐ CSRF

3. ์„ฑํ–ฅ ์‚ญ์ œ ์‹œ delete ์ฟผ๋ฆฌ๊ฐ€ ํ•˜๋‚˜์”ฉ ๋‚ ์•„๊ฐ€๋Š” ๋ฌธ์ œ

  • ๋ฌธ์ œ ์›์ธ: deleteAll() ์„ ์‹คํ–‰ํ–ˆ์ง€๋งŒ ์‹ค์ œ delete ์ฟผ๋ฆฌ๊ฐ€ ํ•˜๋‚˜์”ฉ ๋‚ ์•„๊ฐ.
  • ํ•ด๊ฒฐ: deleteAllBatch() ๋ฅผ ์‚ฌ์šฉํ•ด ํ•œ ๋ฒˆ์˜ delete ์ฟผ๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ โ†’ ๋ถ€ํ•˜๋ฅผ ์ค„์ž„.

4. ์‘๋ชจ ์ด๋ฒคํŠธ ๋‹จ์‹œ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ จ ๊ณ ๋ ค ์‚ฌํ•ญ

  • ๋ฌธ์ œ ์›์ธ: ์ดˆ๊ธฐ ๋ถ„์‚ฐ๋ฝ์„ ๊ณ ๋ คํ–ˆ์œผ๋‚˜, ๋ฐ๋“œ๋ฝ ์œ„ํ—˜๊ณผ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์กด์žฌ
  • ํ•ด๊ฒฐ: Lua Script ๋ฅผ ํ™œ์šฉํ•˜์—ฌ Atomic ์—ฐ์‚ฐ ๋ณด์žฅ

  • ๋ฌธ์ œ ์›์ธ: ๋“ฑ์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ •๋ ฌํ•˜๋Š” ๋ฐ ZSET ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋‚˜, ๋ชจ๋“  ์š”์†Œ์— score๊ฐ€ ์ถ”๊ฐ€๋จ์— ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ
  • ํ•ด๊ฒฐ: Set + CreatedAt์œผ๋กœ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์ตœ์†Œํ•œ์œผ๋กœ ์ €์žฅ ํ›„, ์ด๋ฒคํŠธ ์ข…๋ฃŒ ์‹œ ์‹œ๊ฐ„ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹ ์ฑ„ํƒ โ†’ INCR ๋ฅผ ํ†ตํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(1) & ์ค‘๋ณต ์ฒดํฌ ๋ฉฑ๋“ฑ์„ฑ ๋ณด์žฅ

5. ๊ทธ ์™ธ ์†Œ์†Œํ•œ ๊ณ ๋ฏผ ์ •๋ฆฌ


Test.

๋ชจ๋“  ํ…Œ์ŠคํŠธ๋Š” ๋ฐ์ดํ„ฐ 10๋งŒ์„ ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

1. ํ”ผ๋“œ๋ฐฑ ๋ฐฐ์น˜

  • ๊ฐœ์„  ๋ฐฐ์น˜: ์ดˆ๊ธฐ step ์„ 2๊ฐœ๋กœ ๊ตฌ์„ฑํ•˜์˜€๋‹ค๊ฐ€ 4๊ฐœ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ๋ณ€๊ฒฝ
  • Step๋ณ„ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ: 1m 1s โ†’ 6m 6s โ†’ 22s โ†’ 46s = 8m 5s
  • Job ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ: 7m 22s
  • ๊ฐœ์„  ํ•„์š”: ๋ณ‘๋ชฉ ์ง€์ ์ธ step2 ์—์„œ ์ž๋…€์™€ ์ฑ… ์„ฑํ–ฅ์„ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ํ•˜๋‚˜์”ฉ ๋‚ ์•„๊ฐ€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ image

2. ์ถ”์ฒœ์ฑ… ๋ฐฐ์น˜

  • ๊ธฐ์กด ๋ฐฐ์น˜: JPA Identity ์ „๋žต์œผ๋กœ ์ธํ•œ Bulk Insert ๋ถˆ๊ฐ€๋Šฅ
  • ๊ฐœ์„ ํ•œ ๋ฐฐ์น˜: ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์‚ฝ์ž…ํ›„ INSERT ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž„์‹œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ & NamedParameterTemplate ์œผ๋กœ Batch Insert ์ฒ˜๋ฆฌ
  • ๊ฐœ์„  ํ•„์š”: reader ์™€ processor ์ฟผ๋ฆฌ ์ตœ์ ํ™” image

3. ์ด๋ฒคํŠธ ๋ฐฐ์น˜

  • 2,000๋ช…์˜ ์œ ์ €๊ฐ€ ์ค‘๋ณตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ์ฒญํ•˜๋Š” ์ƒํ™ฉ์„ ํ…Œ์ŠคํŠธ ํ•œ ๊ฒฐ๊ณผ, ์ค‘๋ณต ๋ฐฉ์ง€๊ฐ€ ์ž‘๋™๋จ์„ ํ™•์ธ
  • 5๋ถ„๋™์•ˆ ์ด 92,3008๊ฑด์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ, ๋ถ„๋‹น 10๋งŒ ์š”์ฒญ ๋ชฉํ‘œ ๋‹ฌ์„ฑ! (1์ดˆ๋‹น ์•ฝ 1,667์š”์ฒญ) image

About

๐Ÿ† LG U+ ์œ ๋ ˆ์นด 1๊ธฐ ๋ฐฑ์—”๋“œ ๋น„๋Œ€๋ฉด ์ตœ์šฐ์ˆ˜์ƒ ์ข…ํ•ฉ ํ”„๋กœ์ ํŠธ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6