[이슈] H2 port already in use

HwangJerry·2023년 5월 7일
0
post-custom-banner

이슈 발생

스프링 세션을 준비하기 위해 TestDB로 H2를 사용하려고 하는데, ./h2.bat를 bash에 입력하니 시작부터 아래와 같은 에러를 뱉어냅니다.

The Web Console server could not be started. Possible cause: another server is already running at http://172.26.16.1:8082
Root cause: Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use: bind" [90061-214]

딱 보기에 port를 이미 사용중이라 해당 포트로 열 수 없다는 의미로 보입니다. 왜 인지는 모르겠으나 이전에 강의를 들으며 등록했었던 jdbc:h2:tcp://localhost/~/test가 살아있었습니다. 이 DB가 8082로 열려있는 듯 합니다.

해결책 1. 이번 H2 DB를 다른 포트로 열기

이를 해결하기 위해서는 DB를 여는 port를 8083으로 설정하는 방법이 있을 수 있습니다.

java -cp h2-2.1.214.jar org.h2.tools.Server -webPort 8083

위 코드를 해석하면 다음과 같다.
1. java Java 명령어로 Java 프로그램을 실행할 겁니다.
2. -cp h2-2.1.214.jar classpath 옵션을 사용하여 Java 프로그램의 클래스 경로에 H2 데이터베이스의 Jar 파일을 추가합니다. 2.1.214는 H2의 버전을 의미합니다.
3. org.h2.tools.Server 실행할 Java 클래스의 이름입니다. 여기서는 H2 데이터베이스의 서버 클래스인 org.h2.tools.Server를 사용합니다. 4. -webPort 8083` 이 옵션은 H2 데이터베이스 서버의 웹 콘솔이 사용할 포트를 지정합니다. 여기서는 8082가 already in use이므로 8083으로 설정하였습니다.

-- 단계별 진행법
터미널 또는 커맨드 프롬프트를 실행합니다. Windows에서는 cmd 또는 PowerShell을, Mac이나 Linux에서는 Terminal을 실행하면 됩니다.

H2 jar 파일이 있는 디렉토리로 이동합니다. cd 명령어를 사용하여 해당 디렉토리로 이동할 수 있습니다. 예를 들어, cd /path/to/directory를 입력하면 해당 디렉토리로 이동할 수 있습니다.

이제 위의 명령어를 입력합니다. java -cp h2-2.1.214.jar org.h2.tools.Server -webPort 8083

명령어를 입력하고 엔터키를 누르면, H2 데이터베이스 웹 콘솔이 8083 포트에서 실행됩니다.

해결책 2. 배치파일 포트 변경

./h2.bat -webPort 8082 -tcpPort 8083
위와 같이, 변경하려는 포트(webPort)를 변경할 포트(tcpPort)로 바꿔주면 됩니다. h2의 default port가 8082이므로 이를 이용하여 예시를 구성하였습니다.
위처럼 돌리면 tcp로 접근할 수 있는 db 서버가 8083 포트에 생성됩니다.

해결책 3. 기존 DB 닫기(재부팅)

H2 console에서 설정->종료 를 하면 닫을 수 있습니다. 이후 컴퓨터를 재부팅 한 후에, 올바르게 다시 들어가봅시다.

해결책 4. PID kill(포트 점유하는 프로세스 종료)

윈도우 기준으로,
1. netstat -ano 로 포트별 프로세스 id 확인
2. kill /f /pid <process_id>

git bash 기준으로,
1. netstat -ano
2. kill -INT <process_id>
참고
확인중....

profile
알고리즘 풀이 아카이브
post-custom-banner

0개의 댓글