Skip to content

Latest commit

ย 

History

History
183 lines (143 loc) ยท 8.56 KB

README.md

File metadata and controls

183 lines (143 loc) ยท 8.56 KB

๐ŸŽฌ Weiver๋Š” ๋ฎค์ง€์ปฌ ์ •๋ณด ์ œ๊ณต, ํ›„๊ธฐ ๊ณต์œ  ์ปค๋ฎค๋‹ˆํ‹ฐ์ž…๋‹ˆ๋‹ค.

logo


โœจOverview

๋ฎค์ง€์ปฌ ์ •๋ณด, ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ๋ฎค์ง€์ปฌ, ๋ฐฐ์šฐ๊ฐ€ ์ฐธ์—ฌํ•œ ๋ฎค์ง€์ปฌ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ณ 

์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ํ†ตํ•ด ํ›„๊ธฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ์˜๊ฒฌ์˜ ์ฃผ๊ณ  ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“† ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ : 2023.06.15 ~ 2023.07.25

๐Ÿ™‚ ์—…๋ฌด๋ถ„๋ฐฐ

์ด๋ฆ„ ์—…๋ฌด
์ด์„ํ˜„ playDB ๋ฐฐ์šฐ ์ •๋ณด ํฌ๋กค๋ง, Youtube API, ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๋‹ด๋‹น
์ •์ฐฌ์˜ playDB ๋ฎค์ง€์ปฌ ์ •๋ณด ํฌ๋กค๋ง, ๋ฎค์ง€์ปฌ ๊ด€๋ จ ๊ธฐ๋Šฅ, ๋ฐฐํฌ ๋‹ด๋‹น
๊ณฝ์œ ์„ญ ๋งˆ์ด ํŽ˜์ด์ง€(๊ตฌ๋…, ์œ ์ €, ๋ฌธ์˜) ๊ธฐ๋Šฅ ๋‹ด๋‹น, ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๋‹ด๋‹น
๊น€ํ˜„์ˆ˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ํŽ˜์ด์ง€(๊ฒŒ์‹œ๊ธ€, ์ƒ์„ธ๊ฒŒ์‹œ๊ธ€, ์ข‹์•„์š”) ๊ธฐ๋Šฅ ๋‹ด๋‹น, UI ๋””ํ…Œ์ผ ๋‹ด๋‹น
์ด์ข…ํ˜• ์นด์นด์˜ค ๋กœ๊ทธ์ธ API, ์œ ์ € ๋“ฑ๋ก, ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ, ๋ฐฐ์šฐ ์ •๋ณด ๊ธฐ๋Šฅ ๋‹ด๋‹น



๐ŸŸข ์ฃผ์š” ๊ธฐ์ˆ 

ํฌ๋กค๋ง : PlayDB์—์„œ ๋ฎค์ง€์ปฌ๊ณผ ๋ฐฐ์šฐ ์ •๋ณด ํฌ๋กค๋ง

Youtube API : ํ•ด๋‹น ๋ฎค์ง€์ปฌ์˜ ๊ด€๋ จ Youtube ํด๋ฆฝ ์ œ๊ณต

KaKao Login API

EC2, RDS, S3 : S3 = ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ์— ์‚ฌ์šฉ



๐Ÿ’ป ๊ฐœ๋ฐœํ™˜๊ฒฝ

Java : 11

Spring Boot : 2.7.13

Local Oracle DB : xe 11g

RDS : Oracle 19.0.0.0.ru-2023-04.rur-2023-04.r1

๐Ÿ“‹ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜

image



๐Ÿ“ ERD

ERD



๐ŸŽฏ ๊ตฌํ˜„ ๊ฒฐ๊ณผ

