안녕하세요!
마지막 채팅 회고로 돌아왔습니다.
지금까지 채팅 기능을 구현할 기술 선택 및 관련 트러블 슈팅과 Kafka의 도입, Kafka Listener 설정 이슈까지 차례대로 알아봤습니다.
이번 회고에서는 최종적으로 AWS EC2 + Docker 를 통해 배포 서버에 Kafka를 적용시켜보도록 하겠습니다.
그럼 시작하겠습니다!
지난 채팅 회고 - 3 에서 Kafka 자체를 설치하고, 별도로 실행한 후 테스트 한 결과, 배포 후 일정 시간이 지나면 자동으로 꺼지는 이슈가 발생했습니다.
따라서 Docker를 통해 배포를 하는 방법으로 시도하려고 했는데,,
제 머리속에는 아래와 같은 걱정?이 있었습니다.
구글링 결과 어디에서도 명쾌한 해답을 얻을 수 없었습니다,,오열🥲
과거에 이해가 되지 않는 코드가 있어 직접 메일을 보내 답변을 받아 해결한 경험이 있습니다.
마지막 심정으로 이번 채팅 기능관련 많은 도움을 받은 개발자분에게 직접 메일을 보내 보았습니다.
다행히도 바로 답장을 받을 수 있었습니다.
답변받은 방법을 토대로 기존의 배포한 SpringBoot는 따로 건들지 않고, Docker-Compose를 통해 Kafka 구동 후, 같은 서버 IP를 공유하도록 설정해주었습니다.
(관련 방법은 로컬에서 Docker-Compose를 통해 Kafka를 구동하는 방법과 동일합니다)
모든 설정을 완료하고, 두근두근 마음으로
$ docker-compose up -d
를 실행하였는데,,,
Zookeeper 컨테이너는 정상적으로 작동하였지만, Kafka만 실행되지 않았습니다.
도.대.체 무엇이 문제일까 싶어 삭제하고, 포트 설정도 다시 하고, 재설치후 동작해보았지만 결과는 동일..
로그를 확인해보니 Kafka가 실행 후 에러로 인해 바로 꺼지는 상황이 반복됐습니다.
아 이건 EC2 서버에 뭔가 문제가 있다고 판단했습니다.
폭풍 구글링 결과 EC2에 할당된 힙 메모리 이슈였습니다.
Kafka 패키지의 힙 메모리는 브로커가 1G, Zookeeper가 512MB로 기본 설정되어 있습니다.
하지만 AWS EC2 프리티어의 경우 메모리가 1G로 Kafka를 실행하면 메모리가 부족해 에러를 반환하며 종료되는 것이었습니다.
힙 메모리 이슈를 해결하기 위해 아래와 같이 환경 변수 설정을 통해 사이즈를 조절해주어야 합니다.
$ export KAFKA_HEAP_OPTS="-Xmx400m -Xms400m"
추가로 터미널 종료후에도 초기화 되지 않도록
$ vi ~/.bashrc
수행한 뒤, 가장 아래에 export KAFKA_HEAP_OPTS="-Xmx400m -Xms400m"
를 추가한 뒤 저장해줍니다.
위처럼 잘 적용된것을 알 수 있습니다.
모든 설정을 마친 후, Kafka를 다시 실행한 결과
정상적으로 Zookeeper와 Kafka 모두 실행된 것을 볼 수 있습니다!👏🏻👏🏻👏🏻
지금까지 채팅 회고를 총 4단계에 걸쳐 알아보았습니다.
긴 회고 양만큼 다양한 에러들을 다루었는데요, 역시 어렵더라도 문제를 해결할 때마다 조금씩 성장하는 것 같습니다.
무엇보다 조금이라도 기록하고, 정리하는 습관이 큰 도움이 되는 것 같습니다!
저의 회고가 또 다른 누군가에게 작은 도움이 되길 바라며 최종 채팅 실행 화면과 함께 마무리하도록 하겠습니다.
읽어주셔서 감사합니다!
References