'SI개발'에 해당되는 글 18건

  1. 2016.01.26 MS SQL에서 오라클의 INSTR와 같은 함수
  2. 2016.01.26 문자열의 특정 부분을 지정된 길이만큼 반환하는 문제의 substr비교(오라클, ms sql, 자바, 자바스크립트, xplatform)
  3. 2016.01.26 MS SQL에서 문자 합치기 oracle의 concat 혹은 ||
  4. 2016.01.19 [XPlatform] 동적그리드 작성시 주의할점
  5. 2016.01.19 [XPlatform] 엑셀 export시 셀서식이 맘대로 안될때
  6. 2016.01.19 [XPlatform] getRowType에서 체크박스 칼럼은 제외하고 싶을때
  7. 2016.01.19 MS SQL에서 오라클의 dual과 같은 dummy table
  8. 2016.01.09 막장 프로젝트 구별법 2

특정 문자열의 위치를 검색하려고 할때 오라클에서는 instr함수를 사용합니다.

 

SELECT INSTR('0123456789','2' ) FROM DUAL

 

결과값: 3

 

 

Ms Sql에서는 charindex를 씁니다. 인자의 순서도 바뀌고요.

 

SELECT CHARINDEX('2', '0123456789')

 

결과값: 3

 

문제의 substr 때로는 substring이기도 하죠. 둘다 쓰기도 하고요. @_@;; 

언어별로 혹은 DB별로 정리해보겠습니다. (오라클, Mssql, 자바, 자바스크립트, XPlatform)

 

1. Oracle

substr(char, postion, length) - length는 생략가능

 

SELECT SUBSTR('0123456789',2,3) FROM DUAL;

 

결과: 123

 

2. Ms Sql

SUBSTRING(expression ,start , length) - length를 생략할 경우 오류발생

 

SELECT SUBSTRING('0123456789',2,3)

 

결과: 123

 

3. Java

public String substring(int beginIndex)
public String substring(int beginIndex, int endIndex) - 두번째 인자가 길이가 아닌 '종료위치'임에 유의

 

 

"0123456789".substring(2,3)

 

결과: 2

 

4. JavaScript

(1) string.substr(start,length) - length는 생략가능

 

"0123456789".substr(2,3);

 

결과: 234

 

(2) string.substring(start, end) - end index는 생략가능

 

"0123456789".substring(2,3);

 

결과: 2

 

 

5. XPlatform

(1) String.substr(nStart [, nLength ]) - length는 생략가능

 

"0123456789".substr(2,3);

 

결과: 234

 

(2) String.substring(nStart, nEnd)

 

"0123456789".substring(2,3);

 

결과: 2

 

문자 합치기 기능입니다.

 

1. oracle: || 이나 concat사용

 

 SELECT 1 || 2 FROM DUAL;

 SELECT CONCAT(1, 2) FROM DUAL; 

 

결과: 12

 

2. ms sql

 

SELECT '1' + '2'

 

결과: 12

 

※ 주의할 점은 Ms Sql에서 다음과 같이 실행하면 결과가 달라집니다.

SELECT 1 + 2

 

결과: 3

 

※ 오라클에서는 + 는 연산자로 인식해서 따옴표 존재여부와 상관없이 더하기로 실행합니다. 문자에 +를 쓰면 Invalid identifier나 format에러가 발생하겠죠.

XPlatform이 아주 편하고 국내 SI환경에 적합한데, 고급기능으로 갈수록 무지 힘들어지는 경향이 있습니다. 그중하나가 동적그리드인데요. 공통 Library에 동적그리드 메쏘드가 입맛에 맞는 형태로 등록이 되어있다면 그냥 가져다가 쓰면 되는데, 보통 동적그리드는 공통 모듈에 잘 포함을 안시키더라구요. Lib에 없어도 Grid의 스크립트를 참조해서 원하는 그리드 스크립트를 변수와 조합해서 쓰시면 됩니다.

 

다만, 동적그리드 연동을 하려다보면 dataset의 onvaluechanged이벤트를 많이 쓰게되는데, 여기서 미리 주의를 해주셔야하는 부분이 있습니다.

 

