2012/02/04 21:55 Developer

DDD


내가 타이틀에 제시한 DDD는 Domain Driven Developement도 아니고, 지금 근무하고 있는 N사에서 반점개 리로디드를 얘기하면서 나온 Developer Driven Developement도 아니다.

또 다른 새로운(?) 방법론에 대해서 얘기를 하고 싶다.

사실 인터넷서비스가 10년이 넘어가면서 대부분의 서비스S/W는 기능도 많고 복잡하다. 하나의 feature를 구현하려면 엄청난 리소스가 소요되고 이 feautre는 후에 서스테이닝 비용도 증가를 시킨다. 물론 잘 만들면 되지 않냐라고 반문할 수 있겠지만 이거 또한 어려운 것 다 알고 있을 것이다. 일정은 항상 지연이 되고 생산의 최전방에 있는 개발자들은 몸을 혹사하며 고생을 하면서 Time to Market을 실천하고 있다.

순발력이란 무엇인가? 고객이 만족할 시점에 릴리즈를 하는 것이다. 순발력을 요구하는 것 자체는 어떤 수치적인 속도라기 보다는 고객의 만족도로 볼수 있고 경영진 입장에서는 열심히 해달라는 당부와 같은 것이다. 합리적인 출시일은 언제일까? 아무도 모른다. 사업적으로 중요하다면 우선순위를 높여서 열심히 하면 되는 것이지만 1주일/1달/6개월 출시가 지연되면 늦어지면 경쟁사에서 어떤 현상이 일어나는지 매출이 어떻게 바뀌는지 확인하기도 알기도 어렵다.

단지 출시일은 마케팅적인 요소가 많다. 그 때 출시를 하면 분위기를 바꾼다던가 새로움을 주면서 사용자 방문을 늘리도록 하는 것이다. 빅뱅형태로 한번 꽝터트리는 방법도 필요할 때가 있지만, 점진적으로 출시를 하면서 고객의 만족도를 높여가는 것도 좋은 선택이다.

다시 본론으로 돌아가서 내가 말하고 싶은 DDD는 Deadline Driven Developement이다. 개발자들 아우성이 들린다. 데드라인을 지키기 위해서 초과근무를 하라는 이야기냐라고 물어볼 수도 있다. 아니다 정반대의 이야기를 하고 싶다. 사업적인 목표나 고객의 바램으로 출시가 중요한 과제라면 일단 데드라인을 정하고 기획/개발/QA/출시를 하자는 것이다. 날짜를 정하면 자연스럽게 개발공정상의 일정이 나온다. 이 일정 안에 출시를 하려면 리소스와 스펙을 조정을 할 수 밖에 없는 것이다. 리소스가 정해져 있다고 하면 스펙만을 조정하는 것이다. 사업적인 순발력도 맞추고 무리한개발을 하지 않아도 된다. 

내가 생각하기에 프로젝트는 보통 3개월 이내에 끝내는 것이 좋다. 설계, 테스트를 제외하면 순수 개발기간은 한달반정도을 일것이다. 프로젝트 인원도 많으면 속도가 느려진다. 프로젝트 성격에 따라서 다르지만 일반적으로 3명정도였을 때 가장 퍼포먼스가 좋았던것 같다. 그러면 3개월*3명 => 9m/m라는 결론이 나온다. 여기서 스펙은 개발자들이 한달반만에 구현이 가능한 수준이어야 한다.

Deadline Driven Developement은 스펙을 잘 조절을 하면서 가야하기때문에 고객과의 커뮤니케이션이 무척 중요하다. 이 부분에 자신감이 있을 때만 적합한 방법이다. 대부분의 실패한 프로젝트들의 특징은 기술적인 문제보다는 커뮤니케이션의 과다 발생으로 프로젝트가 지연되고 그러면서 품질이 떨어지는 경우를 많이 봤다.  Deadline Driven Developement으로 진행할 때 가장 주의해야할 사항이다.


Posted by ologist

