SQL·MES 전체 글 보기 →
연결 오류에서 방화벽부터 끄면 안 되는 이유
SSMS에 서버 이름을 넣었는데 한참 기다린 뒤 “서버를 찾을 수 없거나 액세스할 수 없습니다”라는 메시지가 뜹니다. 이때 가장 먼저 나오는 말이 “1433 포트를 열어 보자”입니다.
그런데 SQL Server 서비스가 멈춰 있거나 TCP/IP가 꺼져 있다면 포트를 열어도 달라지는 것이 없습니다. 명명된 인스턴스가 동적 포트를 쓰는데 1433만 확인하고 있을 수도 있습니다. 방화벽 전체를 끄면 원인은 그대로인데 보호만 사라집니다.
이번 글에서는 서비스 실행 → 로컬 연결 → TCP/IP → 실제 수신 포트 → 원격 포트 테스트 → 로그인 순서로 확인합니다. 어디까지 성공했는지를 기준으로 다음 점검 항목을 고르는 방식입니다.
시리즈 안내 이 글은 「MSSQL 입문·실무」 시리즈의 32번째 글입니다. 31편의 오류 18456은 서버에 도착한 뒤 로그인에서 거절된 경우였습니다. 이번에는 그보다 앞에서 서버 자체에 도달하지 못하는 경우를 다룹니다.
아래 서버명은 설명용입니다. 회사 서버명, 실제 IP, 인스턴스명과 계정이 보이는 화면은 외부 글에 사용하지 않습니다.
1. 오류를 세 구간으로 나누기
연결 실패는 대체로 다음 세 구간에서 발생합니다.
| 구간 | 대표 증상 | 먼저 확인할 항목 |
|---|---|---|
| SQL Server 자체 | 로컬에서도 연결 실패 | 서비스 상태, 인스턴스명 |
| 네트워크 | 서버를 찾지 못함, 시간 초과 | TCP/IP, 포트, 방화벽, 경로 |
| 인증 | 오류 18456 | 인증 방식, 로그인, 권한, 기본 DB |
로컬 접속도 실패한다면 원격 방화벽을 먼저 수정할 이유가 없습니다. 반대로 로컬은 성공하고 원격만 실패한다면 TCP/IP와 네트워크 구간을 집중적으로 확인합니다.
2. SQL Server 서비스가 실행 중인지 확인
Windows의 서비스 또는 SQL Server Configuration Manager에서 대상 인스턴스가 실행 중인지 확인합니다.
- 기본 인스턴스:
SQL Server (MSSQLSERVER) - 명명된 인스턴스 예시:
SQL Server (DEMO)
인스턴스명을 혼동하면 서비스가 정상이어도 다른 서버를 찾게 됩니다. 기본 인스턴스와 명명된 인스턴스의 접속 형식도 구분합니다.
기본 인스턴스: 서버이름 또는 서버이름,포트
명명된 인스턴스: 서버이름\인스턴스이름
3. 같은 PC에서 먼저 연결하기
SQL Server가 설치된 PC에서 로컬 연결을 시도합니다.
sqlcmd -S localhost -E -Q "SELECT @@SERVERNAME, DB_NAME(), GETDATE();"
명시적으로 TCP와 포트를 테스트하려면 다음 형식을 사용합니다.
sqlcmd -S tcp:localhost,1433 -E -Q "SELECT @@SERVERNAME, GETDATE();"
첫 번째는 성공하지만 두 번째가 실패한다면 SQL Server는 실행 중이어도 TCP/IP 또는 해당 포트의 수신 설정이 맞지 않을 수 있습니다.
4. TCP/IP 사용 여부 확인
SQL Server Configuration Manager에서 다음 경로를 확인합니다.
SQL Server 네트워크 구성
└─ 대상 인스턴스의 프로토콜
└─ TCP/IP
TCP/IP를 사용으로 바꿨다면 SQL Server 서비스를 다시 시작해야 반영됩니다. 운영 서버에서는 서비스 재시작이 접속 중인 사용자와 작업에 영향을 줄 수 있으므로 반드시 승인된 작업 시간에 진행합니다.
5. 1433이 항상 정답은 아니다
TCP 1433은 SQL Server 기본 인스턴스에서 흔히 사용하는 포트이지만 모든 환경이 1433을 쓰는 것은 아닙니다.
- 명명된 인스턴스는 동적 포트를 사용할 수 있습니다.
- 보안·운영 정책에 따라 고정된 다른 포트를 사용할 수 있습니다.
- SQL Server Browser는 인스턴스 탐색에 UDP 1434를 사용할 수 있지만, 방화벽과 서비스 구성에 영향을 받습니다.
따라서 실제 수신 포트를 확인한 뒤 서버이름,포트 형식으로 직접 연결하면 인스턴스 탐색 문제와 데이터 통신 문제를 분리하기 쉽습니다.
6. 클라이언트에서 포트 도달 여부 확인
Windows PowerShell에서는 Test-NetConnection으로 TCP 연결 가능 여부를 확인할 수 있습니다.
Test-NetConnection db-demo.local -Port 1433
주요 결과는 다음처럼 해석합니다.
| 결과 | 의미 | 다음 확인 |
|---|---|---|
TcpTestSucceeded : True |
해당 주소와 포트까지 TCP 연결 가능 | SQL 인증·DB 권한·연결 문자열 |
TcpTestSucceeded : False |
포트까지 도달하지 못함 | 실제 포트, 방화벽, 라우팅, 서버 수신 |
| 이름 해석 실패 | 서버 이름을 주소로 변환하지 못함 | DNS 또는 올바른 서버 주소 |
포트 테스트가 성공했다고 로그인이 보장되는 것은 아닙니다. 이 결과는 네트워크 경로가 열렸다는 뜻에 가깝습니다.
7. 방화벽은 필요한 범위만 허용
서버 방화벽에서 SQL Server가 실제 사용하는 TCP 포트의 인바운드 규칙을 확인합니다. 문제 확인을 위해 방화벽 전체를 끄거나 모든 프로필과 모든 원격 주소에 포트를 공개하는 방식은 피합니다.
가능하면 다음 범위를 명확히 합니다.
- 대상 프로그램 또는 실제 TCP 포트
- 필요한 네트워크 프로필
- 접속이 필요한 원격 주소 범위
- 규칙의 목적과 관리 담당자
인터넷에 SQL Server 포트를 직접 공개하는 구성은 지양하고, 조직의 VPN·사설망·접근제어 정책을 따릅니다.
8. 연결 문자열도 포트와 암호화를 맞추기
pyodbc에서 포트를 명시한 예시는 다음과 같습니다.
connection_string = (
"DRIVER={ODBC Driver 18 for SQL Server};"
"SERVER=db-demo.local,1433;"
"DATABASE=BlogDemoDB;"
"Trusted_Connection=yes;"
"Encrypt=yes;"
"TrustServerCertificate=yes;"
)
TrustServerCertificate=yes는 로컬·검증 환경의 자체 서명 인증서를 전제로 한 예시입니다. 운영 환경에서는 유효한 인증서와 서버 이름 검증을 사용하는 편이 안전합니다.
9. 빠른 진단 체크리스트
- 접속하려는 SQL Server 인스턴스가 실행 중인가?
- 같은 PC에서 로컬 접속이 되는가?
- TCP/IP가 사용 상태이며 서비스 재시작이 반영됐는가?
- 실제 수신 포트가 1433인지 다른 포트인지 확인했는가?
- 클라이언트의
Test-NetConnection이 성공하는가? - 필요한 범위에만 방화벽 규칙이 적용됐는가?
- 네트워크 성공 후 오류 18456이 나온다면 인증을 따로 확인했는가?
오늘의 정리
MSSQL 연결 문제는 서버가 실행 중인가, TCP 포트까지 갈 수 있는가, 로그인이 허용되는가를 분리하는 것이 핵심입니다. 1433 포트를 무조건 열기보다 실제 인스턴스의 포트를 확인하고, 방화벽은 필요한 네트워크 범위에만 적용해야 합니다.
- 로컬에서도 실패: 서비스와 인스턴스명부터 확인
- 로컬은 성공, 원격 포트는 실패: TCP/IP·실제 포트·방화벽 확인
- 포트는 성공, 18456 발생: 인증과 권한 확인
- 기본 인스턴스도 실제 포트를 확인하고 명명된 인스턴스는 동적 포트 여부 확인
- 방화벽은 필요한 포트와 접속 범위만 허용
연결 문제에서는 TcpTestSucceeded와 로그인 성공을 분리해서 봐야 합니다. 포트까지 도달한 뒤에야 인증 오류를 볼 수 있고, 그 전에는 비밀번호를 바꿔도 아무 효과가 없습니다.
참고 자료
- Microsoft Learn — SQL Server 연결 문제 해결
- Microsoft Learn — 특정 TCP 포트에서 수신하도록 SQL Server 구성
- Microsoft Learn — SQL Server 액세스를 위한 Windows 방화벽 구성
다음 글 예고
연결이 안정되면 이제 데이터를 계속 가져올 수 있습니다. 다음 단계에서는 단순 조회를 넘어 실행 결과와 실패 이유를 로그로 남기고, 사람이 확인해야 할 항목만 모으는 자동화 흐름으로 이어 갑니다.
이전 글·다음 글 바로가기
'SQL · MES' 카테고리의 다른 글
| MSSQL 로그인 실패 18456 해결 — 인증 모드·사용자 권한 점검 [MSSQL 31] (0) | 2026.08.26 |
|---|---|
| SQL·MSSQL 용어집 — DBMS·PK·JOIN·트랜잭션·백업 총정리 (0) | 2026.08.22 |
| SQL Server 2022 설치 오류 해결 — 설치 로그부터 확인하기 [MSSQL 30] (0) | 2026.08.22 |
| MSSQL 입문·실무 전체 목차 (0) | 2026.08.05 |
| MSSQL 쿼리 디버깅 — 오류와 잘못된 결과 점검 순서 [MSSQL 28] (0) | 2026.07.16 |