다시 할일 없을 것 같지만, 그냥 기록삼아 간단 포스팅.

정출연 연구소 한 곳과 SW개발 용역 계약을 할 일이 있었는데,
수의계약으로 견적서 주고받고 얘기 잘 하다가, 계약 담당 구매팀 직원이 계약 구비 서류라면서 보내왔다.

- 사업자등록증 1부, 법인인감증명서 1부, 사용인감계 1부, 견적서 및 산출내역서 원본 1부
- 사업장 4대보험 완납(납입)증명원, 지방세/국세 완납증명원 각 1부
- 정부수입인지 2만원, 직접생산확인증명서 1부
- 계약서: 기관에서 파일 보내줬고 모든페이지 접인)
- 보안서약서(대표자) 1부, 개인정보수집동의서(대표자) 1부: 둘 다 파일 줬음

이렇게를 우편으로 보내달라고...
이전에 고등학교 한 곳이랑 할 때도 좀 귀찮았는데 여긴 더해...ㅠㅠ
연구소들은 이제 공공기관이 아니라고 했던 것 같은데, 감사는 여전히 있고 이전에 해오던 과정이 있으니 그대로 적용이 되는 것 같다.

우선 법인인감증명서와 사용인감계가 뭔가.. 해서 보니,
보통 보안상의 이유로 법인 인감 도장을 쓰지 않고, 사용 인감이란걸 쓴다고 한다.
국가가 보증하는 법인의 인감 도장이 있고,
그 인감 도장이 보증하는 사용 인감이 있는 셈. (SSL 체인 인증서 같달까..)

나는 법인이 아니기 때문에 개인인감증명서로 대체가 되고, 계약서류에 찍은 도장이 인감도장이라면 당연히 사용인감계도 생략.

사업장 4대보험 완납 증명원은 내가 상시근로자가 없는 개인사업자였기 때문에, 나 본인의 건강/연금 보험료 완납증명서로 갈음하였다.
국민건강보험 홈페이지에서 쉽게 발급 가능.

지방세/국세 완납증명원은 각각 정부24와 홈택스에서 발급할 수 있다.

정부수입인지야 뭔지 모르겠지만 봉투에 돈 넣었고, 보안서약서, 개인정보수집동의서 각각 도장 찍었는데,
문제는 직접생산확인증명서!

이게 뭔지도 처음 들어보는데 계약 직전, 아니 이미 원래 예정 계약일을 넘긴 시점에서 갑자기ㅠㅠㅠ

찾아보니, 제조업 같은거 기준 예시로 해당 업체가 공장이 있는지, 기술이 있는지, 실제 계약 수행이 가능한지 / 하청을 하지 않는지 같은걸 인증 해주는 제도라고...
이걸 SW 계약 같은 경우도 큰 차이 없이 그대로 적용을 하던데,,
그래도 다행히 IT관련은 공장(ㅋ.. 나의 경우 사업장.. 집..)을 실태조사 한다거나 등이 대부분 생략되고 간략히 진행이 된다.
중소기업유통센터 공공구매종합정보망 홈페이지 (https://www.smpp.go.kr/)에서 신청 가능하다.

생산 항목을 맞춰야 했는데, 계약기관에서는 "인터넷지원개발서비스" 라고 지정해주었지만, 찾아보니 첫 신청은 무료고 이후에 추가하면 돈이 든다길래 대충 보고 "정보시스템개발서비스", "소프트웨어유지및지원서비스" 를 포함하여 신청하였음.

다만 그 과정에서 중소기업인증서가 필요하다나 뭐라나 하면서 진행이 안되더라.
이것도 찾아보니 중소기업현황정보시스템 (http://sminfo.mss.go.kr/) 이란 곳에서 중소기업 인증서를 발급받아야 함..
정말 다행히 개업당해, 다음해 연도인 기업은 신청만 하면 발급해주고, 난 소기업(소상공인) 인증을 받았다...ㅋㅋㅋㅋㅋ

전산 반영 시간 때문에 하루를 기다리면 다시 중소기업유통센터 홈페이지에서 진행이 가능함.

내가 신청한 생산 항목에 대한 기준을 충족하는지 서류를 내야하는데 대충 아래와 같이 필요했다.

- 생산공장
    - 사업자등록증명 (사업자등록증이랑 다름, 따로 홈택스에서 발급 가능)
    - 건축물대장
    - 임대일 경우 임대차 계약서랑 임대료 납입 증명
- 생산시설: 개발용 컴퓨터 1대 이상
    -> 생산시설보유목록 확인서 양식 받아서 작성
- 생산인력: 대표자 포함한 생산인력 중 자격 충족하는 개발 인력 1인 이상
    - 건강보험자격득실확인서
    - 원천징수신고서 최근 3개월분

나의 경우 낼 필요가 없는 서류도 있는 것 같았지만, 혹시 몰라서 다 긁어서 냈다.

사업장의 경우 난 지금 사업자 등록이 부모님 집으로 되어있어서 무상사용승낙서를 냈는데, 이 경우 내 이름으로 낸 전기나 가스 고지서 3개월분을 내라더라.
당연히 없어서 전화 문의 했더니, 그냥 부모님 이름으로 고지서 나온걸 내고 내가 부모님한테 전기료 같은걸 지불하고 있다는 확인서 하나를 써서 내라~ 는 답변을 받았다.
고지서를 다 버려서 한전에서 조회하고, 혹시 몰라 가족관계증명서와 내가 부모님한테 달마다 용돈 드리던 계좌 이체 내역을 캡쳐해서 업로드 했다. 그러고보니 정작 올리라던 확인서는 까먹고 안 올렸네...

개발 인력 자격은 내가 가진 정보처리기사 자격으로 냈다. 군대 때문에 땄던 자격증인데 프리랜서로 일하면서 은근히 덕 많이 보는 자격증...
추가로 건강보험자격득실확인서는 경력확인용 같아서 안내도 될 것 같았지만 어렵지 않으니 그냥 냈고,
원천징수신고서 역시 상시 근로자 확인용일테라 당연히 필요없었겠지만 그냥 있는거 긁어 냈다.

그러니 대충 1주일 걸려서 통과가 되었고 문자로 알림이 왔음.

그렇게 서류를 다 갖추고.. 출력을 하고.. 도장을 찍고... 등기로 보냈다.
서류 작업을 극도로 귀찮아해서 이런 일이면 안하고 마는데... 지인 추천 + 이런줄 몰랐던 콤보가 겹쳐서 개고생을ㅠㅠㅠ

이제 별 문제 없이 잘 끝났으면 좋겠다.. 제발ㅠㅠㅠ

(작성 중...)

보통 메일 서버를 직접 구축하는 짓은 하지 말라고들 한다.
스팸/바이러스 메일을 걸러내는 작업, 내 메일이 스팸처리가 되지 않게 하기 위한 작업, 메일을 중단 없이 수신할 수 있도록 지원 등등...
물론 직접 구축하는 작업이 아무나 할 수 있는게 아니기도 하고.

그래서 개인 도메인을 이용한 메일을 사용하기 위해선 유/무료의 기업용 서비스를 이용하거나 메일건 같은 서비스를 이용한다.
무료는 거의 없어지는 추세에 다음 스마트워크나 메일건 정도 남아있지만 제약들이 좀 불편했고, 유료도 서비스 자체나 과금 정책 등도 마음에 안드는 구석들이 하나씩 있어서 어떻게 하면 좋을까 고민하던 중, 어느정도 손이 가지만 타협할만한 방법이 있는 것 같아서 사용 및 설정을 해보았다.

일반 메일 서버 구축을 하듯이 Postfix + Dovecot 을 설정하지만, 실제 외부와 통신은 AWS SES를 거쳐서 진행하는 방식으로 구성을 하였다.
참고로 이미 이런 형태로 제공하는 가이드 등이 존재하지만, 다양한 계정으로의 수신을 지원하지 않아서 그 부분 등을 고려하여 세팅을 진행하였다.


AWS SES

AWS Simple Email Service 라고, 메일의 송수신을 지원하는 서비스이다.
다만 일반적인 메일 서비스처럼 지원을 하는건 아니고 송/수신이 조금씩 다르다.

일반적인 메일 서비스처럼 바로 사용할 수 있는건 아니지만(그런 목적으론 유료의 AWS WorkMail이 있다)
송신 기준으로 메일 전송에 필요한 각종 서버 설정을 하지 않고 AWS의 신뢰도에 기댈 수 있고, 수신 기준으로도 AWS가 일단 안정적으로 받아주고 시작하는게 좋아보여서 사용하기로 하였다. (바이러스 검사나 스팸 체크도 해주지만 내가 후처리를 따로 해줘야 한다.)

사용 방식 / 비용

먼저 송신은 초당, 일당 전송 제한이 있으며
AWS API를 이용하여 전송(월 62,000건 무료 후 과금)을 하거나, AWS IAM 사용자를 이용한 SMTP로 전송이 가능하며,
1000건당 $0.1 및 용량 기준으로 GB당 $0.12 가 과급된다.

후자의 SMTP 방식을 이용하면 일반 메일 클라이언트에 등록해서 사용할 수 있긴 한데, IAM을 사용하기 때문에 사용자 아이디/비밀번호를 내가 설정할 수도 없고 권한 부여도 까다롭다.

수신은 정한 규칙에 따라 AWS 람다를 실행하거나, S3에 저장하거나, SNS 토픽을 발행하는 등의 방식으로 이루어진다.
이 또한 1000건당 $0.1 (1000건 무로) / 256KB 1 chunk 기준으로 chunk 1000건당 $0.09 과금된다.
작성일 기준으로 한국 리전은 수신을 지원하지 않아 us-east-1 에서 사용하였음.

AWS SES 설정

AWS 에서 메일 송신을 위해선
1. 도메인 혹은 메일 주소 인증
2. 도메인의 경우 DKIM 등 설정
3. 외부로 메일 전송을 위한 Sandbox 해제 요청
작업을 해야하고,

수신을 위해선 MX레코드 설정이 필요하다.
이런 부분은 다른 사람들이 쓴 글이나 AWS 가이드에도 설명이 잘 되어있으니 생략.

이 후 Rule set 설정, Lambda, S3, SNS 등 설정은 분량 관계상 별도 포스팅으로. (작성 후 링크 예정)


Postfix

SMTP 프로토콜을 이용하여 메일을 수발신 할때 사용하는 프로그램. MTA (Mail Transfer Agent) 의 한 종류이다.
예전엔 sendmail 이 사용되었으나 요즘엔 Postfix를 가장 많이 사용한다.

Postfix 기능들

이 프로그램이 하는 역할이 겉으로 보기엔 단순 메일 수발신이지만 자세히 보면 좀 다양하다. 적절히 필요한 것만 취하면 됨.

1. 서버 내에서 내/외부로 메일 전송시 처리
    -> 안 써서 필요없음

2. 외부 클라이언트에서 서버를 통하여 메일 전송 (SMTP Submission)
    -> AWS의 SMTP를 사용해도 되는데, 메일 주소(사용자)별 인증을 쓰고 싶어서 이용.

3. 외부 클라이언트로 전송할때 사용자 인증 / 메일 검증 등
    -> 인증은 Postfix 자체적으로 할 수 있게 설정도 가능한데, 후술할 Dovecot과 연결하여 Dovecot의 인증을 사용하는 방법도 가능하다. 다 따로 구현하면 관리가 번거로워지니 이 방법을 사용할 예정.

4. 내 도메인으로 전송된 메일을 수신
    -> 나의 경우 수신을 AWS가 해주기 때문에 불필요한 기능이지만, 발송 과정에서 Postfix를 사용하고 있고 내 도메인으로 전송하는 경우가 발생할 수 있기 때문에 적절한 설정을 해줘야한다. (예시로 a@naver.com 에서 b@naver.com 으로 메일을 보내는 경우.)
        기본적으론 서버 내 해당하는 경로에 메일 원문을 저장하게 되어 있지만, 난 Dovecot 으로 전송하도록 설정할 예정

5. 메일 수신시 사용자 존재 여부 확인 / alias (다른 주소로 수신하는 기능)
    -> 메일 수신자에 따라 실질적으로 어떤 계정이 해당 메일을 받을지 결정하는 기능..
        support@도메인 으로 전송하면 CS팀에 속한 직원이 모두 해당 메일을 받는다거나.. 하는 목적으로 사용된다.
        난 내 도메인으로 오는 전체 메일을 내가 사용할 한두개 계정으로 받기 위해 사용할건데, 메일 수신을 Postfix만 하는게 아니라서 Postfix 와 Lambda 양쪽에 동일하게 작동하도록 구성해주어야 한다.

6. 다른 서버가 전송하는 메일을 다른 서버로 릴레이
    -> 보안 상의 이유 등으로 보통 비활성화

 

Postfix 설정

분량 관계상 포스팅을 분리하여 작성 (작성 후 링크 예정)


Dovecot

메일 박스를 관리하며 POP3, IMAP 등 프로토콜을 지원하여 다른 프로그램에서 메일을 받아갈 수 있도록 지원한다.
SMTP Submission 기능도 지원하는 것 같긴 하던데, 어차피 Postfix도 필요할 것 같아서 사용하지 않았음.

MTA(Postfix)가 메일을 수신해서 폴더에 저장하면 Dovecot이 알아서 그걸 읽는 방법도 있고,
MTA가 다시 Dovecot으로 LDA(Local Delivery Agent)나 LMTP(SMTP 개량 프로토콜)를 통해 보내줄 수도 있다.
예전엔 LDA를 썼었는데 최근엔 설정 편의성과 성능 때문에 LMTP를 더 많이 쓴다고 한다.

나의 경우 역시 Postfix - LMTP -> Dovecot 로 설정을 하였고,
AWS SES에서 수신한 메일도 AWS SES -> S3 -> SNS -> Lambda - LMTP -> Dovecot 으로 구성을 하였다.
보통 Lambda에서 Dovecot의 메일박스로 파일을 바로 전송시키는 방법을 사용하는데, 이러면 폴더 구조 같은걸 내가 신경 써줘야해서 난 수신자/alias 구분만 Lambda에서 하고 LMTP로 Dovecot에 떠넘겼음.

Dovecot 설정

역시 분량 관계상 포스팅 분리하여 작성 (작성 후 링크 예정)


사용 포트 / TLS

Dovecot 에서 사용할 POP3 와 IMAP 은 TLS 암호화가 추가된 버전인 POP3S(995/tcp), IMAPS(993/tcp) 만 사용할 예정이다.
내부 메일 전달을 위한 LMTP는 Postfix만 쓸거면 unix socket으로 해도 되지만, Lambda에서 사용해야 하니 적당히 임의로 2525/tcp 포트도 추가로 사용.

사용자가 메일 전송을 위해 Postfix에 접속할 때는 SMTPS(tcp/465) 대신 SMTP + STARTTLS 을 사용할거고, 25/tcp 가 OUTBOUND로 차단되는 경우가 많기 때문에, 587/tcp 포트를 사용한다.

즉 587, 993, 995 3개 포트는 모두 열려있어야 하며, 2525 포트는 내부에서 사용할 수 있게만 열려있으면 된다.

TLS 연결을 위해 인증서를 발급받아야 하는데, Let's encrypt(certbot) 을 이용한 웹서버용 인증서를 그대로 사용할 수 있다.
이 인증서의 발급 방법은 생략.
발급된 경로만 잘 확인하여 후에 설정할 때 적절한 경로를 넣어주면 된다.

이 후 발급된 인증서를 Dovecot / Postfix 각각 설정에 적절히 넣어주면 된다.


전체 구성도

아직 시작도 안했지만 벌써부터 복잡한, 전체 구성도는 아래와 같다.

DB와 메일 서버는 동일 서버여도 되지만 난 분리되어 있기 때문에 이미지상 분리해뒀다.

이미지에서 볼 수 있다시피 Lambda가 DB와 EC2 서버에 각각 접근해야 하는데, DB는 당연하고 LMTP도 Public 오픈을 권장하지 않기 때문에 Lambda를 private subnet에 넣고 동일 VPC 네트워크 내에 사설망을 이용하도록 구성하였음.


나중에 사용자 인증을 LDAP 으로 사용한다거나.. 등도 고민 중인데..... 갈길이 멀다.....ㅠ

iDRAC 에 접속하면 Virtual Console 이라고,, 간단하게 말해서 원격으로 서버 콘솔에 접근할 수 있다.
일종의 원격제어...
서버가 죽어도 서버실에 갈 필요 없이 왠만한 복구는 다 할 수 있게 해주는 한줄기 빛같은 존재

Java Web Start 라고, 웹브라우저에서 바로 자바를 실행할 수 있게 만들어진 프레임워크를 사용하는데, 요즘에 보안때문에 그런게 될일은 당근 없고, 그냥 viewer.jnlp 파일이 다운받아지는걸 자바로 실행해주면 된다.

평소엔 쓸 일이 없으니 봉인해두다가, 오늘 쓸일이 있어서 열어봤는데

안된다...ㅠㅠㅠ

검색해보니 Java Web Start 가 Java 9에서 deprecated 되었고, Java 11에서 삭제되었다고 함.
웹에서 실행해줄 뿐이지 어쨋든 자바니까, 직접 실행할 수 있는 방법을 찾아봤다.

우선 jnlp 파일을 열어보면 연결에 필요한 인자값들과 OS와 아키텍쳐에 따른 java 파일 링크가 걸려있다.
avctKVM.jar 파일과 연결하려는 시스템에 맞는 lib 파일들을 받는다.

그리고 구버전 JRE를 구한다. 설치할 필요는 없으니 오라클 홈페이지에서 tar.gz 버전으로 다운로드 받으면 됨.
1.7.0_80 (7u80) 버전이 된다길래 난 이걸로 했음.
bin, lib 등이 있는 폴더를(Mac버전 기준 Home) jre 라는 이름으로 바꿔서 가져온다.

정리하면,
┣ avctKVM.jar
┣ lib/
┃    ┣avctKVMIOMac64.jar
┣    ┗avctVMAPI_DLLMac64.jar
┣ jre/
    ┣ bin/...
┗    ┗ lib/...
이런느낌의 디렉토리 구성이 되도록..

이 후 viewer.jnlp 파일의 인자를 참고하여 다음과 같이 명령어를 실행하면 된다.
- viewer.jnlp 에는 일회용 ID/PW가 있는데, 그걸 써도 되지만 원래 계정을 입력해도 접속이 잘 됨.
- 없어도 되는 인자도 있겠지만 난 그냥 다 넣어줌.
- vmprivilege는 참고한 글에서 넣어줬길래 그냥 넣어줌.

./jre/bin/java -cp avctKVM.jar \
	-Djava.library.path=./lib com.avocent.idrac.kvm.Main \
	ip=SERVER_HOST \
	vm=1 \
	user=USER_ID \
	passwd=USER_PW \
	kmport=9595 \
	vport=9595 \
	apcp=1 \
	reconnect=1 \
	chat=1 \
	F1=1 \
	custom=0 \
	scaling=15 \
	minwinheight=100 \
	minwinwidth=100 \
	videoborder=0 \
	version=2 \
	vmprivilege=true

아, java 를 인터넷에서 받았다고 실행을 안해줄텐데, 파인더에서 option+열기로 먼저 실행해주거나,,, 여러가지 방법으로 허용해주면 됨.
난 걍 개인 정보 보호 - 개발자 도구 옵션에서 터미널을 추가했음

이러면 원래 쓰던거처럼 연결이 잘 됨.
다만 맥 기준,
한번이라도 한글인 상태로 타이핑을 하면 키 입력이 이상하게 들어가서 재접속을 해야하고
macOS 보안 옵션 문제인지 전체 키스트로크를 받을 수 없다고 오류가 난다. 이건 설정에서 직접 허용해주면 될 것 같기도 함.

 

  1. 오리맛 2021.07.06 10:39

    JNLP파일을 뭘로 여시면 avctKVM.jar 파일이 나오나요?

    • BlogIcon iolate 2021.07.06 21:13 신고

      아.. 그 부분을 안적었네요
      jnlp 파일을 그냥 텍스트 에디터로 열면 안에

      <resources>
      <j2se version="1.6+"/>
      <jar href="https://.../avctKVM.jar" download="eager" main="true" />
      </resources>

      이런식으로 리소스들 주소가 있는데 arch 등을 참고해서 해당하는 파일들을 내려받으면 됩니다.

      윈도우인지, 맥인지 등등에 따라 파일명 등이 조금은 달라지겠죠?

+ Recent posts