일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Spring Boot
- spark
- design pattern
- hibernate
- Domain Driven Design
- 제주
- Linux
- Spring
- Storm
- elasticsearch
- hadoop
- Angular2
- 엘라스틱서치
- 스프링 배치
- Gradle
- hdfs
- 도메인주도설계
- scala
- SBT
- Clean Code
- DDD
- docker
- apache storm
- Java
- nginx
- intellij
- Spring XD
- Hbase
- Spring Batch
- elastic search
- Today
- Total
목록분류 전체보기 (236)
욱'S 노트
이번 페이지에서는 스톰의 메인 컨셉을 나열해보고 더 자세한 정보를 제공에 대한 링크를 제공할 것이다. 논의될 컨셉은 다음과 같다. TopologiesStreamsSpoutsBoltsStream groupingsReliabilityTasksWorkersTopologies 실시간 어플리케이션을 위한 로직은 스톰 토폴로지로 패키징 된다. 스톰 토폴로지는 맵리듀스 작업과 유사하다. 하나의 주요한 차이점은 맵리듀스 작업은 결국에는 종료되는 반면 토폴로지는 항상 수행중이다는 것이다. 토폴로지는 spout과 bolt의 stream grouping으로 연결된 그래프이다. Streams 스트림은 스톰의 핵심 추상화이다. 스트림은 투플의 일관되지 않는 순서이다. 투플은 분산환경에서 병렬로 처리되고 생성된다. 스트림은 스키..
이번 페이지는 어떻게 스톰 개발환경을 세팅하는 지에 대해 설명한다. 요약하면 스텝은 다음과 같다. 스톰 릴리이즈를 다운로드하고 압축을 해제한다. PATH 환경변수에 bin 디렉토리를 등록한다.리모트 클러스터에 있는 토폴로지를 시작하고 종료하기 위해서 클러스터 정보를 ~/.storm/storm.yaml를 넣는다.각 스텝의 자세한 내용은 아래와 같다. What is a development environment? 스톰은 두가지 모드를 가지고 있다. : 로컬 모드와 리모트 모드. 로컬 모드에서는 로컬머신에서 토폴로지를 개발하고 완전히 테스트하는 것을 가능하게 한다. 리모트 모드에서는 클러스터 머신에서 토폴로지를 보내 실행할 수 있게 한다. 스톰 개발 환경은 로컬 모드에서 토폴리지를 개발하고 테스트할 수 있는 ..
이번 튜토리얼에서는 어떻게 스톰 토폴로지를 만들고 스톰 클러스터에 배포하는지에 대해서 배울 것이다. 자바를 메인 언어로 사용할 것이지만 몇가지 예제는 파이썬을 사용할 것이다. Preliminaries 이번 예제는 storm-starter 프로젝트에 있다. 예제를 따라하기 위해 프로젝트를 클론하는 것을 추천한다. 먼저 개발 환경 세팅하는 법을 일고 수행하고 새로운 스톰 프로젝트를 머신에 셋업하라. Components of a Storm cluster 스톰 클러스터는 표면적으로 보면 하둡 클러스터와 닮았다. 하둡은 맵리듀스 작업을 실행하는 반면에 스톰은 토폴로지를 실행한다. Job과 topology는 매우 다르다. 가장 주요하게 다른 점은 맵리듀스는 결국은 작업이 끝나는 반면, 토폴로지 영원히 메시지를 처리..
이번 페이지는 스톰 클러스터를 세팅하고 실행시키는 스텝에 대한 개요이다. 만약 AWS환경이라면 storm-deploy 프로젝트를 체크아웃을 해야한다. storm-deploy를 완전히 EC2에 스톰 클러스터를 자동적으로 설정하고 세팅할 수 있다. 또한 당신이 CPU, disk, 네트워크 사용량을 모니터할 수 있도록 Ganglia도 세팅해줄 것이다. 만약 스톰 클러스터를 세팅하다가 어려움에 빠진다면 트러블슈팅 페이지를 참고하라. 그래도 안되다면 메일링 리스트로 메일하라. 스톰 클러스터를 세팅하는 스텝을 요약해보면 다음과 같다.주키퍼 클러스터를 셋업하라.Nimbus와 worker 머신에 디펜던시를 인스톨하라.스톰릴리즈를 다운로드해서 nimbus와 worker 머신에 압축해제하라.storm.yml에 필수 설정을..
Step 1: Write a Dockerfile 이번 스텝에서는 Mac의 텍스트에디터를 사용해 짧은 도커 파일을 작성해보겠다. Dockerfile은 이미지로 구워질 소프트웨어를 묘사한다. 단지 재료로서 만이 아니라 사용되기 위해 어떤 환경인지 또는 실행하기 위한 어떤 명령이든지 다 기술할 수 있다. 작성법은 매우 짧을 것이다. 만약 터미널이 오픈되어 있지 않다면 먼저 오픈을 하기 바란다. 1. 먼저 새로운 디렉토리를 만들자 $ mkdir mydockerbuild 이 디렉토리는 빌드를 위한 context로서 제동될 것이다. context 의미는 이미지를 빌드하기 위해 필요한 모든 것들을 포함하고 있다는 것이다. 2. 새로운 디렉토리로 이동하자. $ cd mydockerbuild 지금은 디렉토리가 비어 있을..
전세계 많은 사람들이 도커 이미지를 생성한다. 우리는 도커 허브에 접속해서 이러한 이미지들을 발견할 수 있다. 이번 섹션에서는 이미지를 찾고 사용하는 방법에 대해서 알아보겠다. Step 1: Locate the whalesay image 브라우저를 열고 도커 허브에 접속하자. 도커허브는 개인들 뿐만아니라 RedHat, IBM, Google과 같은 기관의 공식이미지들도 포함하고 있다 2, 위에 표시된 서치 바에 whalesay라는 단어를 입력해보자. 3. 결과중에 docker/whalesay를 클릭하자. 브라우져는 whalesay 이미지에 대한 리파지토리를 출력할 것이다. 각 이미지 리파지토리는 이미지에 대한 정보를 포함하고 있다. 어떤종류의 소프트웨어 이미지를 포함하고 있고 어떻게 사용하는지 등이다. 내..
지난 시간 마지막 스텝에서 우리는 docker run hello-world라는 명령을 수행하였다. 하나의 커맨드내에서 도커를 사용하기 위한 핵심 타스크들이 완료되었다. 커맨드는 다음과 같이 세가지 파트로 나누어진다. 컨테이너는 리눅스 오퍼레이팅 시스템의 가장 기본적인 기능만을 가진 버젼이다. 이미지는 컨테이너내에서 로딩될 소프트웨어이다. 커맨드를 수행시키면 도커 소프트웨어에서 다음과 같은 이벤트가 발생한다. hello-world 소프트웨어 이미지를 가지고 있는지 확인한다.없다면 도커 허브로부터 이미지를 다운로드한다.컨테이너로 이미지는 로드되고 실행된다. 구성에 따라 이미지는 단순하게 하나의 커맨드를 실행하고 종료된다. 이것이 Hello-World가 실행된 것이다. 도커 이미지는 더욱 많은 기능을 가지고 ..
릴리이즈 시나리오 1. 버젼을 릴리이즈로 변경한다. (pom.xml 혹은 build.gradle에서 변경)2. 릴리이즈를 수행한다.3. 해당 버젼의 소스를 태깅한다. (1.0.0, 1.0.1, 2.0.0)4. trunk의 마이너버젼을 올리고 스냅샷 버젼으로 변경한다. (1.0.0 릴리이즈 했으면 1.1.0-SNAPSHOT이 된다.)5. 즐겁게 새로운 기능을 개발한다. 배포한 버젼에서 오류 발생시 1. 1.0.0 소스를 기준으로 1.0.1 태깅을 생성한다.2. 1.0.1 태깅의 버젼을 1.0.1-SNAPSHOT으로 변경하고 버그를 고친다.3. 다시 릴리이즈 절차에 따라 1.0.1 릴리이즈를 수행한다.4. 고친걸 1.1.0 개발중인 곳에 잘 머지한다. 릴리이즈 예제(git)
항상 우리는 소프트웨어를 코딩해서 만들어내고 있지만 생각보다 많은 프로덕트에서 제대로된 버젼관리를 못하고 있는 것 또한 현실이다. 이에 전 회사 동료 및 여러 개발자분들에게도 조언을 구해도 딱히 정답이 없다는 것도 사실인 것 같다. 하지만 여기서는 내가 생각하는 가장 기본적인 버젼관리 방법을 정리해보겠다. Most used 프로덕트 버젼 관리에서는 명확한 convention이 있는 건 아니지만, 대부분의 오픈 소스들이 가장 많이 쓰는 방식은 아래와 같다. 여기서 내가 가장 선호하는 방식은 1.0.1-SNAPSHOT과 같은 방식이다. 메이져버젼이 올라갈 때는 하위 호환성이 없다는 것을 의미하며 마이너버젼은 기능의 변경 그리고 버그픽스를 위한 버젼을 남겨둔다. Qualifier의 역할은 maven과 같은 라..
Adapter 패턴은 우리가 인지하지도 못한 사이 엄청나게 사용하고 있는 패턴이다. 과연 Adapter 패턴이란 무엇인가? 다음은 위키피티아의 정의이다. 어댑터 패턴(Adapter pattern)은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. 한마디로 내가 사용하기 편한 메소드들로 감싼다고 생각을 하면 이해가 쉬울 것이다. 이러한 패턴은 외부 라이브러리를 사용할 때 활용 될 수 있다. 실제 비즈니스 로직을 구현하는데는 외부 라이브러리가 많이 혼재되어 있다면 굉장히 이해하기 어려울 것이다. 이런 경우 내가 사용하고자 하는 인터페이스를 잘 정의하고 그의 구현에서 외부 라이브러리의 클래스들..