정적 λͺ¨λ“ˆ vs 동적 λͺ¨λ“ˆ

정적 λͺ¨λ“ˆ: Nginx 컴파일 μ‹œ μ†ŒμŠ€μ½”λ“œμ— ν¬ν•¨λ˜μ–΄ ν•¨κ»˜ λΉŒλ“œλ˜λ©°, 항상 λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ˜μ–΄ μžˆμ–΄μ„œ μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ λ¦¬μ†ŒμŠ€λ₯Ό μ°¨μ§€ν•œλ‹€. 정적λͺ¨λ“ˆμ€ 적용 μ‹œ 무쀑단이 λΆˆκ°€λŠ₯ν•˜λ‹€.

동적 λͺ¨λ“ˆ: λ³„λ„μ˜ .so 파일둜 μ»΄νŒŒμΌλ˜μ–΄ ν•„μš”ν•  λ•Œλ§Œ λ‘œλ“œν•˜λ©° μœ μ—°μ„±μ΄ λ†’κ³  λ©”λͺ¨λ¦¬ νš¨μœ¨μ μ΄λ‹€. 동적λͺ¨λ“ˆμ€ 적용 μ‹œ 무쀑단이 κ°€λŠ₯ν•˜λ‹€.

 

동적λͺ¨λ“ˆ μ˜ˆμ‹œ

 

  • ngx_http_image_filter_module: 이미지 처리
  • ngx_http_geoip_module: IP 기반 지리 정보
  • ngx_http_xslt_module: XML/XSLT λ³€ν™˜
  • ngx_stream_module: TCP/UDP λ‘œλ“œλ°ΈλŸ°μ‹±
  • ngx_http_perl_module: Perl 슀크립트 μ‹€ν–‰

 

so νŒŒμΌμ€ 뭘까?

.so νŒŒμΌμ€ Shared Object 파일이며, λ¦¬λˆ…μŠ€/μœ λ‹‰μŠ€ μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©ν•˜λŠ” 동적 링크 라이브러리(Dynamic Link Library) νŒŒμΌμ΄λ‹€. 동적λͺ¨λ“ˆ μ΅œμ’… 파일이라고 보면 λœλ‹€.

 

동적λͺ¨λ“ˆμ˜ μž₯점

  • λŸ°νƒ€μž„μ— λ‘œλ“œ: ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 ν•„μš”ν•  λ•Œ λ©”λͺ¨λ¦¬μ— 적재
  • μ½”λ“œ 곡유: μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨μ΄ λ™μΌν•œ .so νŒŒμΌμ„ κ³΅μœ ν•΄μ„œ μ‚¬μš© κ°€λŠ₯
  • λ©”λͺ¨λ¦¬ 효율: 쀑볡 μ½”λ“œλ₯Ό λ©”λͺ¨λ¦¬μ— ν•œ 번만 λ‘œλ“œ
  • 독립적 μ—…λ°μ΄νŠΈ: 메인 ν”„λ‘œκ·Έλž¨ 재컴파일 없이 라이브러리만 ꡐ체 κ°€λŠ₯
  • 무쀑단 배포 κ°€λŠ₯

 

1. 동적λͺ¨λ“ˆ μ†ŒμŠ€ λ‹€μš΄λ‘œλ“œ

nginx version을 ν™•μΈν•΄μ„œ 이와 λ§žλŠ” λͺ¨λ“ˆ μ†ŒμŠ€μ½”λ“œλ₯Ό λ‹€μš΄λ°›μ•„ μ„œλ²„μ— μ—…λ‘œλ“œ ν•œ λ’€ 파일의 압좕을 ν‘Όλ‹€.

λ‚˜λŠ” nginx version이 1.28μ΄λΌμ„œ ν•΄λ‹Ή tar.gz νŒŒμΌμ„ λ‹€μš΄λ°›μ•˜λ‹€. (버전이 λ§žμ§€ μ•ŠλŠ”λ‹€λ©΄ nignx -tμ—μ„œ 였λ₯˜ λ°œμƒν•˜κΈ°μ— 버전 확인 ν•„μˆ˜!)

C 파일(.c)κ³Ό 헀더 파일(.h), config 파일 λ“±μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.

곡식 λ‹€μš΄λ‘œλ“œ μ‚¬μ΄νŠΈ: https://nginx.org/download/

tar -xzvf nginx-1.28.0.tar.gz

 

 

2. 동적λͺ¨λ“ˆ λΉŒλ“œ

동적λͺ¨λ“ˆμ„ λΉŒλ“œν• λ•Œ 각쒅 였λ₯˜κ°€ λ‚˜λŠ”λ° 보톡 μ˜μ‘΄μ„± λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ„€μΉ˜λ˜μ–΄μžˆμ§€ μ•Šμ•„ 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€.

μ–΄λ–€ λͺ¨λ“ˆμΈμ§€μ— 따라 ν•„μš”ν•œ μ˜μ‘΄μ„± λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 각각 λ‹€λ₯΄λ©°, 였λ₯˜ λ¬Έκ΅¬μ—μ„œ λ‚˜μ˜€λŠ” 라이브러리λ₯Ό μ„€μΉ˜ν•˜λ©΄ λœλ‹€.

# Nginx μ†ŒμŠ€ λ””λ ‰ν† λ¦¬λ‘œ 이동
cd /usr/local/src/nginx-1.28.0

# configure μ‹€ν–‰ (동적 λͺ¨λ“ˆ μΆ”κ°€)
# μ˜μ‘΄μ„± 라이브러리 μ„€μΉ˜κ°€ λͺ¨λ‘ μ™„λ£Œλ˜μ–΄μ•Ό 였λ₯˜μ—†μ΄ μ‹€ν–‰ κ°€λŠ₯
./configure --with-compat --with-http_xslt_module=dynamic

# λͺ¨λ“ˆμ— 따라 μ‹€ν–‰ 문법 확인
./configure --help | grep {λͺ¨λ“ˆλͺ…}

# λͺ¨λ“ˆλ§Œ λΉŒλ“œ
# 이 λͺ…λ ΉμœΌλ‘œ .so 파일(곡유 라이브러리)이 생성 
# λΉŒλ“œλœ .so νŒŒμΌμ€ objs/ 디렉토리에 생성
make modules

# λΉŒλ“œλœ .so νŒŒμΌμ„ λͺ¨λ“ˆ λ””λ ‰ν† λ¦¬λ‘œ 볡사
# λͺ¨λ“ˆμ„ λΉŒλ“œν•˜λ©΄ nginx-1.28.0/objs 디렉토리 밑에 so 파일이 μƒμ„±λœλ‹€.
cp objs/ngx_http_geoip2_module.so /usr/lib64/nginx/modules/

 

⭐ 동적λͺ¨λ“ˆ λΉŒλ“œ μ˜΅μ…˜ μ„€λͺ…

./configure

Nginx λΉŒλ“œ ν™˜κ²½μ„ μ„€μ •ν•˜λŠ” μŠ€ν¬λ¦½νŠΈμž…λ‹ˆλ‹€. Makefile을 /usr/local/src/nginx-1.28.0 디렉토리 μ•ˆμ— μƒμ„±ν•©λ‹ˆλ‹€.

--with-compat

ν˜Έν™˜μ„± λͺ¨λ“œ ν™œμ„±ν™”

  • Nginx λ°”μ΄λ„ˆλ¦¬μ™€ 동적 λͺ¨λ“ˆ κ°„μ˜ ABI(Application Binary Interface) ν˜Έν™˜μ„±μ„ 보μž₯ ( 이미 μ„€μΉ˜λœ Nginx에 λ‚˜μ€‘μ— 동적 λͺ¨λ“ˆλ§Œ λ”°λ‘œ μΆ”κ°€ν•  λ•Œ ν•„μˆ˜ μ˜΅μ…˜)
  • 이게 μ—†μœΌλ©΄ λͺ¨λ“ˆμ΄ μ œλŒ€λ‘œ λ‘œλ“œλ˜μ§€ μ•Šμ„ 수 있음

--with-http_xslt_module=dynamic

XSLT λͺ¨λ“ˆμ„ 동적 λͺ¨λ“ˆλ‘œ λΉŒλ“œ

  • λͺ¨λ“ˆμ— λ”°λΌμ„œ --with-{λͺ¨λ“ˆλͺ…}=dynamic ν˜•μ‹
  • --with-http_xslt_module: XSLT λͺ¨λ“ˆ 포함
  • =dynamic: 정적이 μ•„λ‹Œ 동적 λͺ¨λ“ˆ(.so 파일)둜 λΉŒλ“œν•˜λΌλŠ” 의미
  • =dynamic을 μ•ˆ 뢙이면 정적 λͺ¨λ“ˆλ‘œ 컴파일되며, make modules이 μ•ˆ 먹히고, so νŒŒμΌλ„ μ•ˆ λ§Œλ“€μ–΄μ§„λ‹€.

3. λͺ¨λ“ˆ λ‘œλ“œ 및 μ‚¬μš©

# nginx.conf 파일 μˆ˜μ •
vi /etc/nginx/nginx.conf

# nginx.conf 파일 μ΅œμƒλ‹¨μ— μΆ”κ°€
# λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜κΈ° μœ„ν•¨
include /usr/share/nginx/modules/*.conf;

 

/usr/share/nginx/modules/ μ•ˆμ— conf νŒŒμΌμ„ λ§Œλ“€μ–΄μ„œ λͺ¨λ“ˆμ„ λ‘œλ“œν•œλ‹€.

# conf 파일 생성 ν›„ 파일 μ•ˆμ— load_module μΆ”κ°€
vi /usr/share/nginx/modules/mod-http-image-filter.conf

# 파일 μ•ˆμ— μΆ”κ°€
load_module "/usr/lib64/nginx/modules/ngx_http_image_filter_module.so";

 

4. μ„€μ • 확인 및 μž¬μ‹œμž‘

# μ„€μ • 파일 문법 검사
nginx -t

# Nginx μž¬μ‹œμž‘ (무쀑단)
systemctl reload nginx

 

μ„€μ •νŒŒμΌ 문법 검사 μ‹œ, μ•„λž˜μ™€ 같이 OK와 successful을 ν™•μΈν–ˆλ‹€λ©΄ μž¬μ‹œμž‘ν•œλ‹€.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

 

정적/동적에 λ”°λ₯Έ Nginx μž¬μ‹œμž‘ 방법

# 정적λͺ¨λ“ˆ: Nginx λ°”μ΄λ„ˆλ¦¬ μžμ²΄κ°€ κ΅μ²΄λ˜λ―€λ‘œ μž¬μ‹œμž‘ ν•„μš” (쀑지 λ°œμƒ)
systemctl restart nginx  

# 동적λͺ¨λ“ˆ: .so 파일만 ꡐ체 ν›„ reload만으둜 κ°€λŠ₯ (무쀑단)
systemctl reload nginx

+ Recent posts