AWS EC2 환경에서 Failover를 테스트하거나, 간단한 서버-클라이언트 구조를 실습해보고 싶다면 nc (netcat)를 이용한 TCP 통신이 유용하다.
이번 글에서는 EC2 인스턴스를 활용한 간단한 echo 서버 구축부터, 보안 그룹 설정, 내부 통신 방법까지 설명해보려고 한다
nc 명령어로 echo 서버 띄우기먼저 EC2 인스턴스에서 아래 명령어를 실행하여 TCP 서버를 띄워보자.
nc -lk -p 2000
| 옵션 | 설명 |
|---|---|
-l | 리스닝 모드로 동작 |
-k | 연결이 종료되어도 계속 대기 |
-p | 포트 번호 지정 |
예를 들어, 위 명령어는 EC2에서 2000번 포트로 들어오는 TCP 요청을 무한히 받고 응답하는 서버 역할을 한다.
이제 다른 컴퓨터(예: Mac)에서 해당 EC2 인스턴스의 공인 IP로 접속을 시도해보자.
echo hi | nc <EC2_PUBLIC_IP> 2000
예:
echo hi | nc 3.39.10.245 2000
"hi"라는 메시지를 TCP로 전송하고 응답을 기다리는 간단한 테스트다.
EC2 인스턴스에서 nc가 리슨 중인데도 응답이 없다면 대부분 보안 그룹(Security Group) 설정 문제다.


| 항목 | 값 |
|---|---|
| 유형 | 사용자 지정 TCP |
| 프로토콜 | TCP |
| 포트 범위 | 2000 |
| 소스 | 내 IP (또는 0.0.0.0/0 테스트용) |
⚠️ 주의:
0.0.0.0/0은 모든 외부에서 접속 가능하므로 테스트 후에는 꼭 삭제하거나 제한해야 함

인바운드 규칙을 수정하기 전에는 아무 응답 없었는데
수정 후에는 응답을 잘 해주는 모습이다.
서로 다른 EC2 인스턴스를 같은 VPC 안에 만들었다면 Public IP 없이도 Private IP로 직접 통신할 수 있다.
예:
EC2-A에서:
echo hello | nc 172.31.10.102 2000
EC2-B에서:
nc -l 2000
같은 VPC에 있다고 해도 보안 그룹에서 내부 통신을 허용해야 함.
| 항목 | 값 |
|---|---|
| 유형 | 사용자 지정 TCP |
| 포트 범위 | 2000 |
| 소스 | 자기 자신 보안 그룹 (sg-xxxx 형태) |
| 항목 | 설명 |
|---|---|
| IP 사용 | Public IP ❌, Private IP(172.31.x.x) ✅ |
| 보안 그룹 | 내부 통신을 허용하는 인바운드 규칙 설정 필요 |
| 인터넷 필요 여부 | ❌ 불필요 (VPC 내부 통신만) |
| 장점 | 빠르고 보안적으로 안전하며 트래픽 비용 없음 |
ping, netcat(nc), ssh 모두 사용 가능하다