๋ฎค์ง€์ปฌ

  • ๋ฉ”์ธ ํŽ˜์ด์ง€
  • ์ธ๊ธฐ ๋ฎค์ง€์ปฌ: '๋ดค์–ด์š”' ํด๋ฆญ์ด ๊ฐ€์žฅ ๋งŽ์€ ๋ฎค์ง€์ปฌ ์ƒ์œ„ 3๊ฐœ ์ถœ๋ ฅ
  • ์ปค๋ฎค๋‹ˆํ‹ฐ ์ธ๊ธฐ๊ธ€: '์กฐํšŒ์ˆ˜' ๊ธฐ์ค€ ์ƒ์œ„ ๊ฒŒ์‹œ๊ธ€ 9๊ฐœ ์ถœ๋ ฅ
  • ์ถ”์ฒœ ๋ฐฐ์šฐ: ๋žœ๋ค์œผ๋กœ ๋ฐฐ์šฐ ํ”„๋กœํ•„ ์‚ฌ์ง„๊ณผ ์ถœ์—ฐ์ž‘ ์ถœ๋ ฅ, ํด๋ฆญ ์‹œ ๋ฐฐ์šฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ด๋™, ์ƒˆ๋กœ๊ณ ์นจ ์‹œ ๋ฐฐ์šฐ ์ •๋ณด ๋ณ€๋™
  • ๊ณต์—ฐ ์ค‘์ธ ๋ฎค์ง€์ปฌ: ๊ณต์—ฐ ๊ธฐ๊ฐ„ ๊ธฐ์ค€ ํ˜„์žฌ ๊ณต์—ฐ ์ค‘์ธ ๋ฎค์ง€์ปฌ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ

๋ฎค์ง€์ปฌ ๋ฉ”์ธ ํŽ˜์ด์ง€

  • ์ƒ์„ธ ํŽ˜์ด์ง€
  • ๋ฎค์ง€์ปฌ ๊ธฐ๋ณธ ์ •๋ณด ์กฐํšŒ
  • '์ฐœํ•˜๊ธฐ', '๋ดค์–ด์š”' ํด๋ฆญ
  • ์ถœ์—ฐ ๋ฐฐ์šฐ ์ •๋ณด ์กฐํšŒ
  • Youtube API ํ†ตํ•œ ์œ ํŠœ๋ธŒ ํด๋ฆฝ ์ถœ๋ ฅ

๋ฎค์ง€์ปฌ ์ƒ์„ธ ํŽ˜์ด์ง€

์ปค๋ฎค๋‹ˆํ‹ฐ

  • ๋ฉ”์ธ ํŽ˜์ด์ง€
  • ์ปค๋ฎค๋‹ˆํ‹ฐ ์ธ๊ธฐ๊ธ€: '์กฐํšŒ์ˆ˜' ๊ธฐ์ค€ ์ƒ์œ„ ๊ฒŒ์‹œ๊ธ€ 9๊ฐœ ์ถœ๋ ฅ
  • ๊ฒŒ์‹œ๊ธ€: ์นดํ…Œ๊ณ ๋ฆฌ(๋ฆฌ๋ทฐ, ์žก๋‹ด)์— ๋”ฐ๋ผ ๊ฒŒ์‹œ๊ธ€ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅ
  • ๋กœ๊ทธ์ธ ์‹œ, ์œ ์ € ๊ฐ„๋žต ์ •๋ณด ์ธก๋ฉด nav๋ฐ”์— ์ถœ๋ ฅ

์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฉ”์ธ ํŽ˜์ด์ง€

  • ์ƒ์„ธ ํŽ˜์ด์ง€
  • ๊ฒŒ์‹œ๊ธ€ ์ •๋ณด ์ƒ์„ธ ์กฐํšŒ
  • ๋Œ“๊ธ€, ๋Œ€๋Œ“๊ธ€ ์ž‘์„ฑ
  • ๋ณธ์ธ ์ž‘์„ฑ์— ํ•œํ•˜์—ฌ ๊ฒŒ์‹œ๊ธ€, ๋Œ“๊ธ€, ๋Œ€๋Œ“๊ธ€ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ ๊ฐ€๋Šฅ

๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ํŽ˜์ด์ง€

  • ๊ธ€ ์ž‘์„ฑ ํŽ˜์ด์ง€
  • ๊ธ€ ์นดํ…Œ๊ณ ๋ฆฌ(์žก๋‹ด, ๋ฆฌ๋ทฐ) ์„ ํƒ ๊ฐ€๋Šฅ
  • ๋ฆฌ๋ทฐ ์„ ํƒ ์‹œ, ๋ฎค์ง€์ปฌ ์ •๋ณด ์—ฐ๋™
  • ์ด๋ฏธ์ง€ ์ฒจ๋ถ€ ๊ฐ€๋Šฅ

