BLOG main image
분류 전체보기 (68)
excel.101 (0)
rewind (9)
(3)
(2)
목공 (3)
(3)
me2day (0)
The Ethereal Void (9)
코드 (14)
귀찮은것 (0)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
2011. 12. 15. 14:01
2년 전에 간단한 급여 계산 영역을 하나 구현할 일이 있었다. 이 전에 구현된 시스템이 있었는데, 좀 더 범용적으로 (간단하게 말하자면, 한국과 중국에 모두 사용 가능한) 사용 가능하도록 조정해야 되는 것이었다.

말이 조정이지 사실 다시 처음부터 작업을 했다.

일단, 급여는 기본급여와, 세액과 보험액을 계산하기 위한 부가 정보, 수당, 공제내역이 필요하다. 세금과  보험은 공제내역에 해당되고 수당에는 개별적으로 이 수당이 과세인지? 혹은 비과세인지, 혹은 과세액 범위가 있는지가 필요하다.

한국 같은 경우는 기본적으로 세금으로 소득세(갑근세)와 주민세가 있고, 보험에는 5대 보험이 적용된다. 중국도 한국과는 조금 다르지만, 기본적으로 소득에 대한 세금이 있고, 항목이 조금 다른 5대 보험이 있다.

이러한 차이 항목의 공통 분모를 추려내어 보면

하나. 개인의 급여명세(PayCheck)가 있다.
둘. 급여명세는 기본급여 정보와 수당(Allowance), 그리고 공제(Deduction)로 나누어진다.
셋, 세금(Tax), 보험(Insurance)는 공제로 포함된다.

상기 내역에 대한 항목을 추출해 본다.

* 급여명세 (PayCheck)
* 수당 (Allowance)
* 공제 (Deduction)
* 보험 (Insurance)
* 세금 (Tax)

급여명세 이후에 네가지 항목은 급여명세에서 사용자가 받게될 최종 급여액을 계산하는 개별항목으로 적용된다.

* 급여액 = (기본급여액) + (수당) - (공제 [일반, 세금, 보험])

개별 항목을 계산하기 위해서는 각 항목이 어떠한 방식으로 계산되는지에 대한 정보가 필요하다. 그리고 이 계산 정보를 사용하여 실제 급여항목들에 대해 각 항목에 대한 금액을 산출해줄 계산기가 필요하고!

한국에 필요한 계산기 (Calculator)

* 갑근세 계산기 : (매년 세법이 조금씩 바뀌므로 매년 수정이 필요하다.)
* 과세표준액 계산기 : (수당 항목 중에 과세액에 해당하는 내역들을 집산해서 과세표준액을 산정한다.)
* 주민세 계산기 : (갑근세의 %)

중국에 필요한 계산기

* 소득세 계산기 : (중국 소득세는 의외로 간단하다.)

보험에 대한 계산기

기본적으로 보험은 보험금액이 산정되는 기준액에 대한 보험요율로 산정되며, 가입자와 사용자 부담요율이 나워져 있고, 금액에 대한 상한, 하한 인자가 들어간다.

이를 토대로 보험 정보(InsuranceInfo)를 구성한다.

* 사용자 부담요율
* 가입자 부담요율
* 보험 유형
* 상한액
* 하한액

이러한 인자에 사용자의 보험액 계산에 대한 부가정보를 넣어주면 계산되는 계산기를 만들어 주고, 이 보험 정보를 토대로 공통적인 보험액 계산을 해주는 계산기를 구현한다.

그리고 마지막으로 사용자 수식 계산기 하나, 이는 사용자가 특정 계산이 필요할 경우를 위해 구현한다. 수식문에 대한 처리는 NCalc 라이브러리를 사용했다.

여기까지 하면 급여명세(PayCheck)에 대해 각각 계산기가 계산 정보 (혹은 보험 정보)를 가지고 명세를 계산하게 된다. 사용자에게 필요한 것은 지역에 대한 로케일 설정, 그리고 사용하는 수당항목, 공제항목 설정이다. 이를 기반으로 계산을 수행하게 되는데 여기서 한가지 문제가 있다.

