AWS lambda 로 S3에 주기적으로 데이터 업로드하기

AWS CLI 설치 Lambda에 코드를 배포할 용도로 AWS CLI를 설치해주자 pip3 install awscli --upgrade --user AWS CLI에 사용할 사용자 권한 설정 Lambda에 코드를 배포하기 위한 권한으로 AWSCodeDeployRoleForLambda가 필요하다. 옵션으로 AWSLambdaFullAccess 가 있는데, 향후 람다 외의 서비스에 접근할 경우에 추가해뒀다. “IAM 서비스 -> 사용자 -> 사용자 추가 -> 권한 추가” 순서를 따르면 권한 설정 페이지를 찾을 수 있다. # ~/.aws/credentials [default] aws_access_key_id = KEY_ID aws_secret_access_key = SECRET_KEY # ~/.aws/config [default] region = ap-northeast-2 KEY_ID와 SECRET_KEY 에 사용자 생성 시 제공하는 키 값을 넣어주자. ...

2019년 7월 7일 · 2 분 · 342 단어 · 김무훈

함수형 자바스크립트 01

나는 map, reduce, filter 와 같은 함수를 통해 부분적으로 FP를 작년부터 시작하고 있다. 그러나 여전히 자바스크립트에서 함수를 작성할 때, 중복된 표현식을 담은 익명 함수를 수고스럽게 작성하고 있었다는 사실을 뒤늦게 깨달았다. 하드 코딩된 표현식을 넘기고 받고 하는 흐름은 순수한 함수를 그대로 넘기고 받는 함수형 패러다임의 의도에 분명히 맞지 않는것 같았다. 익명 함수와 중복된 표현식 내장 함수와 화살표 함수만을 사용해서는 함수형 프로그래밍을 잘 사용할 수 없다고 깨달은 뒤, 그 대안으로 적절히 커스텀한 함수를 같이 사용해봤다. ...

2019년 5월 5일 · 4 분 · 810 단어 · 김무훈

BOJ: 2667 단지번호 붙이기

위 글은 2020년 03월 20일에 발행되었습니다. 비슷한 주제의 포스팅을 연속적으로 나열하고자 위해 1년 앞당긴 점 양해 부탁드립니다. 🙇 문제 <그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집들의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. <그림 2>는 <그림 1>을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. ...

2019년 3월 3일 · 2 분 · 315 단어 · 김무훈

프로그래머처럼 생각하는 법

원문 : How to think like a programmer | Zell Liew, 필요할 정도의 직역과 의역이 포함되어 있습니다. “나는 자바스크립트를 잘 모른다. 컴포넌트를 밑바닥부터 만들 수 없다. 내 마음은 빈 자바스크립트 파일을 응시할 때 비워지게 된다. 나는 프로그래머처럼 생각하는 방법을 모르기 때문에 이 일을 할 수 없다고 생각한다.” 비슷하게 느껴지나요? 자바스크립트를 첫 프로그래밍 언어로 접한 많은 사람이 비슷한 문제를 마주하게 됩니다. 심지어 다른 언어를 통해 코딩을 시작한 개발자들도 자바스크립트와 함께 같은 문제를 마주합니다. “프로그래머처럼 사고할 수 없어” 대신에 “자바스크립트로 생각할 수 없어”로 말이죠. ...

2019년 1월 1일 · 8 분 · 1493 단어 · 김무훈

2018년의 마지막 날

어떤 일을 했는가 컴퓨터를 전공하다 아직 학부 1학년이라 전공보단 교양 수업의 비중이 높았다. 그래도 전공만큼이나 깊게 알려주는 수업을 골라 나름 의미있게 보냈던 것 같다. 기초 전산학 이론이나 인공지능 이론 강의가 가장 인상 깊었다. 윗학년 전공으로 미리 자료구조를 배웠다. 파이썬을 활용해 레퍼런스에 의한 참조 방식으로 다뤘는데, 저수준적으로 배우지 못한 점이 아쉬었다. 블로그 시작 frontend.moe란 시각적인 부분을 담당하는 ‘Front-end(앞단)’ 와 사랑이나 호감을 표현하는 일본어 ‘もえ(모에)’ 를 조합해서 만들었습니다. **자주 찾고 싶은(호감), 기술 블로그(프론트 엔드)**를 지향하고자 이런 이름을 붙였습니다. ...

2018년 12월 12일 · 4 분 · 674 단어 · 김무훈

효율적인 트리 순열 구현

참고한 문서 Iterative Preorder Traversal - GeeksforGeeks Inorder Tree Traversal without Recursion - GeeksforGeeks Inorder Tree Traversal without recursion and without stack! - GeeksforGeeks Iterative Postorder Traversal | Set 2 (Using One Stack) - GeeksforGeeks 전위탐색 루트를 방문한다. 왼쪽 서브트리를 방문한다. 오른쪽 서브트리를 방문한다. 재귀적인 함수 호출을 막을려면 효율적인 순회 처리가 필요하다. 순회되는 객체를 즉시 사용하는 방법으로 스택을 사용했습니다. def preorder(self): stack = [self.root] # 1 while len(stack) > 0: # 2 item = stack.pop() # 2-1 print(item.value, end=' ') if item.right: # 2-2 stack.append(item.right) if item.left: # 2-2 stack.append(item.left) 루트 객체를 스택에 할당한다. 스택 요소가 존재하는 동안 아래 절차를 반복한다. 스택의 한 요소를 빼내고 출력한다. 빼낸 요소가 가리키는 오른쪽 노드를 스택에 집어넣는다. 빼낸 요소가 가리키는 왼쪽 노드를 스택에 집어넣는다. 재귀 구현체와 달리1 우선적으로 넣는 노드의 left, right 순서가 반대인데, 마지막으로 넣은 요소가 먼저 출력되는 스택의 특성 때문이다. ...

