상세 컨텐츠

본문 제목

Go를 이용하여 가볍게 알아보는 Base64

Development/Go

by thisisnew 2022. 6. 10. 06:54

본문

반응형

1. Base64란?

출처 : https://ko.wikipedia.org/wiki/ASCII

바이너리 데이터를 치환하여 아스키코드와 일대일로 매칭 되는 문자열로 만들어주는 인코딩 방식입니다.

그렇게 얻어낸 문자열은 XML, JSON과 같은 문자열 기반 환경에서 유용하게 사용할 수 있습니다.

단, 이렇게 문자열로 치환된 데이터는, 기존의 데이터의 길이보다 약 30%가량 늘어나게 됩니다.

 

2. 사용하는 이유

모든 바이너리 데이터가 아스키코드와 매칭 되는 것은 아닙니다.

그것은 곧, 바이너리 데이터를 Base64가 아닌 다른 방식으로 인코딩할 경우, 데이터의 손실이 발생할 수 있다는 것인데요.

Base64 인코딩 시, UTF-8과 호환 가능한 문자열을 얻을 수 있게 됩니다.

 

제공해주는 예시를 참고하여 간단하게 구현해 볼 수 있습니다.

 

3. 인코딩

package main

import (
   "encoding/base64"
   "fmt"
)

func main() {

   data := []byte("any + old & data")
   str := base64.StdEncoding.EncodeToString(data)
   fmt.Println(str)

}

 

4. 디코딩

package main

import (
   "encoding/base64"
   "fmt"
)

func main() {

   str := "c29tZSBkYXRhIHdpdGggACBhbmQg77u/"
   data, err := base64.StdEncoding.DecodeString(str)
   if err != nil {
      fmt.Println("error:", err)
      return
   }

   fmt.Printf("%q\n", data)

}

 

5. 주의사항

앞서 언급한 것처럼, Base64 인코딩을 이용하여 문자열로 치환된 데이터는, 기존의 데이터의 길이보다 약 30%가량 늘어나게 됩니다.

때문에, 너무 큰 데이터를 Base64로 처리하는 것은 권장하지 않습니다.

만약 파일 업로드 기능을 구현한다면, HTTP multipart/form-data를 이용하는 것도 고려해봐야 합니다.

반응형

'Development > Go' 카테고리의 다른 글

Go - 복합 타입 (1)  (0) 2022.11.03
Go - 기본적인 데이터 타입과 선언 (2)  (0) 2022.11.02
Go - 기본적인 데이터 타입과 선언 (1)  (0) 2022.11.01
zlib을 이용한 데이터 압축  (0) 2022.10.09

관련글 더보기

댓글 영역