전산이야기

1. export 측


  (예) greeting.js


2. import 측


  (예) app.js


Comment +0

1. 서버 접속

$serverName = "서버명(또는 IP)";
$connectionInfo = array( "Database"=>"DB명", "UID"=>"로그인", "PWD"=>"암호");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

2. 쿼리 실행

$params = array(&$_GET['name']);
$tsql = "SELECT id, name FROM Items WHERE name LIKE '%' + ? + '%'";

$cursorType = array("Scrollable" => SQLSRV_CURSOR_KEYSET);
$result = sqlsrv_query($conn, $tsql, $params, $cursorType);

3. 데이터 패치

while( $row = sqlsrv_fetch_array( $result, SQLSRV_FETCH_ASSOC))
{
echo $row["id"] . " " . iconv("euc-kr","UTF-8", $row["name"]) . "<br />";
}

4. 자원 해제 및 연결 닫기

sqlsrv_free_stmt( $result );
sqlsrv_close( $conn);


php

Comment +0

PHP 소스 변경후에 바로 웹서버에 반영이 되지 않아서 브라우저 에서 Ctrl + F5로 재조회 해도

변경 이전 내용이 나타나는 경우가 있다.


이때는 PHP가 설치된 폴더의 php.ini 에서 [opcache] 섹션에서 opcache.enable를 0으로 세팅 해주면 된다.



php

Comment +0

1. 우선 현재 설치된 PHP의 버전을 확인 한다.

   임의의 php 파일을 생성 하고 다음과 같이 phpversion() 으로 버전을 확인 한다.

<?php

echo phpversion();

 ?>


나의 경우는 5.6.23 이었다.


2. SQL서버 접속을 위한 PHP Driver를 아래 사이트에서 받는다.


  Microsoft Drivers for PHP for SQL Server


 파일은 SQLSRV30.EXE, SQLSRV31.EXE, SQLSRV32.EXE, SQLSRV40.EXE 중에서 하나만 받으면 되는데

 1번에서 확인한 PHP 버전에 맞는 것을 선택하면 된다.



3. 다운 받은 파일을 실행하면 어디에 압축파일을 풀 지 물어 보는데, PHP 가 설치된 폴더의 ext 폴더를 지정하면 된다.


압축을 풀고 나면 해당 폴더에 'SQLSRV_Readme.htm' 파일이 있는데 이를 브라우저로 열어서 

설치된 PHP 버전에 맞는 dll 이름을 확인 한다.



4. PHP가 설치된 폴더의 php.ini 파일을 열어서 앞에서 확인한 dll 이름으로 extension을 다음과 같이 설정 해 준다.

   나의 경우는 버전 5.6 이고 Thread safe 용 DLL을 지정 했다.



php

Comment +0

윈도우에서 각종 로그나 오래된 아카이브 파일등을 최근 몇일만 남기고 삭제 하려면 FORFILES 를 사용 하면 된다.


예를 들어 D: 드라이브의 logs폴더내의 확장자 log 파일을 최근 3일치만 유지하고 삭제하는 경우 다음과 같이 한다. 


FORFILES /p D:\logs /m *.log /d -4 /c "cmd /c del @file"


이를 자동화 하려면 배치파일로 만들어서 예약작업에 걸어 놓으면 된다.

Comment +0

작년 부터 2개 업체와 각각 솔루션 구축 프로젝트를 하고 있다. 기본적으로 패키지 형태이지만 상당수는 우리 회사에 맞춰서 커스터마이징을 하고 있다. 

예전에도 느꼈지만 외주 프로젝트 관리는 어려운 점이 많다. 2개 업체 각각을 A, B라고 하고 해당 업체와 프로젝트 진행하면서 느낀 문제점을 기록 해 본다.

(물론 우리 회사 자체적인 문제점도 많이 있지만 일단 이는 생략 한다)


(1) A 업체

  1. 지연된 납기

개별 이슈에 대하여 약속한 기일 내에 제대로 맞춰 준 적이 거의 없다. 하나의 이슈가 지연 되면 순차적으로 그 뒤의 이슈들도 계속 밀려서 결국 나중에는 전체 프로젝트 지연을 초래 한다. 결과적으로 4월에 끝나야 할 프로젝트가 6월 현재 아직도 끝나지 않았고 이번 달 말까지도 끝날 수 있을 지 모르겠다. 일정준수의 의지가 없어 보이기 까지 한다. 맨날 죄송하다는 소리만 하고 약속을 지키지 않아 신뢰가 무너진 상태이다. 

  2. 무리한 동시 진행

해당 업체는 작년에 비슷한 시기에 동시 다발적으로 6개 업체와 계약을 맺고 프로젝트를 진행 했다. 이것이 결국 납기지연의 원인이 됐다. 욕심 부려서 수주한 프로젝트들이 여기저기 문제가 생기자 제한된 리소스로 제대로 일정을 소화 할 수 없었을 것이다.

  3. 소프트웨어 품질 문제

개발자가 제대로 테스트를 하지 않고 검수 요청을 하거나, 이미 가동 중인 프로그램 상에서도 지속적인 오류가 발생 했다.

개발자가 원래 테스트를 제대로 안 하는 스타일 이거나 무리한 동시 진행으로 인해 제대로 테스트 할 수 없는 상황 이거나 둘 중 하나가 원인으로 보인다. 어쨋든 테스트도 제대로 하지 않은 프로그램을 검수 해달라고 요청 하는 것 자체가  문제다.


(2) B 업체

  1. 도메인 전문성 부족

이전에 우리 회사와 같은 업종의 레퍼런스가 있다고 하여 도메인 특성을 잘 이해할 것으로 기대 했으나 예상 밖으로 너무나 몰라서 이를 이해 시키고 솔루션에 반영 하기까지 상당한 시간이 소요 되었다.

  2. 리소스 부족

사장을 포함하여 전체 인원이 3명, 그나마 한명은 단기 계약이고 정식 직원도 경력이 1년 정도 되는 열악한 리소스다 보니 전문성, 생산성을 기대하기 어려운 상황 이었다. 그러다 보니 단일 프로그램 하나를 4개월 동안 계속해서 만들고 있는 수준.

향후 프로젝트 완료 후 유지보수 지원이 제대로 될 수 없는 구조 이다.

  3. 시행착오 방법론

프로젝트 솔루션의 설계, 구축을 주관하고 있는 사장이 솔루션에 대하여 완전한 이해를 하지 못하고 시행착오 적으로 계속적으로 의사결정이 번복 되다보니 잦은 설계 변경과 이로 인한 오류발생과 소스 수정등이 지속적으로 발생하고 있다.

이는 전체적인 일정 지연과 이미 완료된 테스트를 또 다시 해야 하는 문제가 생긴다.

  4. 소프트웨어 품질 문제

앞서 A 업체의 품질 문제를 언급 한 바 있지만, B 업체는 이 보다 훨씬 심하다. 정말 맛 볼 수 있는 모든 오류를 다 경험 하는것 같다. 최초로 만든 프로그램은 기업용 프로그램이 아니라 대학교 전산실습 시간에 테스트용으로 만든 프로그램 수준 이었다. 안정성 결여, 기본적인 이벤트 전후 상태 체크, 메시지 처리, 동시성 문제등 어느 하나 제대로 된 것이 없었다. 


프로젝트를 추진 할 때 업체의 선정은 정말로 중요 하다. 일단 계약이 되고 프로젝트 킥오프가 되면 갑을 관계가 프로젝트 기간 동안에 바뀌기 때문이다. 우리가 돈을 주고 있지만 우리 맘대로 못하는 상황이다. 따라서 프로젝트 시작 전에 사전평가를 철저히 해서 '가격'으로만 판단 하는 우를 범해서는 안된다. 