동적 그리드에 데이타를 입히거나 그리드속성을 변경하다보면 데이타셋도 변경되는 로직이 필요하게 마련입니다. 데이타셋 변경할때, onvaluechanged이벤트를 타지 않게끔 다음과 같은 라인을 로직 시작전과 후에 넣어주시는걸 잊지마세요. 초창기때나, 아니면 종종 까먹고 엉뚱한 곳에서 디버깅하다가 시간 낭비하는 경우가 생깁니다. ^^

ds_abc.enableevent = false;

~~~~~~

로직

~~~~~~

ds_abc.enableevent = true;

XPlatform이 편리하긴 한데, 엑셀 세부 사항으로 요건이 나오기 시작하면 골치아파집니다. export를 했는데, (1,114.3)과 같은 값이 입력되어있으면 엑셀에서는 -1,114.3으로 나오게됩니다.

 

이거 해결하려고 지원센터에 문의(게시판)했더니, 여자 개발자분이 지원 담당자였는데, 엑셀의 고유기능이라 지원대상이 아니라고 하더군요. ㄷㄷㄷ

 

이 문제를 해결하려면 그리드 속성으로 해결할 수 밖에 없습니다. displaytype을 normal이나 number등이 아닌, "text"로 변경하셔서 엑셀에서 들어온 값 그대로 받아들이게 하는게 제일 속편합니다. 이거 알아내는데, 한참 걸렸네요(게다가 동적 그리드다보니) ㅋ 진작 답변에서 그렇게 안내해주셨더라면 좋았을텐데.

 

 

getRowType으로 선택된 행의 유형(초기, 추가, 수정, 삭제 등)을 파악하는데요.

그리드에 체크박스가 있는 경우(dataset과 연동) 데이타셋이 수정된 것으로 나옵니다.

이 경우, 이벤트에서 체크박스 클릭전과 후에 다음과 같은 처리를 해준다면 체크박스를 아무리 클릭해도 해당 row의 type을 변경하지 않게됩니다.

 

/*******************************************************************************
* 기      능   : ds_result의 cancolumnchange 이벤트
* 설      명   :
********************************************************************************/
function ds_result_cancolumnchange(obj:Dataset, e:DSColChangeEventInfo)
{
 if(e.columnid == "ROW_CHK" )
 {
  obj.updatecontrol = false; //체크박스만 클릭했을때는 dataset RowType 변경이 없도록 설정
 } 
}

/*******************************************************************************
* 기      능   : ds_result의 oncolumnchanged 이벤트
* 설      명   :
********************************************************************************/
function ds_result_oncolumnchanged(obj:Dataset, e:DSColChangeEventInfo)
{
 if(e.columnid == "ROW_CHK" )
 {
  obj.updatecontrol = true; //체크박스만 클릭했을때는 dataset RowType 변경이 없도록 설정했다가 변경후에는 다시 변경가능하도록 설정
 }
}

오라클에서는 dual이라는 더미 테이블을 제공해서 다음과 같은 테스트를 할 수 있게 해주죠.

 

SELECT 1 FROM DUAL;

 

티베로에서도 마찬가지입니다.

 

 

그럼 MS SQL에서는 어떻게 쓸까요?

 

SELECT 1

 

하시면 됩니다.

 

 

즐코딩요~

 

(이미지출처: Phil and Pam Gradwell, 2008, 링크)

 

막장 프로젝트란 무엇일까요? 왜 애초에 이런 일이 발생하는 걸까요?

 

소프트웨어의 위기(software crisis)? 터무니없는 저가입찰금액? Man month기반 견적 산정? 건설프로젝트에 짜맞춘듯한 체계? 난잡한 하도급 레벨(갑을병정무기경신..)? 고객사 갑질? 무능한 PM? 무늬만 설계자? 경력세탁 국비지원교육 개발자? 개발자등급제도? 등급별 단가체계?

 