예를 한국 같은 경우, 주민세는 소득세액의 몇%를 기준으로 산정하고, 세액도 과세표준액을 기준으로 산정해야 된다. 고로 특정 계산기가 어떤 계산기 보다 우선적으로 처리되어야 할 순위가 필요하다.

이를 위해 계산기 전체 목록을 반환할 때 계산기를 사전 정렬한다.

음 여기까지 하면 명세에 대한 계산 부분이 정리가 된다. 계산기-명세 계산 부분은 Visitor 패턴으로 구현했고, 보험 정보는 따로 따로 제공자를 두어 지역 로케일에 따라 필요한 보험 정보를 잘 묶어서 관리하도록 처리했다.

차후에 세법이나 보험 정책이 바뀌면 해당 보험 정보나 계산기만 조정해 주면 되고, 필요할 경우, 계산기 정보와 기타 파트는 모두 다른 라이브러리로 분리 가능하도록 처리해 놨다.

뭐 더 필요한게 있을려나?
반응형
2011. 12. 15. 13:09
사내 프로젝트 관리 시스템으로 Redmine을 사용한지 벌써 3년이 넘어간다. 처음에 0.8.x 버젼에서 시작해서 약 세번정도 업데이트하여 현재 1.2.2 버젼을 사용 중이다.

거의 대부분의 기능을 활용하면서 쓴거 같은데, 요즘엔 사후관리 (추정/실제 시간) 부분은 거의 사용하지를 않고 있다. 이 부분에 대한 정확한 통계에 대한 리뷰가 없어서 그럴 듯.

초기에는 trac이나 Basecamp+잡것 연동 에도 기웃거려 봤지만, 이젠 사실 Redmine 하나면 충분하고, 가끔 간단하게 혹은 다른 개발 외 협업이 필요한 경우는 Trello 라는 대쉬보드형 협업 툴이 있으니 뭐 이걸로 사용하는 것도 좋다. Trello 사용 후에는 구글 할일 목록을 사용하는 빈도도 거의 없어졌다.

필요한 기능은 거의 다 기본으로 있고 (이슈 트랙킹, 위키, 게시판 등등), 그 외 잡다하게 필요한 것들 (자동화된 문서 게시 등등)은 플러그인 형태로 충분히 연동 가능하니, 그냥 이 우물 안에서 계속 놀게 된다.

그래도 뭐 새로운 툴이 나오면 계속 기웃거리겠지. 
반응형
2011. 5. 17. 18:10

이젠 잊혀지면 쓰게되는 군요. 번역은 오래 전에 전부 해놨는데 어디로 갔는지, 이것만 올리면 앞으로 에필로그를 포함해 두개의 이야기만 남게 됩니다. 얼른 마무리하는 차원에서! 올리겠습니다. 근데 이 편은 인물이름이 많이 나오는데 한글표기는 가능한 비공식 한글화 작업하신 분들이 사용한 표기를 그대로 사용하였습니다.

: )

8부

명예 - Dupré와 가고일

궁극의 지혜의 서가 회복된 이후, 가고일 친구들이 브라타니언 사회의 일원으로 참여하게 된 일을 당신은 이미 알고 있을겁니다. 또한 로드 브리티쉬이 가고일의 왕인, 드락시누솜과 맺은 조약에도 불구하고 그 조약이 즉시 두 종족에게 어떤 단결을 가져다 주지 않았다는 것도 그다지 놀라운 일이 아닐 것입니다. 여전히 일부 무지한 인간들은 가고일에 대한 증오와 두려움을 숨기는 것을 멈추지 않았으며, 역시 다루기 힘든 일부 가고일들도 인간 사회의 규칙과 생각을 따른 다는 것 자체를 분노와 멸시의 시선으로 바라보았습니다. 그러한 때에 가장 악명높은 가고일이 있었으니, 그 이름은 그라탁말렘이었습니다. 그는 동족들 사이에서 날카로운 지성과 함께 사나운 성격을 가진 인물로 알려졌는데, 두 종족 사이에 평화조약이 체결되자, 그는 등을 돌려 그와 뜻을 같이 하는 몇몇의 가고일 형제들과 함께 작은 군대를 만들었습니다. 이 사나운 병사들은 끊임없이, 교외의 작은 농장을 약탈하고 불지렀지만, 저항할 힘이 없는 적들에 대해서는 살육을 멈추었습니다. 하지만 그럼에도 불구하고, 그들이 저지른 일들은 그들의 피해자들에게 많은 고통과 피해를 안겨주었습니다.