๋งˆ์ด ํŽ˜์ด์ง€

  • ๋ฉ”์ธ ํŽ˜์ด์ง€
  • ์ฐœ / ๋ดค๋˜ ๋ฎค์ง€์ปฌ ์กฐํšŒ
  • ๋‚ด๊ฐ€ ์“ด ๊ธ€ / ๋Œ“๊ธ€ / ์ข‹์•„์š”ํ•œ ๊ธ€ ์กฐํšŒ
  • ํ”„๋กœํ•„ ์ˆ˜์ • / ์„ค์ •(๋กœ๊ทธ์•„์›ƒ, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ, ๋ฌธ์˜ํ•˜๊ธฐ, ํšŒ์›ํƒˆํ‡ด)


๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€

  • ๋ฉ”์ธ ํŽ˜์ด์ง€
  • ๊ด€๋ฆฌ์ž ๋ฌธ์˜ ์กฐํšŒ
  • ์ „์ฒด ๋ฐฐ์šฐ, ๋ฎค์ง€์ปฌ ์ •๋ณด ์กฐํšŒ
  • ์œ ์ €, ๊ฒŒ์‹œ๊ธ€, ๋ฌธ์˜ ์กฐํšŒ ๋ฐ ์‚ญ์ œ
  • ๋ฌธ์˜๊ธ€ ๋‹ต๋ณ€




โ—๏ธ ํž˜๋“ค์—ˆ๋˜ ์ 

์„ธ ๋ฒˆ์˜ DB ๋ณ€๊ฒฝ image

  1. ๋ถˆ๊ทœ์น™์ ์ธ KOPIS API ๋ฎค์ง€์ปฌ ์ •๋ณด์™€ PLAY DB ๋ฐฐ์šฐ ์ •๋ณด์™€์˜ ๋งคํ•‘ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ปฌ๋ ‰์…˜์— ์ „๋ถ€ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด ์กฐํšŒ ์†๋„์™€ ์‚ฝ์ž… ์†๋„ ์ธก๋ฉด์—์„œ ๋ณด๋‹ค ๋” ํšจ๊ณผ์ ์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜์–ด MongoDB๋ฅผ ์‚ฌ์šฉ
  2. ๋ฎค์ง€์ปฌ๊ณผ ๋ฐฐ์šฐ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ฐ์ดํ„ฐ๋“ค์€ ์ •ํ˜•ํ™”๋˜์–ด์žˆ๊ณ  ๊ด€๊ณ„์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— Oracle DB๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋‘ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉ
  3. KOPIS API๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ PLAY DB ๋ฐฐ์šฐ ์ •๋ณด์™€ ์„œ๋กœ ๋งคํ•‘๋˜๋Š” ๋น„์œจ์ด 444๊ฑด ์ค‘ 25๊ฑด์ธ 5%์ •๋„๋กœ ๋งค์šฐ ๋‚ฎ์•„ KOPIS API๋ฅผ ํฌ๊ธฐํ•˜๊ณ  PLAY DB์—์„œ ๋ฎค์ง€์ปฌ ์ •๋ณด๋„ ๊ฐ™์ด ํฌ๋กค๋งํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉ -> ๋ฎค์ง€์ปฌ ๋ฐ์ดํ„ฐ๋„ ์ •ํ˜•ํ™”๋˜์—ˆ๊ณ  ๋ฐฐ์šฐ ์ •๋ณด์™€ ๋™์ผํ•œ ํŽ˜์ด์ง€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด -> ๋งคํ•‘ ๋ฐฉ์‹์ด ์ด์ „๋ณด๋‹ค ์ˆ˜์›”ํ•ด์ ธ ์ „์ฒด DB๋ฅผ Oracle๋กœ ์‚ฌ์šฉ



โš ๏ธ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

