category: dev

AWS ALB Target Group의 Draining 이 너무 길다면

11 May, 2020 - 1 minutes
최근 ECS를 도입하면서 Rolling Deploy 를 적용했다. 이전에는 EC2인스턴스마다 방문하면서 배포를 했다면 이제는 새로운 Fargate기반 태스크가 생성되면서 기존 태스크는 없애는 방식으로 배포된다. 테스트를 진행하다보니 ALB Target Group에 등록된 아이템이 Draining에 걸리는 시간이 긴 것이 눈에 들어왔다. 기본값으로 이 값은 300초가 주어지기 때문에 트래픽이 많지 않거나 커넥션을 오래 유지할 필요가 없다면 이 시간만큼 Fargate인스턴스를 더 사용하는 […]

AWS MySQL Aurora 최대 접속수 수정방법

19 Feb, 2020 - 1 minutes
오랜만에 Aurora MySQL의 최대 접속수를 다시 지정했다. 개발용도의 데이터베이스는 사용량은 작지만 여러 프로젝트들이 connection pool 을 생성하니 기본 정의값보다 올려서 사용하는 경우가 종종있다. max_connections를 다시 지정한 파라미터 그룹으로 교체하면 된다. 이건 TIL이라 할 것도 없다. 하지만 글로 남기는건 10분이면 될 일을 1시간이나 헤맸기 때문. 클러스터 파라미터그룹과 인스턴스 파라미터 그룹 양쪽에 max_connections가 있다. 파라미터 수정 후 […]

Jenkins 역할기반 전략으로 프로젝트 권한지정하기

14 Feb, 2020 - 2 minutes
Jenkins의 Security Rule 중 Role Based 플러그인을 사용한 사용자 권한 설정을 했다. Manage Jenkins > Configure Global Security 의 Authorization 에서 Role-Based Strategy를 선택한다.(Enable security 상태) 이후  Manage Jenkins > Manage and Assign Roles 화면에서 역할을 추가하고 사용자에 역할을 지정할 수 있다. Manage Roles 역할을 추가, 편집, 삭제한다. 전역(Global)과 프로젝트별 역할이 있다. Assign Roles Manage […]

GCP BigQuery Schema 구성 팁

12 Feb, 2020 - 2 minutes
생성은 CSV를 통하면 편리하다. BigQuery의 테이블스키마는 생성할때 UI가 꽤 불편한 편이다. 그래서 텍스트로 편집 옵션이 있기도 하지만 타이핑하기 좋지 않은 신택스를 가지고 있어서 CSV업로드로 자동생성하는 편이 개인적으로는 가장 편했다. CSV 파일 업로드는 10MB까지만, 그 이상은 Cloud Storage 등에서 가져와야 한다. CSV가 다룰 수 있는 데이터 타입에는 한계가 있다. 예를들어 날짜시간 등을 사용하고자 하면 메뉴얼의 Limitation부분을 […]

AWS NAT 인스턴스의 가성비 확인

9 Jul, 2019 - 3 minutes
AWS의 Private Subnet에 있는 인스턴스가 외부와 통신하려면 NAT를 활용해야한다. 그렇다면 NAT인스턴스를 만들어 사용할지, NAT 게이트웨이(Gateway, 이하 GW)를 사용할지 결정해야 한다. AWS VPC 와 서브넷 VPC의 NAT Gateway 가격은 서울리전에서 $0.059 이다. 1달이 월 720시간이라면 Multiple AZ를 고려해 2개를 설치하면 월 $84.96, 약 10만원의 추가부담이 생긴다. NAT Instance로 구성한다면 EC2 1년 선결제 없는 경우의 예약 인스턴스 […]

AWS VPC 와 서브넷

3 Jul, 2019 - 1 minutes
AWS 의 VPC는 리전 내에 위치하고 서브넷은 AZ내에 위치한다. 한 VPC에 AZ에 대해 여러 서브넷을 둬서 고가용성(HA)를 확보할 수 있다. 서브넷의 통신 방법은 VPC의 라우팅 규칙(Route Tables)을 따른다. 라우팅 규칙은 아이피 대역(CIDR)에 따라 타깃을 설정할 수 있고, 서브넷에 붙이는(associate) 방식으로 서브넷의 통신 방법을 설정할 수 있다. 서브넷과 라우팅 규칙은 1:n 관계이다. 각 서브넷은 한개의 라우팅 […]

