๊ฒฝํ—˜

ํŒŒ์ผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

ballde 2024. 5. 19. 15:29

๐Ÿ’ก ํšŒ์‚ฌ์—์„œ ํŒŒ์ผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ํ–ˆ๋Š”๋ฐ ๊ทธ ๊ณผ์ •๊ณผ ํ”ผ๋“œ๋ฐฑ์— ๋Œ€ํ•ด์„œ ์จ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ํ–ˆ๋Š”๊ฐ€?

  • ํŒŒ์ผ ๊ฒฝ๋กœ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…
  • ์ด ๊ณผ์ •์—์„œ ๊ธฐ์กด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…

๋ชฉํ‘œ

๋ณ€๊ฒฝ ์ „ ํŒŒ์ผ ๊ฒฝ๋กœ: /๊ธฐ๋ณธ๊ฒฝ๋กœ/{ํšŒ์‚ฌ์ •๋ณด}/{ํŒŒ์ผํƒ€์ž…-user/upload}/{ํŒŒ์ผ}

๋ณ€๊ฒฝ ํ›„ ํŒŒ์ผ ๊ฒฝ๋กœ: /๊ธฐ๋ณธ๊ฒฝ๋กœ/{yyyyMM}/{ํšŒ์‚ฌ์ •๋ณด}/{ํŒŒ์ผํƒ€์ž…-user/upload}/{ํŒŒ์ผ}

ํŒŒ์ผ: ์ด๋ฆ„[20240425111111_์œ ๋‹ˆํฌ๊ฐ’].png

์™œ?

ํ•œ ํด๋”์— ํŒŒ์ผ์ด ๋งŽ์„ ๊ฒฝ์šฐ IO๊ฐ€ ๋А๋ ค์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ

  • clientNo ๋ณ„๋กœ ํŒŒ์ผ์ด ๊ณ„์† ์Œ“์ด๋Š” ํ˜•ํƒœ
  • ํ•œ ํด๋”์— ํŒŒ์ผ์ด ๋งŽ์„ ๊ฒฝ์šฐ IO๊ฐ€ ๋А๋ ค์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ
    • ํด๋”๋ฅผ ์—ฌ๋Š” ๋™์ž‘๊ณผ ๋™์‹œ์— ํด๋” ๋‚ด์˜ ํŒŒ์ผ์„ ์Šค์บ”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰์ด ์˜ค๋ž˜๊ฑธ๋ฆผ ⇒ ๊ฒฐ๊ตญ์€ ์„ฑ๋Šฅ!
    • ๊ฒฐ๊ตญ์€ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ž์ฒด์— ์˜ํ–ฅ

๊ณผ์ •

* ๋ฐฉ๋ฒ• 1, 2๋ฅผ ๊ณ ๋ คํ–ˆ์ง€๋งŒ ๊ฒฐ๊ตญ 3๋ฒˆ์„ ์„ ํƒํ•จ

 

๋ฐฉ๋ฒ• 1. ๊ธฐ์กด ํŒŒ์ผ์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋ฐฐํฌ ์ดํ›„์˜ ํŒŒ์ผ๋“ค๋งŒ ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝ

๋ณ€๊ฒฝ ์ „ DB๊ตฌ์กฐ
๋ณ€๊ฒฝ ํ›„ DB ๊ตฌ์กฐ

  • /๊ธฐ๋ณธ๊ฒฝ๋กœ/+ {DB์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒฝ๋กœ}
  • ๋ฌธ์ œ์ : DB์˜ ๊ตฌ์กฐ๊ฐ€ ํŠน์ •์‹œ์ ์œผ๋กœ๋ถ€ํ„ฐ ๋‹ฌ๋ผ์ง, ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฒฝ๋กœ๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋จ(๊ฒฝ๋กœ ๋…ธ์ถœ + url ์ธ์ฝ”๋”ฉ), ์ •์ฑ… ๋ณ€๊ฒฝ