ํฌ๋กค๋ง ์‹œ TimeOutException

  1. ํฌ๋กค๋ง ์‹œ Timeout Option์„ ์ฃผ๋Š” ๋ฐฉ๋ฒ•๊ณผ Thread.sleep()์„ ์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ํ•ด๊ฒฐ์ด ๋˜์ง€ ์•Š์Œ
  2. ํฌ๋กค๋ง์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •๊ณผ DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณผ์ •์ด ๊ฐ™์€ ํ…€์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์žก์•„๋จน๋Š”๋‹ค๋Š” ์˜๋ฌธ
  3. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ „๋ถ€ ์ €์žฅํ•œ ๋‹ค์Œ DB์— ์ผ๊ด„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉ (Exception ๋ฐœ์ƒ ์‹œ๊ธฐ๊ฐ€ ๋’ค๋กœ ๋Šฆ์ถฐ์กŒ์„ ๋ฟ ์—ฌ์ „ํžˆ ๋ฐœ์ƒ)
  4. ๋ฒ„ํผ์™€ ๊ฐ™์ด ์ผ์ •๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ ํ›„ ๋น„์›Œ์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐ
/*๋ฎค์ง€์ปฌ ์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ ๋ฎค์ง€์ปฌ ์ •๋ณด ์ €์žฅ*/
@SneakyThrows
public void saveAllMusical(List<String> musicalIds){
  List<Musical> musicals = new ArrayList<>();
    
    for(int i =0; i < musicalIds.size(); i++){
        //๋ฎค์ง€์ปฌ 1๊ฐœ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ํฌ๋กค๋ง
        Musical musical = getMusical(musicalIds.get(i));
        musicals.add(musical);
        log.info(i + "๋ฒˆ MUSICAL(" + musicalIds.get(i) + ") ์ €์žฅ: " + musical);

        // ๋ฐ์ดํ„ฐ๋ฅผ 1000๊ฐœ์”ฉ ์ €์žฅ
        if(i != 0 && i % 1000 == 0){
          // musical ์ €์žฅ
          musicalRepository.saveAll(musicals);

          // ์ƒˆ๋กœ์šด MusicalId๋ฅผ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
          musicals.clear();
        }
    }



๐Ÿ’ฌ ํšŒ๊ณ 

๐Ÿ™‚ ์ •์ฐฌ์˜ : ์†Œํ†ต์ด ํ™œ๋ฐœํ•œ ํŒ€์›๋“ค์ด ๋ชจ์—ฌ์„œ ์ ๊ทน์ ์ธ ์ฐธ์—ฌ์™€ ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ์ˆ˜์›”ํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๐Ÿ˜„ ๊ณฝ์œ ์„ญ : ์ดˆ๋ฐ˜์— ์—ฌ๋Ÿฌ ์‹œํ–‰์ฐฉ์˜ค๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ํŒ€์›Œํฌ๊ฐ€ ์ข‹์•„์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฌด์‚ฌํžˆ ๋งˆ์น˜๊ณ  ์ข‹์€ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ ๊ฐ์‚ฌํ•ด์š”^^7

๐Ÿ˜† ๊น€ํ˜„์ˆ˜ : ์ œ ๊ฐœ๋ฐœ์ธ์ƒ์˜ ์‹œ์ž‘์ ์ด ๋œ ํ”„๋กœ์ ํŠธ, ์ข‹์€ ํŒ€์›๋“ค์„ ๋งŒ๋‚˜ ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ  ์™„์„ฑ๋„ ์žˆ๊ฒŒ ๋งˆ๋ฌด๋ฆฌ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜Œ ์ด์ข…ํ˜• : 3๋ฒˆ์˜ ๊ธฐํš์•ˆ ์ˆ˜์ •, 3๋ฒˆ์˜ DB ๋ณ€๊ฒฝ ๋“ฑ ์šฐ์—ฌ๊ณก์ ˆ์ด ๋งŽ์•˜์ง€๋งŒ ํŒ€์›๋“ค์˜ ๋งŽ์€ ๋„์›€ ๋•๋ถ„์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ž˜ ๋งˆ๋ฌด๋ฆฌ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ๊นŒ์ง€ ์ง„ํ–‰๋˜์—ˆ์ง€๋งŒ ์œ ์ € ๋ฐ˜์‘์„ ๋ณด์ง€ ๋ชปํ•œ์ ์ด ์•„์‰ฝ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜Ž ์ด์„ํ˜„ : ํŒ€์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์™€ ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ์ข‹์€ ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ํ•˜๋ฉฐ ๋งŽ์ด ๋ฐฐ์šฐ๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.



๐ŸŽ‰ ์ˆ˜์ƒ๋‚ด์—ญ

image