원격근무의 필수조건, AWS에 OpenVPN 구축기

17 Nov, 2018 - 5 minutes
근무중인 세븐핀테크는 설립 때부터 리모트 근무에 높은 가치를 두고 실천해오고 있다. 각 멤버는 인천 송도, 천안, 제주에서 근무하고 있다. 세븐핀테크는 주식 고수의 실시간 계좌를 열람하고 거래 알림을 받는 모바일 앱 월스트릿파이터를 개발, 운영하고 있다. 집이나 도서관, 카페 등 본인이 편한 곳에서 근무하기 때문에 모든 사내 리소스는 물리적인 공간에 두지 않으며 클라우드(주로 AWS)에서 운영된다. 그러나 보안 […]

sami-parser 와 개발자의 매너

4 Jun, 2016 - 3 minutes
한국에서는 자막으로 주로 SMI 파일을 사용한다. 이 포맷은 MS 가 만들었고 한국에서는 자주 쓰이지만 전세계적으로 봤을 때는 많이 쓰이지 않는다. 대신 SRT 파일이 많이 사용된다. 그래서 외산 플레이어들이나 디바이스들은 잘 지원하지 않는다. 윈도우 계열에서 손을 뗀지가 벌써 10여년이라, 영상을 즐길 때 SMI 파일들은 항상 스트레스였다. 그래서 만든 프로젝트가 Sami-paser 였다. 일단, SMI 파일들을 제대로 파싱할 […]

슬쩍 떠보는 npm 과 package.json

21 Jul, 2015 - 6 minutes
GruntJS 와 같이 Node.js 로 만들어진 유틸리티들은 npm 을 통해 설치하고 사용하는 것이 쉽고 편리하다. 하지만 Node.js 를 깊이 공부해보려는 목적이 아니라면 굳이 npm 에 대해 깊이 알 필요는 없다. 그런 사람들과 입문자들을 위해 npm 을 통한 패키지의 설치/제거방법과 package.json 에 대해 간단히 알아보려고 한다. npm 는 Node Package Manager 의 약자이다. 보통 npm 은 […]

Google Spreadsheet 로 쉽고 빠른 Backoffice 구축

12 Jul, 2015 - 6 minutes
Google IO Extended Seoul 에 다녀왔다. 나는 C 홀에 있었는데 라이트닝 토크 세션이 있고 그 자리에서 발표신청을 해도 된다길래 즉석해서 “스타트업 개발자의 수고를 줄여주는 GoogleSpreadsheet” 라는 주제로 자료를 만들어 발표했다. 5분은 짧은 시간이었지만 개괄적으로 이야기하기에는 충분한 시간이었다. 세션 후에 적극적으로 질문 해주시는 분들을 보고 나에게만 고민스러웠던 주제가 아니구나 하는 생각을 하게 됐다. 발표자료를 공유하고 더 […]

중첩된.오브젝트.프로퍼티.가져오기.성공적 = getobject 

TypeError: Cannot read property ‘..’ of undefined 는 매우 흔히 발생하고 오랫동안 개발자를 괴롭혀온 에러다. 이 에러는 오브젝트의 프로퍼티에 접근하려 하는데 그 오브젝트가 undefined 인 경우 발생한다. 즉, 아래 같은 상황이다. > var opt = {}; undefined > opt.a.b.c.d TypeError: Cannot read property ‘b’ of undefined … > 특히 API 연동처럼 외부에서 생성된 오브젝트를 가져와 […]

Google Chrome 에서 Grunt 사용하기

KStyleTrip 에서는 프론트엔드 영역에서 디자이너와 개발자가 협업하고 있다. 나는 사실 HTML CSS 를 어느 수준으로 다루기는 하지만 퍼블리셔는 아니어서 픽셀 단위의 디테일을 구현하는데는 어려움이 있다. 디자이너는 디자이너 대로 원하는 만큼의 디테일을 구현하기 어려워하는 내 모습을 보기 안타까워 했다. 그래서 현실적인 수준에서 협업을 시작했다. 개발자가 디자인을 보고 큰 덩이에 대해 마크업과 CSS 처리를 하면 디자이너가 원하는 […]