브리튼에서 유(Yew)로 가는 길 중간에 가을 맥주로 아주 유명한 한 여관이 있었는데, 거기서 나오는 맥주는 아주 잘 양조된 것이라, 새로운 맥주가 나올 쯤이면 많은 사람들이 근 2주간이나 천막을 치고, 손님을 받으며, 축제와 같은 분위기로 머물며 맥주를 즐기곤 하던 곳이었습니다. 

그 때가 마침 그라탁말렘이 그 자신의 부대를 이끌고 그 여관을 공격하기로 한 때였습니다. 그들은 늦은 오후가 되자 재빠르게 몇 안되는 고용된 경비병을 재압하고 인간들에게 당장 이 곳을 떠나지 않은 그들의 목전에서 이 곳이 불에 타버리는 것을 보게 될 것이라고 조롱하듯 명령하였습니다.

그때, 한 축제의 손님이 군중들 사이에서 홀로 걸어나왔습니다. 그는 신사의 차림이었으나, 손에는 기사의 검을 들고 있었습니다. 그가 말했습니다.

"나는 기사이자 팰러딘인 Dupré 로써 이 불법적인 급습을 당장 중지하고 로드 브리티쉬의 이름 앞에 항복할 것을 명한다."

그러나 그라탁말렘은 비웃으며 말했습니다.

"어떤 인간이나 혹은 가고일의 이름을 갖다붙여 소환한다고 하더라도, 내 마음 속에 한 조각 두려움도 일으키지 못하므로, 너의 항복 요구를 거절해 주겠다."

(지금에야 고백하건데, 저 말은 따지자면 정확하게 그가 했던 말은 아닙니다. 이 이야기에서 굳이 가고일의 그 불쾌할 정도로 이상스러우며, 복잡한 말투를 흉내내지는 않을 것입니다.)

Dupré가 응수했습니다.

"그렇다면 명예롭게 네 부대원과 정당하게 1:1 대결을 통해 승자가 이 여관의 운명을 결정짓도록 하자."

가고일은 다시 한번 인간의 뻔뻔함에 웃었습니다. 하지만 그는 곧 말했습니다.

"좋아, 네가 정, 그렇다면. 인간이여, 네 제안이 솔깃하긴 하군. 너는 나의 세 형제들과 싸우게 될 것이다. 만약 네가 그들을 모두 물리친다면 나의 너그러움에 대한 적절한 보상품만을 하나만 가지고 이 곳에서 물러나 주겠다."

그리고 그라탁말렘은 그의 세 챔피언을 지명하였습니다.  첫째는 덩치가 아주 크며, 키가 3미터가 훨씬 넘고 커다란 철퇴를 가진 가고일이었고, 둘째는 그 보다는 젊은 챔피언으로 Dupré 키 만큼이나 큰 장검을 가지고 있었습니다. 셋째는 그라탁말렘의 오른팔로써 총부대장을 맡고 있는 가고일로 각각 양손에 커다란 날을 가진 도끼를 들고 있었습니다.

그러나 Dupré는 수 많은 용들과 데몬, 거인들과 전투 경험이 있는 베테랑이 있으니... 뭐 물론 가고일들도 그렇겠죠. 하지만 그는 적의 크기나 사나움 따위에 두려워 하지 않았습니다. 하나 씩 적들이 교전해 왔고, 처음 달려든 두 가고일은 심각한 상처를 입은채 쓰러졌고, 마지막 가고일은 완전히 죽어 쓰러져 버렸습니다.

이러한 손실은 오히려 그라탁말렘을 즐겁게 만든 것 같이 보였습니다. 마지막으로 달려든 가고일이 전장에서 끌려나가자, 그가 공언하였습니다.