๋ฐฉ๋ฒ• 2. ๊ธฐ์กด ํŒŒ์ผ์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋ฐฐํฌ ์ดํ›„์˜ ํŒŒ์ผ๋“ค๋งŒ ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  if๋ฌธ์œผ๋กœ ์ฐพ๊ธฐ

if (๊ธฐ์ค€๋‚ ์งœ๋ณด๋‹ค ์ „) {
	// ๋ณ€๊ฒฝ์ „ ๊ฒฝ๋กœ์˜ ์ด๋ฏธ์ง€ ๋‹ค์šด
} else {
	// ๋ณ€๊ฒฝํ›„ ๊ฒฝ๋กœ์˜ ์ด๋ฏธ์ง€ ๋‹ค์šด
}
  • ๋ฌธ์ œ์ : ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง, ๋ฆฌ๋ˆ…์Šค์— ์žˆ๋Š” ํŒŒ์ผ๋“ค๋„ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›€

๋ฐฉ๋ฒ• 3. ๋ชจ๋“  ํŒŒ์ผ ๊ฒฝ๋กœ ์ˆ˜์ •

  • java๋กœ ์ž‘์„ฑ
  • shell script๋กœ ์ž‘์„ฑ => java๋ณด๋‹ค ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์„œ shell script๋กœ ์ž‘์„ฑ์„ ํ•˜๊ฒŒ ๋จ
# ํŒŒ์ผ ์ˆ˜๋ฅผ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ
#!/bin/bash

# ๋ณ€์ˆ˜ ์„ค์ •
base_dir="{๊ธฐ๋ณธ๊ฒฝ๋กœ}"
total_file_count=0

# ๊ฐ ํด๋ผ์ด์–ธํŠธ ๋ฒˆํ˜ธ๋ณ„๋กœ ํŒŒ์ผ ์ˆ˜ ๊ณ„์‚ฐ ๋ฐ ํ•ฉ์‚ฐ
for clientNo in $(ls "$base_dir"); do
    # ํŒŒ์ผ ์ˆ˜ ๊ณ„์‚ฐ
    file_count=$(find "$base_dir/$clientNo/user" -type f | wc -l)
    
    echo "ํด๋” $clientNo/user์—๋Š” $file_count ๊ฐœ์˜ ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค."
    # ์ด ํŒŒ์ผ ์ˆ˜์— ๋”ํ•˜๊ธฐ
    ((total_file_count += file_count))
done

# ๊ฒฐ๊ณผ ์ถœ๋ ฅ
echo "file count: $total_file_count"
  • ๋‚ด๊ฐ€ ์˜ฎ๊ฒจ์•ผํ•  ํŒŒ์ผ ํ™•์ธ
  • ์•ฝ 10๋งŒ๊ฐœ์˜ ํŒŒ์ผ
# ํŒŒ์ผ ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ
#! /bin/bash

# ์›๋ณธ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ
src_dir="{์›๋ณธ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ}"

# ๋Œ€์ƒ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ
dest_dir="{๋ณ€๊ฒฝ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ}"