Git Merging 과 Rebase 의 상황별 사용법

Git 을 사용하기 시작한지가 벌써 3년이다. 한번은 문상환님하고 Git 의 Merge branch 커밋에 대해 이야기를 한 적이 있다. 대화가 진행될 수록 Rebase 와 Merge 를 머리로만 알고 있을 뿐, 제대로 이해하지 못하단 걸 알게됐다. 일종의 산파법이랄까. Git 에서 코드를 합치는 방법에 대해 탕수육의 뿌먹파와 찍먹파처럼 Rebase 파와 Merging 파가 있다. 나는 Merging 파였다. Rebase 에 […]

핸드스튜디오 사내강의 “Git+, Git 조금 더 배워보기”

4 Apr, 2015 - 1 minutes
2013년 핸드스튜디오와 연이 닿아 프로젝트를 함께 진행한 적이 있었다. 개인적으로 매우 잘 아는 유명한 회사이다 🙂 당시 핸드스튜디오는 Git 을 사내 버전 관리시스템으로 도입한 초기였고, 그 과정에서 도움이 되고싶어 사내강의를 자처했다. 당시 “svn 능력자를 위한 git 개념 가이드” 라는 아주 좋은 슬라이드가 있어 도입초기에는 이 슬라이드를 교안으로 강의를 진행했고, 이후 조금 더 잘 사용해보자는 의미에서 […]

Undefine:D 에서 발표한 “GruntJS로 개발프로세스 구축하기”

16 Nov, 2014 - 1 minutes
페이스북의 Undefine:D 정기세미나에서 “GruntJS로 개발프로세스 구축하기” 를 발표하게 되었다. GruntJS 는 어떤 플러그인을 어떻게 사용하는지에 성패가 달려있다고 생각하기 때문에 기초보다는 사용하고 있는 플러그인 위주로 발표했다. 기초에 대해서는 이전에 많은 분들이 소개를 하셨기 때문에 발표로서의 차별화도 고려했다. 조직에서 사용하기 위해서는 구성원을 납득시킬 수 있어야 하기 때문에 도입에 대해 확신을 가질 수 있도록 장점을 보여줄 수 있는 […]

Dockerfile – ADD 를 통해 build 캐시막기

31 Aug, 2014 - 1 minutes
Dockerfile 을 수정하고 다시 빌드할 때 cache 덕분에 빠르게 재실행이 가능하다. Dockerfile 의 명령라인이 변경되지 않으면 자동으로 캐시가 작동하게 되는데 가끔 이 기능이 불편할 때가 있다. Node 개발용 서버를 구축하는 중에 이런 경우를 만났다. “git pull“ 을 하고, 의존성 해결을 위해 “npm install“ 을 하는 플로우인데, “RUN git pull“ 행이 변경되지 않으니 계속 캐시가 작동했다. 캐시를 작동하지 않게 하는 명령을 추가하는 것에 대해 이 곳에서 계속 논의가 진행중인데, 이 이슈를 살펴보다 랜덤스트링을 추가하는 괜찮은 방법을 알게

어느 스타트업의 백오피스 인증 구현기

27 Jul, 2014 - 5 minutes
![백오피스 로그인 화면](/sites/default/files/backoffice_login.png “백오피스 로그인 화면”) 스타트업에는 놓치지 않아야 할 여러 가지가 있다. 난 그 중 백오피스를 꽤 높은 순위에 둔다. 백오피스를 가졌을 때의 장점은 1. 서비스를 만들고 지표의 변화를 감지해 서비스를 개선하는 데 큰 도움이 된다. 2.

자바스크립트의 변수형을 알아내는 다른 방법

23 Mar, 2013 - 2 minutes
JavaScript 의 변수형을 알아내는 데는 일반적으로 typeof 를 사용한다. 하지만 toString 을 사용하면 어떤 객체의 인스턴스인지까지 한번에 알아낼 수 있다. ## JavaScript 의 변수형을 알아내는 데는 일반적으로 typeof 를 사용한다. 이 방법이 가장 간단하고 일반적인 방법이다. typeof 가 나타낼 수 있는 변수형은 아래와 같다. undefined, object, boolean, number, string, function, object typeof 가 변수에 대한 기본적인 호기심을 해결해주긴 하지만 몇가지 모자란 점이 있다.