전체 글 85

도메인구동설계입문을 읽고

원제: ドメイン駆動設計入門 저자: 나루세 마사노부 읽게 된 경위 내가 속한 팀에서 프로토타입으로만 구현되었던 알고리즘을 DDD(Domain Driven Design)로 갈아엎었기 때문에 알아야했다. Domain Driven Design DDD란 도메인 (영역) 에 대한 지식에 초점을 맞춘 설계법이다. 여기서 도메인은 이제부터 프로그래밍 해야하는 시스템에서 가장 중심이 되는 개념을 가리킨다. 예를 들어, 회계 시스템에서는 금전, 회계 장부 등이 그럴 것이고 물류 시스템에서는 제품, 창고, 운송 수단 등이 그럴 것이다. 난 자연언어처리를 다루고 있으니 text vectorizer 를 예로 들어보겠다. 먼저 벡터로 만들기 위한 문장이 있을 것이고 이를 형태소분석 해서 얻은 형태소, 토큰, 문장에서 얻은 토큰 ..

Lambda에서 특정 네트워크 환경에서만 리퀘스트를 보낼 수 있는 API를 사용하기

하고 싶은 것 VPN으로 회사 네트워크에 접속해 서버1에 접속하고 서버2에 접속해야 리퀘스트에 성공하는 API-1를 Lambda함수에서 사용하고 싶다. 배경 API는 ECS로 관리되고 있다. 사용하고 싶은 API-1은 API-0을 통해서만 리퀘스트를 보낼 수 있다. API-0은 AWS의 LoadBalancer와 VPC를 이용해 구축되어있다. API-1도 AWS의 LoadBalancer와 VPC를 이용해 구축되어있다. API-1의 LoadBalancer는 API-0의 LoadBalancer에 설정되어있는 SecurityGroups를 통해서만 접속할 수 있다. 따라서 두 LoadBalancer의 TargetGroup의 VPC는 동일하다. Lambda함수은 API-0을 통해서 API-1을 사용하고 싶지 않다...

AWS 노트 2020.11.19

base브런치와 conflict가 일어날 때

상황: master브런치가 아니라 base브런치를 만들고 거기서 작업 브런치를 만들었다. master에 병합할 것은 아니라 base브런치를 병합 목적지?로 하고 PR을 냈는데 작업 브런치에서 삭제한 파일이 conflict를 일으킨다며 "Can’t automatically merge"메시지가 나왔다. 해결: 이미 없어진 파일에 뭘 더 하라는 거지 싶지만 아래처럼 하면 해결할 수 있다. 1. 일단 base브런치를 pull 한다. $ git pull origin base_branch_name 2. 그러면 에디터(나 같은 경우에는 PyCharm)에 ResolveConfilcts메뉴가 활성화되니 눌러서 merge를 진행한다. 여기서 병합 했으니까 다시 파일을 삭제하면 병합했다는 정보가 commit&push되지 않..

command line 노트 2020.11.19

SICP Building Abstractions with Procedures.The Elements of Programming (1.1)

Foreword Lisp 인공지능 소프트웨어를 만들기 위해 사용하는 프로그래밍 언어 리스트 형태로 된 데이터를 처리하도록 설계되었는데 프로그램과 데이터가 같은 형태이기 때문에 자료구조가 프로그램처럼 시행될 수 있으며, 프로그램 또한 리스트로 연산되고 기본자료구조가 linked list 인 것을 이용해 일반적인 연산을 수행하기도 함 linked list: head 가 존재하며 단일방향, 쌍방향, 순환형으로 노드가 이어진 리스트 linked list 는 다음 요소의 메모리 주소만을 갖고 있기 때문에 특정 데이터를 찾기 위한 순차탐삭에서는 처음부터 살펴봐야 하니 느림 하지만 동적 할당을 하기 때문에 크기를 미리 지정하지 않아도 됨 동적 할당: 실행 시간 동안 사용할 메모리 공간을 할당하는 것. 사용이 끝나면 ..

이미 push 한 commit 을 되돌리기

사고 치고(branch 가 아니라 master 에 commit & push 해버리는 사고) 되돌렸다는 연락이 다른 멤버들..(상사와 선배들) 에게 가긴 하지만 git 의 commit 상황 자체는 사고치기 전으로 되돌릴 수 있는 방법.. 일단 다른 사람들이 pull 하기 전에 최대한 빨리 되돌려야 한다..!! revert $ git revert {사고친 commit checksum} $ git push origin reset $ git reset {사고치기 직전 commit checksum} push $ git push origin -f 사고를 치지 않도록 조심하자...

