S3를 퍼블릭으로 관리하게 되면서, 파일을 주기적으로 지워야하는 정책이 추가됐다. S3에서는 다행히 주기적으로 파일을 삭제하는 기능이 있다. 바로 수명 주기 규칙이다. S3 > 버킷 > 버킷 선택 > 관리 > 수명 주기 규칙 생성으로 들어간다. 수명 주기 규칙은 알아보기 쉽게 짓고, 내 목적은 파일 전체를 지우는 거기 때문에, 버킷의 모든 객체 적용을 선택. 그리고 이전 버전 영구 삭제를 하루로 설정한다. 다만, 수명 주기 규칙 생성은 최소 단위가 1일이다. 이 간격을 더 짧게 만드는 가장 쉬운 방법은 람다나 서버에서 스케줄러를 돌려서 주기적으로 데이터를 지워주는 방식이다. 심플하지만 재미없는 방식이다. 조금 색다른 아이디어를 내보자면, S3에 저장된 객체만 퍼블릭하게 접근할 수 있는 시간을 지정할 수 ..
정말 오랜만에 Elasticsearch 관련 글을 쓰는 것 같다. 데이터를 생성하는 모델이 변경되어서 기존 데이터를 싹 마이그레이션 할 일이 생겼다. 가장 편한건 데이터를 싹 만들어두고 서버가 보는 index를 변경하는 것이었지만, 그럼 서버의 재배포가 필요하다. 그래서 그냥 index를 새로하나 만들고 두 index를 교체하는 방식으로 작업을 진행하려고 했다. 불행하게도 두 index를 교체하는 방식은 따로 제공하지 않았고, copy to 하는 형식의 reindex를 제공했다. 사용법은 간단하다. POST _reindex { "source": { "index": "from index" }, "dest": { "index": "to index" } } 이렇게 요청했을 때 바로 동작했으면 참 좋았겠지만, ..
온라인에서 문서를 PDF로 변환하는 프로젝트를 진행 중이다. 가장 큰 걸림돌이라 예상됐던, PDF 변환 솔루션은 다행히도 잘 동작하고 있다. (몇몇 확장자는 지원한다더니 안되지만 말이다) 문제는 사용자에게 파일 크기가 큰 파일을 어떻게 사용자에게 전달할 것인가? 였다. 가장 먼저 떠오르는 방식은 Base64나 ByteArray로 변환하고 FE에서 파일로 변환하는 거였지만, 사용자가 요청하는 파일 크기가 커진다면 응답의 크기가 얼마나 커질지 알 수가 없다. 이런저런 방법을 알아보다가 퍼블릭한 S3를 만들어서 S3 경로를 던져주고 PDF 뷰어는 브라우저에게 맡기는게 가장 손이 덜 가는 방법이라는 결론을 짓게 됐다. 퍼블릭한 S3 버킷를 만드는건 어렵지 않을거라 생각했다. 왜냐면 생성할 때 주는 옵션이 있기 ..
주니어 개발자들이 으레 그렇듯, 나도 결과에 치중해서 개발하는 시기가 있었다. 이제 백엔드 리드급으로 넘어오게되면서, 단순 구현보다는 유지보수나 확장성에 대해 많은 고민을 하게 됐다. 그러다보니 자연스럽게 패턴과 설계에 대해 관심이 가게 됐고 추천받은게 이 책이었다. 몇 년간 자바를 주언어로 개발을 했기 때문에, 객체지향 프로그래밍에 대한 어느정도 알고 있다고 생각했다. 그래서 객체지향 개념을 잘 사용하고 있나에 대한 고민은 딱히 하지 않았었다. 하지만 이 책을 보면서 객체지향 개념에 대해 다시한번 정리하게 됐다. 사실 갑자기 백엔드 개발을 하게 되면서 자바를 갑자기 쓰게 됐었다. 그래서 언어의 특징인 객체지향을 완벽하게 숙지 못하고 시작한 게 이유지 싶다.(캡슐화, 다형성, 상속, 합성 등 용어에 대..
번역 API에 대한 기술 검토 중에 문서 번역에 대한 요청을 받게 됐다. 이런 저런 방법에 대한 고민을 해보다가 직접하는 것보단 통합으로 제공하는 곳이 없을까 찾아봤다. 그리고, GCP에서 제공하는 Document Translation API를 알게 됐다. Document Translation API는 Cloud Translation API 일부인데, 말 그대로 구글에서 제공하는 번역 API 에서 제공하는 세부 기능 중 하나다. API를 자유롭게 사용할 수 있으면 좋겠지만, 유료 결제를 등록한 계정만 사용할 수 있다. 카드 등록도 해야 쓸 수 있다. 일단은 무료 크레딧으로 사용해보기로 하고, 하나씩 시작해보자. 1. 서비스 계정 만들고 키 발급 받기 처음 시작은 indexing API와 크게 다르지않다...
현재 서비스는 대부분 Java/Kotlin으로 구현되어 있어 갑자기 진행된 Python 프로젝트를 어떻게 배포할까에 대한 고민이 있었다. 스케줄러로 하루에 한번돌기 때문에 부담은 없지만, 내부 패키지를 많이 사용하는 프로젝트다. 대략 3가지 방안이 논의됐다. 1. AWS Lambda에 배포 2. Spot EC2에 배포 3. 쿠버네티스 컨테이너에 배포 DB를 따로 사용하지 않기 때문에, 1번 방안부터 알아봤다. 결론부터 이야기하면, 해당 프로젝트에 이미지 프로세싱이 들어가있어서 AWS Lambda는 후보군에서 바로 제외됐다. 그래도 serverless 프레임워크를 써서 파이썬 Lambda를 생성해봤기 때문에 정리하고 넘어가려고한다. python만의 특이한 옵션들이 있어서 프로젝트 생성/관리에 조금 어려움이..
Python으로 개발된 서비스를 배포할 일이 생겼다. 그런데 개발자가 Python 프로젝트를 아무 지식도 없이 만들어서 가상환경에서 작업하지 않고, 로컬 & 글로벌에서 모든 작업을 처리했다. 그러다보니 어떤 의존성 패키지를 썼는지 명확히 알 수가 없었다. 당연히 이 명령어도 쓸 수 없었다. pip freeze > requirements.txt 다행히 파이썬에서는 프로젝트에서 사용한 의존성을 자동 추출할 수 있는 스크립트를 제공한다. pipreqs라는 이름의 패키지다. pip install로 설치할 수 있다. 그런데 설치부터 아래와 같은 에러를 발생시킨다. > pip install pipreqs ERROR: Could not install packages due to an OSError: [Errno 2]..
- Total
- Today
- Yesterday
- OpenAI
- 스프링부트
- JWT
- openAI API
- AWS
- Spring
- elasticsearch
- lambda
- CloudFront
- docker
- 티스토리챌린지
- serverless
- 람다
- GIT
- terraform
- S3
- AOP
- java
- Kotlin
- 후쿠오카
- AWS EC2
- Elastic cloud
- ChatGPT
- cache
- OpenFeign
- EKS
- Log
- springboot
- 오블완
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |