aiohttp, b64encoding
이재룡 Oct 28, 2025
base64.b64encode를 하는 이유
img_b64 = base64.b64encode(img_bytes).decode('utf-8'): 이 부분은 위에서 얻은 바이너리 데이터(img_bytes)를 Base64 형식으로 인코딩하는 과정입니다.
왜 인코딩을 할까요?
가장 큰 이유는 Azure OCR API가 Base64로 인코딩된 이미지 데이터를 요구하기 때문입니다.
코드를 따라가 보면, download_and_extract_layout 함수는 결국 azure_read_layout 함수를 호출합니다. ocrs/azure_ocr.py 파일에 있는 이 함수를 보면,
azure_read_layout 함수는 Base64 형식의 **문자열(str)**을 입력으로 받도록 설계되어 있습니다.
정리하면 다음과 같은 흐름입니다.
- 이미지 다운로드:
session.get으로 이미지 URL에 접속해 이미지의 원본 **바이너리 데이터(bytes)**를 얻습니다.
- 데이터 형식 변환: 바이너리 데이터는 텍스트가 아니므로, JSON 요청이나 함수 인자 등으로 쉽게 전달하기 위해 Base64 인코딩을 통해 안전한 ASCII **문자열(string)**로 변환합니다.
- OCR 함수 호출: 변환된 Base64 문자열을
azure_read_layout함수에 전달합니다.
- API 요청:
azure_read_layout함수는 전달받은 Base64 문자열을 다시 바이너리 데이터로 디코딩하여 Azure 서버에 전송합니다.
요약: session.get으로 얻은 이미지의 원본 데이터(바이트)를, 다음 단계인 Azure OCR 함수가 요구하는 형식(Base64 문자열)으로 맞추기 위해 b64encode를 사용하는 것입니다.
[ 1. Variable & Constant ]
Variable
- var <변수명> <type> = <초기값>
- 타입 추론 <변수명> := <값>
Constant
- iota : 0번 부터 시작하는 상수 열거형 at (enum을 만들 거나 할 때)
[ 2. Datatype ]
String
- backQuote(’’)
- DoubleQuote(’’)에서만 /n 과 같은 문자열 해석이 가능
go에서는 type conversion 문제가 발생했을 때,
compile error가 아닌 runtime error가 발생 ( 오류 체크 할 때 주의 필요! )
compile error가 아닌 runtime error가 발생 ( 오류 체크 할 때 주의 필요! )
Pointer
- &k - 주소 할당
- *p - 해당 주소의 실제 내용
[ 3. Collection ]
Array
- zero-base 초기화가 자동
- var <변수명> [크기]<type>
< 응용 : Slice >
- python처럼 sub slice 이용
- slice[start idx : end idx +1 ]
< 응용 : append 활용 >
Map
- 기본형 map [key_type] value_type
- 키 값 확인 key_val, exists := map["value"]
[ 4. 조건문 / 반복문 ]
if / else if / else
- ( )는 안 쓰지만 { }는 필수
- else if/else를 쓸 때는 반드시 전 조건의 마지막 ‘}’ 와 같은 라인에 써준다.
- 다중 조건 ‘;’ 로 가능
for (no while)
- 반복문에서 while이 없음
- ( )는 사용하지 않음
< 응용 : range >
- python처럼 range 사용 가능 (단 index까지 반드시 포함)
- 기본적으로 break 사용가능
⇒ 즉 index와 리스트에서 뽑은 데이터 총 2개의 값을 for range에서 이용
< 응용 : 중첩 루프 탈출 : break[Label] >
- label을 이용하여 for문을 건너뛰고 반복문 탈출 가능
- label은 for문 앞에 선언되며, 여러 개의 for문을 한번에 탈출 가능