Linux에서 Sping Boot Project 구동시 java.net.socketexception: permission denied 해결하기

박일우·2021년 3월 5일
2

프로젝트를 진행하다 Route53을 이용해 DNS를 사용중이였는데, SSL을 사용하고 있지만 port를 8443으로 설정해 놓아서 아래그림과 같이 Domain뒤에 포트번호를 붙혀야 하는 상황이 발생했다.

해결방법을 "Spring boot yaml 설정에서 port 번호만 바꿔주면 되는거 아니야?"라고 쉽게 생각했다.

server:          
  port: 443
  ssl:
    key-store: "SSL 인증서 저장 공간"
    key-store-type: "SSL 타입"
    key-store-password: "SSL 패스워드"
    enabled: true

local 환경에서 테스트 해본 결과, 문제없이 잘 돌아갔다.
하지만 운영서버에 배포를 해보니 java.net.socketexception: permission denied 라는 에러를 뱉어내버렸다..

원인

문제의 원인을 찾아내기 까지 헤매었다.

첫번째로, "인바운드 규칙에 443 포트가 빠져있나?" 라고 생각을 했다.
현재 AWS EC2를 호스팅하여 운영중인데, 보통 보안설정이 "화이트 리스트"로 설정이 되어있다.
확인해보니 역시 443 포트는 빠져있었고 추가를 하고 다시 실행을 해봤지 역시나 같은 에러를 뱉어냈다.

그래서 두번째로, "443 포트를 이미 사용중인가?" 라고 생각했지만 443포트는 사용중이 아니였다.

이유가 뭘까 생각을 하다가 구글링을 통해 원인을 알아냈다.
바로 "Linux에서는 일반 사용자에게 Wellknwon port 사용권한을 주지 않는다" 였다.
Wellknwon port란, 0번~1023번 까지의 포트로 이 포트를 사용하려면 루트 권한이 필요하다.

해결 방법

해결 방법은 총 4가지로 나눌 수 있다.
1. java.policy 파일에 해당 IP와 Port 추가
2. Java 실행 명령어에 sudo 추가
3. root 계정으로 linux 접속 후 실행
4. 1024 이상의 port 사용
이 중에 필자는 가장 쉽게 해결할 수 있는 2번을 사용하였고, 결과적으로 잘 구동이 되었다!

profile
열정!열정!열정!

0개의 댓글