전체 글 47

프로그래밍 언어와 패러다임에 대한 짧은 생각

나무위키를 검색해보다 인상적인 부분을 발견해서 적어놓는다. Java의 예를 들어보자. 처음엔 날코딩에서 시작해 IDE를 쓰게 되고, 서드파티 라이브러리를 사용하다가 스프링 프레임워크라는 것이 있다는 걸 알게 되고, 프레임워크의 유연성에 감동하다가, 그 프레임워크를 만든 근간 기술인 디자인 패턴에 대해 공부하게 되고… 그렇게 차츰 자기도 모르게 고급 프로그래머가 되어 간다. 그러나 학습량은 결코 적지 않다. 위에서 트렌드를 이해해야 한다고 했는데, Java 쪽의 트렌드를 따라가려면 읽어야 할 자료가 엄청나게 많다.[14] 그래서 다른 것에 한눈팔 여유가 없다. 그래도, Java의 인기와 점유율은 여전히 상당하다. 최신 트렌드를 접하다 보면 스프링 프레임워크를 접할 때 즈음엔 함수형 언어에 대해 알게 된다...

tech/생각 2023.10.14

dynamodb 내부구조

내부 아키텍처 이해dynamo db에서 partition key는 hash function 에 의해 2의 64승에 해당하는 파티션 유닛중 하나로 할당된다. 실제 파티션은 파티션 unit의 range 를 갖고 있는데, 어느 파티션의 range로 들어가는지에 따라 소속 파티션이 결정된다. 이때, 특정 파티션에 데이터가 몰릴 경우, 해당 파티션의 range를 반으로 쪼개어 새로운 파티션이 만들어지며 1개의 파티션에 몰려있던 데이터가 2개의 파티션으로 분산되는 과정이 반복된다. 만약 PK가 위의 2번 방식(composite)일 경우, 동일 파티션에 할당된 Partition key가 같은 여러데이터들은 sort key로 정렬되어 b-tree 구조에 저장된다. link  즉, 정리하자면 동일한 파티션키는 내부적인 ..

tech/database 2023.10.08

AWS Kinesis Data Stream 내부구조

현재 회사 서비스에 발생하는 데이터 스트림을 구축하고 있다. aws 에서 제공하는 aws kinesis data stream 를 사용할 일이 있어 내부구조 파악하고 있다.--- 아키텍처kinesis data stream 은 "분산 큐" "스트림 스토리지" 라는 개념으로 설명할 수 있다.즉, 아래 세가지 특성을 갖는다.1. queue2. distributed3. storage stream 별로 샤드수를 지정해야 하는데, 샤드는 인입되는 데이터가 저장되는 큐의 갯수라고 할 수 있다. 1개 샤드당 capacity, maximum total data read rate, maximum total records for writes, maximum total record rate 등 상한수치가 정해져있다. 따라서 인..

tech/database 2023.10.07

쿠버네티스 Resource metrics pipeline

쿠버네티스의 노드와 파드의 리소스사용량, replica 갯수 등등 기본적인 모니터링수치를 집계하여 확인할 수 있게 하고 조건을 통해 알람체계를 구축하기위해 정보를 찾던 중 resource-metric-pipeline, full-metric-pipeline 에 대하여 알게 되었다. resource-metric-pipeline과 full-metric-pipeline 은 둘다 노드,팟의 리소스 수치를 쿠버네티스 내부 API 에서 이용할 수 있도록 집계를 활성화한다는 점에서는 동일하지만 다루는 수치의 가짓수(resource-metric-pipeline은 cpu,memory 등으로 매우 제한적)나 목적등에서 차이를 보인다. 이 글에서는 resource-metric-pipeline 을 다룬다. resource-me..

카테고리 없음 2023.09.09

[미완성] AWS Loadbalancer 와 argo rollout 의 내부동작

argo rollout 의 canary 배포는 Rollout 오브젝트에서 canary service와 stable service 를 지정하여 stable -> canary 로 트래픽 %를 시간대별로 상세하게 지정하는 방식으로 rollout 을 지원한다. 이러한 내용이 현실적으로 구현되려면 AWS의 Loadbalancer와 Target Group에서 해당 구현이 가능해야 하는데, Loadbalancer의 weighted-target-group 이라고 하는 기능으로 실제 구현된다!(argo rollout 이 해당 기능을 실제로 사용하여 구현) aws load balancer 에는 listener 와 rule, action 으로 구성되어있고. 특정 rule 의 action중에 복수의 target groups ..

카테고리 없음 2023.09.07

App Store Server API 연동 과정에서 사용된 보안기술 정리

https://developer.apple.com/documentation/appstoreserverapi Apple Developer API 의 응답은 보통 JWS 토큰으로 수신된다. JWS 토큰이란 어떤 데이터형태인지 먼저 정리가 필요하다. JWS를 표준으로 정의하고있는 RFC7515문서(https://datatracker.ietf.org/doc/html/rfc7515#section-3) 를 참고하여 정리했다. 애플쪽에서 보내오는 정보는 모두 아래 JWS 토큰 포맷이므로 이에 맞춰서 검증 후 디코딩해 사용하면 된다! JWS(JSON Web Signature) 1. header, payload, signature 가 .를 구분자로 차례로 이어져있다. 2. Json 데이터구조를 사용한다(header, p..

카테고리 없음 2023.08.25

AWS RDS 연결테스트 과정 기록

AWS EKS의 특정 pod 에서 rds에 연결가능한 상태인지 네트워크 테스트를 하는중에 오해한 부분이 있어 기록. 처음엔 rds가 public 망에 있고 url,port 를 알고 있으니 ping 을 쏴보면 될 것이라 생각했는데 이상하게 동작하지 않았다. 후에 도큐먼트를 찾아보니.. https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_Troubleshooting.html AWS RDS는 ping을 포함한 ICMP 트래픽을 수락하지 않는다고 나와있다.iCMP는 주로 네트워크 연결문제를 진단하는데 사용되는 프로토콜인데 ping이 여기 속한다. 암튼 방법은 RDS 연결을 확인해볼 수 있는방법은 telnet을 이용하는 방법과 linux의 nc를 ..

카테고리 없음 2023.08.24

nginx에서 여러 front build 파일 서비스 설정하기

server { ~~~ location / { root /home/ubuntu/~~/frontend; index index.html index.htm; try_files $uri /index.html @proxy; } location /slayer { root /home/ubuntu/~~/frontend; try_files $uri $uri/ /index.html; } ~~~ } location 부분엔 매칭되는 uri 패턴을 입력. try files에는 도메인을 제외한 모든 uri 부분이 $uri 에 할당되며 이 uri 구조를 가지고 디렉토리 구조에 매핑해서 index.html을 찾는다는 설정. 즉, domain.com/slayer 이런 요청이었다면 $uri 에는 slayer 가 들어가며, 위에서 선언한..

카테고리 없음 2023.08.22

젠킨스 pipeline shell 실행 환경에 대하여

상황: 젠킨스 유저로 nvm 을 설치 후 bashrc에서 쉘세션 활성화시 nvm 커맨드를 사용할 수 있도록 세팅 후 파이프라인에서 nvm을 사용했으나 계속 not found 발생 원인: 젠킨스의 pipeline 내 shell은 jenkins 유저로 실행되는건 맞았으나, interactive 모드가 아니라서 .bashrc 가 선행 실행되지 않는 구조였음. 따라서 해당 쉘 세션에서 nvm 사용 가능하도록 수동으로 커맨드 추가작성.

카테고리 없음 2023.08.22