막상 정의를 내리고, 원인을 꼽으라니 어렵네요. 경험으로 잘 정리해주신 윤석찬 님 포스팅의 일부로 대신하고자 합니다.

 

우리는 SI 업체가 아니었지만 그냥 기존의 서비스 개발 경험을 통해 유명 S대기업의 포털을 만들어 주는 일을 해 볼 수 있게 되었다. 하지만 그 때 경험이 얼마나 진절머리 났는지 그 프로젝트를 끝으로 회사가 아무리 어려워도 하청 구조를 가진 대형 SI 프로젝트에는 절대로 참여하지 않았다.

 

내가 보기엔 소프트웨어 개발자들에게 소위 막장 인생인 곳은 바로 SI 현장 뿐이라고 본다. 다단계 SI 하청 구조와 인력 파견과 같은 막장의 현실은 과거에도 있었고 현재도 존재한다. 전혀 새삼스러운 것이 아니라는 말이다. - "개발자들이여 막장을 떠나라!" (윤석찬, 2007)

 

이번 프로젝트만큼은 제대로 된 프로젝트였으면 좋겠다~~ 이게 아마 모든 SI개발자들의 바램일 것입니다. 어림잡아, SI프로젝트의 70%가 야근을 수반하고 20%정도는 막장이지 않을까 싶습니다. 10%는 헬오브헬 정도? 불행인지 다행인지 저는 헬오브헬(3대 막장)은 겪은 적이 없고, 헬은 몇년전에 집중적으로 경험해봤고, 나머지는 평균정도 였던 것 같습니다.

 

평균이라고 하는 곳도 야근강요는 기본이었죠. 2014년도에 망하기 일보직전의 프로젝트에 단기로 긴급 투입된 적이 있었는데, 설계자 분 중의 한번이 자부심이 대단하시더라구요. 자기가 맡은 프로젝트는 단한번도 실패한적이 없다고. 그런데, 다른분들한테 들어보니 그분이 프로젝트 말아먹은 주범중의 하나라고 하더라구요. 저야 뭐 그분이랑 같이 일한것은 아니어서 정확히 모르겠으나, 확실한건, 아 저분은 아직 진정한 막장을 경험해보지 못하셨구나 싶었습니다. 결국 그 프로젝트는 애석하게, 그리고 PL의 자부심과는 정반대로, 투입 일주일만에 drop검토 착수 후 한달 후 완전 drop이 되었습니다.

 

프로젝트의 실패가 반드시 개인의 역량이 뛰어나다고 해서 발생하지 않는 것은 아니거든요. 팀플레이인데, 혼자 잘한다고 될까요? 그리고, 우리가 막장이라고 부르는 프로젝트는 개인의 역량으로 힘을 합쳐 넘기에는 너무도 버거운 구조적인 문제로 발생하는 경우가 대부분이기 때문입니다. 내가 아무리 희생정신으로 밤낮으로, 네덜란드 소년마냥 둑의 구멍에 온몸을 넣고 버텨도 극복할 수 없을때, 경험하게 되는 스트레스는 상상을 초월합니다. 정말 사력을 다해 버텨서 (8시출근, 새벽2시퇴근, 주말, 공휴일 몇달째 출근 등) 차세대 오픈을 경험한 적도 있긴 합니다만, 그런 프로젝트를 연달아서 했다가는 아마 몸이 남아나지 않을 것입니다.

 

서론이 너무 길어졌네요. 그렇다면, 소위 막장 프로젝트를 피할 수 있는 방법이 있을까요? 네, 어느정도는요.

 

프로젝트 투입시 프리랜서나 파견일 경우 소위 인터뷰를 봅니다 (안 보는 경우도 있지만요).

 

질문에 대한 답변을 한 후, 개발자도 질문을 할 기회가 주어집니다. 개발자는 이때 프로젝트에 대한 정보를 얻으시면 됩니다.

 

제 경험상으로는 인터뷰나 사전정보조회 결과 다음과 같은 요소들이 존재할 경우, 상황이 좋지 않은 프로젝트일 확률이 높습니다. 또한, 해당사항이 많을수록 막장의 정도는 높아진다고 볼 수 있습니다.