2012/02/04 20:36 Developer

TDD할 때 네이밍

재성아찌가 TDD하는 방법을 공유했다.
http://www.slipp.net/wiki/pages/viewpage.action?pageId=950380

내가 하는 방법과 다른 부분이 있어서 간단하게 적어보려고 한다.

1. 테스트 대상 클래스 네이밍

나는 그냥 일반적인 자바 컨벤션을 따른다. 

public class CalculatorTest {
    @Test
    public void add() {
        Calculator calculator = new Calculator();
    }
}

테스트가 메소드가 짧은 경우는 full name을 안 쓰기도 한다. 

public class CalculatorTest {
    @Test
    public void add() {
        Calculator c = new Calculator();
    }
}  

2. 예상값과 실행결과의 변수명

actual, expected를 사용하지만 assert 시에 파라미터 순서가 헷갈려서 거꾸로 넣는 경우가 생기면서 테스트 가독성이 떨어지는 경우가 있고 여러개의 assert를 넣으면서 라인이 길어지면서 가독성이 떨어지는 경우가 있다.

kenny에게 FEST를 추천받았는데 문서를 보니 assert시에 가독성이 좋고 가독성면에서 장점이 있어보인다. 
http://fest.easytesting.org/  


나머지는 자바지기와 동일한 방법으로 테스트를 작성하고 있다.


 
Posted by ologist

2012/01/02 10:49 Developer

SNS 다음은 LNS?

PC통신에 이어서 아이러브스쿨, 싸이월드 등등의 SNS에 이서 LNS는 facebook에 timeline이 대표적인 feature로 보인다.

http://news.naver.com/main/hotissue/read.nhn?mid=hot&sid1=105&cid=303942&iid=562266&oid=015&aid=0002609150&ptype=011

* SNS : social network service
* LNS : life network service

관계와 개인의 인생...그러면 그 다음은 무엇일까?
사람 중심일까? 활동 중심일까?
Posted by ologist
아마존닷검 CEO "제프 베조스", 그가 말하는 고객을 두번 찾게 만드는 방법
http://blog.naver.com/2minrain/90130431818

1. 우리의 경쟁상대는 경쟁회사가 아니라 고객이다.
2. 단골고객을 만드는 최고의 방법은 첫 구매시 기대이상의 서비스를 하면 된다.

제프 베조스는 아마존CEO로서 이름을 알고 있었으나 최근에 아마존의 행보를 보면서 어떤 사람인지 궁금해지기 시작했다. 좀더 자세히 보려고 검색을 해보니 한글문서에서도 충분히 좋은 글들이 많이 보인다.

공격적인 리뷰, 마이크로 경영 및 디테일한 지식, 마케팅 전략, 플랫폼을 만들고 확장하는 모습들....
http://eggy.egloos.com/3764098
http://blog.naver.com/vooooooo/100139377732
http://sktstory.com/jeffrey-bezos-interview/
http://youngheajung.com/5




Posted by ologist

2011/07/26 00:54 분류없음

부채의 습격

최근 공공기관과 금융권 서비스에서 장애가 발생하고 있다. 이전에 농협사태 이후에 크고 작은 장애가 지속적으로 발생하는 것이다.

시스템이란 것이 항상 똑같은 상황으로 멈추어 있으면 장애가 나지 않겠지만, 상황은 매분매초 변하게 되어 있다. 꾸준히 관리를 해주지 않으면 문제가 생길 수도 있는 것이다.

아마 시스템을 만들 때도 일정압박에 낮은 퀄리티의 산출물이 나왔을 것이고 이제서야 하나둘씩 문제가 드러나기 시작하는 것이 아닐까? 

그 동안에 개발자들을 못살게 굴면서 만들어 온 시스템의 부채들이 앞으로 습격을 계속 할 것 같다.

서스테이닝 전문가들이 필요한 시점이다. 

나이스 오류
http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=105&oid=008&aid=0002579629