그러나 여전히 제일 싼 업체에 일을 맡기는 관행이 있고 또는 의사결정을 할 수 있는 위치의 사람이 알고 있는 업체에 주어 지는 것이 현실이다. 하지만 대부분 프로젝트가 시작되고 문제가 생겨도 문제 해결은 실무 담당자의 손에 넘어가고 결정권자는 실질적인 도움을 주지 못한다. 

앞으로는 이러한 전철을 밟지 않도록, 외주 업체 선정에 대한 정확한 사내 프로세스를 만들어 놓고 이를 준수 하는 방식으로 해야 하지 않을까 한다.

Comment +0



어제 Wunderlist 에서 메일이 왔었다. 제작사 '젝스분더킨더(6Wunderkinder)'와 Microsoft 사 간의 M&A 소식 이었다.

GTD 를 위해서 Wunderlist 를 사용하고 있는 입장에서, 해당 앱이 MS로 인수 되었다는 소식은 꽤 놀라웠다.


MS는 이전에도 캘린더 앱 제작사인 '선라이즈(Sunrise)' 및 이메일 클라이언트 제작사인 '어컴플리(Acompli)'를 인수한 바 있는데, 젝스분더킨더와 마찬가지로 플랫폼에 무관한 특히 모바일에 강점을 보이는 업체들이다.


아직은 모바일 시장에서 취약한 MS 로서는 필요한 솔루션과 기술을 하나하나씩 사 들이고 있는 모양이다.

이를 통해 단기적으로 iOS, Android 시장에서의 영향력을 확대하고 점진적으로 모바일 플랫폼에서의 Windows  및 클라우드 서비스에 대한 경쟁력을 높히려는 전략인 것 같다.


이를 보면서 느끼는 점은 MS가 인원이 없고, 돈이 없고, 기술이 없어서 해당 솔루션을 직접 개발 안하고 사 들이겠는 가 하는 것이다. 세계적인 굴지의 소프트웨어 회사 조차 , 가지고 있지 못한 솔루션을 자체개발 보다는 필요한 외부 업체를 인수 하는 형태를 취하는 이유는 전문성 이다. 해당 부분에 베스트 업체는 그 동안 그 분야에서 깊이 있는 기술력과 노우하우를 쌓아 놓았을 텐데 이를 아무리 MS라도 단기간에 그 수준으로 따라 잡기에는 역부족 이기 때문이다. 


그런데 하물며 몇명 되지도 않은 인원으로 그것도 생산성이 떨어지는 환경에서, ERP 수준의 기업용 소프트웨어를 향후 미래를 위해서(?) 자체적으로 개발 하겠다는 취지에 대하여 나는 아직도 이해를 못 하겠다. 지금으로서는 일정을 준수 할 수 있을지 조차 의문 스럽지만, 억지로 오픈 했다고 치더라도 어마어마한 오류와 기능 누락 으로 인하여 또 다시 개발자 들은 죽도록 야근을 해야 될 것이다. 교육이 백년지대계 라면 기업의 IT는 적어도 십년지대계는 되어야 한다. 그런데 입사 10년동안 ERP를 4번째 개발 및 구축을 하고 있으니 이게 제대로 된 방향으로 가고 있는 지 모르겠다.


계열사를 거느린 그룹 수준의 회사 전산실은 더 이상 자체적인 ERP 개발이나 유지보수가 주업무가 되어서는 안된다고 생각한다. 매출 300억 이하의 단일 회사에서는 딱 좋은 모델 일 수 있지만 전체 그룹 매출이 2~3천억이 되는 상황에서 아직도 예전 처럼 데이터를 입력하기 위한 프로그램을 만들고, 재고를 맞추고, 결산 때 마다 금액이 맞니 안 맞니 하는 방식의 전산실로는 경쟁력이 없다. 그러한 기간 업무용 프로그램은 전문적으로 만들어진 솔루션과 회사에 맡기면 된다. 그리고 계속해서 고도화 작업이 진행될 수 있도록 인력배치를 하고 관리를 하면 된다. 이제 전산실의 역할은 십수년간 쌓여진 그 동안의 데이터를 분석하고 취합해서 그 속에서 의미 있는 정보 즉, 영업, 마케팅, 생산, 원가등에 대한 의사결정, 예측, 패턴, 그리고 리스크 관리에 도움을 줄 수 있는 정보를 뽑아 낼 수 있도록 기술력을 집중 해야 한다. 그것이 최근의 빅데이터 분석이 가고자 하는 방향과도 일치 하는 것이다. 이제는 현업 뒤치닥 거리를 하는 IT 가 아니라 정보기술을 넘어 정보전략으로 가야 하는 것이다. 그런데도 지금의 상황은 여전히 10년 전과 하나도 달라 진 것이 없는 상태라 찹찹한 심경을 이루 말할 수 없다.

'생각' 카테고리의 다른 글

프린트 한 장 하자고...  (0) 2019.01.24
델파이의 상승세  (2) 2017.03.10
Microsoft 사의 Wunderlist 인수를 보며  (0) 2015.06.04
IT업체선정의 중요성  (0) 2011.02.10
역시 오너...  (0) 2010.04.28
JD Edwards의 문제점  (4) 2010.04.09

Comment +0

트리거 내에서 RAISERROR 로 오류를 생성 할 경우, 심각도(severity)가 20~25인 경우에는

 

자동으로 rollback 처리 된다.

 

(예)

CREATE TABLE Test1
(number INT IDENTITY,
 bookname nvarchar(100),
 UnitPrice INT,
 Qty INT,
 Price INT
)

CREATE TRIGGER TR_Test1_INSERT
ON Test1
FOR INSERT
AS
    update Test1
    Set Price = (select UnitPrice from inserted) * (select Qty from inserted)
    where number = (select number from inserted)

    RAISERROR ('Error raised!', -- Message text.
               20, -- Severity.
               1 -- State.
               ) with log;

 

insert into Test1 (bookname, UnitPrice, Qty)
values ('book1', 600, 2)

 

 

Comment +0


웹에서 파일을 저장 하고 열지 않고


곧바로 연 상태에서 저장하고 나가 버리면, 해당 파일이 저장된 위치를 몰라서 난감한 경우가 있다.


첨부된 파일을 설치한 후 해당 파일명을 검색하면 저장 위치를 확인할 수 있고,


검색된 파일을 더블클릭 하면 곧바로 열어 볼 수도 있다.


Everything-1.2.1.371.exe




Comment +0

어떤 테이블을 삭제하려고 할 때 "FOREIGN KEY 제약 조건에서 참조하므로 삭제할 수 없습니다" 라는 오류가 나면서


삭제가 안되는 경우가 있다. 이는 해당 테이블을 외래키로 참조하는 다른 테이블이 존재 하기 때문 이다.


그런데 삭제 하려는 테이블 자체에 대한 외래키 제약조건은 sp_helpconstraint 로 확인 할 수 있으나,


해당 테이블을 참조하는 다른 테이블은 sp_helpconstraint 로는 알 수가 없다.


이럴때는 다음과 같이 하면 참조하고 있는 다른 테이블과 연결된 컬럼명을 확인 할 수 있다.


SELECT 
   f.name,
   OBJECT_NAME(f.parent_object_id) TableName,
   COL_NAME(fc.parent_object_id,fc.parent_column_id) ColName
FROM 
   sys.foreign_keys AS f
INNER JOIN 
   sys.foreign_key_columns AS fc 
      ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN 
   sys.tables t 
      ON t.OBJECT_ID = fc.referenced_object_id
WHERE 
   OBJECT_NAME (f.referenced_object_id) = '테이블명'


Comment +0