물론, 항상 그런 것은 아니므로 종합적 판단이 필요합니다. 프로젝트 투입 초창기에 느낄 수 있는 요소도 포함하겠습니다:

  • 인터뷰시 야근가능하신가요? 주말에 출근하실 수 있나요? 등의 질문을 하는 경우
  • 질문자의 눈빛이나 말투에서 강압적 혹인 군대식 분위기가 느껴지는 경우
  • 반대로 오버하는 듯한 느낌이 들고, 프로젝트진행 상황에 대해 너무 완벽하다고 홍보
  • 프로젝트명에 "차세대"가 들어감
  • 외국회사가 개발하고 관리하는 프레임워크 사용
  • 수주사가 외국회사와 컨소시엄 구성
  • 복장규제(정장 강요, 한여름에도 반팔상의 금지, 엄격한 비즈니스 캐주얼 적용 등)
  • 9시 이전 출근(예: 8시, 8시반)
  • 고객사나 수주사 PMO직원이 매일 눈을 부릅뜨고 돌아다니며, 출근시간에 개발자들 자리에 있는지 확인
  • 10시 이후 퇴근(10시에 퇴근하는데도, 왠지 머뭇거리게 되는 분위기)
  • 투입 첫날부터 야근
  • 출근(퇴근) 시간이 1시간 30분이상 소요
  • 보안이 지나치게 철저하여 개발에 방해될 수준
  • 불필요한 툴(개발, DB연결, XML관리 등) 사용이 지나치게 많음
  • 형식적 관료주의 아키텍쳐: 서버단 구조를 불필요하게 세분화(예: 간단한 조회화면 만드는데, 자바 파일 12개가 필요한 경우)
  • 고객사 문화가 수직적이고 관료적
  • 과거 뉴스 조회시 프로젝트 drop, 지연, 소송 등 발생 빈번
  • 과거 프로젝트 검색시 부정적 평가가 대부분(일터Q&A - IT노조, OKKY-좋은회사/나쁜회사, 혹은 그냥 google검색)
  • 요건이 불분명하고, 알아서 해주세요라고 요청하는 경우
  • 요건변경이 결함으로 취급되는 경우
  • 설계가 제대로 마무리가 안되었는데도(ERD완성도, 공통코드, 테이블이관 완성도 65%이하),  화면개발이 완벽하게 종료되기를 요구하는 경우
  • 요건을 계속 바꾸면서 처음듣는 얘기라며 발뺌하는 경우(현업, PL, 설계자) - 그중 최고는 DB설계까지 바꿔놨는데, 결국 최초의 요건으로 회귀
  • 업체 사장이신 분이 PM 및 설계자 역할을 하는 경우
  • 장시간 회의의 결론이 다음 회의 약속시간 정하는 경우
  • 개발자가 소집되는 회의가 빈번하게 발생
  • 책상사이의 간격이 매우좁다. 들어갔을때 환기도 안되고, 닭장같은 느낌이 든다.
  • 화장실이 미어터진다
  • Catch-up plan이라는게 존재. 주말근무의 다른 표현
  • 지방 프로젝트(서울태생 혹은 서울주민에게만 해당)

왜 제가 이러한 요소를 안좋은 factor로 추려냈는지에 대한 설명은 차차 다른 포스팅에서 다루도록 하겠습니다.

 

정보습득시, 프리랜서 분들이나 파견위주의 중소업체 정규직 개발자분들에게는 아주 중요한 사이트가 바로 it.nodong.net입니다. 개발 꽤 하신 분들도 모르는 경우가 많더라구요.

 

저도 구글검색을 하다가 한국정보통신산업노동조합 사이트를 알게되었는데요.

기존의 정보덕분에 죽음의 사이트 몇군데를 피할 수 있었습니다.

하지만, 아쉽게도 정보가 없는 경우도 많습니다.

 