인터넷 지로 시스템 한때 마비
http://news.naver.com/main/hotissue/read.nhn?mid=hot&sid1=101&cid=302840&iid=303228&oid=055&aid=0000209686&ptype=011

우리은행 뱅킹 문제 많네
http://news.naver.com/main/hotissue/read.nhn?mid=hot&sid1=101&cid=302840&iid=9758189&oid=008&aid=0002579595&ptype=011

 

Posted by ologist

2011/06/30 00:20 분류없음

리더


조직의 성패는 리더의 역할과 능력에 달려 있다. 조직은 리더를 세우는데 신중해야 한다. 한 사람을 양성시키려다가 여러 사람을 잃을 수도 있다.

리더십은 지도자도 배 안에 타서 모두가 함께 움직이도록 하는 것인데 반해 헤드십은 지도자가 배 밖에 있으면서 배에 탄 사람들을 끌어당기고 있는 것이라 할 수 있다.

권위에 의존하고 꾸짖기만 하고 공포심만 심어 주는 상관이 회사를 망친다. 성공한 리더는 앞장서고 신바람 나게 하고 협동하고 잘못을 고쳐주며 부하직원들을 사랑하고 섬기고 감동시킨다.

사람의 능력이라는 것은 경험의 기회가 만들어 낸다. 윗사람이 아랫사람보다 그 일을 잘할 수 있다는 것은 윗사람에게 그 일을 해볼 기회가 많았기 때문이다. 그러므로 과감한 위임은 윗사람과 아랫사람 모두에게 도움이 되며, 궁극적으로는 조직 발전에 기여하게 된다.

상대에게 주의를 줄 때에는 일 대 일로 다른 사람이 없는 곳에서 하는 것이 원칙이다. 이것은 꼭 지켜야 한다.



Posted by ologist

최근에 농협사건으로 인해서 리눅스(유닉스) 명령어인 rm인 유명해졌다. 현재 언론이나 정부는 누군가에 의한 악의적인 공격으로 보인다고 하고 있다.

공격치고는 너무 단순한 명령어라 당황스럽지만, 완전 소설 쓰는 느낌도....
특히 이 시점에 북한을 의심하는 정부는 또 뭔가요? 어떤 이슈만 생기면 나오는 북한, 이젠 좀 고만;;

이런 사건이 발생하고 복구하는데 시간도 오래 걸리고 여러가지 추측만 무성한 지금 이게 바로 우리 IT역량의 현주소다. 시스템관리자, 개발자를 탓할 것이 아니라 질좋고 안전한 시스템을 만들기 위해서 투자를 해야 하는 것이다. 투자를 하기 위한 의사결정자들이 전체적으로 시스템, S/W에 대한 이해도가 낮다고 밖에 생각이 안든다.

농협관련 rm기사
http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=023&aid=0002257045
http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=038&aid=0002144077
http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=081&aid=0002181520

 

Posted by ologist
"org.springframework.dao.DataAccessResourceFailureException: Could not increment identity; nested exception is java.sql.SQLException: 트랜잭션(프로세스 ID 816)이 잠금 리소스에서 다른 프로세스와의 교착 상태가 발생하여 실행이 중지되었습니다. 트랜잭션을 다시 실행하십시오."

spring batch를 적용해서 수행하다가 보면, 위와 같은 에러를 만날 수가 있다. 말그대로 쿼리를 수행 후에 unique한 키발급이 되지 않은 상황이다. 트랜잭션이 보장되지 않도록 쿼리를 작성해서 발생하는 문제인데 MSSQL DB인 경우 간혹 발생한다.

이 경우 처리하는 방법이 2가지가 있다.

1. retry를 하는 방법
http://floatingcube.blogspot.com/2009/09/retry-spring-batch-job-due-to-database.html

2. 쿼리 패치
org.springframework.jdbc.support.incrementer.SqlServerMaxValueIncrementer.java 에서 사용하고 있는 쿼리를 수정한다.

