Skip to content
isdnetworks
Go back

공유 방법을 바꾸니 둘 자리도 정해야 했다

협력사와 파일을 메일로 주고받고 있었다. 용량이 커져서 다른 방법을 찾아야 했다.

Table of contents

Open Table of contents

메일로는 안 되게 됐다

주고받는 파일이 이만큼이었다.

일별 정산 파일 8MB
월별 상품 파일 42MB

SMTP 쪽 첨부 한도를 넘었다. 나눠 보내다가 순서가 섞이는 일이 있었다.

받는 쪽에서 조각을 다시 붙이는 것도 사람 손이었다. 한 조각이 빠진 것을 그날 못 알아채면 다음 날 정산이 어긋난다.

선택지 — 방법마다 딸려 오는 것

방법을 나열했다.

1. 파일 서버(FTP)를 둔다
2. 웹으로 올리고 내려받는 화면을 만든다
3. 외부 저장 서비스를 쓴다
4. 상대 서버에 직접 넣어 준다

각각 딸려 오는 것이 달랐다.

1. 서버가 필요하다. 계정 관리가 필요하다
2. 만들 것이 있다. 인증은 기존 것을 쓴다
3. 밖에 데이터가 나간다. 승인이 필요하다
4. 상대 규격을 따라야 한다. 상대가 바뀌면 우리도 바뀐다

1번은 FTP 라 협력사 쪽에서 스크립트로 자동화하기 좋았다. 다만 그 서버를 어디에 둘지가 또 문제였다.

사내망에 둔다      협력사가 못 붙는다. VPN 이 필요하다
IDC 에 둔다        붙을 수 있다. 방화벽을 열어야 한다
운영 서버에 같이   서비스와 같은 자리라 위험하다

주고받는 방법을 바꾸는 것이 어디에 둘지를 같이 정하는 일이었다. 처음에는 방법만 고르면 되는 줄 알았다.

무엇이 오가는지 확인했다

정하기 전에 파일 안에 무엇이 있는지 봤다.

정산 파일   주문번호, 금액, 결제수단
상품 파일   상품코드, 이름, 가격, 재고

정산 파일에는 order_no 와 금액과 결제수단만 있고 회원 정보는 없었다. 있었으면 밖에 두는 3번은 못 썼다.

무엇이 오가는지에 따라 쓸 수 있는 방법이 달라졌다. 내용을 안 보고 방법부터 골랐으면 승인 단계에서 다시 정해야 했을 것이다.

IDC에 따로 두기로 했다

2번이 만들 것이 적어 보였지만 협력사가 자동으로 받아 가야 해서 화면은 안 맞았다. vsftpd 를 IDC 에 따로 두고 운영 서버와 분리했다.

운영 서버   서비스
파일 서버   주고받기

파일 서버가 뚫려도 서비스에 바로 닿지 않게 막았다.

# 파일 서버에서 운영 DB 로 못 붙게
iptables -A OUTPUT -d <운영서> -p tcp --dport 3306 -j DROP

계정은 협력사마다 따로 줬다.

/home/partner_a/in    협력사가 올리는 곳
/home/partner_a/out   우리가 놓는 곳
/home/partner_b/...

자기 폴더 밖으로 못 나가게 vsftpd 설정을 걸었다.

chroot_local_user=YES

inout 을 나눈 것은 누가 놓은 것인지 헷갈리지 않기 위해서였다. 한 폴더에 다 두면 우리가 놓은 것을 상대가 지우는 일이 생긴다.

파일을 놓기만 하면 상대가 언제 가져갈지 모른다.

$files = glob('/home/partner_a/out/*.csv');
foreach ($files as $f) {
    if (filemtime($f) > $lastNotified) {
        mail($partnerMail, '파일 등록: ' . basename($f), '...');
    }
}

filemtime 으로 새로 놓인 것만 골라 알린다. 가져갔는지도 봤다.

$ grep "RETR" /var/log/vsftpd.log | tail

vsftpd.logRETR 이 그 파일에 대해 없으면 안 가져간 것이다. 일주일이 넘으면 알림이 가게 했다. 놓는 것과 가져가는 것은 다른 일이다.

보관 기간도 정했다.

in    처리한 뒤 30일 보관, 그 뒤 삭제
out   90일 보관, 그 뒤 삭제

안 정하면 계속 쌓인다. 오래된 정산 파일이 계속 밖에서 닿는 자리에 있는 것도 좋지 않았다.

정리


Share this post on:

Previous Post
화면 하나 보고 전부 확인했다고 적었다
Next Post
검색은 되는데 3초가 걸렸다