AWS Lambda 를 처음으로 사용해 봤다. S3 에 업로드된 이미즈를 resize 하고 watermark 를 붙여서 thumbnail 이미지로 만드는 작업을 하고 싶었다. 기존에는 ec2 내 작업 중 하나였는데, 동작이 너무 느리고 간혹 서버가 죽는 문제가 발생했다. (내부적으로 multi processing 을 처리하는데 이게 좀 잘못된 것 같다.) 동시에 여러 job을 처리할 수 있는 aws lambda 를 사용해서 개선 작업을 하기로 했다.

lambda 의 Trigger 동작이 s3 put 동작으로 설정하고 이것 저것 작업 했다. 내부동작은 s3에 올라온 원본파일을 읽어  thumbnail 을 3가지로 만들고 다시 s3 에 업로드 하는 동작이다. 결과를 s3에 업로드하는 동작이 다시  3개의 Lambda 함수를 trigger 하는 recursive 동작이었다. 이 코드를 테스트 할 때 엄청나게 생성되는 파일을 보고  뭔가 잘못됨을 인지했다. 중지 시키는 것도 몰라서 그냥 에러를 발생시키는 코드를 배포했다. 

 한 1분 동안 작동한 것 같은데, 이게 3의 n 승번 동작이 발생해서  50만번 정도의 동작이 발생했다. 다행히 aws lambda 무료 사용횟수 내였다. 대신 S3 사용 비용이 $5 정도는 발생했다. 

테스트 하는 중이었기 때문에 따로 방어 코드는 넣지 않았다. 그리고 boto3 의 put_object 만 put 인줄 알았다. 그래서  upload_file 을 thumbnail 을 업로드 하면 다시 lambda 함수가 trigger 되는 일이 없을 거라고 생각했다. 그런데  upload_file  도 PUT 으로 인식하고 있었다. 

 방어 코드로 meta 정보를 이용하기로 했다. S3에 파일(Object)를 업로드 할 때  x-amz-meta-* 를 붙여 부가적인 정보를 전달할 수 있다. x-amz-meta-type : orgin 을 가질 때만 파일을 thumbnail 을 만드는 작업을 진행하기로 했다. 물론 이렇게 하면 의미없는 lambda 호출이 추가적으로 3번(내 경우 thumbnail 종류를 3가지 만든다.) 발생할 수 있다. 

 여기에 추가적인 트리거자체가 발생하지 않도록 put 이 아닌 다른 방법으로 s3 를 업로드 시켰다. S3 에 PresignedUrl을 통해 thumbnail 파일을 업로드 시키는 방식이 있다. 내 테스트에서는 이것은 Put trigger 가 발생하지 않았다. 이 방법은 보통 웹브라우저에서 사용자 PC에서 바로 S3 로 업로드 할 때 사용하는 방식이다. 마치 웹브라우가 업로드 하듯이 python requests 라이브러리를 이용해서 파일을 업로드 시키면 이 방법이 먹힌다. 

처음으로 새로운 것을 사용하다보니 좀 일이커지는 것 같다. 이 작업하면서 파이썬 library 를 설치하는 것도 꽤 큰일이었는데. 이것도 나중에 정리해서 올리도록 하겠다.

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

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

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

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

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

 Github 에 있는 남의 코드를 읽다보면 FIXME, TODO 같은 것을 간혹 발견할 수 있다. 평소에 이런 주석을 많이 보기는 했지만 적극적으로 이용하지는 않았는데, 앞으로 이를 적급적으로 활용하는게 좋을 것 같아서 이런 코드를 찾아 봤다.

따로 정리된 규칙이 있는지 찾아 봤는데, 딱히 없는 것 같다. 그래도 가장 정리는 된 문서는 https://peps.python.org/pep-0350/ 이거 같다. 

*  FIXME : 깔끔하지 않는 코드라서 정리가 필요한 코드
* TODO : 처리해야 하는 작업,  보통 함수 이름만 만들어 두고 내부는 TODO로 하는 식으로 처리하는 것 같다. 
* HACK : 버그를 수정하기 위한 유연하지 못한 방법, (알려진 버그 하나만을 처리하기 위한 좀 무식한 코드나 꼼수에 사용하는 것 같다. )
여기 까지가 사람들이 가장 많이 사용하는 codetag 인 것 같고, 다음 codetag 들은 잘 사용하면 유용할 것 같다.

* SEE : 참고해야할 다른 코드나 문서 URL 을 표시할 때
* NOTE : 코드를 리뷰하는 사람이 다는 코멘트
* !!! : 주의, 경고 사항 
* ??? : 알 수 없음. 물음.   (가끔 내가 작성한 코드이긴 하나 왜 이런 코드가 들어가 있지 하고 생각할 때 추가할만하다.)
* BUG : 버그,(알고 있는 버그인데 특수한 사항에만 적용되는 경우라서 알고 있는데, 딱히 수정하지 않을 때 사용할만 하다. )
* PORT : 호환성 문제(개발환경에서만 문제가 된다든지, 배포 환경에서만 동작한다든지에 관한 사항)