SPRING

์„œ๋ฒ„ ๋กœ๊ทธ ๊ด€๋ฆฌ

YeopJu 2024. 2. 27. 20:05
๋ฐ˜์‘ํ˜•

โ˜‘๏ธ ์Šคํ”„๋ง ๋กœ๊ทธ

์Šคํ”„๋ง์—์„œ๋Š” ๋กœ๊ทธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ application.properties ์™€ logback-spring.xml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ „์ž์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์„ค์ •๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์„ค์ •๋ฐ–์— ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋ณ„, ์ผ์ž๋ณ„๊ณผ ๊ฐ™์ด ์ž์„ธํ•œ ์„ค์ •์„ ์œ„ํ•ด์„œ๋Š” logback-spring.xml์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

Logback

Logback์€ log4j๋ฅผ ๋ฐœ์ „์‹œํ‚จ Logging Framework๋กœ Spring Boot๋Š” spring-boot-starter-web -> spring-boot-starter-logging์— logback ๊ตฌํ˜„์ฒด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ์˜์กด์„ฑ์„ ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ logback์ด ๊ธฐ๋ณธ ๋กœ๊น… ๊ตฌํ˜„์ฒด๋กœ ์ž๋™ ์ ์šฉ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ ์šฉ๋œ ๋กœ๊น… ๊ตฌํ˜„์ฒด๋Š” SLF4J(Simple Logging Framework for JAVA : interface)์™€ compile์‹œ์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

Log Level

๋กœ๊ทธ ๋ ˆ๋ฒจ์€ 5๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ๋‹จ๊ณ„๊ฐ€ ๋†’์•„์ง„๋‹ค.

Trace โžก Debug โžก Info โžก Warn โžก Error

 

โ˜‘๏ธ ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„ ๋กœ๊ทธ ๊ด€๋ฆฌ

๋จผ์ € ๋กœ๊ทธ ๊ด€๋ฆฌ์˜ ๊ธฐ๋ณธ์ธ ๋กœํ…Œ์ด์…˜์ด๋ผ๋Š” ์šฉ์–ด๋ถ€ํ„ฐ ์ •๋ฆฌํ•ด๋ณด์ž

๋กœํ…Œ์ด์…˜

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

ํ˜„์žฌ ๋‚˜์˜ EC2 ์„œ๋ฒ„๋Š” **Nginx, Docker(WAS:Tomcat)**์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

Nginx

/etc/nginx/nginx.conf

  • ๋กœ๊ทธ ํŒŒ์ผ์˜ ์ €์žฅ ๊ฒฝ๋กœ์™€ ๋กœ๊ทธ ์ถœ๋ ฅ ํ˜•์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋กœ๊ทธ ์ถœ๋ ฅ ํ˜•์‹
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
				'$status $body_bytes_sent "$http_referer" '
				'"$http_user_agent" "$http_x_forwarded_for"';

 

`Default192.0.2.1 - john [10/Jul/2023:14:02:39 +0900] "GET /index.html HTTP/1.1" 200 555 "<http://example.com/>" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "-"`

 

    • $remote_addr: ํด๋ผ์ด์–ธํŠธ์˜ IP ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • $remote_user: ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • $time_local: ๋กœ์ปฌ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋Š” ์ ‘์† ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • $request: ํด๋ผ์ด์–ธํŠธ์˜ ์›๋ž˜ ์š”์ฒญ ๋ฌธ์ž์—ด์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ URL ๋ฐ HTTP ๋ฉ”์„œ๋“œ(GET, POST ๋“ฑ)์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • $status: ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์˜ HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • $body_bytes_sent: ์‘๋‹ต ๋ณธ๋ฌธ์˜ ๋ฐ”์ดํŠธ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • $http_referer: ํด๋ผ์ด์–ธํŠธ HTTP ํ—ค๋”์˜ Referer ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์„ ํ•˜๊ธฐ ์ด์ „์— ๋ฐฉ๋ฌธํ–ˆ๋˜ ์›นํŽ˜์ด์ง€์˜ URL์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • $http_user_agent: ํด๋ผ์ด์–ธํŠธ HTTP ํ—ค๋”์˜ User-Agent ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €, ์šด์˜ ์ฒด์ œ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • $http_x_forwarded_for: ํด๋ผ์ด์–ธํŠธ HTTP ํ—ค๋”์˜ X-Forwarded-For ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋Š” ํ”„๋ก์‹œ๋‚˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ๋„๋‹ฌํ•œ ์š”์ฒญ์˜ ๊ฒฝ์šฐ, ์›๋ž˜ ํด๋ผ์ด์–ธํŠธ์˜ IP ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

