하하하! 조상님을 보고 올뻔 했다!
프로젝트 마감이 오늘 오후 6시까지인데,
기능이 제대로 돌아가지 않는것!!
서버로그를 뒤져보니, GET요청이 안간다고??
알고보니 또 RestTemplate으로 구현한 StoreClient 부분이 요청이 안갔던 것이었따...

이건 현재 서버 상황이다(신세한탄입니다. 안봐주셔도 되어요)
현재 ec2 서버에서 컨테이너 2개를 돌리고 있는 상황이다.
스프링 부트 이미지, nginx proxy manager 총 2개를 돌리고 있는데,
ec2(프리티어 ㅎㅎ)서버에서 컨테이너를 3개이상 돌리는 것도 정말 무리인거 같다
원래는 postgreSQL까지 컨테이너로 돌렸는데 서버가 터져서
swap()이란 방식으로 ec2 HDD 일부를 ram처럼 사용해서
서버 ram 가용량을 늘려서 사용중이다
postgreSQL은 RDS로 빼서 사용중이다.
(뭐 RDS로 빼서 사용하더라도 ec2에는 postgreSQL을 설치해줘야 해서 뭐 그렇게 차이는 없다.)
1. 문제 확인
그런데 RestClient 통신이 안된다는게 조금 이상했다.
로컬 환경에서는 localhost:8080으로
url을 설정해두고 통신이 잘 되었는데,
배포환경에서는 당연히 url을 배포된 서버주소로 하면 될 거라고 생각했다.
그런데 이게 웬일? 다른 기능들은 다 잘되는데 그 부분만 안되는거임
url도 계속 바꾸면서 재배포를 해봤는데 안된다....고
그런데 흠..?
갑자기 문뜩 든 생각
이거 뭔가 우리 서비스 아키텍처를 생각하면 서버 주소로 요청을 보내면 안되겠는데?
라는 생각이 들었다.
2. 문제 해결
아래는 우리 서비스의 아키텍처이다.
아키텍처를 보니, 왜 RestTemplate통신이 불가능한지 알게되었다.
여기서 우리 스프링부트와 nginx proxy manager는 컨테이너로 돌아가고있고,
ec2에서 돌아가고 있다. 우리 서비스는 모놀리식 아키텍처로 구성되어 있는데,
생각해보면, RestTemplate은 도메인끼리 소통을 하는 구조이다.
(MSA도 아닌데 RestTemplate을 왜 사용했냐고 하신다면, 나중에 MSA로의 전환을 고려하기 위해서,
최대한 도메인간의 연관관계를 끊어내기 위해서 RestTemplate을 사용했다)
위의 아키텍처를 참고하면,
현재 restTemplate통신은 도커 컨테이너 안의 스프링부트안에서 이루어지고 있다는 것이다.
그러니까 https://order-service.store (배포된 주소)로 통신하면 안된다는 것!
그렇다면 도메인끼리는 스프링 컨테이너 네트워크로 통신하면 되겟져?(http 통신)
배포된 주소에 접근 하는 것은, 클라이언트와 통신하기 위해 있는 것이고,
클라이언트에서 배포된 주소로 접근하면, 리버스 프록시로 스프링 부트에 포워딩을 해준다.
컨테이너 내에서 도메인끼리 통신을 해주기 위해서
http://{도커 스프링 컨테이너 네트워크 주소}:8080
도커 네트워크의 스프링부트 네트워크를 url로 설정해주고 배포를 진행하니,,,
정말 자동화배포도 안해두어서,
수작업으로 재배포작업을 얼마나했는지 모르겠다.
정말 기도하는 메타로 빌었다.
조상님 기도 메타가 통했는지 성공적으로 RestTemplate통신이 성공해서 기능이 제대로 돌아갔다!! 🎉
프로젝트 마감 6시 전에 제출할 수 있었고, 프로젝트도 성공적으로 마무리했다!
정말 수명 줄어들 뻔 했다~~~

'DevOps > AWS' 카테고리의 다른 글
ec2/로컬 에서 RDS에 접근 하기 (aws ec2, postgreSQL, pgadmin, 삽질에 중독된 개발자) (1) | 2025.02.21 |
---|---|
AWS 환경에서 docker container 로 배포하기!! (http 배포) (1) | 2025.02.19 |