2015년 5월 21일 목요일

java feature toggle

프로그램이 가지고 있는 특정 기능을 상황에 따라서 켜고 끄는 기능이 필요하다. 구글링을 조금 해보니 이런 걸 feature toggle이라고 하는 듯 하다. 지금 개발중인 시스템에서 이런 기능이 자주 필요해졌고, 이번에도 나 혼자 이런게 필요한 건 아니겠지라는 생각에 구글링을 시작.

1.
feature toggle의 구글링 첫번째 결과는 마틴 파울러의 블로그이다. 글 중반에 feature toggle의 유형을 다시 2가지로 나눈다. release toggle과 business toggle이다.

release toggle은 새로 개발된 기능을 일부 적용하고 손쉽게 되돌릴 수 있게 릴리즈하는 장치이다. 이건 내가 찾던 것은 아니다. 새로운 기능이 안정적으로 안착되면 toggle을 지우라고 권장하고 있다. 이게 시간이 지나면 Technical dept이 된단다.

business toggle이 내가 필요한 유형이라고 할 수 있겠다. 프로그램 runtime 시점에 특정 기능을 적용하거나 적용된 기능을 제외시키는 기능이고, 이게 관리자 역할의 사용자에게 권한이 부여되서 직접 시스템의 기능을 제어할 수 있어야 한다. (오피스 프로그램의 옵션처럼)

2.
feature toggle java로 검색해봤다. 이 기능을 쉽게 구현하게 도와주는 프레임웍들을 모아놓은 페이지가 있다. 4개의 프레임웍에 대한 링크가 존재하고, 구글링 검색결과와도 대략 일치한다. 이것들만 검토해보고 1개를 선택하거나, 직접 구현하는 경우에 대비해서 insight를 얻을 수 있을 것 같다.

3. Togglz
http://www.togglz.org/ 구글링 검색에서도 처음으로 링크되어 있고, 문서화도 잘 되어있고, 기능도 많다. 2014년 12월이 마지막 릴리즈이니까 죽은 상태도 아닌 듯. ENUM을 활용하고, enable/disable 개념과 active/inactive 개념을 가지고 있다. enable이어도 user나 time등의 기준에 의해서 inactive한 상태도 제어가 가능하다. admin기능을 자체적으로 web view와 함께 제공한다. feature들을 memory/file/DB에서 관리가 가능한데, DB는 테이블을 알아서 만들어서 사용하는 듯.

4. FF4J
http://ff4j.org/ 최근 한달전까지 커밋이 있었다. PDF로 된 문서는 잘 작성되어 있는데, 막판에 DB쪽이 나오면서 미작성된 부분이 있다. FeatureStore를 직접 구현하면 DB로도 가능할 듯. feature을 String으로 지칭한다. 설정없이 초기화하여 동적으로 feature를 추가할 수 있다.

5. Fitchy
https://github.com/akomtur/fitchy 프러퍼티 파일 기반이고 특정 interface를 구현한 클래스에 toggle이 필요한 메서드에 annotation을 달아서 특정값 또는 null을 리턴하도록 하는 구성이다. 리턴이 boolean이 아니고 Object가 가능하다는 게 특징인 듯. 마지막 커밋이 2년전인데, 실제 소스는 3년 전인 듯.

6. Flip
https://github.com/tacitknowledge/flip 3년전이 마지막 커밋이고 문서화도 부족함.

7.
기존 프레임웍들을 보면 xml이나 DB에서 feature 기본값을 읽어서 ENUM이나 Proxy Interface로 On/Off를 체크하는 방식을 모두 사용하고 있다. 그리고 Web Page를 통해서 그 값들을 변경가능하게 만들었다. 현재 개발중인 시스템에 구현한 내용도 동일하다. 굳이 추가적인 프레임웍을 붙여서 구현할 필요는 없을 듯.

8.
feature가 추가되면
-> DB에 행 추가
-> 관련VO에 member field, getter/setter 추가
-> Util의 메서드 추가
-> js object에 property 추가
이런 식으로 진행이 될 것 같다.


댓글 없음:

댓글 쓰기