command line 노트 2020.07.23

Amazon Athena 를 사용해 SageMaker 노트북에서 SQL 쿼리 실행하기 (Amazon Web Services 블로그 번역)

원글: Amazon Athena を使用した SageMaker ノートブックからの SQL クエリの実行方法 인터넷이 등장하고 데이터가 방대해지고 고속화되고 다양화되고 있다. 많은 기업은 이러한 '빅 테이터' 관리라는 문제를 안고 있으며 '빅 데이터'를 해석해서 최적의 결과를 도출하는데 어려움을 겪고 있다. 데이터 수집, 보존, 공유, 분석, 가시화를 어렵게 하는 원인으로 기업에서 데이터를 저장하는 방식, 끊기지 않는 여러 포맷의 데이터 유입, 기술 환경의 끝 없는 변화 등을 들 수 있다. 그렇다면 데이터 스토어에 접속하는 견고한 데이터 파이프라인을 구축해 데이터에서 인사이트를 취득할 수 있는 플랫폼을 데이터 사이언티스트나 엔지니어에게 제공하려면 어떻게 해야 할까. 데이터 스토어 일원화에 투자하는 기업이 늘고 ..

AWS 노트 2020.07.17

Docker 컨테이너를 AWS ECR 에 작성한 이미지로 build 하기 (SageMaker training job)

디렉토리 구조 새로운 컨테이터를 빌드할 때에는 base 가 필요하다. (굳이 base 를 나눌 필요는 없지만 나누는 편이 깔끔한 것 같다) /your_repository ├── lib │ ├── build_and_push.sh │ ├── deploy.sh │ └── create_training_job.py └── containers ├── {image} │ └── sub_directory │ │ ├── train │ │ ├── wsgi.py │ │ ├── nginx.conf │ │ └── some_processer.py │ └── Dockerfile └── {image}-base └── Dockerfile build_and_push.sh 수정 전 원래 코드: awslabs/amazon-sagemaker-..

AWS 노트 2020.07.15

Docker이미지를 push할 때 Error response from daemon: No such image: {image}:{tag} 에러가 나면서 실패할 때

제목에 적은 에러 문구 위에 아래와 같은 에러가 나 있을 것이다. unable to prepare context: unable to evaluate symlinks in Dockerfile path: Dockerfile 에 FROM {account_id}.dkr.ecr.{region}.amazonaws.com/{base_image}라고 적었을텐데(본인이 적지 않았다면 적혀 있을텐데) 이 {base_image}부터 build & push 하지 않으면 push 하고 싶은 {image}도 push 가 안된다. {base_image}도 없다고 나온다면 AWS ECR 에 새롭게 작성한다. $ aws ecr create-repository --repository-name {base_image} {base_image..

AWS 노트 2020.07.13

An image does not exist locally with the tag: {account_id}.dkr.ecr.{region}.amazonaws.com/{image} 에러가 날 때

먼저 AWS Elastic Container Registry (이하 ECR) 에 {image}라는 repository 가 있는지 확인한다. $ aws ecr describe-images --repository-name {image} 없다면 만든다. $ aws ecr create-repository --repository-name {image} local 에 {image} 가 없어서 에러가 나는 것이므로 local 에 {image} 를 pull 한다. $ docker pull {account_id}.dkr.ecr.{region}.amazonaws.com/{image}:{tag} 보통 태그는 latest를 붙여서 가져온다.

AWS 노트 2020.07.13

AWS Lambda 와 AWS API Gateway 로 Slack에 csv 파일이 upload 되면 알아서 데이터 체크해서 AWS S3에 업로드 하는 Bot 만들기

목적 Google Spreadsheets 에서 수동으로 관리하는 데이터를 AWS Redshift의 테이블로 만들어 다른 데이터를 분석하는데 사용할 수 있도록 하자. 기각: Google Spreadsheets에서 바로 파일을 업로드 하면 안될까? 로컬 혹은 다른 서비스에서 Spreadsheets 속 데이터를 바로 읽어오려면 인증 ( Google CloudPlatform ) 을 해야 한다. 현재 올라가 있는 데이터는 회사 메일 주소를 갖고 있지 않는 사람 혹은 API에 대해 공유를 거부해 놓은 상태이니 service account 를 사용하려면 Google suits 에서 admin 이 그 권한을 부여해 줄 필요가 있다. 서비스 계정 외에는 본인 인증하는 수 밖에 없기 때문에 ( API key, OAuth ..

AWS 노트 2020.06.28