본문 바로가기

Coding343

Docker Crontab 관련 이슈사항 정리 데이터를 동기화시키기 위해 기존 컨테이너가 아닌 추가적인 컨테이너를 띄워야하는 상황이 발생했다. 따라서 크론 관련 이미지를 알아보던 중 그냥 익숙한 우분투에 크론잡을 설치하여 사용하기로 결정했다. 진행하던 중 생각치도 못한 이슈들이 몇가지 발생하여 이렇게 기록한다. 아마 많은 사람들이 동일하게 겪는 증상이라고 생각하며 본 포스팅이 조금이나마 도움이 됐으면 한다. 1. 크론잡이 실행되는 쉘의 환경변수와 도커로 접속했을 때 쉘의 환경변수가 다르다. 따라서 만약 특정 프로그램을 실행시킬 때 환경변수가 필요한 상황이라면, crontab -e로 잡을 스케쥴링할 때 최상단에 환경변수도 같이 명시해줘야한다. ex) PATH=1 2. Dockerfile에 RUN service cron start와 같이 크론 서비스를 .. 2019. 5. 22.
ECS Fargate Cronjob형태로 작업 실행하는 방법 0. ECR 푸시Fargate로 실행시킬 도커 이미지를 빌드하고 ECR에 푸시해놓은 상태로 진행한다고 가정한다. ECR 푸시 과정은 이전 포스팅에 담겨있다. 1. 클러스터 생성먼저 ECS콘솔로 들어간 후 클러스터 생성을 누른다. 첫번째가 Fargate용 클러스터이므로 선택하고 다음 단계를 누른다. 나는 기존에 존재하는 VPC를 그대로 사용할 것이므로 VPC 생성은 체크하지 않았다. 원하는 클러스터 이름을 적고 생성을 누른다. 위와 같이 나온다면 성공적으로 클러스터를 생성한 것이다. 2. 작업 정의(Task Definition) 생성다음으로 작업 정의를 생성해줘야 한다. ECS콘솔 - 작업정의로 들어가서 새 작업 정의 버튼을 클릭한다. 왼쪽에 있는 FARGATE 전용 작업 정의를 선택하고 다음 단계로 넘어.. 2019. 5. 2.
Django QuerySet에 대하여 QuerySet is LazyDjango의 QuerySet은 Lazy하다. 한마디로 코드 상에서 쿼리를 구성해도 실제 데이터베이스에 접근하는 것은 평가(Evaluate)될 때 한번 뿐이다. 따라서 이러한 특성을 잘 이용한다면 데이터베이스에 접근하는 횟수를 줄일 수 있고 쿼리를 최적화하여 퍼포먼스를 증가시킬 수 있다. When QuerySets are evaluated내부적으로 QuerySet은 실제로 데이터베이스에 접근하지않고 필터링, 슬라이싱등의 작업을 할 수 있다. 한마디로 평가(Evaluate)되기 전까지 데이터베이스에 접근하지 않는다는 말이다. 아래와 같은 동작을 했을 때 QuerySet이 평가되고 실제 데이터베이스에 접근한다. - Iteration : QuerySet은 Iterable(순회 가능.. 2019. 4. 29.
MongoEngine ReferenceField without ObjectId 기존에 MongoEngine을 사용할 때 Embedded와 Reference방식에 대한 비교를 진행하는 글을 포스팅 했었다. (https://hides.tistory.com/1015) 현재 Reference 방식을 사용하여 도큐먼트를 모델링하던 중 ObjectId를 사용하지않고 원하는 필드를 사용하는 방법에 대해 궁금해졌고 그 방법에 대해 포스팅한다. 먼저 아래와 같이 User, Item 두개의 모델을 정의한다. from mongoengine import * connect('test') class User(Document): user_id = StringField() user_pw = StringField() class Item(Document): user_id = ReferenceField(User, .. 2019. 3. 26.
AWS ECS Fargate에 docker-compose 배포하는 방법 기존에 ECS를 사용하여 docker-compose를 배포하는 방법(https://hides.tistory.com/1016)에 대해 포스팅했었다. 일반적인 ECS는 EC2 인스턴스 위에 컨테이너가 돌아가는 형태이므로 EC2에 대한 디펜던시를 가져갈 수 밖에 없다. 하지만 큰 문제가 없어서 계속 사용을 하던 중 Fargate의 비용 인하 소식을 듣게 되었다. (https://aws.amazon.com/ko/about-aws/whats-new/2019/01/announcing-aws-fargate-price-reduction-by-up-to-50-/) 최대 50% 요금을 인하한다고 하는데, 그래도 EC2를 이용하는 ECS보단 가격이 있는 편이다. EC2 Container Service와 Fargate Con.. 2019. 3. 25.
Python datetime으로 시간 더하고 빼는 방법 보통 파이썬으로 시간 관련 작업을 할 때 datetime 라이브러리를 사용한다. 이번 작업에서는 현재시간에서 특정 시간을 더하고 빼는 과정이 필요했는데 그 과정을 포스팅에 담아본다. from datetime import datetimenow = datetime.now().replace(microsecond=0) 위 라인을 차례대로 인터프리터에 입력해보면 아마 아래와 같은 값이 나올 것이다. (microsecond=0을 준 이유는 해당 옵션을 사용하지 않기 위함임. 제거해도 상관없다.) datetime.datetime(2019, 3, 25, 12, 38, 46) 위 결과를 통해 알 수 있듯이 now()를 사용하면 현재 시간을 datetime객체로 반환해준다. 또한 내부적으로 __str__ 매직메소드가 구현.. 2019. 3. 25.