계기
multipart/form-data 전송, 수신 글을 쓰다가
mime/multipart: CreateFormFile에서 파일 파트를 만들 때, Content-Type이 기본적으로 "application/octet-stream"으로 되어있는 걸 발견하게 되었다. image/jpeg, image/png등 타입을 감지해서 변경해 넣어주면 좋겠다고 생각했다.
이유가 있을지도 모르겠지만,
이 부분이 조금 의아하고 변경되었으면 좋겠다는 생각이 들어 직접 컨트리뷰트 해보기로 했다.
컨트리뷰트 방법을 찾아서
Go언어에 컨트리뷰트 하는 방법은 공식 홈페이지에 잘 작성되어 있다.
일반적인 오픈소스들과 다르게 Gerrit이라는 툴을 사용해서 작업한다고 한다.
환경설정 부분을 마치고 계속 읽다가
Before contributing code
The project welcomes code patches, but to make sure things are well coordinated you should discuss any significant change before starting the work. It's recommended that you signal your intention to contribute in the issue tracker, either by filing a new issue or by claiming an existing one.
작업을 진행하기 전에 새로운 이슈를 만들던지, 존재하는 이슈에서 이야기를 나눠보는걸 추천하다고 한다.
이미 존재하는 이슈
역시나 2019년에 이미 이 부분에대해서 이슈를 제기한 사람이 있었다.
요약하자면 "CreateFormFile이 파트의 Contet-Type을 기본적으로 application/octet-stream으로 설정한다. 커스터마이즈 기능을 허용하거나 content type을 감지했으면 좋겠다."는 내용이다.
내 생각이랑 똑같았다;;
사람들이 대화하는 걸 보니깐 CreateFormFile은 편의를 봐주는 함수다. 또한 다른 메서드에서 content-type을 바꿀 수 있고, 호환성을 깨뜨릴수 없기 때문에 바꾸지 않는 게 좋겠다고 한다.
ㅠㅠ
후기
컨트리뷰트 시도는 이미 닫힌 이슈 발견으로 멈췄다..
그래도 처음으로 코드에서 불편한 점(?)을 발견했고 또 바꾸어보려고 했던 시도는 좋았다고 생각한다.
공식 문서를 자세히 읽고 따라가는 과정과 Gerrit, CLA등 오픈소스 기여에 기초적인 부분을 배울 수 있었다.
코드를 쓰면서 호환성에 대해 생각해 본 적이 전혀 없었는데 이번 기회에 큰 배움을 얻었다.
생각해 보면 당연한 거였다. 버전이 바뀌었다고 해서 원래 써둔 코드를 고쳐야 한다면 굉장히 불편할 것이기 때문이다
(기본을 바탕으로 쓰여진 코드들은 기본이 바뀌면 문제가 될 것이다. 디자인 패턴이나 아키텍처 설계에도 중요한 배움이 될 듯)
참고
Gerrit의 구조와 사용법, Git
https://d2.naver.com/helloworld/6033708
'Go' 카테고리의 다른 글
[Go] 클로저 (0) | 2024.08.22 |
---|---|
[Go] multipart/form-data 전송, 수신 (0) | 2024.06.10 |
[Go] 테스트가능한 예시 (Testable Examples) (0) | 2024.06.05 |
[Go] 빈 구조체의 의미와 활용 struct{} (0) | 2024.06.04 |