2018년 10월 10일 · 6 분 · 1130 단어 · 김무훈

간단한 파이콘 한국 2018 후기

세션을 미리 골라 보자 개인적으로 10분 남짓한 자투리 시간을 활용하여 다음 세션을 정하기 난감해하는 편인데, 이번에는 미리 시간을 들여 기회 비용이 크다고 생각되는 세션1을 우선적으로 컨퍼런스 일정을 잡아놓았다. 현장에서 듣고 싶은 세션을 별 무리 없이 골라낼 수 있어서 편리했다. 세워둔 계획대로만 하자 하지만 예외가 딱 하나 있었는데, 라이트닝 토크 자료를 만드느라 녹화가 금지된 오전 세션2을 듣지 못하였다. 이런 손실을 미쳐 감안하지 못해서 아쉬웠다. 스폰서 부스 이벤트 아쉽게 스폰서 부스에 참여할 시간을 생각하지 못했다. 다음번에는 이런 변수도 생각해봐야겠다. ...

2018년 8월 8일 · 1 분 · 104 단어 · 김무훈

2018년 7월 기술 아티클 정리

소프트웨어를 모르는 대한민국 기업의 위기 그럴싸한 그림을 그리면 코드가 변환되는 방식과 코드를 제대로 짜려는 경쟁구도에 대한 2000년대 초반의 이야기가 흥미로웠던 글. 아직 코딩을 잘 모르는 학교 동기들에게 보여주고 싶었다. How to create a serverless service in 15 minutes AWS 람다 설정이 까다로워 heroku로 대신 배포했었던 일이 있었는데1, 나중에라도 다시 AWS Lamda를 도전할 때 참고해볼 만한 글인 것 같다. 공유가 쉬운 컬러 시스템 만들기 색상 팔레트를 만들고 디자인과 개발 도구간 같은 컬러 네이밍을 사용하는 방법을 알려주는 글. 본문에 참조된 플렛 디자인을 다룬 글2도 꽤 읽어볼만 했다. ...

2018년 7월 7일 · 3 분 · 456 단어 · 김무훈

if 문 없는 파이썬 코드 작성하기

우연히 Medium에서 *Coding Tip: Try to Code Without If-statements - samerbina*을 접하게 되면서 교내 학식 크롤러 ‘jejunuMeals‘를 if문 없이 새로 작성해봤습니다. 딕셔너리를 사용하여 줄여보자 if문으로 제어하는 weekday , atom 을 딕셔너리 구조로 대체한다면 코드를 상당히 절약할 수 있을 것 같았다. for index, atom in enumerate(data): if index == 1 or index == 5 or index == 9 or index == 13 or index == 17: weekday = weekday + 1 yaml[weekday]['점심'][atom['정식'] = atom[2] yaml[weekday]['저녁'][atom['정식']] = atom[3] elif index == 2 or index == 6 or index == 10 or index == 14 or index == 18: yaml[weekday]['점심'][atom['특식']] = atom[1] yaml[weekday]['저녁'][atom['특식']] = atom[2] elif index == 3 or index == 7 or index == 11 or index == 15 or index == 19: yaml[weekday]['점심'][atom['양식']] = atom[1] yaml[weekday]['저녁'][atom['양식']] = atom[2] elif index == 4 or index == 8 or index == 12 or index == 16 or index == 20: yaml[weekday]['점심'][atom['중식']] = atom[1] yaml[weekday]['저녁'][atom['중식']] = atom[2] return toYaml 여러 키에 같은 값을 대입하기 flags = {(1, 5, 9, 13): 2} # 처음에 생각했던 방법인데 안됨 flags = dict.fromkeys([1, 5, 9, 13], 2) # 되지만 각각의 키들의 값이 동알한 메모리를 참조함 flags = {k:2 for v in [1, 4, 9, 13]} # 컴프리헨션으로 각자 다른 참조 가능 flags 딕셔너리로 atom 을 제어하기 위해 여러 키에 같은 값을 대입하는 방법을 생각해봤다. ...

2018년 7월 7일 · 2 분 · 328 단어 · 김무훈

문제로 풀어보는 알고리즘 : 시작하기

오른쪽으로 배열 회전하기 배열 arr[]에서 위치 s, t 사이로 1만큼 오른쪽으로 회전시켜보자. 단, arr[t]의 경우, arr[s]로 복사하면 된다. 풀이 순서 i = t : 뒤부터 탐색을 시작하자. arr[i] = arr[i - 1] : 1 만큼 왼쪽으로 이동. arr[s] 에 이르선 arr[s - 1] 이 더 이상 없는 문제가 있음. 사전에 arr[t] 를 last 에 저장하여 arr[s] 에 대입한다. 코드 풀이 void right_rotate(int arr[], int s, int t) { int i, last; last = arr[t]; for (i = t; i > s; i--) arr[i] = arr[i - 1]; arr[s] = last; } N 만큼 이동하기 1만큼 이동하는 함수를 k 번 반복하면 되지만 이 방법은 O(n^k), (n은 s , t 사이의 거리)로 느린 문제가 있다. ...

2018년 6월 6일 · 2 분 · 388 단어 · 김무훈