๐Ÿ•
โ† ๊ฐ€์ด๋“œ ๋ชฉ๋ก์œผ๋กœ

์—ฌ๋Ÿฌ Unix ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ํ•œ ๋ฒˆ์— ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

ยท ํƒœ๊ทธ: batch-processing, log-analysis, automation, unix-timestamp, shell-scripting, data-processing

ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋ฐฐ์น˜ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

์„œ๋ฒ„ ๋กœ๊ทธ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด๋ณด๋‚ด๊ธฐ, API ์‘๋‹ต, ๋ถ„์„ ๋ฐ์ดํ„ฐ์…‹์„ ๋‹ค๋ฃฐ ๋•Œ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํƒ€์ž„์Šคํƒฌํ”„๋งŒ ๋งŒ๋‚˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ์ข…์ข… ํŒŒ์ผ, ์—ด, JSON ํŽ˜์ด๋กœ๋“œ์— ์ˆ˜์ฒœ ๋˜๋Š” ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ Unix ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ํฉ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์„ ์ˆ˜๋™์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋น„ํ˜„์‹ค์ ์ž…๋‹ˆ๋‹ค. ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋Š” ์›์‹œ ์ˆซ์ž์˜ ์‚ฐ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํƒ€์ž„๋ผ์ธ์œผ๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ๋Š” ๋ช…๋ น์ค„ ๋„๊ตฌ, ์Šคํฌ๋ฆฝํŠธ, ์ €ํฌ ์˜จ๋ผ์ธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ์‹ค์šฉ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• 1: ์˜จ๋ผ์ธ ๋ฐฐ์น˜ ๋ณ€ํ™˜๊ธฐ ์‚ฌ์šฉํ•˜๊ธฐ

์ €ํฌ Unix Timestamp Converter๋Š” ๋ฐฐ์น˜ ์ž…๋ ฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด(ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋˜๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„) ๋„๊ตฌ๊ฐ€ ๋ชจ๋“  ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ํ•œ ๋ฒˆ์— ๋ณ€ํ™˜ํ•˜์—ฌ ์‹œ๊ฐ„๋Œ€๋ณ„๋กœ ์ •๋ ฌ๋œ ํ‘œ๋กœ ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฐฉ๋ฒ•์€ ์ˆ˜์‹ญ์—์„œ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ํƒ€์ž„์Šคํƒฌํ”„ โ€” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ๋น ๋ฅด๊ณ  ์‹œ๊ฐ์ ์ธ ๊ฒฐ๊ณผ๊ฐ€ ํ•„์š”ํ•  ๋•Œ โ€” ์ค‘๊ฐ„ ๊ทœ๋ชจ์˜ ๋ฐฐ์น˜์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• 2: ๋ช…๋ น์ค„ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ

date ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ ๊ธฐ๋ณธ ๋ฃจํ”„

# bash ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž„์Šคํƒฌํ”„ ๋ชฉ๋ก ๋ณ€ํ™˜
for ts in 1785292800 1785379200 1785465600 1785552000; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done

ํŒŒ์ผ์—์„œ ์ฝ๊ธฐ

# timestamps.txt์—๋Š” ํ•œ ์ค„์— ํ•˜๋‚˜์˜ ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค
while read -r ts; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done < timestamps.txt

๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ xargs ์‚ฌ์šฉ

# ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์˜ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋กœ xargs ์‚ฌ์šฉ
cat timestamps.txt | xargs -P 4 -I {} date -d "@{}" "+%Y-%m-%d %H:%M:%S"

CSV ํŒŒ์ผ๋กœ ์ถœ๋ ฅ

# ์›๋ณธ ํƒ€์ž„์Šคํƒฌํ”„์™€ ๋ณ€ํ™˜๋œ ๋‚ ์งœ๋กœ CSV ์ƒ์„ฑ
echo "timestamp,date_utc,date_local" > output.csv
while read -r ts; do
    utc_date=$(TZ=UTC date -d @"$ts" "+%Y-%m-%d %H:%M:%S")
    local_date=$(date -d @"$ts" "+%Y-%m-%d %H:%M:%S")
    echo "$ts,$utc_date,$local_date" >> output.csv
done < timestamps.txt

๋ฐฉ๋ฒ• 3: ๋กœ๊ทธ ํŒŒ์ผ์—์„œ ํƒ€์ž„์Šคํƒฌํ”„ ์ถ”์ถœํ•˜๊ธฐ

๋กœ๊ทธ ํŒŒ์ผ์—๋Š” ์ข…์ข… ๊ตฌ์กฐํ™”๋˜๊ฑฐ๋‚˜ ๋ฐ˜๊ตฌ์กฐํ™”๋œ ํ…์ŠคํŠธ์— ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ผ๋ฐ˜์ ์ธ ๋กœ๊ทธ ํ˜•์‹์— ๋Œ€ํ•œ ์‹ค์šฉ์ ์ธ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