"좋아 내 말에 대한 약속을 지키도록하지, 하지만 나는 내 보상을 만드시 가져가야만 하겠다. 그 보상은 바로 당신이다. 기사여"

"기꺼이 이 사람들의 안전을 위해 내 생명을 내어놓을 각오가 되어있다."

Dupré가 대답했습니다.

"물론 나를 가져가려면 좀 더 비싼 비용을 더 치뤄야 하겠지만 말이다."

"아니지." 가고일이 가로저었습니다.

"나는 네 잘린 머리 따위에는 관심이 없다. 오늘 네가 내 총부대장을 죽게 했으니, 나는 네가 그 책임을 대신 맡기를 원한다. 내 부대에 들어와서 네 전투기술을 가르쳐야만 할 것이다." 

"나는 내 왕과 국민을 배반하는 부대에 들어갈 수 없다!" Dupré 대답했습니다.

"그런 의미가 아니지." 가고일이 조롱하며 대답했습니다.

"너는 단지 내 부대원을 훈련시키고 가르치면 될 것이다. 그 뒤로 전투가 벌어졌을때 내가 너에게 내릴 명령은 단지 우리가 벌이는 전투에 저항하거나 우리의 노력을 방해하지만 않는 것 뿐." 

Dupré는 결국 그라탁말렘이 악마의 거래를 제안하고 있다는 것을 깨달았습니다. 어느 결정이나, 그에게는 그 자신에게 내려진 명예로운 칭호를 완전히 박살내는 결과를 가져올 수 있다는 것을 알았지만, 쉽사리 무고한 여관이 완전히 파괴되는 것을 보고 있을 수도, 그렇다고 홀로 가고일 부대를 전부 맞설수도 없을 노릇이었습니다. 게다가 가장 중요한 것은 이 보상에 대한 요구 아래 싸운 것이기 때문에 그 요구를 들어주지도 않을 수 없는 것이었습니다. 그는 단지 언젠가는 적절하게 빠져나올 방법이 생길 것이라는 희망만을 품은채 대답했습니다.

"알겠다." 

그는 그를 비웃고 있는 가고일 앞에 무릎을 꿇고 동의 표시로 검을 바쳤습니다.

그리하여, 그는 가고일들과 함께 살며 그들은 훈련시키고 연습시켰습니다. 그러면서 그는 가고일들이 완력과 용기에서는 탁월하지만, 집단 전술이나 전략에는 취약하다는 것을 알았습니다. 그러나 곧 그들은 그 둘을 빠르게 익혀나갔습니다. 또한 유용한 전략을 감출려는 그의 의도 또한, 그들의 지휘관의 감시의 눈길아래서, 바로 간파되고 모두에게 분석되어 전달되어 진다는 것도 깨달았습니다.

Dupré는 오직 로드 브리티쉬와 맞서싸우게 되는 상황에서 벌어지는 전투에는 참여할 수 없다고 맹세하였기 때문에, 새로운 기술을 고블린 부대나, 해적, 도적들에게 시험해 보기를 원하는 제안까지는 거절할 수 없었습니다. 그는 가고일들과 함께 싸우며 그가 가르친 가르침이 실제로 시험되는 것을 보았습니다. 

하지만 결국 우려하던 날이 오게되었습니다. 그라탁말렘은 그들이 방호벽으로 둘러쌓인 개리슨 왕의 군대가 주문한 마을을 공격할 것이라고 공표하였습니다. 그것은 가고일들이 이제 껏 상대해 보지 못한 강한 상대였지만, Dupré는 고맙게도 그의 가르침에 힘입어 충분히 이길 수 있을 것을 알았습니다.

전투가 일어나던 날, Dupré는 그의 손으로 일으킨 악을 외면할 수 없어, 언덕에 올라 폐허가 된 마을을 내려다 보았습니다. 그때 그가 거기서 기다리던 도중, 한 분대의 가고일들이 그에게 다가와 예상치 못한 질문을 던졌습니다.

"부대장님."

그들 중 한명이 물었습니다.

