![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cuO9XN/btsqvj0yvO1/IkGRlUHHKd6hBJBG55xa81/img.png)
이 문제는 아마도 모든 AWS JAVA SDK 1.0 에서 일어나는 문제일테니 주의가 필요하다.. S3 SDK를 처음 서버에 적용할 때도 발생했던 문제였는데, SQS 적용 과정에서도 똑같은 문제를 겪었다. 분명 로컬에서 테스트할 때는 잘 동작하는게, dev서버만 올라가면 제대로 동작하지 않는 문제가 있었다. 서버가 배포되는 과정에서 아래와 같은 WARNING을 띄웠다. { "@timestamp": "2023-08-04T09:26:57.140Z", "message": "Ignoring queue with name '[큐이름]': The queue does not exist or no access to perform action sqs:GetQueueUrl.; nested exception is com.am..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/c1l6lH/btspZEdM4hH/KKNGR7oUQgknQHDE2FJ461/img.png)
로컬 호스트 서버에서 댓글 서비스의 웹훅을 사용해야되는데 문제가 생겼다. 웹훅을 사용하기 위해 서버의 URL을 입력해야하는 상황이었는데, localhost를 입력할 수는 없으니 말이다. 그래서 중간다리로 AWS SQS를 써보기로 했다. 파이프라인은 댓글 서버 웹훅 -> AWS Lambda -> AWS SQS -> local(SQS Listener) 구조로 잡고 구현을 시작했다. 들어가기전에 SQS가 뭔지 짚고 넘어가자. Amazon Simple Queue Service (Amazon SQS)란? Amazon Simple Queue Service (Amazon SQS)는 분산 소프트웨어 시스템 및 구성 요소를 통합 및 분리할 수 있는 안전하고 안정적이며 사용 가능한 호스팅 대기열을 제공합니다. Amazon..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bXPpIe/btsqfAhq9Sq/4ucwkkd9XXZo6yxfK4KoR0/img.png)
계속해서 쓸 곳이 생길 것 같길래 따로 분리해서 포스팅한다. 작업 환경은 Windwos 10에서 진행했다. AWS 외부에서 AWS 서비스에 접근하려면 액세스 키가 필요하다. 액세스 키 생성을 위해 AWS 로그인 후 우측 상단의 본인 계정을 클릭 한 후 보안 자격 증명을 클릭한다. 보안 자격 증명 클릭 그러면 내 보안 자격 증명 페이지에 들어와지는데 아래로 쭉 내리다보면 엑세스 키 탭이 있다. 액세스 키 만들기 버튼을 클릭한다. CLI를 사용할 것이기 CLI 선택후 다음 버튼 클릭 비밀 액세스 키를 표시한다음에 잘 저장해 두어야 한다. 이 페이지를 벗어나면 비밀 액세스 키를 다시는 볼 수 없으니 다운로드를 받아놓거나 복사를 잘 해놓자. 그리고 User > [pc 이름] > .aws 폴더 아래에 creden..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/lRx0x/btspRKysM15/kld7AQS3ezZdnse2guoDbk/img.png)
이전 글에서 자세히 다루지 못 했던 Redis Configuration을 뜯어보려고 한다. @Configuration public class RedisConfig { @Value("${spring.data.redis.host}") private String host; @Value("${spring.data.redis.port}") private int port; @Bean public RedisConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration redisConfiguration = new RedisStandaloneConfiguration(); redisConfiguration.setHostName(host); redisCo..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/b4HrVH/btspUoO25eB/o9kMoXKs2XrRpVPkuVefQ0/img.png)
Elasticsearch를 cloud 환경에서 사용하고 Spring Boot와 연동하는 방법은 이전 글에서 다뤘다. 이번 포스팅은 내가 개발하면서 특이하다고 느꼈던 것 몇 가지를 정리하고자 한다. 1. credential 처리하기 credential 을 처리 하기 위해, 먼저 username과 password를 생성해야 한다. 그런데 Elastic cloud 에서 왜 숨겨놨는지 찾기 힘든 위치에 있어서 찾는데 고생을 좀했다. ES main 페이지 > 본인 계정 옆에 Manage 버튼 클릭 > 좌측 Security 를 클릭 이러면 아래 페이지가 나오는데 여기서 Reset password를 누르면 elastic user의 password가 생성된다. 복사해놓거나 다운로드한다. 이제 client에서 위에 생성..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bwloQr/btspNgYOfWT/iDCZa4dboz8FMKK0LNa7p1/img.png)
Docker 명령어는 실행이 되는데 아래와 같은 permission denied 에러를 뱉는 경우가 있다. 이 문제는 현재 사용자가 Docker 데몬에 액세스할 수 있는 권한이 없을 때 발생한다. Docker 데몬은 root 권한이 필요한 명령을 실행하기 때문에, Docker 데몬에 연결하려면 사용자가 root 권한을 줘야한다. sudo usermod -aG docker ${USER} 위 설정을 하고, 로그아웃 후 로그인하면 된다고 하는데 나는 안됐다. 그래서 에러메시지에서 말하는 docker.sock에 접근할 수 있는 권한을 줬다. sudo chmod 666 /var/run/docker.sock 이 명령어 이후에는 에러가 발생하지 않는다.
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/eaVo3r/btspH0OtZFl/YPczhP9W65RbobOuM3dSb0/img.png)
이전에 썼던 글에서 언젠가 Redis로 넘어갈 거라고 했었는데, 결국은 안정성 문제로 Redis를 쓰게 됐다. Redis가 고성능 인메모리 캐시라는 것 정도만 알고 있는데, 사용하기 전에 한번 짚고 들어가자. Redis 란? Redis는 데이터베이스, 캐시, 메시지 브로커 및 스트리밍 엔진으로 사용되는 오픈 소스(BSD 라이센스), 메모리 내 데이터 구조 저장소 입니다. Redis는 문자열, 해시, 목록, 세트, 범위 쿼리가 있는 정렬된 세트 , 비트맵 , 하이퍼로그로그 , 지리공간 인덱스 및 스트림과 같은 데이터 구조를 제공합니다. Redis에는 복제 , Lua 스크립팅 , LRU 제거 , 트랜잭션 및 다양한 수준의 디스크 지속성이 내장되어 있습니다. Redis Sentinel을 통한 고가용성과 Red..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/18HgD/btso9hqLljd/H6lH5nV0FhfFDRdAIYUbp0/img.png)
failed to create query: [knn] queries are only supported on [dense_vector] fields 여기서 예시는 knn으로 들었지만, _search를 이용한 Elasticsearch의 검색 알고리즘을 사용할 때 발생하는 문제이다. 말 그대로 knn 쿼리를 날린 필드가 dense_vector의 형태가 아니란 것이다. 에러를 발생시켜보자 테스트 코드는 엘라스틱 서치의 kNN search 가이드에서 가져왔다. 우선 테스트를 위해 데이터를 삽입한다. POST image-index/_bulk?refresh=true { "index": { "_id": "1" } } { "image-vector": [1, 5, -20], "title-vector": [12, 50, -..
- Total
- Today
- Yesterday
- Kotlin
- AWS
- elasticsearch
- CloudFront
- Spring
- AOP
- 람다
- terraform
- GIT
- java
- openAI API
- Elastic cloud
- MySQL
- ChatGPT
- 후쿠오카
- EKS
- Log
- 오블완
- AWS EC2
- springboot
- 티스토리챌린지
- docker
- serverless
- 스프링부트
- cache
- S3
- OpenFeign
- JWT
- OpenAI
- lambda
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |