Spring Boot 서버가 안 켜질 때

Jaychy·2020년 11월 17일
0

프로젝트 PICK

목록 보기
1/8
post-thumbnail

본 글은 글쓴이의 개인적인 생각이 담겨있을 수 있습니다.

😡 서버가 안 켜질 때?!

PICK(온라인 출석부 프로젝트)를 진행하던 중 서버가 켜지지 않는 현상이 발생했다.
당연히 서버가 켜지지 않으니 로컬에서도 테스트할 수 없었고,
AWS EC2에 배포해놓은 서버에서도 서버가 켜지질 않으니 무슨 오류인지 알 수가 없었다.

정확하게는 서버가 안 켜지는 것이 아니라 서버를 킨 후 약 10초 뒤 꺼지는 현상이었다.
해결한 지금 상황에서는 오히려 아예 켜지지 않았더라면 더 쉽게 찾았을 수도 있다는 생각이 든다.


😢 해결하는 과정

여기서는 내가 이 오류를 어떻게 해결해 나갔는지에 대해서 말하고자 한다.
나중에 같은 오류가 발생했을 때 찾아보기 위함이기도 하고,
내가 해결해 나가는 과정이 도움이 될 수도 있다고 생각하기 때문이다.

일단 해결해 나가는 과정은 다음과 같았다.

😭 내가 뭘 잘못한 거지..
🤨 과거 되새기기
😵 구글링... 또 구글링...

그럼 해결해 나가는 과정을 하나하나 알아보자.


😭 내가 뭘 잘못한 거지.. 😭

일단 오류가 처음 발생했을 땐 현실 부정을 시작했다.
내 잘못이 아니라 다른 문제일 수도 있다는 생각에 이것저것 문제일 법한 것들을 찾아봤지만
당연히 내 잘못이기에 외부 요소를 찾을 수 없었다.

지금에서야 깨달았지만 에러가 났을 때 현실 부정을 하고
다른 문제를 찾기 위해 노력하는 것은 즉, 시간 낭비라는 것을 깨달았다.
내가 짠 코드에게서 내가 아니면 누구의 문제겠습니까?


🤨 과거 되새기기 🤨

현실 부정의 시간이 끝나고 현실로 돌아왔을 때,
서버가 잘 돌아가던 때와 현재의 코드를 비교하게 되었다.

당연히 코드를 훑어보았지만 코드 상의 문제는 보이지 않았고,
과거에 비해서 변경된 나의 코드들을 의심해보았다.
의심 대상인 코드는 다음과 같았다.

  • (Pick)Application.java
  • build.gradle
  • application.yml

가장 많은 의심이 갔던 코드는 Application.java였다.
Spring Boot 서버를 키는 주요 원인이기 때문이다.

Spring Boot를 키는 녀석이 이 녀석이니 당연히 이 녀석한테 문제가 있을 것이라고 생각했다.
하지만 결과적으로는 이녀석이 문제는 아니었다.

다음으로 build.gradleapplication.yml이 주요 후보로 올라와있었는데,
build.gradle은 JaCoCo 라이브러리를 이용하기 위해서 의존성을 추가한 상태였고
application.yml은 test 서버와 real 서버를 나누기 위해서
{profile}-application.yml 형태로 나눈 상태였기 때문이다.

이 둘은 최근에 가장 큰 변경이 있었던 설정 파일이기 때문에 의심을 하며 쳐다봤지만
그래도 문제는 순순히 나와주지 않았다.

이 때는 생각을 해보지 못했는데,
아무리 예전이라도 서버가 켜지던 시절이 있었고
그렇다면 그 때의 커밋으로 돌아가서 비교해봤으면 쉬웠을 것이라는 생각이 든다.


😵 구글링... 또 구글링... 😵

사실 과거를 되새기기 전에 구글링을 많이 진행했다.
"Spring Boot 서버 안 켜짐"
"Spring Boot 서버가 안 켜져요"
"Spring Boot 서버가 갑자기 끊김"
.
.
.
많은 구글링을 통해 오류의 원인을 찾으려고 했지만 그렇게 쉽게 나오지 않았다.
그런데 과거 되새기기보다 뒤에 있는 이유는 되새기기 전에 구글링 했던 시간보다
후에 구글링을 한 시간이 훠어어어어어어얼~씬 많기 때문이다.

이렇게 위와 같이 검색을 통해 찾다보니 한글로는 도저히 관련 자료를 찾을 수 없어
영어로 자료를 찾기 시작했다.
"Spring Boot Server Down"
"Spring Boot Server Stop"
"Spring Boot Server Close"
그러면서 찾아낸 문제들이 다음과 같았다.

  • Application.run()메소드 뒤에 close() 메소드가 붙어있지 않나요?
  • Java Version 고쳐보세요 ( <- 얘는 어느 문제가 나와도 나온다. )
  • @SpringBootApplication이 빠져있지 않나요?

이 외에도 수많은 해결 방법들이 있었지만 가장 나를 설레게 했던 해결 방법들은 저 방법들이었다.
물론 저 세 방법 모두 해결 방법이 아니였고, 나는 새로운 방법을 찾게 된다.

오류를 고치기 위해 구글링을 할 때 영어에 대한 기초 지식은 필수라고 생각한다.
물론 영어를 수준급 해야 하는 것은 아니지만
번역을 하지 않고도 읽히는 정도는 되어야 한다고 생각한다.
물론 난 영어를 잘 못한다.


😁 해결!!

일단 결론만 말하자면 application.yml 파일의 다음과 같은 코드가 문제였다.

spring:
  main:
    web-application-type: none

위 코드는 웹 서버를 사용하지 않겠다라는 설정문인데,
application.yml의 기본 설정을 긁어오다가 같이 딸려온 녀석인 것 같다.
결과를 보니 너무 허무하지만 이를 해결하기 위해 노력했던 것들을 생각하면 값지다고 생각한다.

아무튼 결론은 '뜻도 모르고 사용하는 코드를 없게 하자' 이다.

profile
아름다운 코드를 꿈꾸는 백엔드 주니어 개발자입니다.

0개의 댓글