분산 비동기 작업 처리를 위한 Celery 첫걸음

Celery를 이용해 비동기 작업을 처리하기 위한 Celery 개념과 기초 사용법
Read more →

자바스크립트 테스트 프레임워크 간단 비교

테스트 프레임워크 선택 Jest Delightful JavaScript Testing 페이스북에서 만들었다. (Jasmine 기반) 고통 없는(Painless), 즐거운(Delightful) 자바스크립트 테스트 고통 없는 테스트는 없다 자바스크립트 테스트는 어렵다 웹사이트를 테스트하는 것은 매우 어렵다 테스트 대상이 제한적이고, 구현이 복잡하며 느리고 들어가는 공수가 많다 적절한 전략과 올바른 도구를 조합하면, 거의 모든 범위를 테스트할 수 있다 Sinon.js 와 동일한 Assertion, Mocking, Spying 기능을 제공한다 테스트 커버리지 리포팅 툴인 Istanbul 을 내장하고 있다 Mocha Jamine과 다르게 서드파티 Assertion, Mocking, Spying 도구를 사용한다 그만큼 유연하고, 확장성이 뛰어남 Jasmine 오랜 시간 사용자와 커뮤니티에 의해 생성된 방대한 자료 거의 모든 버전에서 Angular 지원 테스팅 도구가 제공하는 것들 (Jest 와 Sinon을 사용한 예제로 구성)
Read more →

Python3 Formatted String Literals (aka f-string)

PEP 498 – Literal String Interpolation | Python.org in Python 3.6 ‘f’ 또는 ‘F’ 를 앞에 붙인 문자열 리터럴 bar = 'World' f'Hello {bar}' # 'Hello World' Formatted String Literals 또는 f-sting 이라고 부른다 중괄호 {}로 감싸진 필드 안에 변수가 치환되며, 일반적인 파이썬 표현식도 실행된다. 심지어 Lambda 도 사용할 수 있다 bar = ['a', 'b', 'c'] # 파이썬 표현식 실행 f'{(",".join(bar))}' # 'a,b,c' # Lambda 표현식 f'{(lambda x: x*2)(3)}' # '6'
Read more →

젠킨스 Master/Slave 분산 빌드 환경 구축하기

  1. Master + (Slave) Agent Jenkins 는 보통 모든 작업을 수행할 수 있는 단일 Master로 구성한다. 작업 부하를 분산하기 위해 Master + (Slave) Agent 구성도 가능하다. Master 는 프로젝트(작업)을 등록하고, 관리하기 위한 GUI와 API를 제공하고, Agent는 작업 실행만 담당하게 된다. Agent를 사용하는 이유에는 Master가 실행중이지 않은 다른 보안 환경에서 작업을 수행하거나 배포하기 위함도 있다.
  2. Master/Agent 구성 방법 Master 에서 Agent 연결하기 먼저 Master가 Agent가 실행되고 있는 네트워크상에 접근할 수 있어야 한다.
Read more →

앵귤러 두걸음(Angular Two Steps)

앵귤러 첫걸음 두걸음 이 글은 ‘앵귤러 첫걸음(저자: 조우진)’ 책을 읽고, 초반 부분만 정리한 내용입니다. 개인적으로 앵귤러로 개발하면서 굉장히 도움을 많이 받은 책입니다. 하지만 앵귤러를 처음 시작하는 분들께서는 살짝 어렵게 느껴질 수 있을것 같습니다. 그래도 저는 이 책을 통해서 첫걸음보다는 두걸음 이상 걷게 되었다고 생각합니다. 직접은 아니지만 이렇게라도 저자께 감사하다는 말씀 드리고 싶습니다. 📖 일단 시작하기 타입스크립트 타입은 언제 선언하는가? (철학) 필요한 지점에 타입 정보를 기술하자 타입스크립트를 사용한다고 해서 자바스크립트 코드의 모든 부분에 타입 정보를 일일이 추가할 필요는 없다 타입 선언 정보 타입스크립트는 자바스크립트 언어 명세에 없는 타입 정보를 타입 선언 파일(Typescript Declaration file) 형식으로 타입 정보만 추가로 내포 확장자는 d.
Read more →

Elasticsearch 검색( search) API 사용법과 Query DSL 요약 정리

사전 지식 Elasticsearch는 검색을 위한 REST API를 제공한다. 검색은 인덱스(Index) 또는 타입(Type) 단위로 수행할 수 있다. 검색 결과는 JSON 형식으로 반환한다. 💻 터미널에서 curl을 이용해서 검색 요청 # 검색 요청 샘플 살펴보기 $ curl 'http://127.0.0.1:9200/books/_search?q=title:awesome&pretty' ### 결과 { "took": 5, # 검색에 소요된 시간(ms) "_shard": { # 샤드 정보 "total": 2, "successful": 2, "failed": 0 }, "hits": { "total": 1, # 결과 개수 "max_score": 0.3708323, # 검색 결과 중 가장 높은 스코어 "hits": {} # 검색 결과 상세 } } 1.
Read more →

Fluentd란 무엇인가? 구조와 기능 살펴보기

서버로 들어오는 요청이나 DB에서 실행되는 SQL, 각종 배치 스크립트가 실행되면서 남기는 로그들을 기본적인 파일 형태로만 남기고, 주기적으로 로테이팅 되기만 하고 버려지고 있었다. 가끔 서비스에 문제가 생겼거나 디버깅 목적으로 로그를 찾아볼 때는 모든 서버를 돌아다니면서 find & grep 해야 하는 번거로움이 있었다. (또 그렇게 찾아서 나온 결과가 엄청 많을 때는 터미널을 가득 채웠기 때문에 거북목을 하고서 눈이 빠지라고 모니터를 쳐다봐야 하는 헬게이트가 열리기도 했다) 이렇게 불편하고 활용도가 떨어지는 부분을 보완하기 위해 ELK 구성을 도입했고, 각 노드에서는 Logstash가 로그 파일을 Tail 해서 적절한 가공 후에 Elasticsearch로 적재하게 했다.
Read more →

Guide to better Git - 좋은 커밋 메시지 작성하기

Guide to better Git Commit Message 좋은 커밋 메시지를 작성해야 하는 이유? 커밋 로그 가독성 동료에 대한 배려 협업 코드 리뷰 오류 출처 찾기 커밋 로그 가독성 간결하고 일관성 있는 커밋 메시지는 가독성을 높여준다 제한된 어휘와 단순화된 언어를 사용한다 읽지 않아도 되는 불필요한 정보와 중복을 제거한다 꼭 읽어야 하는 내용만 기록한다 동료에 대한 배려 동료 개발자(미래의 나)와 변경사항에 대한 맥락 을 공유할 수 있는 최고의 수단은 잘 다듬어진 커밋 메시지 Pull Request(또는 Merge Request)를 리뷰할 때 코드 조각의 앞뒤 맥락 을 살피는 노력을 줄일 수 있다 오류 출처 찾기 오류 메시지에서 표시되는 파일명과 오류가 발생한 줄 번호를 활용해서 해당하는 부분의 마지막 커밋의 출처를 찾을 수 있다 django-rest-framework git:(65791d8) $ git blame MANIFEST.
Read more →

2017년 회고

2017년이 하루 남은 오후, 나도 처음으로 회고라는걸 적어보겠다고 카페에 와서 노트북을 폈다. 일본, 대만 여행 후쿠오카는 2015년 12월 마지막 주에 다녀왔지만 거의 2016년 여행이나 다름없어서 포함했다. 신혼여행 이후 사랑하는 아내와 처음 가는 해외 여행은 기대와 설렘만으로도 충분히 100점짜리 여행이었다. 2박 3일이라는 짧은 일정에 뚜벅이를 너무 길게 해서 아내 무릎에 염증이 생기기도 했지만 그 외 모든 면에서 완벽한 여행이였다. 그 후로 3개월 뒤인 3월에 대만 여행을 다녀왔다. 일정은 일본 여행때 얻은 교훈을 따라 3박 4일로 계획했고, 일본 여행때 부족했던 준비들을 보완해서 계획도 좀 더 꼼꼼하게 짰던 것 같다.
Read more →

[네트워킹 기초 공부] IP Address

  1. 라우터에서의 IP 주소 라우터에는 이더넷 인터페이스와 시리얼 인터페이스를 갖고 있고, 각각 IP 주소를 할당한다. 이더넷 인터페이스: 내부 네트워크에 연결되는 포트 시리얼 인터페이스: 외부(인터넷) 네트워크에 연결되는 포트 라우터는 인터페이스별로 각각 IP 주소를 배정하지만, 스위치나 허브는 IP 주소를 장비별로 하나씩만 배정 스위치나 허브에 IP 주소를 배정하는 이유는 단지 관리 목적, IP 주소를 배정하지 않아도 통신 가능 2. IP 주소 체계 32자리 2진수로 구성 네트워크 부분(Network Part)과 호스트 부분(Host Part)로 구분 네트워크란?
Read more →