사실, 이글을 쓰고 약간 고민이기도 한게, SI개발 오래하신 분들은 막장 아닌 사이트가 어딨냐는 분도 계시고 "힘들다"라는 개념이 상당히 주관적일 수 있습니다. 그리고 사람죽어나가는(실제로 돌아가신 경우도 있었네요 ㄷㄷ) 프로젝트에서도 끝까지 버티고 작업하시는 분들도 많이 계시더군요(단, 그경우 애석하게도 건강이 많이 악화되시는 경우가 많음). 그런분들께는 경의를 표하며, 그분들께, 이글은 해당사항이 없다고 해야겠습니다. 추가할 내용이나 반대의견이 있으시면 댓글 남겨주세요. 제가 검토해보고 필요시 포스팅을 보완하도록 하겠습니다.

 

저도 막장 프로젝트 몇번 참여한적이 있는데, 한 막장사이트에서 새로 투입되신 분이 자기도 경험할 만큼 다해봤고, 절대로 프로젝트 중간에 안나간다고 자신감을 보인분이 계셨습니다.

 

그런데, 그분이 다음날(하루만에) 바로 나가시더라구요. 수주회사 정직원 개발자였는데, 아예 퇴사를 해버리더군요. 그런(자신감 혹은 말빨로만 수퍼맨) 케이스를 여러번 보면서, SI개발 쪽에서 큰소리치는 분들에 대한 신뢰가 떨어졌습니다. 이 부분은 살면서 여러 케이스에 적용이 됨을 발견했는데,  추후 "정규직으로 입사시(혹은 프리랜서 계약시), 막장 업체 구별법"에서도 다뤄보도록 하겠습니다.

 

글이 너무 길어질 것 같아서 포스트 하나당 제목에 맞는 주제까지만 다루도록 노력하고 이만 마쳐야겠네요~

 

※ 관련 링크(제목 클릭)

 

1. "막장 프로젝트를 피하는 방법" (오중, 2007)

2. "왜 막장 프로젝트는 여전히 존재하나?" (Okky, 2015)

3. "막장 프로젝트" (Life Algorithm, 2009)

4. "SI 막장 프로젝트하고 느낀점" (Okky, 2014)

5. "IT개발자들 "1년동안 4천시간 근무하기도"" (Views & News, 2013)

6. "막장 프로젝트 경험담" (노동닷넷, 2015)

7. "개발팀장 자살, 한국IT가 슬픈이유" (탐진강, 2010)

8. "대한민국 SW개발자의 평균모습은..창조경제 걸림돌" (이데일리, 2013)

9. "프로젝트 실패요인 101가지" (고뎁, 2012)

10. "SI에서 나의 개발 경력을 뒤돌아보며...part-1" (진형아빠, 2014)

11. "머랄까..경각심(?)을 불러일으키는 씁쓸한 메일 한통을 받았네요.." (Okky, 2016)

12. "모험회사 - IT 3대 막장 : 금융권, 대기업 시스템에 사고가 터지는 이유" (빈꿈, 2013)

13. "모험회사 - 이랬다저랬다 사장님의 아이디어" (빈꿈, 2013)

14. "분당 OO" (Okky, 2015)

15. "퇴직 대졸사원이 본 현대중공업" (현대중공업 노동조합, 2015)

16. "IT의 무덤 체험.." (Okky, 2011)

17. "인건비 떼먹는 ‘IT 보도방’ 극성 원청 대기업은 ‘법적 책임 없다’ 발뺌" (신동아, 2013)

18. "자바 개발자로 9년 일하면서 느낀점" (메이플슨토리, 2015)

19. "SI 프로젝트 후기"(와사비망고, 2017) - 정리를 잘하심. 막장은 아니고, 보통(?) 수준의 SI인데도 이정도다 라는 개념으로 받아들이면 될듯.

20. "30대 프리랜서 개발자들이여 지금 당장 스포츠카를 질러라" (진격의 그라프, 2013)

'SI개발' 카테고리의 다른 글

SI개발을 생각하고 있는 비전공 신입분들에게  (0) 2021.12.21
1 2 

글 보관함

카운터

Total : / Today : / Yesterday :
get rsstistory!