오늘 javascript 을 사용하다가 dict을 for 문으로 돌리는데 key 가 number 가 아니라 계속 string type으로 유지되는 현상을 발견했다. 처음에는 내가 사용한 Object.entries 의 특성인지 알고 다른 방법들을 사용해 보았다. 그러다 검색을 통해 javascript 에서 dictionary 의 key는 자동으로 string 으로 형 변환 된다는 것을 알게 되었다. (참고 : https://stackoverflow.com/a/3633390/6652082

 내가 python 코드를 작성할 때, key 를 integer 를 사용하거나 파이썬은 아래 처럼 key를 tuple(리스트 같은 것이지만 변경이 불가능한 것)로 사용할 수도 있다. 

 a = {(1,2) : "test"}



그렇기에 당연히 javascript 에서도 사용 가능할 줄 알았다.  만약 정말 number 형 key 가 필요하다면 stackoverflow 에서 제시되었듯이 Map() 을 사용해야 한다.

const map1 = new Map();

map1.set(1,3)
map1.set('1','string')

 

javascript 에서 dictionary 가 key 만 사용된다는 것을 이제 알게 되다니, 아직 배워야 할 것들이 너무 많다. 

 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 로 변경할 수도 있을 것 같다.