Here Document๋ž€?

Here Document(์ดํ•˜ heredoc)๋Š” ์—ฌ๋Ÿฌ ์ค„์˜ ๋ฌธ์ž์—ด์„ ์‰ฝ๊ณ  ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์‰˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. ๋งˆ์น˜ ๋ ˆ์Šคํ† ๋ž‘์—์„œ ์ฃผ๋ฐฉ์— ์ฃผ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ํ”„๋กœ๊ทธ๋žจ์— ์—ฌ๋Ÿฌ ์ค„์˜ ํ…์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋ณธ ๋™์ž‘ ๋ฐฉ์‹

heredoc๋Š” ์ง€์ •๋œ ๊ตฌ๋ถ„์ž(๋ณดํ†ต EOF๋‚˜ EOT ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘๊ณผ ๋์„ ํ‘œ์‹œํ•œ๋‹ค. ๊ตฌ๋ถ„์ž ์‚ฌ์ด์˜ ๋ชจ๋“  ํ…์ŠคํŠธ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๋ฉฐ, ๋ณ€์ˆ˜ ํ™•์žฅ๊ณผ ๋ช…๋ น ์น˜ํ™˜๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ธฐ๋ณธ ๋ฌธ๋ฒ•:

command << DELIMITER
text content
more text content
DELIMITER

์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

1. ๊ฐ„๋‹จํ•œ ํŒŒ์ผ ์ƒ์„ฑ

# ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹
echo "Hello" > greeting.txt
echo "World" >> greeting.txt
 
# heredoc ํ™œ์šฉ
cat << EOF > greeting.txt
Hello
World
EOF

2. ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ

# MySQL ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ ์˜ˆ์‹œ
sudo cat << EOF > /etc/mysql/conf.d/custom.cnf
[mysqld]
max_connections = 100
query_cache_size = 32M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
EOF

๊ณ ๊ธ‰ ํ™œ์šฉ๋ฒ•

1. ๋ณ€์ˆ˜ ํ™•์žฅ ์ œ์–ด

# ๋ณ€์ˆ˜ ํ™•์žฅ ํ—ˆ์šฉ (๊ธฐ๋ณธ)
name="John"
cat << EOF
Hello, $name!
EOF
 
# ๋ณ€์ˆ˜ ํ™•์žฅ ๋ฐฉ์ง€
cat << 'EOF'
Hello, $name!
EOF

2. ๋“ค์—ฌ์“ฐ๊ธฐ ์ฒ˜๋ฆฌ

# ๋“ค์—ฌ์“ฐ๊ธฐ ์œ ์ง€
cat << 'EOF' | sed 's/^/    /'
function example() {
    console.log("Hello");
}
EOF

์ฃผ์˜์‚ฌํ•ญ

  1. ๊ตฌ๋ถ„์ž(EOF ๋“ฑ)๋Š” ์ค„์˜ ๋งจ ์•ž์— ์žˆ์–ด์•ผ ํ•œ๋‹ค
  2. ๊ตฌ๋ถ„์ž ์ฃผ๋ณ€์— ์ถ”๊ฐ€ ๊ณต๋ฐฑ์ด ์—†์–ด์•ผ ํ•œ๋‹ค
  3. ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜ ํ™•์žฅ์„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค
  4. ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ heredoc์€ ๋ณ€์ˆ˜ ํ™•์žฅ์ด ๋ฐœ์ƒํ•œ๋‹ค

์‹ค์ œ ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค

Docker ์ปจํ…Œ์ด๋„ˆ ์„ค์ •

# Dockerfile ์ƒ์„ฑ
cat << 'EOF' > Dockerfile
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y \
    nginx \
    curl
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
EOF

์‹œ์Šคํ…œ ์„œ๋น„์Šค ์„ค์ •

# ์‹œ์Šคํ…œ ์„œ๋น„์Šค ํŒŒ์ผ ์ƒ์„ฑ
sudo cat << EOF > /etc/systemd/system/myapp.service
[Unit]
Description=My Application Service
After=network.target
 
[Service]
Type=simple
User=myapp
ExecStart=/usr/local/bin/myapp
Restart=always
 
[Install]
WantedBy=multi-user.target
EOF

์„ฑ๋Šฅ๊ณผ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

  1. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ณ ๋ ค
  2. ๋ณ€์ˆ˜ ํ™•์žฅ ์‹œ ๋ณด์•ˆ ์ทจ์•ฝ์  ์ฃผ์˜
  3. ๋ฏผ๊ฐํ•œ ์ •๋ณด ์ฒ˜๋ฆฌ ์‹œ ๊ถŒํ•œ ์„ค์ • ํ™•์ธ
  4. ์ž„์‹œ ํŒŒ์ผ ์ƒ์„ฑ ์ตœ์†Œํ™”

๊ฒฐ๋ก 

heredoc์€ ๋ณต์žกํ•œ ๋ฌธ์ž์—ด์ด๋‚˜ ์„ค์ • ํŒŒ์ผ์„ ๋‹ค๋ฃฐ ๋•Œ ๋งค์šฐ ์œ ์šฉํ•œ ๋„๊ตฌ๋‹ค. ํŠนํžˆ ์—ฌ๋Ÿฌ ์ค„์˜ ํ…์ŠคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ๋™์ ์œผ๋กœ ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋•Œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.