![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cBYxdG/btsGCxi1Zq2/pQrEOsdg4mzAZsWqEOJHWK/img.png)
DevOps와 AWS 인프라 부분에 집중할 수 있는 상황이됐다. 그동안 하시코프 언어에 대한 진입 장벽으로 관리가 어려웠던 IaC(infra as code), Terraform부터 차근차근 시작해보려고한다. AWS 자원들을 처음부터 테라폼으로 생성했다면 Terraform 으로 관리하기 편했겠지만, 이미 너무 많은 AWS 자원들이 Terraform으로 관리되지 않은 채 사용되고 있었다. 그렇다면 조금 불편하지만 수동으로 하나씩 가져와야 한다. terraform import라는 명령어를 이용하는 것인데 Terraform v1.5.0 이후 부터 지원한다. 두 가지 방법이 있는데, 둘 다 간단하다. 1. import.tf 파일 아래와 같이 작성한다. .tf 확장자만 지정해주면 파일명은 딱히 상관없다. impor..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/tVswS/btsGrYBjhYI/IZKYkJKvgxXuLjL9QEHct1/img.png)
백준에서 코테 문제를 풀다보면 느끼겠지만, 입/출력 쪽에서 시간 초과가 자주 발생한다. (분명 알고리즘은 맞았는데, 계속 시간초과가 나면 대부분 이 문제다..) 각각 어떤 곳에서 문제가 발생하는지 파헤쳐보자. 입력 문제 입력에 문제가 생기는 경우는 대부분 Scanner를 써서 여러번 next()나 nextInt()으로 가져오는 경우다. 입력에 문제가 생겼던 문제는 탑 이었다. 50만번은 딱히 많아보이지 않는 갯수이다. N번 정도는 그냥 하면 되는거 아냐? 라고 생각할 수 있겠지만 next의 코드를 따라가보면 문제가 있다는 걸 알 수 있다. public String next(Pattern pattern) { ensureOpen(); if (pattern == null) throw new NullPointe..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/0wXjm/btsGspSLhEq/PpEit9LnoKU5ANwUkf5qUK/img.png)
멘토링 준비도 할 겸해서 코딩 테스트 고수 지인 분의 도움을 받아 코딩 테스트 문제를 조금씩 풀고 있다. 솔직히 피곤하고 힘들지만 한달간 꾸준히 푼 결과 solved.ac에서 측정하는 레벨이 꽤나 올랐다. 어떤 카테고리부터 푸는게 좋을지 고민 중이었는데, 스택을 추천 받았다. 그런데, 스택 코딩 테스트 문제는 일반적인 자료구조 사용법과 같이 만만하지 않았다. 브론즈부터 벽을 좀 느꼈달까 문제를 푼 순서는 다음과 같다. 1. 막대기 : https://www.acmicpc.net/problem/17608 2. 괄호 : https://www.acmicpc.net/problem/9012 3. 탑 : https://www.acmicpc.net/problem/2493 4. 스카이라인 쉬운거 : https://www..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/czqGoI/btsGeaBlysL/StcBoJpoDb1XkwWqLPiS91/img.png)
갑작스럽게 떨어진 오더(C레벨에서부터 내려온)로 인해 월드 ID를 이용한 인증 시스템 개발 업무가 추가됐다. 왜 이런 오더가 떨어졌냐를 생각하기전에 월드 ID가 뭐인지부터 알아보자. 월드 ID란? World ID는 영지식 증명과 고급 개인 정보 보호 암호화를 통해 사용자가 익명으로 자신의 고유성과 인간성을 증명할 수 있는 디지털 신원 솔루션입니다. World ID는 클라우드 및 온체인 앱 모두에 쉽게 통합할 수 있습니다. 유효한 월드 ID를 가진 사용자는 월드 앱과 같은 월드 ID 호환 지갑을 통해 익명으로 자신이 고유한 인간임을 몇 초 만에 확인할 수 있습니다. https://docs.worldcoin.org/world-id 굳이 인증 과정을 기존 방식이 아닌 다른 컨셉으로 해야하나?란 생각이 들지만 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bBBriN/btsF8wL0A61/42O88iy0eEgEDlOtzlWdUK/img.png)
S3를 퍼블릭으로 관리하게 되면서, 파일을 주기적으로 지워야하는 정책이 추가됐다. S3에서는 다행히 주기적으로 파일을 삭제하는 기능이 있다. 바로 수명 주기 규칙이다. S3 > 버킷 > 버킷 선택 > 관리 > 수명 주기 규칙 생성으로 들어간다. 수명 주기 규칙은 알아보기 쉽게 짓고, 내 목적은 파일 전체를 지우는 거기 때문에, 버킷의 모든 객체 적용을 선택. 그리고 이전 버전 영구 삭제를 하루로 설정한다. 다만, 수명 주기 규칙 생성은 최소 단위가 1일이다. 이 간격을 더 짧게 만드는 가장 쉬운 방법은 람다나 서버에서 스케줄러를 돌려서 주기적으로 데이터를 지워주는 방식이다. 심플하지만 재미없는 방식이다. 조금 색다른 아이디어를 내보자면, S3에 저장된 객체만 퍼블릭하게 접근할 수 있는 시간을 지정할 수 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bGEEsx/btsFF5F9il7/eHSs1hNKKcmTI9lRg2wXeK/img.png)
정말 오랜만에 Elasticsearch 관련 글을 쓰는 것 같다. 데이터를 생성하는 모델이 변경되어서 기존 데이터를 싹 마이그레이션 할 일이 생겼다. 가장 편한건 데이터를 싹 만들어두고 서버가 보는 index를 변경하는 것이었지만, 그럼 서버의 재배포가 필요하다. 그래서 그냥 index를 새로하나 만들고 두 index를 교체하는 방식으로 작업을 진행하려고 했다. 불행하게도 두 index를 교체하는 방식은 따로 제공하지 않았고, copy to 하는 형식의 reindex를 제공했다. 사용법은 간단하다. POST _reindex { "source": { "index": "from index" }, "dest": { "index": "to index" } } 이렇게 요청했을 때 바로 동작했으면 참 좋았겠지만, ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bnprBb/btsFAau26UL/nBuGIfj1xCUObjA0FDHWA0/img.png)
온라인에서 문서를 PDF로 변환하는 프로젝트를 진행 중이다. 가장 큰 걸림돌이라 예상됐던, PDF 변환 솔루션은 다행히도 잘 동작하고 있다. (몇몇 확장자는 지원한다더니 안되지만 말이다) 문제는 사용자에게 파일 크기가 큰 파일을 어떻게 사용자에게 전달할 것인가? 였다. 가장 먼저 떠오르는 방식은 Base64나 ByteArray로 변환하고 FE에서 파일로 변환하는 거였지만, 사용자가 요청하는 파일 크기가 커진다면 응답의 크기가 얼마나 커질지 알 수가 없다. 이런저런 방법을 알아보다가 퍼블릭한 S3를 만들어서 S3 경로를 던져주고 PDF 뷰어는 브라우저에게 맡기는게 가장 손이 덜 가는 방법이라는 결론을 짓게 됐다. 퍼블릭한 S3 버킷를 만드는건 어렵지 않을거라 생각했다. 왜냐면 생성할 때 주는 옵션이 있기 ..
- Total
- Today
- Yesterday
- GIT
- Log
- MySQL
- OpenAI
- 코딩테스트
- openAI API
- Elastic cloud
- java
- serverless
- lambda
- AOP
- CloudFront
- awskrug
- cache
- docker
- elasticsearch
- S3
- Spring
- springboot
- chat GPT
- EKS
- 람다
- Kotlin
- jenkins
- AWS
- terraform
- ChatGPT
- JWT
- AWS EC2
- 스프링부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |