❓ 해당 내용이 궁금해진 이유?
현재 금융권 대기업에 파견을 나가있는데 파일을 전송할 때 Base64로 변환을 해서 전송을 하고 있었습니다.
여기서 왜 굳이 Base64로 변환해서 전송을 하는지에 대해서 궁금해졌습니다.
- 인코딩, 디코딩 해야하는 불편함이 있는데 굳이 사용하는 이유는 뭘까?
- Base64로 변환하면 용량이 30퍼센트 정도 늘어나 비효율적이지 않나?
- multipart/form-data를 사용하지 않는 이유는 뭘까?
❓ 굳이 Base64로 인코딩 하는 이유는?
바이너리 데이터를 텍스트 기반의 규격으로 다룰 수 있기 때문이다.
이밎 파일등을 Web에서 필요로 할 때 Base64로 인코딩하면 UTF-8과 호환 가능한 문자열을 얻을 수 있다.
기존 ASCII 코드는 시스템간 데이터를 전달하기에 안전하지 않다. 모든 Binary 데이터가 ASCII 코드에 포함되지 않으므로 제대로 읽지 못한다. 반면 Base64는 ASCII 중 제어문자와 일부 특수문자를 제외한 53개의 안전한 출력 문자만 이용하므로 데이터 전달에 더 적합하다.
위 내용을 보면 용량이 30 ~ 33퍼센트 증가해도 안정성을 위해 Base64 인코딩을 사용한다는 것을 알 수 있게 되었다.
그런데 multipart/form-data를 사용하면 되지 않을까?
위 의문에 대해서는 정확한 의도는 모르지만 아래와 같은 이유가 있지 않을까 정의해봤습니다.
Base64로 인코딩된 텍스트에 Header와 Tailer 양식을 만들어 정보를 담아서 전송하기 위해서 사용한다.
그 정보를 바탕으로 해당 파일이 무엇인지 파악할 수 있게 해놓는 시스템이 구축되어 있기 때문이 아닐까 생각해봤습니다.
❓ Base64는 암호화이다?
Base64를 사용 하는 이유에서 암호화이기 때문이라는 얘기를 들었습니다.
여러 블로그를 확인해본결과 암호화라고 부르는 경우도 있고 단순히 인코딩이라고 하는 경우도 있었습니다.
좀 더 깊게 찾아보기 위해 스택오버플로우(Stack Overflow)와 쿼라(Quora)에 찾아보기로 했습니다.
그 결과 Base64는 바이너리 데이터를 출력 가능한 문자로 나타내기 위한 인코딩이라는 것을 알게되었습니다.
생각해보면 Base64가 나열된 문자는 디코딩을 하기 전까지는 읽기 힘들다는 것 밖에 없었습니다.
암호화가 되어 있었다고 하면 암호화 키와 복호화 키가 있을텐데 그런 것도 없었습니다.
단순히 해당 텍스트가 Base64 형식이라는 것을 알게되면 누구나 쉽게 디코딩이 가능하기 때문에 암호화는 아니라는 것입니다.
❗️ 위 내용을 작성하면서 내가 부족하다고 느낀 부분
- multipart/form-data를 통해 파일을 전송하는 것을 사용했지만 해당 내용에 대해 거의 아무것도 모르고 있었다.
- 어떤 방식으로 파일을 전송하는게 좀 더 효율적일지에 대해 고민하지 않고 그동안 코드를 작성한 점.
- Base64 인코딩에 대해 너무 두루뭉실하게 알고 있었다.
- 지금까지 구현한 것에 대해 궁금점을 가지지 않고 그냥 코드를 작성하고 있었다.
=> 깊이가 없는 상태