예제에는 개발하다가 의문이 생기면 MSDN 이라는 것을 이용해서 문서를 찾아야 했다. 이거 보통 CD 6장을 정도를  따로 설치해야 하는 Document 문서 검색기 같은 거다. 인터넷을 이용해서 검색할 수는 있었지만 별달리 도움이 되진 않았던 것 같았다. 
 그 후 winapi.co.kr  라는 사이트가 언제 부터 인지 자주 사용하게 되었다. 기본적인 API 를 검색할 수 있었다.
여기서 API 라고 했지만 그 시절 그냥 C 표준 라이브러리나 C++ 표준 라이브러리 함수 원형, 리턴값 등을 검색하거나 windows 개발을 위한 윈도우 전용 SDK 라이브러리 이용법등을 검색하는 수준이었다. 

그리고 회사에 다니고 부터는 Google 검색에 꽤 많이 의존했던 것 같다. 어느 순간 부터는 stackoverflow 라는 사이트가 구글 검색의 상단에 노출되기 시작했고 이 때 부터는 단순히 함수 자체를 물어보기 보다는 알고리즘, 로직, DB 쿼리 짜는 법, CSS 기술 등등 다양한 것을 물어 보면 꽤 자세히 찾을 수 있게 되었다. 한 번에 다 찾을 수 없었지만 중간중간 단계를 설정해서 여러개를 조합하면 내가 원하는 결과를 만들어 낼 수 있었다.(그러나 이상하게도 1, 2, 3  예제을 조합하면 이상하게 동작하지 않는 신기한 현상을 경험하기도 했다.) 만일 이래도 못 찾으면 내가 세상에서 이상한 것을 하는 사람인가 라는 의심도 하기도 했다. 

어느 순간 AI 시대가 되면서 AI 가 개발하는 시대로 접어든 것 같다. 아직 AI 개발은 발전 중이긴 하지만 AI를 이용한 검색은 확실히 많이 띄어난 것 같다. 

  어제 파이썬 requests 에 files 를 사용하면 어떤 HTTP Header 를 기본값으로 갖으면서 해당 서버로 request를 보내는지 확인하고 싶었다. 그래서 구글 검색을 통해 이리 저리 찾아 봤다. 쉽게 찾을 수 있을 지 않았지만 시간이 꽤 걸렸다. 

 그래서 Gemini 에게 물어 봤다.

## 질문
파이썬 requests 라이브러리에서 files 인자를 사용해서 파일을 업로드 하면 자동으로 multipart upload 방식으로 업로드는 되는 건가요? 기본적인 request header 가 어떻게 정의 되는지 궁금합니다.

## 답변
네, 파이썬 requests 라이브러리에서 files 인자를 사용하여 파일을 업로드하면 자동으로 multipart/form-data 방식으로 인코딩되어 업로드됩니다. 이는 웹 표준에 따른 파일 업로드 방식이며, 파일 데이터와 함께 다른 폼 데이터도 함께 전송할 수 있도록 설계되었습니다.

기본적인 Request Header 정의:

requests 라이브러리는 파일 업로드 시 다음과 같은 기본적인 request header를 자동으로 설정합니다. 특히 Content-Type 헤더가 multipart/form-data로 설정되는 것을 확인할 수 있습니다.

Content-Type:

파일을 업로드할 때 files 인자를 사용하면 requests는 Content-Type 헤더를 multipart/form-data로 설정합니다.

이 헤더 값에는 파일 데이터를 구분하고 각 부분의 정보를 담는 boundary 라는 고유 문자열이 포함됩니다. 예를 들어 다음과 같은 형태입니다.

Content-Type: multipart/form-data; boundary=----------------------------abcdefg12345
boundary는 각 폼 필드와 파일 데이터를 구분하는 역할을 하며, 서버는 이 boundary를 기준으로 요청 본문을 파싱하여 데이터를 추출합니다.

Content-Length:

요청 본문의 전체 크기를 나타냅니다. 파일 데이터와 다른 폼 데이터의 크기를 모두 포함합니다. requests는 파일 내용을 읽어 전체 크기를 계산하여 자동으로 설정합니다.
User-Agent:

requests를 사용하는 클라이언트 정보를 나타냅니다. 기본적으로 python-requests/{version} 형태로 설정됩니다. 필요하다면 headers 인자를 통해 사용자 정의 User-Agent를 설정할 수 있습니다.
Accept:

클라이언트가 이해할 수 있는 응답 미디어 타입을 서버에 알립니다. requests는 특별히 설정하지 않으면 */* (모든 타입)으로 설정될 수 있습니다. 서버가 특정 타입의 응답을 보내도록 기대한다면 headers 인자를 통해 설정할 수 있습니다.
기타 표준 HTTP 헤더:

요청 방식(GET, POST 등), 쿠키 (Cookie), 인증 정보 (Authorization) 등 다른 표준 HTTP 헤더들도 필요에 따라 자동으로 포함되거나 headers 인자를 통해 명시적으로 설정할 수 있습니다.

너무 자세히 알려주었다.

내 의문도 해소되었다. 

 

이젠 검색도 AI 를 이용해야 하는 시대가 되어 버렸다. 

 오페라는 웹브라우저이다. 내 기억으로는 Chrome 보다 더 오래 되었다. 2000년대 초반 많은 사이트들이 IE(인터넷익스플로러) 기준으로 제작되었다. 그 때 이 브라우저가 리눅스에서 설치되면서 IE전용 사이트에서 괜찮은 호환성을 보였다. 그 때 사용한 브라우저로 요즘은 firefox 와 chrome 만을 사용했는데 AI 기능 때문에 다시 설치해 보았다. 

 왜 갑자기 AI 기능이 추가 되었는지 모르겠지만 이 기능이 다른 AI 보다 실시간성 반영성이 좋다. 일반적인 LLM들은 이미 학습된 데이터들에 대해서만 대답한다. 학습이후 수집한 데이터는 잘 대답하지 못한다. 

 내가 가장 하고 싶은 것은 `오늘 최신 뉴스 브리핑 해줘` 이다. 구글 gemini  무료 버전의 경우 이런 것을 지원해 주지 않는다. chatgpt 무료 버전도 이것을 지원하지 않는다. 그런데 오페라 AI Aria 는 이것을 지원한다. 물론 좀 말의 이해력이 부족한 것 같다. 말을 잘 이해하지 못하면 계속 플로우차트를 생성하려고 한다. 그리고 대화의 세션을 잘 유지 못하는 것 같다. (물론 이것은 내가 로그인하지 않고 사용하는 것도 이유 중 하나 같기는 하다.) 

 이런 쪽에 가장 좋은 것이 perplexity 인 것 같긴 한데, 무료로 사용하면 사용회수 제한이 있다. 오페라 AI 는 그런 제약사항이 없다. 계속 시도해도 된다. 다만 이거 설치가 필요하다. 오페라는 PC버전도 있고 안드로이드 폰 버전도 존재한다. 안드로이드 폰 버전에서도 AI 사용이 가능하다. 

 보고 있는 웹페이지 정보와 연동될 수 있으면 좋을 것 같은데, 아직 그런 기능은 없다. (모바일에서 웹페이지 요약하기 기능은 있다. PC에는 이 기능이 있는지 모르겠다.). 계속 기능이 추가되고 AI 기능이 좋아진다면 내 main 브라우저를 Opera 로 변경할 수도 있을 것 같다. 

  회사 앞에 팝업스토어로 운영되는 상가가 있다. 그래서 아침에 출근하다보면 공사하는 것을 보게된다.

  공사할 때마다 건축폐기물이 꽤 나오는 것 같다. 물론 일부 재료들은 재활용 할 수 있을 것 같긴하다. 그러나 다 부분은 재활용 할 수 없고 그냥 폐기될 것 같다. 

이렇게 쓰레기를 많이 만들어도 되는 것인지 모르겠다. 

평소에는 이런 생각 안했을 텐데. 이번 여름이 너무 더웠다보니 이런 생각을 하게된다.