[C#] Auto FTP Uploader

2010/03/03 15:29
사용자 삽입 이미지

 회사에서 맡은 프로젝트 중... 실시간으로 생성되는 데이터를 원격의 FTP 서버에 전송해야할 일이 생겼다.

 상용 FTP 클라이언트 프로그램에서 일종의 매크로 기능을 사용하면 이와 같은 기능을 대신할 수 있지만; 상용 프로그램을 쓰는 것도 부담 스럽고; 내가 원하는대로 커스터마이징 하는 것이 불가능해서 그냥 만들었다.

Auto FTP Uploader의 로직은 매우 심플하다; 특정 Source Folder를 설정하고, 업로드 할 FTP 주소와 계정 정보를 입력해둔 다. Auto FTP Uploader는 Source Folder의 Rename 이벤트를 감지하여, 이벤트가 발생하면, 원격 FTP 주소에 업로드 한다.

 Source Folder의 Create 이벤트를 감지할 경우, 파일 작성이 완료되는 시점을 알 수 없으므로, 데이터를 생성하는 부분에서 파일이 작성되는 시간 동안에는 확장자를 TMP로 만들고, 파일 작성이 완료되면 확장자를 DAT로 바꾸게 하였기에 Rename 이벤트를 감지하도록 했다. (Temp Folder와 Complete 폴더는 원격 FTP 서버의 요구 사항에 의해 만든 것으로 파일이 작성되면 원격 FTP 서버에 동일한 파일명의 Dummy File을 업로드 한다.)

 프로그램 자체는 뭐 특별한 기능은 없지만; .NET Framework를 이용하면 간단한 FTP를 구현하는 것은 일도 아니라는 생각이 든다. 또, C#을 처음 접하는 이들에게는 C#을 이해하는데 도움이 되지 않을까 생각한다.

 이 프로그램에 사용된 주요 프로그래밍 테크닉은 다음과 같다.

 1. 파일 입/출력
 2. FtpWebRequest 클래스의 사용법
 3. 간단한 Thread의 사용 예
 4. ManualResetEvent, Monitor를 이용한 동기화 기법
 5. 델리게이트(delegate)를 이용한 클래스 또는 폼 간의 이벤트 발생 및 전달

 코멘트가 상세히 포함되어 있지는 않지만; 복잡한 로직은 거의 없고, 가급적 모듈별로 분리하도록 노력하였기 때문에 크게 어려움은 없지 않을까 생각해본다...;

사용자 삽입 이미지

소스 다운로드 : http://www.nohungry.net/Data/FTPUploader.zip

수정 및 재배포 자유, 영리적 목적의 사용도 자유! 단, 출처만 밝혀주세요;
크리에이티브 커먼즈 라이센스
Creative Commons License

Trackback

Trackback Address :: http://www.nohungry.net/tt1/trackback/159

Comments

What's on your mind?

댓글 입력 폼
[로그인][오픈아이디란?]

 D/B에서 데이터를 가져오는 경우, 데이터를 저장 또는 변경하는 경우에 그 데이터가 많다면... 일반적인 동기 방식으로 처리할 경우, 프로그램에서는 매우 난감한 상황이 발생할 수 있다.

 데이터를 처리하기 전까지 소위 프로그램이 멍 때리는 상황... 다른 모듈의 동작까지 블럭(Block)이 되고, UI 마저 "응답 없음"이란 상태에 놓일 수 있다.

 이에 대한 해결책이 바로 비동기 방식으로 D/B를 처리하는 것이다.

 C# 아니 엄밀히 말하면 .NET에서는 데이터베이스 뿐만아니라 네트워크 등 다양한 경우에 대한 비동기 메소드(Method) 등을 지원한다. 데이터베이스 관련해서는 크게 ExecuteReader와 ExecuteNonQuery 동작에 대한 비동기 함수들을 지원한다. 두 함수의 차이는 SELECT와 같은 Transaction-SQL을 처리할 수 있는 함수라는 것과 UPDATE, INSERT, DELETE와 같은 Non-Transaction-SQL을 처리할 수 있는 함수라는 것이다.

 만약 앞서 설명한 함수들을 이용할 경우, 이 함수가 결과를 반환할 때 까지 나머지 모듈들은 블럭이 된다. 반면에, 이에 대한 비동기 함수들인 BeginExecuteReader-EndExecuteReader, BeginExecuteNonQuery-EndExecuteNonQuery를 사용하면 블럭이 되는 현상을 방지할 수 있다.

 함수의 간단한 사용 방법은 다음과 같다.

사용자 삽입 이미지

 모든 비동기 함수는 반드시 Begin~으로 시작하는 함수와 End~로 시작하는 함수가 쌍을 이루어야 된다.

간단한 설명을 위해 이 함수에 D/B Connection과 Close까지 포함되고, 데이터를 읽어오기 위한 코드도 포함되어 있지만.. 엄밀히 말하면 이들도 각각 분리되어야 한다.

 특히, D/B로 부터 읽어온 데이터를 처리하는 부분(Grid에 데이터를 넣든지, 그래프로 그리던지)은 별도의 함수로 구현해서 Thread로 처리하는 것이 바람직하다. 왜냐하면, 프로그램이 멍 때릴 정도로 읽어와야할 데이터가 많다면.. 필히 이 데이터를 처리하는 부분을 단순히 처리할 경우에도 단순히 문제가 될 수 있다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Trackback

Trackback Address :: http://www.nohungry.net/tt1/trackback/148

Comments

What's on your mind?

댓글 입력 폼
[로그인][오픈아이디란?]

[C#] 메일 자동 발송 프로그램

2007/05/02 18:00
 하루에도 많게는 수백통씩 날아들어오는 스팸 메일의 시대에 살면서... 나 또한 그러한 범죄에 악용될 수 있는 프로그램을 만들어버렸다.

예전 아티클에도 나와있지만... 이번에도 회사 업무 차원에서 만들게 되었다. (그렇다고 우리 회사에서 스팸을 보내기 위해 만든 것이 아니다. 병역특례 관련해서 각 대학에 공문을 발송하기 위해 만들었다.)

이전과 달라진 점은...
SMTP를 설정하지 않아도 된다는 점이다. 왜냐하면 IIS를 설치하면 제공되는 ESMTP를 쓰기 때문이다.

따라서, 무료로 제공하는 SMTP를 찾기 위해 헤맬 필요가 없다. 자신 PC의 포트를 통해 발송하기 때문이다. 정확하게 기억은 안나지만.. 아마도 80번 포트?-ㅁ-; (기억이 안나는 이유는 2월쯤인가 만들었었다.)

급하게 부탁받아.. 하루 정도 걸려 만들었기 때문에, 자질구레한 예외는 가볍게(?) 무시해버린 센스를 발휘했다. 그래서, 무슨 버그가 발생할지 알 수 없다.

구현은 그 때와 마찬가지로 C#과 .NET Framework 2.0을 기반으로 했다.

주요기능
- 동일한 내용의 메일을 대량으로 발송
- 메일링 리스트 불러오기 및 저장 가능
- 메일링 리스트 추가, 삭제, 저장, 수정 가능
- 메일 내용 미리보기 기능(HTML로 작성된 메일을 브라우저에서 어떻게 보일까를 위해..)
- 첨부 파일 (용량 제한은 상대방 수신 메일 서버에서 허용하는 범위 만큼만)
- 메일 내용 불러오기 및 저장 가능
- 서명 첨부 가능
- 발송한 메일 로그 확인
[디자인적 측면은 전혀 고려하지 않은 유저 인터페이스]

[메일 내용 미리 보기]

비록 C#으로 구현하였지만.. Visual Studio 2005를 사용하는 사람이라면, C++, Visual Basic으로도 동일하게 구현가능하다.

부끄러워서 풀 소스 공개는 못하더라도.. 주요부분(ESMTP를 이용해 메일을 발신하는 부분 - 몇 줄 되지도 않고, 새로울 것도 없지만.. )은 공개 가능하다.

덧1) 이러한 포스트를 남기는 이유는.. 명색이 컴공 전공자로써.. 전공 얘기가 전무한 것이 부끄러버서 한거라고는 말 못함-ㅁ-

덧2) 회사에서 병역특례(전문연구요원)를 구하고 있음. 전공은 전산쪽 계열이며 가능함. (물론, 프로그래밍 가능자).. 덧붙이면 2007년 8월 졸업자에 한함. 관심있는 분들은 연락바람.
크리에이티브 커먼즈 라이센스
Creative Commons License

Trackback

Trackback Address :: http://www.nohungry.net/tt1/trackback/78

Comments

  1. 2007/05/03 11:29

    2008년 2월 졸업생도 싸게 구하실수 있다고.. 어케 말씀 전해바바바바~ ^^;;

    perm. |  mod/del. |  reply.
    • NOhungry 2007/05/03 12:54

      맹// ㅎㅎ 안타깝지만, 2008년 2월 졸업생은 내년을 기약해야겠지~ 이번 TO는 2007년에 소진시켜야 한다.ㅋ 안그럼, 내년에 TO가 안나오걸랑~

  2. 열정 2007/05/03 20:06

    내년부터 보충역 산업기능요원을 없애버린다는 소문이 있소 -_-
    이러다가 전문연구요원도 없어지는거 아닌가 몰라 ㅋㅋ

    perm. |  mod/del. |  reply.
    • NOhungry 2007/05/03 23:47

      음~ 전문연구요원은 그렇게 쉽게 없어지지 않을거야. 이공계 장려해야 하니깐.

  3. acaran 2007/05/04 22:18

    다음엔 자동 야근, 자동 주말특근 프로그램좀 하나 짜주게 ㅠ_ㅠ

    perm. |  mod/del. |  reply.
  4. 안재명 2007/07/27 09:47

    이거 소스가 어디있나염?? ^^

    perm. |  mod/del. |  reply.
  5. 가을아이 2007/08/21 15:25

    만드시 프로그램 보구 공부할려구 합니다... 소스 주실수 있으신지요...?

    perm. |  mod/del. |  reply.
    • NOhungry 2007/09/05 00:50

      안재명, 가을아이// 답글이 늦었습니다. 정말 죄송합니다.

      언젠가 따로 이 내용과 관련해 포스팅을 하고, 거기에 소스를 공개하려고 했는데, 귀차니즘으로 점점 미루어지고 있네여..

      맘같아서는 저 허접한 소스를 백방에 공개하고 싶습니다면, 현재로선 회사 업무용으로 사용되고 있어서 전체 소스 공개는 사실 불가능할 것 같네여. 죄송합니다.

  6. 비밀방문자 2008/02/13 15:34

    관리자만 볼 수 있는 댓글입니다.

    perm. |  mod/del. |  reply.

What's on your mind?

댓글 입력 폼
[로그인][오픈아이디란?]