"우리는 모두 당신의 모든 행동과 결정의 근거가 명예에 있다는 것을 알고 있습니다. 그것은 정말 우리에게 낯선 개념이지만, 그럼에도 불구하고 우리는 오늘 우리가 싸우는 전투가 명예로운 것인지 알고자 원합니다."

Dupré는 가고일의 냉철한 지성의 힘을 잘 알고 있었습니다. 만약 그가 오늘 전투에 대해 설득을 할려고 시도한다면 그것은 틀림없이 간파되어, 영원히 가고일들에게서 신뢰를 잃어버릴 것이었습니다. 그리고 또한 그가 그라탁말렘에게 그의 어떠한 계획도 방해하지 않을 것이라고 맹세한 것에 대해서도 염두해 두었습니다. 그렇기에 그는 그 질문에 가장 솔직하고 직선적인 대답을 하였습니다.

"모두들 너희의 대장이 로드 브리티쉬는 폭군이라고 말한 것을 들었을 것이다. 만약 정말 그가 폭군이 맞다면, 그에 대항하여 봉기하는 것은 불명예스러운 것이 아니다. 그렇지만 너희들은 내가 충성을 서약한 것에 대한 맹세에 따르는 것이 아니라 스스로 자신의 이유와 무엇이 옳은 것인지에 따라 당신들의 대장을 따르는 것이라고 종종 들어왔다. 이제 그대들이 마음과 심장이 나에게로 와서 오늘 전투가 진정으로 명예로운 것인지를 묻고 있다. 아마도 그 질문 자체가 너희들이 바로 원하는 해답이 아닐까 한다."

그러자, 가고일들은 흩어져 질문에 대한 논쟁을 이어나갔으며, 결국 부대의 1/3은 그라탁말렘의 지휘에 따라 마을을 공격하는 것을 거부하기로 결정했습니다. 그리고 젊고 성급한 한 가고일 (Dupré가 처음 여관에 쓰러뜨린)은 마을로 내려가 그들의 공격계획에 대해 경고를 전달하였습니다.

그럼에도, 그라탁말렘은 냉정하게 전투를 무를 것을 거부하고, 이미 경고를 전달받아 잘 준비된 적과 전투를 벌였고, 그 와중에 죽임을 당하게 되었습니다.

그리하여, 전투를 거부한 가고일들은 (물론 몇몇 생존자들도 포함하고 말입니다.) Dupré에게 돌아와 그에게 예전처럼 자신들을 이끌어 줄 것을 간곡히 부탁하였습니다. 그리하여 인간들이 자신들도 충분히 해적이나 도적, 괴물들에 대항하여 싸울 수 있음을 증명할 수 있을거라고 말입니다. Dupré는 그에 동의하고, 그들의 이름을 '브리타니아의 메뚜끼떼'라고 지었고, 수해 동안 많은 좋은 일들로 인해 그들은 큰 명성을 다시 얻을수 있었습니다.

반응형
2009. 6. 28. 20:41
물론 방법론적으로나, 유지보수 측면에서 FormEx<TClass> : System.Windows.Forms.Form (혹은 UserControl)와 같은 디자인은 그다지 좋은 디자인 방법은 아니지만, 간혹 사용해야 될 경우가 있다.

문제는 코드 자체가 아니라 디자인타임에서 Generic Form이 정상적으로 표시되지 않는 문제가 있는 것.
이럴 때는 다음과 같은 방법으로 살짝 IDE를 속일 수 있다.

#FormEx.cs
/* Base Class */
public partial class FormEx<TClass> : System.Windows.Forms.Form
{
} 

#FormCustomEx.cs
/* 마지막으로.. : ) */
public partial class FormCustomEx : FormCustom
{
} 

/* 여기서 상속을 받아.. */
public partial class FormCustom : FormEx { }

약간 IDE Hack에 가깝지만, 간혹 유용한 경우가 있다. 

