AWS EC2 인스턴스의 Redis IP 바인딩 이슈 해결하기
Troubleshooting Redis IP Binding Issues on AWS EC2
AWS EC2 환경에서 Redis를 세팅하며 특정 IP에 대한 접근을 허용하려고 시도했습니다. Redis 공식 문서의 가이드에 따라 redis.conf
파일에 로컬 머신의 IP 주소를 바인딩하였지만, 예상과 달리 접근이 허용되지 않았습니다.
처음에는 Redis의 설정에 이슈가 있다고 생각하여 이를 열심히 찾아봤습니다. 🔍 하지만, 이 문제는 단순히 Redis 설정의 문제보다는, AWS EC2의 가상화된 네트워크 인터페이스 구조와 관련이 있다는 것을 알게 되었습니다.
그래서 이를 해결하기 위해, 우선 Redis가 설치된 AWS EC2 인스턴스에 접속하여 ifconfig
명령어를 실행해 보기로 했습니다:
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 172.31.46.244 netmask 255.255.240.0 broadcast 172.31.15.255
ether 02:aa:bb:cc:dd:ee txqueuelen 1000 (Ethernet)
RX packets 235620 bytes 2147483647 (1.9 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 99369 bytes 2147483647 (1.3 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth*
:eth
는 "Ethernet"을 의미하고,*
는 Ethernet 인터페이스의 인덱스 번호를 나타내는 자리 표시자로 숫자 인덱스를 표시합니다.- 인덱스 번호는 시스템 내에서 여러 Ethernet 인터페이스를 구분하는 데 사용됩니다.
- 여기서
eth0
는 첫번째 Ethernet 인터페이스를 의미합니다. 하나 이상의 인터페이스가 존재했다면 두 번째 Ethernet 인터페이스는eth1
, 세 번째 Ethernet 인터페이스는eth2
와 같이 구분합니다.
lo
:lo
는 "Local Loopback"의 줄임말입니다.- 네트워크 인터페이스 중 하나로서 시스템 내부에서만 통신을 수행합니다.
- 주로 컴퓨터가 자기 자신과 통신하는 데 사용됩니다.
lo
인터페이스의 IP 주소는 보통 localhost라고 불리우는127.0.0.1
입니다. 이 주소로 보내진 패킷은 현재 컴퓨터로만 전송됩니다.
ifconfig
을 사용하여 현재 네트워크 인터페이스의 상태 정보를 확인하였습니다. 이 중에서 주목해야 할 부분은 바로 Ethernet 인터페이스의 inet 172.31.46.244
항목입니다.
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 172.31.46.244 netmask 255.255.240.0 broadcast 172.31.15.255
...
- 추가적인 네트워크 인터페이스 정보는 ifconfig로 네트워크 인터페이스 정보 확인하기에서 다루고 있습니다.
Ethernet 인터페이스의 정보에서 현재 EC2 인스턴스의 IP 주소 inet 172.31.46.244
를 확인했습니다. 이 IP 주소는 AWS 콘솔에서 확인 가능한 Private IPv4 addresses와 동일함을 알 수 있습니다.
이 Private IP 주소는 EC2 인스턴스의 내부 통신을 위해 사용되며, 같은 VPC 네트워크 내의 다른 인스턴스나 서비스가 접근할 수 있습니다. 따라서 해당 EC2 인스턴스에 설치된 Redis 서버는 이 Private IP를 통해서만 접근 가능한 상태였던 것입니다. 이러한 특성 때문에 로컬 머신의 IP 주소를 redis.conf
에 바인딩해도 접근이 불가능했던 것입니다.
이 문제를 해결하려면, Redis 설정 파일인 redis.conf
에 EC2 인스턴스의 Private IP 주소를 바인딩해야 합니다:
bind 172.31.46.244 127.0.0.1 ::1
그리고 Redis 서버에 대한 외부 접근을 허용하는 IP 주소들은 AWS Security Group을 통해 관리합니다. AWS의 Security Group의 인바운드 및 아웃바운드 규칙에 특정 IP를 추가함으로써 외부 접근을 효과적으로 제어할 수 있습니다.
이렇게 Redis 서버 IP 바인딩 이슈를 해결할 수 있었습니다. 처음에는 단순히 Redis 설정 문제로 추정했지만, 결국엔 외부 요소의 영향이 크게 작용한 것을 발견했습니다. 이 경험을 통해 전반적인 시스템 이해의 중요성을 다시 한 번 깨닫게 되었습니다. 🔄
- Redis
- AWS