/etc/logroate.conf

  • Linux ์‹œ์Šคํ…œ์—์„œ ๋กœ๊ทธ ํŒŒ์ผ ๋กœํ…Œ์ด์…˜(์ž๋™ ๋กœ๊ทธ ๊ด€๋ฆฌ)์„ ์ œ์–ดํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์ด๋‹ค. ์ด ํŒŒ์ผ์˜ ์„ค์ •์— ๋”ฐ๋ผ, ๋กœ๊ทธ ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์ผ์ • ํฌ๊ธฐ์— ๋„๋‹ฌํ•˜๊ฑฐ๋‚˜ ์ผ์ • ์‹œ๊ฐ„์ด ๊ฒฝ๊ณผํ•˜๋ฉด ์ƒˆ๋กœ์šด ๋กœ๊ทธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ , ์˜ค๋ž˜๋œ ๋กœ๊ทธ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์••์ถ•ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • /etc/logrotate.conf ์„ค์ • ํŒŒ์ผ์—๋Š” ์ „์—ญ ์„ค์ •์„ ํฌํ•จํ•˜๊ณ , /etc/logrotate.d/ ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” ๊ฐœ๋ณ„ ์„œ๋น„์Šค(์˜ˆ: apache, nginx ๋“ฑ)์— ๋Œ€ํ•œ ๋กœ๊ทธ ๋กœํ…Œ์ด์…˜ ์„ค์ • ํŒŒ์ผ์ด ์œ„์น˜ํ•ด ์žˆ๋‹ค.
  • /etc/logroate.conf/nginx
    • Default ๊ฐ’/var/log/nginx/*.log { ... }: ์ด ์„ค์ •์ด ์ ์šฉ๋  ๋กœ๊ทธ ํŒŒ์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค./var/log/nginx/ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์˜ ๋ชจ๋“  .log ํŒŒ์ผ์— ์ด ์„ค์ •์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.daily: ๋กœ๊ทธ ํŒŒ์ผ์„ ๋งค์ผ ๋กœํ…Œ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.missingok: ๋กœ๊ทธ ํŒŒ์ผ์ด ์—†์„ ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.compress: ๋กœํ…Œ์ด์…˜๋œ ๋กœ๊ทธ ํŒŒ์ผ์„ gzip์œผ๋กœ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค.sharedscripts: ๋กœ๊ทธ ํŒŒ์ผ ๋ชจ๋‘์— ๋Œ€ํ•ด postrotate์™€ endscript ์‚ฌ์ด์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • postrotate ... endscript: ๋กœ๊ทธ ํŒŒ์ผ์„ ๋กœํ…Œ์ด์…˜ํ•œ ํ›„์— ์‹คํ–‰ํ•  ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” Nginx์— USR1 ์‹œ๊ทธ๋„์„ ๋ณด๋‚ด ๋กœ๊ทธ ํŒŒ์ผ์„ ์žฌ์˜คํ”ˆํ•˜๋ผ๋Š” ๋ช…๋ น์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค. ์ด๋Š” Nginx๊ฐ€ ํ˜„์žฌ ๋กœ๊ทธ ํŒŒ์ผ์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ๋กœ๊ทธ ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • delaycompress: ๋กœํ…Œ์ด์…˜๋œ ์ด์ „ ๋กœ๊ทธ ํŒŒ์ผ์˜ ์••์ถ•์„ ์ง€์—ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” compress ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ๋•Œ ์œ ์šฉํ•˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ๋กœ๊ทธ ํŒŒ์ผ์„ ์“ฐ๋Š” ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•ด์ค๋‹ˆ๋‹ค.
    • notifempty: ๋กœ๊ทธ ํŒŒ์ผ์ด ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ ๋กœํ…Œ์ด์…˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • rotate 10: ๋กœ๊ทธ ํŒŒ์ผ์„ ์ตœ๋Œ€ 10๊ฐœ๊นŒ์ง€ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. 10๊ฐœ๊ฐ€ ๋„˜์œผ๋ฉด ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋กœ๊ทธ ํŒŒ์ผ๋ถ€ํ„ฐ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
    • create 0640 nginx root: ๋กœ๊ทธ ํŒŒ์ผ์„ ๋กœํ…Œ์ด์…˜ํ•œ ํ›„ ์ƒˆ ๋กœ๊ทธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋  ํŒŒ์ผ์˜ ๊ถŒํ•œ์€ 0640์ด๋ฉฐ, ์†Œ์œ ์ž๋Š” 'nginx', ๊ทธ๋ฃน์€ 'root'์ž…๋‹ˆ๋‹ค.
    • /var/log/nginx/*.log { create 0640 nginx root daily rotate 10 missingok notifempty compress delaycompress sharedscripts postrotate /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript }

 

Logrotate

 

logrotate๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ cron์ด๋ผ๋Š” ๋ฆฌ๋ˆ…์Šค์˜ ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ /etc/cron.daily ๋˜๋Š” /etc/cron.weekly ๋“ฑ์˜ ๋””๋ ‰ํ† ๋ฆฌ์— logrotate๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์‹œ์Šคํ…œ์ด ๋ถ€ํŒ…๋  ๋•Œ cron์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์Šค์ผ€์ค„๋ง๋œ๋‹ค.

  • logrotate -f์™€ ๊ฐ™์€ ๋ช…๋ น์€ ๋กœ๊ทธ ํŒŒ์ผ์˜ ๋กœํ…Œ์ด์…˜์„ ์ฆ‰์‹œ ๊ฐ•์ œ๋กœ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋””๋ฒ„๊น…์ด๋‚˜ ํ…Œ์ŠคํŠธ, ๋˜๋Š” ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ฆ‰์‹œ ํ™•๋ณดํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•