일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- elastic search
- 도메인주도설계
- hadoop
- Spring XD
- Spring
- intellij
- spark
- 스프링 배치
- 엘라스틱서치
- design pattern
- Gradle
- Linux
- 제주
- Java
- scala
- Storm
- docker
- Hbase
- hdfs
- hibernate
- elasticsearch
- Clean Code
- Domain Driven Design
- Angular2
- nginx
- SBT
- Spring Batch
- apache storm
- Spring Boot
- DDD
- Today
- Total
목록Story (4)
욱'S 노트
빌더 패턴은 소프트웨어 디자인 패턴이다. 오브젝트를 구성하는 추상화 스텝에 의도를 둔다. 다른 오브젝트를 생성하기 위해 추상화된 스텝의 다른 구현들을 활용한다. Builder Pattern vs Factory method pattern 우리는 빌더 패턴과 팩토리 메소드 패턴을 사용하기 위한 결정을 할 때 항상 의문점을 가지게 된다. . 팩토리는 단순히 생성자와 관련된 랩퍼 함수이다. 팩토리 매서드 패턴에서는 전체 오브젝트를 위한 한번의 함수 호출이 요구된다. 하나의 라인에 모든 파라미터들이 전달되어야 하며 최종 오브젝트가 리턴될 것이다. 실제 생활에서 예를 찾아보면 레스토랑의 오늘의 식사와 같다. 식사의 생성은 팩토리 패턴이다. 때문에 우리는 주문할때 오늘의 식사를 달라고 하고 이러한 오브젝트는 비밀의 ..
릴리이즈 시나리오 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)은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. 한마디로 내가 사용하기 편한 메소드들로 감싼다고 생각을 하면 이해가 쉬울 것이다. 이러한 패턴은 외부 라이브러리를 사용할 때 활용 될 수 있다. 실제 비즈니스 로직을 구현하는데는 외부 라이브러리가 많이 혼재되어 있다면 굉장히 이해하기 어려울 것이다. 이런 경우 내가 사용하고자 하는 인터페이스를 잘 정의하고 그의 구현에서 외부 라이브러리의 클래스들..