일반적으둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ— λŒ€ν•œ HTTP ν”„λ‘μ‹œλŠ” μ—”μ§„μ—‘μŠ€(Nginx)λ₯Ό 많이 μ‚¬μš©ν•˜κ³  μžˆμ§€λ§Œ L4 레벨의 TCP ν”„λ‘μ‹œκ°€ ν•„μš”ν•œ 경우 stream λͺ¨λ“ˆμ„ λ³„λ„λ‘œ μ„€μΉ˜ν•΄μ•Όν•˜λŠ” 과정이 ν•„μš”ν•˜λ―€λ‘œ HAProxyκ°€ 더 쒋은 선택일 수 μžˆλ‹€. 사내 개발 ν™˜κ²½μ—μ„œ μ—°κ²°ν•  수 μžˆλŠ” 배슀천 ν˜ΈμŠ€νŠΈμ— HAProxyλ₯Ό κ΅¬μ„±ν•˜κ³  프라이빗 λ„€νŠΈμ›Œν¬ ν™˜κ²½μœΌλ‘œ κ΅¬μ„±λ˜μ–΄μžˆλŠ” ν…ŒμŠ€νŠΈ ν™˜κ²½μ˜ TCP 톡신이 ν•„μš”ν•œ μΈμŠ€ν„΄μŠ€μ— μ—°κ²°ν•  수 μžˆλ„λ‘ 포트 ν¬μ›Œλ”©μ„ ꡬ성해보도둝 ν•˜μž.

TCP ν”„λ‘μ‹œ

TCP ν”„λ‘μ‹œλŠ” TCP 연결에 λŒ€ν•œ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œμ— ν•΄λ‹Ήλœλ‹€. 일반적으둜 TCP 연결을 μˆ˜ν–‰ν•΄μ•Όν•˜λŠ” μΈμŠ€ν„΄μŠ€μ—λŠ” Redis λ˜λŠ” PostgreSQL이 μžˆλŠ”λ° ν˜„μž¬ μ‘°μ§μ—μ„œ ν™œμš©ν•˜κ³  μžˆλŠ” μ‹œκ³„μ—΄ λ°μ΄ν„°λ² μ΄μŠ€μΈ KDB+에 λŒ€ν•΄ ν”„λ‘μ‹œλ₯Ό ꡬ성해보렀고 ν•œλ‹€. λ‹€μŒμ€ KDBμ—μ„œ μ‚¬μš©ν•΄μ•Όν•˜λŠ” 포트 λ²”μœ„λ₯Ό μˆ˜μ‹ ν•˜λ„λ‘ μ„€μ •ν•œ μ˜ˆμ‹œμ΄λ‹€.

haproxy.cfg
listen kdb_proxy_for_dev mode tcp bind *:5010-5013 server kdb_dev 192.168.149.88

HAProxy ꡬ성 ν…ŒμŠ€νŠΈ

ν˜„μž¬ μ„€μ • νŒŒμΌμ— 문법적인 λ¬Έμ œκ°€ μ—†λŠ”μ§€ check mode(-c) μ˜΅μ…˜μ„ μ‚¬μš©ν•΄μ„œ ν˜„μž¬ 섀정에 λŒ€ν•΄ 검증을 μˆ˜ν–‰ν•΄λ³Ό 수 μžˆλ‹€.

[ec2-user@ip-192-169-14-62 ~]$ haproxy -c -f /etc/haproxy/haproxy.cfg
Configuration file is valid

TCP ν”„λ‘μ‹œ ν…ŒμŠ€νŠΈ

NetCat(nc) λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•΄μ„œ HAProxyμ—μ„œ μˆ˜μ‹ ν•˜κ³  μžˆλŠ” 포트λ₯Ό 톡해 ν…ŒμŠ€νŠΈ ν™˜κ²½μ— μ‹€ν–‰λœ μΈμŠ€ν„΄μŠ€μ— μ—°κ²°ν•  수 μžˆλŠ”μ§€ ν…ŒμŠ€νŠΈλ₯Ό ν•΄λ³΄μž.

[ec2-user@ip-192-169-14-62 ~]$ nc -znv 127.0.0.1 5013
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 127.0.0.1:5013.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

배슀천 ν˜ΈμŠ€νŠΈμ— TCP ν”„λ‘μ‹œλ₯Ό κ΅¬μ„±ν•˜κΈ° μ „κΉŒμ§€λŠ” 배슀천 ν˜ΈμŠ€νŠΈμ— λŒ€ν•œ SSH 터널링을 ν•„μš”ν• λ•Œλ§ˆλ‹€ μˆ˜ν–‰ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.
기본적으둜 SSH 터널링을 κ΅¬μ„±ν•˜λŠ”κ²Œ μΌλ°˜μ μ΄μ§€λ§Œ λ³΄μ•ˆ μˆ˜μ€€μ„ κ²€ν† ν•˜κ³  TCP ν”„λ‘μ‹œλ₯Ό ꡬ성해보도둝 ν•˜μ„Έμš”.