refs::
반응형
2009. 2. 8. 21:44
아직도 어떤 사람들은 숙명과, 인도를 구분을 하지 못한 채, 자신이 무엇인가를 이루고, 믿을 수 있고, 또 믿고 있다는 착각에 빠져서 살아간다. 한 때 나도 그런 사람 중에 하나였다. 거기에 더하여, 절망 중에 포기한 사람이었다. 하지만, 이젠 절망도 포기도 없고, 실패도 없는 것을 알았다. 나의 실패의 고백이란 무엇인가? 실패는 없다. 기회는 있지만, 실패는 없다. 모든 것은 돌아봄에서 시작된다. 시작되지 않았어도, 우린 돌아볼 수 있다. 기억을 허락하신 시간부터 지금까지 기억하는 이유는 거기에 있다고 생각한다.

오늘 나는 빛의 속도를 다시 한번 생각했다. 초당 30만km, 어느 순간 피어져 있는 저 별은 지금 저 곳에 존재하는 것일까? 우리는 그 가시와, 순간의 영역에 살면서, 모든 것이 존재한다고 생각하며, 보이는 것과, 보이는 한계 안에서 보고 듣고 믿는다. 정말 그럴까? 그렇게 확신할 수 있을까? 객관적 확증만을 자신의 것으로 착각한 채 살아가는 사람들, 하루하루 열망과 땀과 피로 이루어진 고통스런 경험없이, 어떻게 남이 만들어 놓은 경험을 내 것이라고 속이고 살아 갈 수 있을까? 

빛의 속도는 점점 느려진다. 봐라. 상상해 봐라, 빛의 속도가 초당 1분인 세상을, 당신이 볼 수 있는 것을 말해 봐라. 당신은 무엇을 말할 수 있겠는가?

그래도 아직 난 많은 것이 변하지 않았다. 다만, 하루, 어제보다는 더 큰 주기율안에서 큰 울림이 되기를 원하고 있다.

그렇게 누군가는 나를 믿어 주는 것을 알고 있다.

거기서 쉬자.
반응형
2009. 1. 13. 14:07
욕심 부리지 않겠습니다.

기꺼운 마음도, 아닌, 묵묵함으로,

그저 바라볼 뿐 입니다.

아는 자를 알게 하시는,

하루 앞에,

당신은 이 하루를 대신 사셨습니다.

그것이 내 몫 아니라면,

나는 그저 다시 바라볼 뿐입니다.

나는 그저 그 사랑안에서 춤 출 뿐입니다.
반응형
2008. 12. 19. 23:49
초원의 빛 / 윌리암 워즈워드
 
여기 적힌 먹빛이 희미해질수록 
당신을 향한 마음이 희미해진다면 
난 당신을 잊겠습니다.
 
초원의 빛이여 
꽃의 영광이여 
 
다시는 그것이 돌려지지 않는다 하더라도 서러워 말지니 
차라리 그 속 깊이 간직한 오묘한 힘을 얻으소서 
 
초원의 빛이여 
그 빛 빛날 때 그대 영광 빛을 얻으소서! 
 
한때 그렇게도 찬란한 빛이었건만 
이젠 영원히 눈앞에서 사라져 버리고 
초원의 빛이여 
꽃의 영광이여 
 
다시 찾을 길 없을 지라도 우리 서러워 말지니 
도리어 뒤에 남은 것에서 힘을 얻으소서 
 
여태 있었고 또 길이 있을 그 원시의 공감 가운데에서 
인간의 고뇌에서 우러나는 그 위로의 생각 가운데에서 
죽음을 뚫어 보는 그 믿음 가운데에서 
현명한 마음을 부르는 세월 가운데..... 
 

반응형
2008. 12. 16. 23:00
그림자, 아련히 떠도는 나뭇가지 아래

서린무늬

서린눈물

잃어버리고 다시 잃어버린

한켠에 스며버린

오늘
반응형
2008. 11. 17. 16:20
"세상에는 자기를 죄인시하는 의인, 자기를 의인시하는 죄인, 두 종류의 사람 밖에 없다."

- 파스칼

반응형
2008. 11. 3. 15:13
네피림의 망상을 버려라.

신앙 안에서의 끝임없는 책망.

그럼에도 불구하고,

그럼에도 불구하고,


반응형