일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- M2
- 로드밸런스
- springboot
- 우리FIS아카데미 #
- AWS
- dbeaver
- HTTP
- Gradle
- 클라우드 서비스 개발
- 우리에프아이에스
- 맥
- 도메인
- jdk
- K-디지털트레이닝
- 우리FISA
- sts
- 우리FISA #
- 맥OS
- 글로벌소프트웨어캠퍼스
- https
- Java
- 우리에프아이에스 #
- 리눅스
- 우리FIS아카데미
- route 53
- 맥북
- mysql
- 클라우드 서비스 개발 #
- spring
- Today
- Total
<<개발일지>>
파일 이동 시 http(s) vs (s)ftp 본문
오늘 일 때문에 타 개발자들의 이야기를 들으면서 생겼던 의문이 있었다.
결론부터 말하자면, 이것과는 다른 내용의 주제였지만 얼핏 생각이 났다.
실제 개발자들의 이야기는
파일을 업로드 후, 파싱을 하기 위해서 백 서버에 요청을 보내고 응답을 받는다 ~ 이런 얘기 였다.
나는 여기서 파일 업로드 하는 부분이 어떻게 하고 있는지 궁금했다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>File Upload Example</title>
</head>
<body>
<h1>Upload a File</h1>
<input type="file" id="fileInput">
<script>
document.getElementById('fileInput').addEventListener('change', function(event) {
const file = event.target.files[0];
const reader = new FileReader();
reader.onload = function(e) {
console.log('File content:', e.target.result);
};
reader.readAsText(file); // 텍스트 파일의 내용을 읽음
});
</script>
</body>
</html>
그 과정은 생각해보면 간단하다.
위의 코드 처럼 <input type='file' id='fileInput"/> 를 활용해서 업로드를 해주면 된다.
js는 이에 반응해서 작동하면 되는 것이고, 정말 간단한 문제이다.
만약 파일의 데이터를 가져와서 정제하고 입력칸에 표기 하고 싶다면
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Display Data Example</title>
</head>
<body>
<h1 id="title">Welcome to My Page</h1>
<p id="description">This is a description.</p>
<div id="output"></div>
<!-- 자바스크립트 파일 또는 코드 삽입 -->
<script>
// 자바스크립트 데이터를 정의합니다.
const data = {
title: "Hello, World!",
description: "This is a dynamically updated description.",
content: "Here is some dynamic content that will be displayed in the output div."
};
// 데이터를 HTML 요소에 표시합니다.
document.getElementById('title').textContent = data.title;
document.getElementById('description').textContent = data.description;
document.getElementById('output').textContent = data.content;
</script>
</body>
</html>
이러한 원리를 활용하면 되는 것이다.
이 과정에서 브라우저는 http(s) 로 post 요청을 보내서 서버로 파일을 전송하는 것이다.
결과적으로 개발자들이 말하는 내용은 이쪽에 관련된 내용이었지만 나는 다른 부분에 관심이 생겼다.
바로 http와 ftp의 차이는 뭔가 ??
우선은
1. HTTP/HTTPS
- 사용 방식: 클라이언트는 브라우저나 다른 애플리케이션을 통해 서버에 파일을 업로드합니다. 이 과정에서 주로 HTTP POST 요청을 사용합니다.
- 데이터 전송: HTTP는 기본적으로 비보안 프로토콜이며, HTTPS는 SSL/TLS를 통해 보안이 강화된 버전입니다.
- 일반적인 사용 예: 웹 애플리케이션에서 파일을 업로드할 때 사용됩니다. 예를 들어, 웹사이트에서 사진을 업로드하거나 문서를 제출할 때 사용됩니다.
2. SFTP (SSH File Transfer Protocol)
- 사용 방식: SFTP는 SSH(Secure Shell) 프로토콜을 기반으로 한 파일 전송 프로토콜로, 클라이언트와 서버 간의 파일 전송을 보안적으로 수행할 수 있습니다.
- 데이터 전송: SSH를 통해 암호화된 채널을 사용하여 데이터를 전송하므로, 파일 전송 과정에서 보안이 보장됩니다.
- 일반적인 사용 예: 서버 간의 파일 전송, 원격 서버에 파일 업로드/다운로드, 또는 시스템 관리자가 안전하게 파일을 전송할 때 주로 사용됩니다.
요약
- HTTP/HTTPS는 주로 웹 애플리케이션에서 파일을 업로드 및 데이터 전송하는 데 사용되며, 일반적인 웹 트래픽에 많이 사용됩니다.
- SFTP는 보안이 중요한 환경에서 서버 간 파일 전송이나 시스템 관리를 위해 사용됩니다.
따라서, 목적에 따라 HTTP/HTTPS 또는 SFTP를 선택하여 사용할 수 있습니다. 웹 애플리케이션에서 사용자들이 파일을 업로드하는 경우라면 주로 HTTP/HTTPS를 사용하고, 보안이 중요한 파일 전송의 경우 SFTP를 사용하는 것이 일반적입니다.
이는 챗 gpt를 활용해서 가져온 정보이다.
위의 글을 보았을 때
http(s) 는 웹을 사용할 때 주로 전송하는 프로토콜이고, (s)ftp 같은 경우는 서버간 파일을 전송할 때 사용하는 프로토콜로 해석이 된다.
결국은
이 둘은 상황에 따라 맞는 걸로 사용하면 되는 것이다.
그러면 상황에서 각각 사용이 될까?
1. FTP: 지속적인 연결과 대용량 파일 전송에 적합
• 지속적인 연결: FTP는 제어 채널을 통해 연결 상태를 유지하며, 여러 파일을 연속적으로 전송하거나 파일을 관리할 때 유리합니다. 이 지속적인 연결 상태를 통해 파일 목록을 가져오거나, 디렉토리 탐색, 다중 파일 전송 등의 작업을 수행할 수 있습니다.
• 대용량 파일 전송: FTP는 대용량 파일이나 대량의 파일을 전송할 때 효율적입니다. 서버 간의 데이터 백업, 파일 서버와의 대량 파일 전송 작업 등에서 FTP가 자주 사용됩니다.
• 파일 서버 관리: 파일의 업로드, 다운로드, 삭제, 권한 설정 등 파일 서버의 관리 작업을 지속적인 세션 내에서 수행할 수 있습니다.
2. HTTP: 웹 기반 통신과 다양한 리소스 전송에 적합
• 비상태적 연결: HTTP는 각 요청이 독립적이며, 상태를 유지하지 않는 비상태적인 프로토콜입니다. 이는 웹 페이지 로드, API 호출, 소규모 파일 전송 등의 작업에 적합합니다. 한 번의 요청-응답이 완료되면 연결이 끊어지므로, 다중 사용자의 요청을 효율적으로 처리할 수 있습니다.
• 다양한 리소스 전송: HTTP는 단순한 파일 전송뿐 아니라, HTML, CSS, JavaScript, 이미지, 비디오 등 다양한 웹 리소스를 전송하는 데 최적화되어 있습니다. 웹 애플리케이션에서 파일을 업로드하거나 다운로드하는 것도 HTTP를 통해 쉽게 처리할 수 있습니다.
• 광범위한 사용 사례: HTTP는 웹 애플리케이션과 API 통신의 표준 프로토콜로, 대부분의 웹 기반 서비스에서 필수적입니다. 클라이언트-서버 모델에서 광범위하게 사용되며, RESTful API, 웹페이지 로딩, JSON/XML 데이터 전송 등 다양한 사용 사례에 적합합니다.
결론
• FTP는 대용량 파일 전송, 파일 서버 관리, 지속적인 연결이 필요한 작업에 적합하며, 파일 전송 작업을 주로 다루는 환경에서 유리합니다.
• HTTP는 웹 애플리케이션, 다양한 리소스 전송, 다수의 사용자 요청을 효율적으로 처리하는 작업에 적합하며, 특히 웹 기반 서비스에서 필수적입니다.
따라서, 대규모 파일 전송 작업이나 파일 서버 관리가 주된 목적이라면 FTP를 사용하는 것이 좋고, 웹 애플리케이션을 위한 다양한 리소스 전송과 다중 사용자 환경에서 효율적으로 동작하는 프로토콜이 필요하다면 HTTP를 사용하는 것이 더 적합합니다.
이렇게 정리할 수가 있다.
그렇다면 성능적인 부분은 단점이 있지 않을까?
여기서 각각 몇가지의 단점은 있지만 대표적으로 단점이 되는 부분만을 살펴 본다면,
(S)FTP의 단점
1. 지속적인 연결 유지로 인한 리소스 소비
- CPU 및 메모리 사용량: FTP는 제어 채널과 데이터 채널을 통해 지속적인 연결을 유지합니다. 이는 서버와 클라이언트 간의 연결 상태를 유지하기 위해 일정한 양의 CPU와 메모리를 사용하게 만듭니다. 각 연결이 활성화된 상태로 유지되므로, 다수의 클라이언트가 동시에 연결되어 있을 경우 서버의 리소스 소비가 크게 증가할 수 있습니다.
- 연결 관리: 서버는 각 클라이언트와의 연결 상태를 추적하고 관리해야 하므로, 다수의 연결이 활성화된 경우 관리 오버헤드가 발생합니다. 이는 특히 고용량의 데이터를 전송할 때 CPU에 부담을 줄 수 있습니다.
HTTP(S)의 단점
1. 비상태적 프로토콜
• HTTP의 비상태성: HTTP는 비상태적(stateless) 프로토콜로, 각 요청이 독립적으로 처리됩니다. 이 비상태성은 웹 페이지를 빠르게 요청하고 응답받는 데는 유리하지만, 대규모 파일을 전송할 때는 연결을 유지하지 않기 때문에 비효율적일 수 있습니다.
• 연결 유지의 어려움: 대규모 파일 전송에는 지속적인 연결 유지가 필요할 수 있는데, HTTP는 기본적으로 요청-응답 후 연결을 끊습니다. 대규모 파일 전송 중 연결이 끊어지면, 재시작하거나 부분적으로 전송하는 것이 복잡할 수 있습니다.
결과적으로 상황에 따라 각 프로토콜을 적절하게 사용하면 되는 것이다.
정말 파면 팔 수록 배울 것이 많다 ㅎㅎ.
하지만, 이해의 깊이가 더 해질 수록 IT를 바라보는 안목은 엄청 변화하고 있다.
한 번에 내 것은 되기 힘들 것이다. 꾸준히 내 것으로 될 수 있도록 공부를 이어나가자.
'전송프로토콜' 카테고리의 다른 글
https 통신 흐름 -작성중- (1) | 2024.08.05 |
---|---|
https http 그리고 set-cookie의 secure (0) | 2024.08.05 |
HTTPS를 적용하는 이유는?? (지도, 카메라) (1) | 2024.05.22 |