<BEFORE>
insert into BATCH_JOB_SEQ default values.
select @@identity
delete from BATCH_JOB_SEQ where ID < 'before ID'

<AFTER>
아래처럼 트랜잭션을 관리하는 코드를 명시적으로 넣어준다.
begin tran
insert into BATCH_JOB_SEQ default values
rollback tran
select scope_identity()
Posted by ologist

"프로그래머의 길, 멘토에게 묻다"라는 책을 보면 엔지니어의 사고방식에 대해서 나옵니다.  소프트웨어 개발업무를 하면서 업무에 대해 스펙을 정리하고 지속적으로 개선하는 좋은 습관들이 개발 이외의 업무를 하더라도 효과적으로 업무를 수행한다는 이야기입니다. 우리 모두 소프트웨어 엔지니어로서 자부심을 가졌으면 합니다...^^
참고 서적 : http://book.naver.com/bookdb/book_detail.nhn?bid=6332442

아래 글들을 보면 구글을 비롯해서 facebook과 apple도 엔지니어 중심의 문화라는 것을 볼 수 있습니다. 특히 페이스북은 회계담당자도 엔지니어출신을 채용을 한적이 있다고 합니다.

<Facebook>
how facebook ships code
http://framethink.wordpress.com/2011/01/17/how-facebook-ships-code/
번역본 : http://logonjava.blogspot.com/2011/01/facebook-sw.html

<Apple>
Apple is run like a huge startup. The key to great products is small teams
http://sachin.posterous.com/apple-is-run-like-a-huge-startup
http://www.multiwriter.co.kr/803

8 Management Lessons I Learned Working At Apple
http://www.businessinsider.com/management-lessons-i-learned-working-at-apple-2010-7#challenge-your-employees-to-grow-4
번역본 : http://logonjava.blogspot.com/2010/08/apple.html

Posted by ologist
얼마전에 트위터를 보다가 배우 박중훈이 트윗이 리트윗되면서 퍼지는 글을 보았다.

유능한 감독은 유연성이 있다.꼭 지켜야 할 핵심이 아니라면 현장 상황에 자기 생각을 잘 맞춰 간다.그렇지 않은 감독은 반드시 자기가 생각한대로 100% 영상에 옮겨져야 한다.전자는 결과적으로 100%자기 생각을 관객에게 전달하고 후자는 그러다 지친다. - 박중훈

핵심과 유연성에 대한 이야기인데 위에 트윗은 핵심보다는 유연성에 맞추어서 표현글로 보인다. 감독역할을 하는 리더가 핵심이 아닌 것에서 집착을 하고 비용을 낭비를 한다면 배우들은 지쳐서 쓰러지게된다. 반대로 핵심이라면 어려운 상황이라도 반드시 일관성이 있게 지켜야 하고 배우들이 지치면 다독이면서 끌고 나가야 한다. 핵심을 버리고 성공하는 영화는 없을 것이다.

리더는 어떤 상황/업무에서 핵심을 잘 파악해야 한다. 본질이 무엇인지? 핵심이 무엇인지? 핵심을 통해서 만드는 가치는 무엇인지를 정의하고 구현을 해야 한다. 실제로 구현을 하면서 유연성 있게 대응하는 것은 리더의 역할이다. 핵심 이외의 것에서 이기적으로 구현을 하다가보면 리더를 따르는 이는 지쳐서 사라질 것이다.

리더를 믿고 따르는 사람들이 지치지 않도록 핵심과 핵심이 아닌 것에 대한 정의를 잘 해야 한다. 핵심이 아닌 것에 대해서는 유연성을 보이도록 하자. 그리고 리더는 항상 진심으로 마음을 전달할 수 있어야 한다.
Posted by ologist
이전버튼 1 2 3 4 5 ... 67 이전버튼

블로그 이미지
ologist

공지사항

Yesterday101
Today0
Total47,012

달력

 « |  » 2012.05
    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    

최근에 받은 트랙백

글 보관함