Apache / Nginx ์•ก์„ธ์Šค ๋กœ๊ทธ

Apache ๋ฐ Nginx ๋กœ๊ทธ๋Š” ์ข…์ข… %{%Y-%m-%d}T ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ Unix ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

# Nginx ๋กœ๊ทธ์—์„œ ํƒ€์ž„์Šคํƒฌํ”„ ์ถ”์ถœ ๋ฐ ๋ณ€ํ™˜
# ๋กœ๊ทธ ์ค„์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: [1785292800] GET /index.html 200
grep -oP '\[\K[0-9]{10}(?=\])' access.log | while read -r ts; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done

JSON ๋กœ๊ทธ

ํ˜„๋Œ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ข…์ข… JSON ํ˜•์‹์œผ๋กœ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค:

# jq๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSON ๋กœ๊ทธ ํŒŒ์ผ์—์„œ ํƒ€์ž„์Šคํƒฌํ”„ ์ถ”์ถœ
cat app.log | jq -r '.timestamp' | while read -r ts; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done

์‚ฌ์šฉ์ž ์ง€์ • ๊ตฌ๋ถ„์ž ๋กœ๊ทธ

# ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ๋กœ๊ทธ์˜ ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ์ธ ๊ฒฝ์šฐ (ํŒŒ์ดํ”„๋กœ ๊ตฌ๋ถ„)
awk -F'|' '{ts=$1; cmd="date -d @" ts " \"+%Y-%m-%d %H:%M:%S\""; cmd | getline date; close(cmd); print date, $0}' server.log

๋ฐฉ๋ฒ• 4: Python์„ ์‚ฌ์šฉํ•œ ๊ณ ๊ธ‰ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ

Python์€ ๋ฐฐ์น˜ ๋ณ€ํ™˜์— ๊ฐ€์žฅ ์œ ์—ฐํ•œ ๋„๊ตฌ๋กœ, ํŠนํžˆ ํƒ€์ž„์Šคํƒฌํ”„์— ํ•„ํ„ฐ๋ง, ๋ณ€ํ™˜, ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํƒ€์ž„์Šคํƒฌํ”„ ๋ชฉ๋ก ๋ณ€ํ™˜

from datetime import datetime
import json

timestamps = [1785292800, 1785379200, 1785465600, 1785552000]

results = []
for ts in timestamps:
    dt = datetime.utcfromtimestamp(ts)
    results.append({
        "timestamp": ts,
        "datetime_utc": dt.strftime("%Y-%m-%d %H:%M:%S"),
        "date": dt.strftime("%Y-%m-%d"),
        "time": dt.strftime("%H:%M:%S"),
        "day_of_week": dt.strftime("%A"),
    })

print(json.dumps(results, indent=2))

CSV ํŒŒ์ผ ์ฒ˜๋ฆฌ

import csv
from datetime import datetime

with open("data.csv", "r") as infile, open("converted.csv", "w", newline="") as outfile:
    reader = csv.DictReader(infile)
    writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames + ["date_utc", "date_local"])
    writer.writeheader()
    
    for row in reader:
        ts = int(row["timestamp"])
        dt_utc = datetime.utcfromtimestamp(ts)
        row["date_utc"] = dt_utc.strftime("%Y-%m-%d %H:%M:%S")
        
        # ์—ฌ๊ธฐ๋ฅผ ์ž์‹ ์˜ ๋กœ์ปฌ ์‹œ๊ฐ„๋Œ€๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
        from datetime import timezone
        dt_local = datetime.fromtimestamp(ts, tz=timezone.utc).astimezone()
        row["date_local"] = dt_local.strftime("%Y-%m-%d %H:%M:%S %Z")
        
        writer.writerow(row)

print("Conversion complete. Output written to converted.csv")

๋‚ ์งœ ๋ฒ”์œ„๋กœ ํ•„ํ„ฐ๋ง

from datetime import datetime

# ๋ฒ”์œ„ ์ •์˜: 2026๋…„ 7์›”์˜ ์‹œ์ž‘๊ณผ ๋
start_ts = int(datetime(2026, 7, 1).timestamp())
end_ts   = int(datetime(2026, 7, 31, 23, 59, 59).timestamp())

timestamps = [1785292800, 1785379200, 1785465600, 1785552000,
              1234567890, 1000000000]

# 2026๋…„ 7์›”๋งŒ ํ•„ํ„ฐ๋ง
july_only = [ts for ts in timestamps if start_ts <= ts <= end_ts]

for ts in july_only:
    dt = datetime.utcfromtimestamp(ts)
    print(f"{ts} -> {dt.strftime('%Y-%m-%d %H:%M:%S')}")

๋ฐฉ๋ฒ• 5: awk๋ฅผ ์‚ฌ์šฉํ•œ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ณ€ํ™˜