# ์›๋ณธ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ํด๋”๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์ž‘์—… ์ˆ˜ํ–‰
for folder in "$src_dir"/*; do
    if [ -d "$folder" ]; then
        clientNo=$(basename "$folder")  # ํด๋” ์ด๋ฆ„์„ clientNo๋กœ ์‚ฌ์šฉ
        echo "Copying $clientNo to $dest_dir"
        cp -r "$folder" "$dest_dir"
    fi
done

echo "Copy operation completed."
  • ๊ธฐ์กด ํŒŒ์ผ๋“ค์„ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋กœ ์ƒˆ๋กœ์šด ๊ฒฝ๋กœ์— ๋งŒ๋“ค๋ ค๊ณ  ํ•จ
    • ⇒ ๋ชจ๋“  ํŒŒ์ผ์ด ์˜ฎ๊ฒจ์กŒ๋Š”์ง€ ๊ฒ€์ฆ์ด ์–ด๋ ค์›€
  • ๋ฐฑ์—… ํด๋”๋ฅผ ๋งŒ๋“  ํ›„ ํŒŒ์ผ ์˜ฎ๊ธฐ๊ธฐ
# ํŒŒ์ผ ์˜ฎ๊ธฐ๋Š” ์Šคํฌ๋ฆฝํŠธ
#!/bin/bash

# temp ํด๋”์˜ ๊ฒฝ๋กœ
temp_path="{๋ฐฑ์—… ๊ฒฝ๋กœ}"

# autobill ํด๋”์˜ ๊ฒฝ๋กœ
autobill_path="{๊ธฐ๋ณธ ๊ฒฝ๋กœ}"

# temp ํด๋” ์•ˆ์— ์žˆ๋Š” clientNo ํด๋”๋“ค์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
for client_folder in "$temp_path"/*; do
    clientNo=$(basename "$client_folder") # clientNo๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
    
    # ๊ฐ clientNo ํด๋” ์•ˆ์— ์žˆ๋Š” upload, user, notice ํด๋”๋“ค์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    for subfolder in "$client_folder"/*; do
        subfolder_name=$(basename "$subfolder")
        
        # ๊ฐ ํ•˜์œ„ ํด๋” ์•ˆ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
        for file in "$subfolder"/*; do
            if [ -f "$file" ]; then
                echo $(basename "$file")
                # ํŒŒ์ผ ์ด๋ฆ„์—์„œ [yyyyMMDD] ๋ถ€๋ถ„์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
                date_str=$(basename "$file" | sed -n 's/.*\\[\\([0-9]\\{6\\}\\)[0-9_]*\\].*/\\1/p')
                
                if [ -n "$date_str" ]; then
                    # ํŒŒ์ผ ์ด๋ฆ„์—์„œ ๋…„๋„์™€ ์›”์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
                    year_month="${date_str:0:6}"

                    # ์ƒˆ๋กœ์šด ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
                    new_path="$autobill_path/$year_month/$clientNo/$subfolder_name/$(basename "$file")"

                    # ํด๋”๊ฐ€ ์—†๋‹ค๋ฉด ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
                    mkdir -p "$(dirname "$new_path")"

                    # ํŒŒ์ผ์„ ์ƒˆ๋กœ์šด ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
                    mv "$file" "$new_path"
                    echo "$file์„(๋ฅผ) $new_path๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค."
                else
                    echo "ํŒŒ์ผ $file์˜ ๋‚ ์งœ ํ˜•์‹์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค."
                fi
            fi
        done
    done
    echo "clientNo: $clientNo ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค."
done
l

์•„์‰ฌ์šด์ 

  • ์ •ํ™•ํ•œ ์‹œ๊ฐ„ ๊ณ„์‚ฐ์„ ํ•˜์ง€ ์•Š์Œ
    • ๋ฐฑ์—…ํด๋”๋ฅผ ๋งŒ๋“ค ๋•Œ ๋Œ€๋žต 10๋ถ„ ๊ฑธ๋ฆผ
    • ๋ฐฑ์—… ํด๋” ๋งŒ๋“ค๊ธฐ + ํŒŒ์ผ ์˜ฎ๊ธฐ๊ธฐ
    • ์˜ˆ์ƒ: 20 ~ 25๋ถ„ ์‹ค์ œ: 40 ~ 50๋ถ„
      • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์ „ 1์ฐจ ์ž‘์—… + ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ํ›„ 2์ฐจ ์ž‘์—…

ํ”ผ๋“œ๋ฐฑ

  • ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์‚ฌ์šฉ
  • cp, mv ์–ด๋–ค๊ฑธ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?
  • ์•„์ด๋…ธ๋“œ ๋ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋ฌด์—‡์ธ๊ฐ€?
  • ์ €์žฅ ํŒŒ์ผ์˜ ํ™•์žฅ์ž ์•ˆ๋ณด์ด๊ฒŒ ํ•˜๊ธฐ

์ฐธ๊ณ ์ž๋ฃŒ: