๐ก ํ์ฌ์์ ํ์ผ ๋ง์ด๊ทธ๋ ์ด์ ์ ํ๋๋ฐ ๊ทธ ๊ณผ์ ๊ณผ ํผ๋๋ฐฑ์ ๋ํด์ ์จ๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋ฌด์์ ํ๋๊ฐ?
- ํ์ผ ๊ฒฝ๋ก ์์ ํ๋ ์์
- ์ด ๊ณผ์ ์์ ๊ธฐ์กด์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธฐ๋ ์์
๋ชฉํ
๋ณ๊ฒฝ ์ ํ์ผ ๊ฒฝ๋ก: /๊ธฐ๋ณธ๊ฒฝ๋ก/{ํ์ฌ์ ๋ณด}/{ํ์ผํ์ -user/upload}/{ํ์ผ}
๋ณ๊ฒฝ ํ ํ์ผ ๊ฒฝ๋ก: /๊ธฐ๋ณธ๊ฒฝ๋ก/{yyyyMM}/{ํ์ฌ์ ๋ณด}/{ํ์ผํ์ -user/upload}/{ํ์ผ}
ํ์ผ: ์ด๋ฆ[20240425111111_์ ๋ํฌ๊ฐ].png
์?
ํ ํด๋์ ํ์ผ์ด ๋ง์ ๊ฒฝ์ฐ IO๊ฐ ๋๋ ค์ง๋ ๋ฌธ์ ๊ฐ ์์
- clientNo ๋ณ๋ก ํ์ผ์ด ๊ณ์ ์์ด๋ ํํ
- ํ ํด๋ ์์ ์ต๋ ์ฝ ๋ง๊ฐ์ ํ์ผ์ด ์์ฌ์์
๊ถ์ฅ์ ํ ํด๋์์ 4์ฒ ~ 5์ฒ- ์ฑ๋ฅ์ ๋ฐ๋ผ ๋ค๋ฆ
- ext1 ~ ext4, xfs ๋ฑ ํ์ผ์์คํ ์ ์ฑ๋ฅ์ด ์ข์์ง(inode ํฅ์, ๋๋ ํ ๋ฆฌ ๊ฒ์ ์ฑ๋ฅ ํฅ์, ์์คํ ์์ ๋ณต๊ตฌ ๋ฑ)
- https://medium.com/naver-cloud-platform/posix-์์๋ณด๊ธฐ-1-linux-๋ฆฌ๋ ์ค-ํ์ผ-์์คํ ์-์ข ๋ฅ์-ํน์ง-96a2e93e33b3
- ํ ํด๋์ ํ์ผ์ด ๋ง์ ๊ฒฝ์ฐ IO๊ฐ ๋๋ ค์ง๋ ๋ฌธ์ ๊ฐ ์์
- ํด๋๋ฅผ ์ฌ๋ ๋์๊ณผ ๋์์ ํด๋ ๋ด์ ํ์ผ์ ์ค์บํ๊ธฐ ๋๋ฌธ์ ํ์์ด ์ค๋๊ฑธ๋ฆผ ⇒ ๊ฒฐ๊ตญ์ ์ฑ๋ฅ!
- ๊ฒฐ๊ตญ์ ํ์ผ ์์คํ ์์ฒด์ ์ํฅ
๊ณผ์
* ๋ฐฉ๋ฒ 1, 2๋ฅผ ๊ณ ๋ คํ์ง๋ง ๊ฒฐ๊ตญ 3๋ฒ์ ์ ํํจ
๋ฐฉ๋ฒ 1. ๊ธฐ์กด ํ์ผ์ ๊ทธ๋๋ก ๋๊ณ ๋ฐฐํฌ ์ดํ์ ํ์ผ๋ค๋ง ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝ


- /๊ธฐ๋ณธ๊ฒฝ๋ก/+ {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 ์ด๋ค๊ฑธ ์ฌ์ฉํด์ผ ํ ๊น?
- ์์ด๋ ธ๋ ๋ฐ ํ์ผ ์์คํ ์ด ๋ฌด์์ธ๊ฐ?
- ์ ์ฅ ํ์ผ์ ํ์ฅ์ ์๋ณด์ด๊ฒ ํ๊ธฐ
์ฐธ๊ณ ์๋ฃ:
'๊ฒฝํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฉด์ ์์ ๋์น ๊ฒ๋ค - ๋ก๊ทธ ๊ด๋ฆฌ์ ๋ชจ๋ํฐ๋ง์ ๋ํ ์์ฌ์ด ๋๋ต (0) | 2025.09.26 |
|---|---|
| redis pub / sub ์ํคํ ์ฒ (0) | 2023.04.23 |
| ๋์์ธ ํจํด ์ ์ฉ (0) | 2023.04.20 |
| ์ก์ถ ์๋ฒ์ ์ ํ๋ธ ์คํธ๋ฆฌ๋ฐ (0) | 2023.04.11 |
| ์ธ๋ฑ์ค ๊ณ ๋ฏผ (0) | 2023.03.30 |