작성
·
1.5K
답변 1
0
안녕하세요! 😊
혹시 "서버에 접속"이라는 말씀이 ssh와 같은 도구를 통해 AWS에서 EC2와 같은 "물리서버에 접속" 을 의미하실까요, 아니면
EC2에 배포되어 있는 "애플리케이션 서버에 접속"을 의미하실까요?!!
각 경우에 대해 설명드리면 이렇습니다.
[1. 물리 서버에 접속이 안되는 경우]
보내주신 Session Manager는 상관이 없습니다!
AWS를 통해 바로 접속하고 싶으신 경우, EC2 인스턴스 연결을 사용해주시거나
강의에서 보여드렸던 것처럼, ssh
명령어를 사용해 서버에 접속하셔야 합니다.
[1-2. 그럼에도 불구하고 물리 서버에 접속이 안되는 경우]
EC2 대시보드에서 모니터링을 확인해보시고, 혹시 컴퓨터가 지나치게 많이 가동되고 있다면
저희가 빌린 서버는 사양이 낮은 무료 서버이기 때문에 서버가 죽은것 입니다 😭
이 경우는, 서버를 재시작 해주시면됩니다.
"AWS EC2 재부팅"으로 검색하시면 됩니다!
https://velog.io/@sunblock99/AWS-%EC%9E%AC%EB%B6%80%ED%8C%85-%EB%B0%A9%EB%B2%95
서버를 재시작 하는 경우 "애플리케이션 서버"는 종료되어 있으니, 꼭 켜주셔야 합니다! (MySQL 역시 종료되어 있을 수 있습니다)
[2. 애플리케이션 서버에 접속이 안되는 경우]
몇 가지 원인이 있을 수 있습니다.
이 경우도, 보내주신 Session Manager는 무관합니다!!
[2-1. 애플리케이션 서버가 켜져 있지 않는 경우]
애플리케이션 서버가 종료되어 있을 수 있습니다. 따라서 이 경우는 애플리케이션 서버를 켜주셔야 합니다.
단, 주의하실 점이 하나 있는데요! 서버를 단순히 "시작"했다고 서버가 켜진게 아닙니다.
서버가 시작되고 부팅되는 과정에서, MySQL과의 연결이 안되거나, 코드에 오류가 있는 등의 이유로 인해 서버가 에를 뱉고 자동 종료될 수 있습니다.
따라서, 애플리케이션 서버가 켜져 있는지 꼭 확인해주셔야 합니다.
예를 들어, 아래와 같이 아주 간단한 API를 만들어 배포하고 curl
명령어를 활용해 서버가 켜져 있는지 확인할 수 있습니다.
@RestController
public class HealthCheckController {
@GetMapping("/health-check")
public String validate() {
return "OK"
}
}
# 서버가 켜진 후, EC2 서버에 접속해서 (ssh 혹은 AWS 콘솔 사용)
curl localhost:8080/health-check
또는 ps aux | grep java
와 같이 프로세스 목록을 확인해 서버 프로세스가 켜져 있는지 확인할 수도 있습니다.
[2-2. 애플리케이션 서버가 켜져 있지만, 방화벽에 막혀 있는 경우]
이 경우는 security group을 확인해주셔야 합니다.
예를 들어 현재 설정해주신 security group에는 8080 포트가 열려 있긴 하지만, 모든 IP에 대해 열려 있지 않고 특정 IP에 대해서 열려 있습니다.
이런 경우, 서버에 접속하는 클라이언트의 IP가 변경되거나, 공유기를 껐다 켜서 원래 IP가 변경되거나 하는 등의 이유로 현재 접속하시려는 IP와 허가된 IP가 달라질 수 있습니다.
이럴 때도 위에서 사용한 아주 간단한 API를 만들어 외부에서 접속해보는 것으로 확인할 수 있습니다.
[2-3. 애플리케이션 서버도 켜져 있고, 방화벽도 열려 있는 경우]
이 경우는 1-2와 같이 우리가 빌린 EC2 컴퓨터가 지나친 과부하에 빠진 경우에 서버가 동작하지 않을 수 있습니다. 다만,
해결책은 1-2와 비슷합니다. (다만 강의에서 다루었던 swap 설정이 잘 이루어졌다면 저희가 다루고 있는 서버 규모로 이 문제가 발생할 확률은 낮습니다.)
또한, 실제로는 애플리케이션 서버가 동작하고 있고 방화벽도 정상적인데 클라이언트 코드 문제나 CORS와 같은 문제로 동작하지 않는 것처럼 보일 수도 있습니다.
이 경우는, 브라우저의 개발자 도구, Network 탭 및 console 탭을 활용해 정확히 어떤 이유로 동작하지 않는 것인지 확인해보아야 합니다.
마지막으로, 설명드린 것처럼 서버에 접속이 되지 않는 이유는 정말 정말 다양합니다! 😭
그리고 당연하게도, 많고 많은 이유 중 정확한 이유를 찾는 건 무척 어렵죠 😭😭 (저도 처음 AWS를 썼을 때 문제 해결에 몇날 며칠씩 걸리곤 했던 기억이 나네요 ㅠㅠㅠ)
따라서 지속적으로 서버에 접속되지 않으실 경우, 어떤 방법들로 서버에 접근을 시도하셨고, 그 과정에서 어떤 에러가 나왔는지 함께 알려주신다면 조금 더 정확한 진단과 해결책을 말씀드릴 수 있을 것 같습니다.
감사합니다!! 🙇🙇