회사에서 IT 기획자로 근무를 하면서 가장 중요하게 생각되는 개념들이 있다.
바로, "데이터를 어떻게 전송하고 받을 것인가"에 대한 내용이다.
업무를 하다 보면, 다양한 이해관계로 인하여 외부 데이터를 필요한 경우가 있다.
그렇지만 우리같은 비개발자 입장에서 이러한 내용들을 습득하고, 이해하는 데에는 큰 어려움이 있다.
특히나 나의 경우에는 산업공학을 전공하며, 얕게 알아왔지만 사실 개발자만큼 정밀하게 알지는 못한다.
그렇기 때문에, 각 부문 담당자들과 같이 파트너로 업무 하는 개발자, 그리고 주변 이해관계자들을 이끄는 PM으로서
업무를 수행하기 위해서는 이러한 개념을 나만의 개념으로 쉽게 이해하는 것이 중요하고 생각한다.
(결국 그게 나의 경쟁력이 될 것이기도 하니깐 ! )
이는 내가 실무를 뛰면서, 정말 크게 느꼈던 부분 중 하나였다 ㅎㅎ
때론 '대충 이해하면 되겠지~ '라는 생각이 나중에는 큰 화를 부르기도 하였고, 결국 프로젝트가 끝나더라도
크게 남는 게 없어서 나중에는 개인의 성장에도 큰 방해가 되는 것을 느끼곤 했다.
하지만, 이러한 IT 지식들은 참 어렵기 때문에 나름대로 많은 고민과 공부를 하려고 했고
조금씩 이러한 내용들을 나만의 쉬운 언어로 블로그에 정리를 해본다.
첫 스타트로, 오늘은 데이터를 주고받을 수 있는 FTP 방식에 대해서 이야기해본다.
🤔 FPT가 뭐길래?
" 📦 똑똑~ 데이터 택배가 왔습니다 ~! "
뭐든 주변 생활과 연관 지으면 이해가 편한 법이다. 나는 FPT 방식을 "택배"와 연관하여 설명을 해보려고 한다.
FTP(File Transfer Protocol)는 쉽게 말해 '인터넷상의 택배 시스템'이라고 가정해 보자.
본격적인 설명에 앞서, 우리는 서버(Server)와 클라이언트(Client)의 개념부터 살펴보아야 한다.
나중에 이 부분도 깊이 있게 다루겠지만 쉽게 말해서 "목적"에 따라 이 개념은 계속 변경될 수 있다.
나는 내가 속한 기업이, 외부의 데이터를 가져오는 것을 희망하기 때문에 내가 고객(클라이언트)이 된다.
1. 서버 : 외부 데이터가 있는 서버 (외부 기업의 서버)
▷ 네트워크를 통해 클라이언트에게 서비스를 제공하는 시스템
2. 클라이언트 : 나 (내가 속한 기업의 서버)
▷ 서버의 서비스를 받아 사용하는 장치, 프로그램을 의미함
고객, 클라이언트..
아직 어렵지만.. 일단 ok!
파일 전송 프로토콜인 FTP 방식은 쉽게 말해서,
"클라이언트가 서버와 통신하여 데이터를 빼오는 것"을 의미한다.
Active 방식과 Passive 방식이 있는데, 우선 내가 메인으로 사용하는 것은 내부 보안성 강화를 위해
"Passive 방식"을 우선 이야기한다. (나중에 자세하게 이 방식의 차이는 다뤄보겠다)
결국은 누가 택배를 가지고 가냐에 대한 문제인데, 방화벽 문제를 피하기 위함으로 우리 내부 서버에서 외부로 접근하는 방향을 되도록 지향하고 있다. (어쩌면, 우리 서버에 침입하면 보안 사고가 발생할 수 있기 때문이다 ㅎㅎ 모르는 남을 우리 집에 함부로 들일 수 있겠는가!)
🚀 핵심 개념 (쉽게 설명하기)
- 액티브 모드: 택배 기사가 우리 집으로 직접 오기 (서버가 클라이언트에 연결)
- ★ 패시브 모드: 내가 택배함을 설치하고 택배 기사가 그곳에 두기 (클라이언트가 서버로 연결)
즉, 패시브 모드는 방화벽 문제를 피하기 위해 사용되며, 클라이언트가 연결을 직접 관리하기 때문에 부담이 덜하다.
그래, 패시브 모드고 뭐고 난 잘 모르겠고..
그래서 FTP 방식이 뭔데?
여기까지 개념이 정리가 되었다면, FTP 통신법을 이해해 보자.이 부분은 쉽진 않은데, 택배에 비유하여 쓱 넘기듯이 읽어보면 도움이 될 것이다. (이해하기가 쉽지는 않다)
아래 표를 참고해 보자.
단계 | 설명 | 클라이언트(받는 사람) | 서버 (제공하는 사람) |
1 | 서버에 연결 요청 (Control 연결) | 서버의 21번 포트로 접속 요청 | 요청 대기 |
2 | 서버가 연결 수락 (Control 연결 성립) | 서버의 응답 대기 | "연결 OK" 응답 전송 |
3 | 서버가 데이터 전송용 포트 열기 | 서버가 알려줄 포트 번호 기다림 | 랜덤 포트 개방 후 포트 번호 전달 |
4 | 클라이언트가 해당 포트로 데이터 요청 | 서버가 알려준 랜덤 포트로 데이터 요청 | 데이터 전송 준비 |
5 | 데이터 전송 시작 | 데이터 수신 | 데이터 전송 진행 |
명확히 이해가 어려운가? 그렇다면, 아래 이미지를 보면 어떨까?
100% 맞는 표현은 아니지만, 나라면 이렇게 이해를 해보면 조금 더 명확하게 다가올 것 같다.
1. 클라이언트(고객)의 집에서 직접 내가 나가서 택배를 달라고 요청하고
2. 택배기사는 OK 하여, 잠깐 기다리라고 고객에게 이야기한다.
3. 그 뒤에 택배기사는 데이터를 꺼내주기 위해서 트럭과 연결된 "우편함" 위치를 고객에게 공유해 준다.
4. 그러면, 고객은 집에서 챙겨 나온 내 개인정보가 없는 "아무런 비닐봉지 (랜덤 한)"를 우편함에 넣고
5. 택배 기사는 "우편함"에 있는 "고객의 비닐봉지"에 데이터를 넣어주고 결국 고객은 비닐봉지를 집으로 가져간다.
아래 이미지는, FTP 방식을 명확하게 정리한 이미지이다.
사실, 패시브 모드는 아래와 같이 21번 포트와 랜덤포트가 핵심이다.
"중요한 것은 나의 정보를 외부에 알리지 않는 것"이며, 모든 주체는 나(클라이언트)가 된다.
a. 클라이언트에서 서버의 21번 포트로 접속
b. 서버에서 클라이언트의 요청에 응답(ack) 하며 클라이언트가 접속할 자신의 Data port 전달
c. 클라이언트에서 서버의 Data port로 접속 시도
d. 서버가 클라이언트의 요청에 응답(ack) => 49152~65535 사이에 랜덤 한 Data Port를 개방한다.
아하, 구동은 이렇게 되는구나..
근데 사실 나는 FTP가 왜 사용되는지가 궁금했어
💡 IT 기획자가 알아야 할 핵심 포인트
서두에 FTP는 데이터를 주고받는 프로토콜이라는 이야기를 하였다.
이유를 말하기 전에, 원리를 설명한 이유는 이러한 원리를 알아야 어떻게 사용되는지를 명확히 이해하기 쉽기 때문이다.
결국, API 방식과 차이가 있는 점은 별도 API 서버 구축과 과도한 통신을 지양하고
대용량의 데이터를 처리하는데 유용하기 때문이다. 이를 Batch를 통해 데이터를 받는다고 이야기하고 있는데
데이터를 "퉁" 하고 던져주고받는 방식으로 활용된다. 용량이 클 경우이면서, 데이터의 민감도가 크지 않을 경우
이러한 방식이 주로 사용되곤 한다.
1. 언제 FTP를 사용하나요?
- 대용량 파일을 주고받을 때
- 웹사이트 파일을 관리할 때
- 여러 사람과 파일을 공유할 때
2. 보안은 어떻게 신경 써야 할까요?
- 중요한 자료는 반드시 보안 강화 버전(SFTP/FTPS) 사용하기
- 접속 비밀번호는 복잡하게 설정하기
- 정기적으로 비밀번호 변경하기
보통 기업에서는 이러한 FTP을 기반으로 하여 "SFTP (Secure File Transfer Protocol)"를 주로 사용한다.
이러한 개념에서 SSH (Secrue Shell) 방식의 인증키를 암호화하여 조금 더 보안을 강화한 개념이다.
다시 택배에 비유하자면, 아래와 같이 특수 잠금장치를 달린 택배라고 이해하면 어떨까?
- FTP: 일반 택배처럼 누구나 내용물을 볼 수 있음
- SFTP: 특수 잠금장치가 달린 택배처럼 내용이 암호화됨
ID와 PW를 넘어서, 여기에는 SSH KEY 방식이 있는데.. 한번 "은행 금고"를 생각해 보자!
결국 클라이언트는 나의 공개키를 서버에 미리 서버에 등록하고, 접속 시에는 개인키로만 인증을 하는 구조이다.
즉, 클라이언트는 공개키, 개인키 모두를 생성하고. 나의 신원을 암호화할 수 있다.
으.. 어렵지만 정리하면, 클라이언트는 서버에 공개키를 전달하고 나는 최종적으로
"나입니다~"라는 것을 개인키로 서버에 연결하는 것이다.
(나야, 클라이언트~^^. 내가 이전에 쪽지로 내 이름을 딴 암구호 남겼었지?
사실 그거 내 이름(별칭) 이야ㅎㅎ 나 맞으니까 문 좀 열여 줘..! 너한테 있는 금고에서 가져갈 게 있어 !!!!
- 공개키(Public Key) = 자물쇠 ▷ 금고 자체 (누구나 돈을 넣을 수 있음. 나의 신원을 암호화한다.)
- 누구나 가질 수 있음
- 공개적으로 공유 가능
- 데이터를 암호화하는 데 사용
- 개인키(Private Key) = 열쇠 ▷ 금고 비밀번호 (본인만 알고 있어야 함. 암호화된 나의 신원을 복호화하는 역할)
- 오직 본인만 가지고 있어야 함
- 절대 공유하면 안 됨
- 암호화된 데이터를 해독하는 데 사용
■ 글을 마치며
우리는 개발자에게 별 거 아닌 것처럼 요구하는데, 사실 기술적으로 파고들면 끝도 없는 것 같다.
같이 협업하는 파트너 개발자분들께 무한한 감사의 인사를 드린다..
쉽지 않은데, 비개발자 입장에서는 "엥? 이거 너무 쉬운 거 같은데 왜 자꾸 안 된다고 하지?"라는 것으로
서로 간 이해충돌이 발생되곤 한다.
앞으로는 기획자로서 이러한 지점에서 발생되는 서로간 오해들을 공부를 통해 해소하는 노력을 할 것이다.
FTP 방식은 보안이 중요한 레거시 시스템 / 내부 서버에서 없어선 안될 중요한 개념 중 하나이다.
실무를 하는 사람 입장에서는 어쩌면 잘 못 들어볼 개념이긴 하지만, 대부분의 업무 체계들이 이러한 것을 중심으로 이루어지고 있을 것으로 보인다.
다음에는 API와 같은 기본 지식들도 다뤄볼 예정이다. 공부는 끝이 없지만, 이렇게 쌓여가는 지식들은 언젠가 반드시
도움이 될 것이라고 믿는다 ㅎㅎ 지나가는 분들께 조금이라도 정보에 도움이 되었기 바라면서, 글을 마무리한다.
파이팅!!
댓글