일기장

1. 텍스트 파일과 바이너리 파일

텍스트 파일은 문자열 데이터로 이루어져 있으며, 일반적으로 사람이 읽을 수 있는 형식으로 저장된다. 바이너리 파일은 이진 데이터로 이루어져 있으며, 텍스트 파일보다는 더 복잡하고 다양한 형식의 데이터를 포함할 수 있다. 예를 들어, 이미지, 음악 파일, 동영상 파일 등은 바이너리 파일에 해당한다.

 

 

2. MIME

MIME(Multipurpose Internet Mail Extensions)은 이메일이나 웹에서 다양한 형식의 데이터를 표현하고 전송하기 위한 메커니즘을 제공한다. HTTP에서도 MIME 타입을 사용하여 데이터의 형식을 정의한다. MIME 타입은 주로 파일의 확장자를 기반으로 결정되며, 각각의 타입은 고유한 식별자를 가지고 있다. 예를 들어, "text/plain"은 일반 텍스트 파일을 나타내고, "text/html"은 html 파일을, "image/jpeg"는 JPEG 형식의 이미지 파일을 나타낸다.

@Controller
public class HelloController {

    @GetMapping("/html")
    public void html(HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        response.getWriter().println("<html><head><title>Hello, World!</title></head><body><h1>Hello, World!</h1></body></html>");
    }

}

 

 

3. Base64 인코딩

HTTP는 기본적으로 텍스트 기반의 프로토콜이기 때문에 바이너리 데이터를 직접 전송하기 어렵다. 따라서 바이너리 데이터를 텍스트로 변환하여 전송하는 인코딩 방식 중 하나로 Base64 인코딩을 사용한다. Base64 인코딩은 6비트씩 데이터를 인코딩하여 ASCII 문자로 변환하는 방식이다. 이를 통해 바이너리 데이터를 안전하게 전송할 수 있다. 서버는 Base64로 인코딩된 데이터를 받아 디코딩하여 원래의 바이너리 데이터로 복원한다.

바이너리 파일을 HTTP로 전송하기 위해서는 해당 파일을 Base64로 인코딩하고, 요청 또는 응답 메시지의 본문에 포함시켜야 한다. 이렇게 전송된 데이터는 수신측에서 다시 디코딩하여 원본 바이너리 파일로 복원할 수 있다.

링크를 이용하지 않고 파일 자체를 변환하기에 안정성이 뛰어나다. 다만, 파일의 크기는 증가한다.

 

 

4. 바이너리 파일 다운로드

HTTP를 사용하여 바이너리 파일을 다운로드하는 경우, 서버는 해당 파일의 MIME 타입을 정의하여 응답 헤더에 포함시켜야 한다. 이는 클라이언트에게 파일의 형식을 알려주고, 적절한 처리를 가능하게 한다. 예를 들어, 이미지 파일의 MIME 타입은 "image/jpeg" 또는 "image/png"와 같이 설정된다.

클라이언트가 바이너리 파일을 요청할 때, 서버는 응답 본문에 바이너리 데이터를 포함시킨다. 이 데이터는 Base64로 인코딩된 형태일 수도 있고, 그대로 이진 데이터로 포함될 수도 있다. 클라이언트는 응답을 받은 후, 필요에 따라 Base64 디코딩 또는 파일로 저장하여 바이너리 파일을 복원한다.

 

 

5. 바이너리 파일 업로드

HTTP를 사용하여 바이너리 파일을 업로드하는 경우, 클라이언트는 해당 파일을 서버로 전송해야 한다. 이때 POST 요청을 사용하며, 요청 본문에 바이너리 데이터를 포함시킨다. 일반적으로는 FormData 객체를 사용하여 파일을 전송하며, 이를 통해 파일의 MIME 타입과 기타 메타데이터를 함께 전송할 수 있다.

서버는 받은 바이너리 데이터를 처리하고 필요한 작업을 수행한다. 예를 들어, 파일을 저장하거나 처리하여 응답을 반환할 수 있다.

바이너리 파일을 다루는 것은 HTTP 통신에서 중요한 부분이다. 이를 통해 웹 애플리케이션에서 이미지 업로드, 파일 다운로드 등 다양한 기능을 구현할 수 있다.

'웹개발' 카테고리의 다른 글

@RequestsParam, @ModelAttribute  (0) 2023.05.20
서블릿과 JSP  (1) 2023.05.19
MVC패턴 예제  (0) 2023.05.17
HTTP에 대한 이해  (0) 2023.05.15
웹 브라우저와 웹 서버  (0) 2023.05.14
profile

일기장

@공군급양

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!