๋งค์šฐ ํฐ ํŒŒ์ผ(์ˆ˜๋ฐฑ๋งŒ ํ–‰)์˜ ๊ฒฝ์šฐ, awk๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค:

#!/usr/bin/awk -f
# batch-convert.awk
# ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ๋ฅผ Unix ํƒ€์ž„์Šคํƒฌํ”„๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๋‚ ์งœ์™€ ํ•จ๊ป˜ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค

{
    ts = $1
    # awk์˜ mktime์€ "YYYY MM DD HH MM SS" ํ˜•์‹์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค
    # ๋ณ€ํ™˜์„ ์œ„ํ•ด date ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์…ธ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค
    cmd = "date -d @" ts " \"+%Y-%m-%d %H:%M:%S\""
    cmd | getline date
    close(cmd)
    print date, $0
}

์‚ฌ์šฉ๋ฒ•:

./batch-convert.awk server.log

๋ฐฉ๋ฒ• 6: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒ€์ž„์Šคํƒฌํ”„์— SQL ์‚ฌ์šฉํ•˜๊ธฐ

ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋‹ค๋ฉด SQL์ด ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜์„ธ์š”:

PostgreSQL

SELECT 
    id,
    event_time,
    to_timestamp(event_time) AS readable_time,
    to_char(to_timestamp(event_time), 'YYYY-MM-DD HH24:MI:SS') AS formatted_time
FROM events
WHERE to_timestamp(event_time) >= '2026-07-01';

MySQL

SELECT 
    id,
    event_time,
    FROM_UNIXTIME(event_time) AS readable_time,
    FROM_UNIXTIME(event_time, '%Y-%m-%d %H:%i:%s') AS formatted_time
FROM events
WHERE FROM_UNIXTIME(event_time) >= '2026-07-01';

SQLite

SELECT 
    id,
    event_time,
    datetime(event_time, 'unixepoch') AS readable_time,
    strftime('%Y-%m-%d %H:%M:%S', event_time, 'unixepoch') AS formatted_time
FROM events;

์ถœ๋ ฅ ํ…Œ์ด๋ธ” ์„œ์‹ ์ง€์ •

# ์—ด ํ—ค๋”๊ฐ€ ์žˆ๋Š” ๊น”๋”ํ•œ ํ˜•์‹์˜ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
convert() {
    printf "%-15s %-25s %-25s\n" "TIMESTAMP" "UTC" "LOCAL"
    printf "%-15s %-25s %-25s\n" "---------------" "-------------------------" "-------------------------"
    while read -r ts; do
        utc=$(TZ=UTC date -d @"$ts" "+%Y-%m-%d %H:%M:%S")
        local=$(date -d @"$ts" "+%Y-%m-%d %H:%M:%S")
        printf "%-15s %-25s %-25s\n" "$ts" "$utc" "$local"
    done <<< "$(cat "$1")"
}

์„ฑ๋Šฅ ๋น„๊ต

| ๋ฐฉ๋ฒ• | ์ ํ•ฉํ•œ ์šฉ๋„ | ์†๋„ (10K ํƒ€์ž„์Šคํƒฌํ”„) | ๋ณต์žก์„ฑ | |--------|----------|----------------------|------------| | ์˜จ๋ผ์ธ ๋ณ€ํ™˜๊ธฐ | ์†Œ๊ทœ๋ชจ ๋ฐฐ์น˜ (< 50) | ์ฆ‰์‹œ | ์—†์Œ | | Bash ๋ฃจํ”„ | ์†Œ-์ค‘๊ทœ๋ชจ (50-10K) | ~30์ดˆ | ๋‚ฎ์Œ | | xargs ๋ณ‘๋ ฌ | ์ค‘๊ทœ๋ชจ (10K-100K) | ~10์ดˆ | ๋‚ฎ์Œ | | Python | ๋ชจ๋“  ๊ทœ๋ชจ | ~2์ดˆ | ์ค‘๊ฐ„ | | awk ์ŠคํŠธ๋ฆผ | ๋งค์šฐ ๋Œ€๊ทœ๋ชจ (์ˆ˜๋ฐฑ๋งŒ) | ~5์ดˆ | ์ค‘๊ฐ„ | | SQL | ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ | ์ฆ‰์‹œ | ๋‚ฎ์Œ |

๋น ๋ฅธ ์ผ์ƒ์ ์ธ ๋ฐฐ์น˜์—๋Š” ์ €ํฌ Unix Timestamp Converter๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ž๋™ํ™” ๋ฐ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์—๋Š” ์›Œํฌํ”Œ๋กœ์šฐ์— ๋งž๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜์„ ์Šคํฌ๋ฆฝํŒ…ํ•˜์„ธ์š”.

์—ฌ๋Ÿฌ Unix ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ํ•œ ๋ฒˆ์— ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ• - CoolTool