ECS에서 스크립트 실행하기

2024년 1월 9일 화요일

Today I Learned

날짜

2024년 1월 9일 화요일

내용

이거하랴 저거하랴 정신 없는 하루였다. 내일 별일 없겠지..

Weekly Review Report email 보완

어제 전송되었어야 할 메일들이 전송되지 않았다. 해당 Task가 등록된 service의 로그를 확인해보았는데, 두가지 오류를 발견했다

  1. invalid HTTP request received 라는 오류가 있었는데, 내가 새로운 Task 예약 규칙을 생성하기 전부터 찍혀오던 오류였다. 따라서 내가 추가한 것과는 무관한 로그라고 판단했다.
  2. ResponseValidationError : UTC 시간 기준으로 어제 오전 10시에 한번 찍혀있는 로그였다. 이전에 비슷한 오류가 발생하지 않아 내 Task가 작동하지 않은 원인일 거라고 추정했지만 석연치 않은 부분도 있었다. 내 Task는 매주 월요일 오전 0시 부터 1시간 간격으로 24번 실행되야 한다. 따라서 코드가 잘못되어 에러가 발생했으면 오전 1시 이전에 발생했어야 맞다.

혹시 설정이 잘못되었나 싶어 이것저것 살펴보다가 내가 만든 예약 Task의 Task definition이 개정된 버전이 지정되있지 않아 잘못된 Task definition이 걸려있었다. 수정하려고 설정에 들어갔을 때는 제대로 설정되어 있는데.. 버그인가 싶어 제대로 고쳐주고 내일 다시 실행되도록 했다. 내일은 제발 되었으면..

참고로 ECS에서 Task를 정의할 떄

  • 태스크의 각 컨테이너에 사용할 Docker 이미지
  • 각 태스크 또는 태스크 내 각 컨테이너에서 사용할 CPU 및 메모리의 양
  • 사용할 시작 유형으로서 해당 태스크가 호스팅되는 인프라 결정
  • 태스크의 컨테이너에 사용할 Docker 네트워킹 모드
  • 태스크에 사용할 로깅 구성
  • 컨테이너가 종료 또는 실패하더라도 태스크를 계속 실행할지 여부
  • 컨테이너 시작 시 컨테이너가 실행할 명령
  • 태스크의 컨테이너에서 사용할 데이터 볼륨
  • 태스크에서 사용해야 하는 IAM 역할

과 같은 것들을 parameter로 설정할 수 있다. 아주 쉽게 말하면, 클러스터 내에서 무엇을 어떻게 할지에 대해 정의해 놓는 것.

Localization 테스트 서버에 적용하기

로컬에선 command 를 통해 현재 존재하는 shop들에게 새로운 언어버전을 추가해주었다. 이 커맨드를 테스트 서버에서도 실행하면 되겠다고 생각했다. 이전 프로젝트 때 항상 ec2에 서버를 만들었는데, 직접 git bash나 powershell로 인스턴스에 들어가 git clone 해주었었다. 이번엔 어떻게 해야할까 고민하다가, weekly review report email때 실컷 살펴본 Task를 쓰면 되겠다고 생각했다. 결국 어떤 동작이 일어나도록 하는 것이 task고 cronjob의 스크립트를 실행하도록 정의했었으니, 이번엔 커맨드 스크립트를 실행하도록 만들려고 했다.

현재 나 AWS 계정에는 이것저것 안전장치가 걸려있다보니 권한을 풀 일이 많았다. 불필요한 과정은 건너뛰자면, 내 로컬에 있는 테스트 서버용 docker-compose 파일을 실행하면 됐다. 내 컴퓨터에 생성된 테스트 서버 컨테이너에 접속해서 스크립트를 실행해주니 테스트 서버에 바로 적용되어서 확인해 볼 수 있었다. 이리 쉬운걸 혼자 뭐했나 싶다.

적용 결과를 확인해보는 과정에서 빈틈을 발견했다. localization을 적용하면 해당 페이지 내의 모든 언어가 바뀌어야 하는데 일부는 적용되지 않았다.

저 Email Address처럼 텍스트를 입력하는 박스 내의 안내 문구를 placeholder라 하는데, 해당 코드를 찾아보니 다른 부분과는 다르게 .텍스트가 고정되어 있었다. 언어 설정에서는 저 부분을 위한 단어들도 분명 존재하는 것을 확인했기 때문에 바꿔주었다.

미검증리뷰의 데이터 처리

구매 이력이 없는 사람이 작성한 리뷰는 미검증리뷰다. 기존에는, 회원정보가 존재하는 유저가 미검증리뷰를 작성하면, 이름과 성을 조회하여 적용했다. 리뷰를 작성할 때 성과 이름을 입력해야 하지만 입력한 이메일로 고객정보가 존재한다면 DB에 있는 이름으로 바꿔서 저장했다. 고객정보가 존재하더라도 성과 이름을 작성한대로 두도록 변경했다.

코드 자체는 전혀 어려울 게 없었는데, 관련된 부분이 어디인지를 찾는게 힘들었다. Localization Task 때 부터 겪고 있는 어려움인데, 문제가 되는 코드가 정확히 존재하는 곳을 확인하는데 시간이 오래걸렸다.

여러 방법들을 사용하고 있는데, HTML은 한글로 된 텍스트로 찾는다거나 백엔드의 Swagger UI로 관련된 엔드포인트 URL을 알아내 검색한다거나, 직접 호출해보고 크롬 개발자도구에서 요청 URL을 확인하고 있다. 그래도 많이 익혔다고 생각했는데, 위젯 관련된 부분은 여전히 어렵다.

회고

올해도 몸이 고생좀 하겠다.