10일부터 몸상태가 안 좋았었는데 벌써 7일째다.
기분나쁜 인후통 그리고 복통이 살짝 있다.
LocalStack 을 활용한 SQS 구축ObjectBuilder 설계를 시작했다.
아키텍쳐상 필수적으로 Queue가 필요하여 Production에선 AWS SQS를 활용할 예정이었고, Local은 RabbitMQ등을 활용해야 하나 생각했었는데, 찾아보니 AWS서비스의 Local 구현체인 LocalStack 이 있었고, SQS도 지원하고 있어 알아봤다.
Terraform 기반의 Helm으로 관련 내용을 정리하고 설치해봤다.
resource "helm_release" "localstack" {
name = "localstack"
namespace = kubernetes_namespace.local.metadata[0].name
repository = "https://helm.localstack.cloud"
chart = "localstack"
values = [
"${file("values/localstack_values.yaml")}"
]
}
로컬에서 구동하려면 aws-cli와 같은 역할을 하는awscli-local 가 필요하다.
$ pip install awscli-local
환경변수 설정이 필요
$ vi ~/.zshenv
# localstack
export LOCALSTACK_HOST=localhost
$ source ~/.zshenv
간단한 사용법은 다음과 같다.
# queue 생성
$ awslocal sqs create-queue --queue-name sample-queue-fifo
# queue 목록 조회
$ awslocal sqs list-queues
# 메시지 생성
$ awslocal sqs send-message --queue-url http://localhost:4566/00000000000/sample-queue --message-body "test"
# 메시지 읽기
$ awslocal sqs receive-message --queue-url http://localhost:4566/00000000000/sample-queue --attribute-names All --message-attribute-names All --max-number-of-messages 10
# 메시지 삭제
$ awslocal sqs delete-message --queue-url http://localhost:4566/00000000000/sample-queue --receipt-handle lqpmqeedarryzhmgvlthpnlucbqpdugigexchqlkwubmuasyxafqouvjbhaekchrixluefcrwwyzsexwgdgyuqzqparaoptsmbtipzuyyrkfusdhfkgnqvzefnqlqlzhybuskhsdlneyoalswgfhqcbeamczapkkzytmrbgvuwwbkgldbdmznscsu
현재 SQS 하나만 동작하도록 해두었다.
설정은 했지만 관련해서 정작 코드는 하나도 못짰다.
백오피스 프론트 개발을 담당하는 팀원이 하위 구성요소의 목록을 조회할 수 있는 방법을 문의해왔는데 구성상 종속 구조에 대한 단일 질의가 구현되어 있지 않았다.
현 상태에서 처리할 수 있는 방법은
현재로선 ids 를 기반으로 조회(GET) 하도록 되어 있지 않기 때문에 굉장히 비효율적이었다.
우선 그렇게 쓰도록 얘기했으나, 아무래도 걸려 별도의 API형태를 파라미터를 추가하여 구현하였다.
relation의 targetId를 기반으로 한번에 조회하는 방법을 구현했고, 무리 없이 구현되었다.
진행하다가 보니 이전부터 거슬렸던 thing의 name property에 대한 검토 요청을 받았다.
빠른 의사결정이 필요한 것 같아 coworking 하는 팀원과 같이 짧은 화상 미팅을 진행했다.
안건은 다음과 같았다.
을 진행했다.
관련해서 논의한뒤 바로 빠르게 name을 삭제하고 PR 올렸다.
User에 대한 코드 리뷰요청을 받고 진행중인데, 코드의 스타일 차이가 커서 관련해서 리뷰를 진행하다가 병목현상이 되는 것 같기도 해서, 우선 Code Review는 Approve하고, 별도로 정리해서 전달하고자 직접 관련 코드를 수정했고, PR을 올릴 예정이다.
ObjectBuilder 에 대해서 계속 고민중인데, jsonb 보다는 text로 관리하는게 좋겠다는 생각이 들었다.
현재로선
structure 와 데이터를 분리하는 방안string replace로 처리하는 방안내일은 UseCase 정리후, DB설계를 하고, 그 후에 개발에 착수할 수 있을것 같다.
M1 맥북이라서 생기는 이슈도 갑자기 튀어나온다.
2022-05-16T22:33:51,934 ERROR [main] i.n.r.d.DnsServerAddressStreamProviders: Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS.
찾아보니 M1 Apple Silicon 에서만 발생하는 현상이라
Local환경에서만 별도의 처리를 해주어야 하는것 같다.
build.gradle.kts 파일에서
plugins {
id("com.google.osdetector") version "1.7.0"
}
var isAarch64 = false
if (osdetector.arch.equals("aarch_64")) {
isAarch64 = true
}
// For Apple silicon
if (isAarch64) {
implementation("io.netty:netty-resolver-dns-native-macos:4.1.72.Final:osx-aarch_64")
}
원래는
plugins {
id("com.google.osdetector") version "1.7.0"
}
if (osdetector.arch.equals("aarch_64")) {
implementation("io.netty:netty-resolver-dns-native-macos:4.1.72.Final:osx-aarch_64")
}
이렇게 설정했었으나, 모듈을 찾을 수 없다고 나와 dependencies 내부에선 사용할 수 없나보다 싶어 별도의 변수로 정의하고 처리했다.
뭔 산들이 이렇게 많은지..
오늘은 피곤해서 바로 자야겠다.