범용 소켓 생성기 작성에 대한 질문(4일 남았어요..)

김선정의 이미지

-- 현재 상황 --
유닉스C언어에서 TCP소켓으로 데이타를 송수신하는 프로그램을 개발하고 있읍니다.
제가 네트워크 프로그래밍에 깨달음이 부족한 거 같아서 도움을 받고 싶은데요

-- 주요 개발 요건 --
소켓프로그램의 단일화 -> 현재 다양한 형태의 소켓들을 통합관리 / 설정을 통한 신규업무에 대한 적용 (신규소켓 작성않고 설정만으로 동작)

-- 현재 상황 --
여러가지 형태의 소켓을 현행 시스템에서 운용하고 있읍니다.
유형1. 전송제어 사용 : 전송제어용 패킷 사용(ACK,NAK,DATA ...패킷) , sam파일로 송수신 파일 운용
유형2. key/value 형태 : 상대측 소켓과 key /value 형태로 송수신 및 DB Handleing

-- 진행 계획안 --
아래 내용에 대해 설정(UI -> 파일저장) / 설정정보로 소켓 운용
- 소켓 운용 (ip,port, 각종 파일...) 설정/운용
- 두 소켓 사이의 규약(프로토콜)설정/운용
- 대응사양(ACTION) 설정/운용
-> 현행 소켓 프로그램들을 적용 / 신규 소켓업무개발시 설정을 통한 적용
-> 소켓프로그램 소스및 실행파일 1본, 각 소켓업무별 설정파일 N개, 소켓 프로세스 N개

-- 질문 --
신규 추가될 소켓업무 적용에
- 위와 같이 진행하려고 계획하고 있지만 이것이 어디까지 가능한지 ?
- 실제로 이것이 유용하게 사용될수 있는지 ?
- 구체적으로 각 항목에 어떤 개념과 깨달음이 필요한지 ?
- 상기 요건이 실현 불가능한지 가능한지 또는 실제 유효성이 얼마나 되는지 ?
- 현재 상기 요건에 해당한는 프로그램을 보거나 경험하신 분이 있는지 ?

-- PS --
읽어 보신 후 어떠한 의견이라도 올려주시면 감사하겠구요. 좋은 토론거리가 될거라고 생각합니다.
간단하고 명료하게 하기 위해 이정도로 글을 올렸구요 더 자세한 질문이 필요하시면 해당 내용을 다시 올리겠읍니다/

coremaker의 이미지

무엇인지... 잘 이해가 가지 않습니다...
상황에 맞는 예제만 보여주는 정도로 끝나지 않을까 싶은데요...

ssehoony의 이미지

"소켓 프로그램의 단일화" 라는게 뭔가요?
윈도나 리눅스에서 동일한 라이브러리(인터페이스)로 소켓을 핸들링 하고 싶다는건가요?
아니면 TCP 상위레벨의 멀티플랫폼용 프로토콜을 만들고 싶다는건가요?

전자라면, ACE Library 에 대해 찾아보시면 도움이 될 듯 하고요.
후자라면, BER 인코딩 같은 이미 잘 정리된 크로스플랫폼 통신 규칙을 참고해 보시면 좋을 듯 하네요.

모지리의 이미지

흠.. 제가 초치는 말씀 드리는게 아닌가 싶지만서도..

예전에 제가 그런 제품을 만들어 장사를 한적이 있었습니다. 즉, 개발자를 위한 개발툴 정도로 이해하시면 빠를겁니다. 일종의 미들웨어 개발툴이었는데 장사는 잘됐지만 여차 여차한 이유로 엎었지만 단일 작성에 비해 손이 많이 가서 버그홀이 좀 많이 존재할수 밖에 없는 상황이 되드라구요. 지금은 그냥 뚜닥 뚜닥 하는게 더 빠르고 손쉬은거 같습니다.

ACE같은 경우 초기에 도입한 프로젝들이 많았습니다. 저 역시 ACE를 이용해 GLOBEX라는 시스템을 만드는 프로젝을 진행했었는데 지금은 상당수 프로젝들이 ACE에서 빠져나오고 있는 상황입니다. 아시다 시피 너무 무겁습니다.

생각이 있으시면 제가 이런 저런 조언해드릴수 있을거 같습니다.

exman의 이미지

범용 소켓 생성기는 다음과 같은 함수 입니다.
int socket(int domain, int type, int protocol);
이것 말고 얼마나 더 범용으로 소켓을 만들어 내겠다는 것인지... 일단 용어에 딴지를 걸고 싶습니다.

유형1. ... sam파일로 송수신 파일 운용
=> 여기서 범용이라는 전제와는 맞지가 않게 되네요. 파일을 송수신 하는 대표적인 프로토콜은 FTP와 HTTP 입니다..

유형2. key/value 형태 : 상대측 소켓과 key /value 형태로 송수신 및 DB Handleing
=> key/value 형태의 대표적인 프로토콜은 HTTP 입니다. 그런데 DB Handling이 목적이군요.

유형2와 비슷한 오픈소스 프로젝트로는 http://sqlitedbms.sourceforge.net 가 있으니 참고 하실 수 있을것입니다.

PS - 좋은 토론거리는 아닌것 같군요...4일 남았다는 이야기가 있는것이...어쩐지 4일안에 끝내야 하는 회사 업무를 여기서 해결해 보고 싶으신게 아니었나 하는 생각이 듭니다.

김선정의 이미지

현재 각기 다른 여러 기관에서 9개의 소켓프로그램으로 각종 자료를 송수신하고 있음
- 각 소켓들은 프로토콜이 상이함 데이타 송수신을 위해 전송제어(ACK,NAK,ERROR 패킷등을 사용)
- 연계기관측 소켓은 연계기관에서 작성하고 있음(신규 소켓추가시
- 고객측에서 신규소켓에 대해 소스를 작성하는것에 부담을 느끼고 소켓프로그램을 작성하지 않기를 원함
- 현행 연계기관사이에도 표준프로토콜이 수립되어있지 않고 소켓작성시마다 작성자 취향대로 소켓이 작성되고 있음

모리스님 답변에 대해
모리스님답변에 제가 처한 상황을 잘 아시는것 같읍니다.

신규개발소켓의 목적은 본기관과 연계기관사이에 정보를 주고 받는 기능입니다.
송수신된 정보는 특성(조회성 - 온라인DB처리) (송수신성 - 배치DB처리)
장비들을 제어한다거나 그런목적은 아니구요 단순히 1:1로 정보를 송수신하면 됩니다.
단 프로그램 버전체크나 사용자 인증, 송수신데이타 이어받기 등의 부가 기능이 반영되어야 하구요

소켓설정UI(기본정보:ip,port,Server/Client, Sender/Reciver 프로토콜정보:패킷순서, 프로토콜 블럭구조 비정상프로토콜:에러코드, 메시지) 에서 시스템 관리자가 설정하면 설정파일을 생성함
-> 표준소켓은 단일 소스로 관리
-> 컴파일하여 9개의 소켓실행파일생성
-> 9개의 프로세스에서 9개의 설정파일을 읽음
-> 9개가 각기 다른 9개의 설정파일을 기준으로 동작

seehoony님 답변에 대해
소켓 프로그램의 단일화란?
-> 개발소켓의 OS는 유닉스에서만 적용 (윈도우는 적용하지 않음)
-> 현행 9개의 소켓 소스를 신규개발표준소켓(소스1개 인스턴스 9개)을 통해 통합관리 표준소켓은 향후 소켓추가시 그대로 사용
-> 신규 표준소켓에는 현행 9개의 소켓반영 + 신규 개발되는 소켓을 반영 해야 함

coremaker님 답변에 대해
범용소켓이란?
-> 범용 소켓이란 용어는 검색해 보니 안나오네요
-> 제가 잘 알지도 못하면서 줏어들은걸 그대로 사용했읍니다. 미안합니다.

exman님 답변에 대해
현행 소켓 유형 상세 설명입니다.

유형1 : sam파일로 송수신 운용
-> DATA 패킷에 하나의 레코드를 실어서 송수신하고 송수신시 sam(순차 접근 방법/sequential access method) 파일에서 읽거나 씀
-> sender -- DATA PACKET ("0x03$200 "홍길동$7701011448392$대전시 유성구 복병동 ")--> reciver

유형2 : key/value 형태
-> sender -- key("name") --> reciver
-- value("홍길동")-->

-- PS --

현행시스템 /신규시스템 구조도를 첨부했읍니다.

그리고 4일남았다고 해서 심기를 불편하게 하였나 보내염 미안합니다.

색불이공 공불이색 색즉시공 공즉시색 수상행식 역부여시 사리자

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.