개발 기록 (14) 썸네일형 리스트형 Lambda@Edge 기반 CloudFront QRCode 생성기 만들기 추후 서비스에 동일 링크를 가리키는 QRCode를 다양한 사이즈로 활용할 수 있기에 미리 구상을 해보았다. 여러 QRCode 생성기를 찾아보았고 외국 사이트나 국내사이트는 nodejs 기반 qrcode 라이브러리를 S3에 업로드 하는 예제나 별도 node 기반 웹서버에서 바로 보여주는 예제는 많았다. 내가 원하는것은 원하는 사이즈를 특정 URL 호출을 통해 실시간으로 생성되도록 하는것이였다. 처음엔 생성된 QRCode를 S3에 업로드하여 이미지만 sharp라이브러리를 통해 리사이징을 고려했지만 S3에 불필요한 이미지 자원인것 같아 다이렉트로 생성된 QRCode 버퍼 정보를 response할 수 있도록 구상해보았다. 참고한 것은 npm qrcode라이브러리 정보와 lambda@edge기반의 이미지 리사이징.. [Spring-boot] 영상 컨버팅 관련 AWS MediaConvert API 연동 및 ABR 모드 처리 이번에 AWS MediaConvert를 통해 ABR 형태 HLS 포맷으로 영상을 자동 컨버팅 할 수 있도록 하는 시스템을 구축하는 사항이 생겼다. 그래서 찾아보던 중 AWS MediaConvert JAVA 예제 github 소스를 발견하여 해당 소스를 활용하여 Spring-boot에서 사용할 수 있도록 모듈화 해보았다. 앞서 ABR 모드로 트랜스코딩하기 때문에 ABR에 대해 간결하게 적어본다. ABR이란? ABR (Available Bit Rate) : 가용 비트율 네트워크 프로그램이 활용할 수 있는 주파수 대역을 가능한 최대로 쓰면서 효과적으로 사용하도록 한다. 네트워크 트래픽을 발생시키는 장치에 피드백을 지속적으로 보내는데, 피드백을 받은 장치는 스위치 장비가 양질의 서비스를 보장할 수 있도록 하며,.. [Jenkins] 젠킨스 pipeline 병렬 처리 필자는 Jenkins를 통해 spring-batch의 Job들을 실행하고 있다. 이번에 개발하는 요건 중에 하나의 파이프라인에 동시에 실행할 Job들이 생겨서 스크립트만 남겨 본다. 다만 단점이 있다. stage 안에 parallel를 설정하여 추가 stage를 실행하게 되어 Jenkins 실행가능한 task 수를 하나 더 차지하게 되었다. 아래 소스 기준으로 설명하자면 parallel-job, Job-A, Job-B가 Jenkins 실행 task에 잡히게 되어 task의 여유가 1개 더 빠 지게 된 것이다. 조금은 비효율적인 처리가 될 수도 있을거 같다. pipeline { agent any options { parallelsAlwaysFailFast() } stages{ stage('parallel-.. [Spring-boot] 다중 TransactionManager 멀티 트랜잭션 처리 mySQL를 사용할때 JPA를 활용하고 MongoDB는 starter-data-mongodb 라이브러리를 활용하여 데이터베이스를 처리하는 중에 항상 고민였던것이 다중 트랜잭션 처리였다. 나는 각각 서비스 및 기능에 따른 데이터베이스를 나누어 관리하는것을 선호하는 편이기에 회원과 서비스 데이터베이스가 각각 나뉘어져 있다. 그렇기 때문에 별도로 다중 datasource를 선언하고 트랜잭션을 각각 선언하여 사용하고 있다. 최근 개발하던 중 MongoDB 기반으로 회원 컬렉션과 서비스 관련 컬렉션을 동시에 처리하는 로직이 생겨서 트랜잭션을 어떻게 처리를 해야할지 고민 하던중에 스프링에서 지원하는 ChainedTransactionManager를 발견하였다. ChainedTransactionManager는 여러 트.. [Spring boot] EmbeddedMongo 기반 Multi DataSource(database) 이슈 (어플리케이션 정상 종료가 안되는 현상) 지난번 포스팅한 EmbeddedMongo에 대한 레플리케이션 셋팅을 다뤘었다. 프로젝트를 진행하면서 여러 라이브러리 및 클래스를 구현하다 보니 어느순간부터 어플리케이션 및 junit 테스트를 진행시 정상 종료가 안되는 현상이 있었다. 그래서 구현된 클래스 및 라이브러리들을 삭제해가면서 확인 하던중 뜻하지 않은곳에서 에러가 발생한거였다. 바로 EmbeddeRedis 설정시 yml파일에 설정한 time-out 설정값이 영향이 생기게 되었다. 좀 더 면밀하게 뜯어봐야 알겠 지만 EmbeddeRedis에 time-out을 설정하는 경우 Embedded기반의 관련 라이브러리들이 SpringShutdown Hook에 종 료 처리를 비동기식으로 처리하면서 timeout에 설정한 시간 동안 종료 시키지 않는 문제였다... [Spring boot] EmbeddedMongo 기반 Multi DataSource(database) 설정 임베디드 MongoDB는 사실 라이브러리 Scope를 테스트에서만 돌리는것을 권장하여 testImplementaion 으로 설정을 한다. 한번 어플리케이션 레벨에 구동도 하고 싶고 다중 데이터 베이스 및 멀티 트랜잭션을 설정하는 방법을 찾아보았다. 구글링을 해봐도 내가 원하는 질문이나 답변은 없어서 하나하나 찾아서 결합 해보았다. 일단 찾아보니 조건 이러했다. 1. 멀티 트랜잭션을 설정하고 사용하려면 우선적으로 MongoDB가 Replication 설정이 되어 있어야 한다. 2. 멀티 트랜잭션을 통해 CRUD를 하는 경우 우선적으로 Collection이 생성 되어 있어야 한다. 3. 설정된 트랜잭션에 설정된 CollectionEntity Repository 외에 타 트랜잭션 및 데이터베이스의 Collec.. AWS API Gateway - WebSocket API와 HTTP API 연동하기 PART-2 지난번 PART1에 이어 PART2장은 $default와 간단한 사용자 정의 라우트 키를 통한 메세지 전송 및 응답 전송을 해본다. 지난번에 $default 설정을 하지 않아 Forbidden 에러가 발생하였는데 아래처럼 기본 Mock 메세지를 설정하면 발생하지 않는다. $default 라우트 키를 활용하고 싶으면 별도로 커스텀 마이징을 해도 괜찮다. 1. $default 기본 설정하기 2. 사용자 설정 라우트 키를 통해 클라이언트 메세지 전송 및 서버에서 메세지를 보내기 이번에는 "클라이언트 -> 서버"로 메세지 전송하기와 "서버 -> 클라이언트"로 메세지 전송하기를 해볼 것 이다. 2-1 클라이언트 -> 서버 메세지 전달하기 "새 경로 키" 입력란을 통해 sendMessage라는 경로를 신규 생성하고.. AWS API Gateway - WebSocket API와 HTTP API 연동하기 PART-1 이번 신규 프로젝트 개발은 소켓서버를 활용할 일이 많아질 거 같아 고민이 많았다. (실시간 접속자 수 및 동시 로그인 여부 체크 등...) 내가 고민했던건 다음과 같았다. 1. 대규모 접속시 서버가 감당이 될까? 2. 소켓 서버 비용도 만만치 않을거 같은데.. 3. 도중에 소켓 연결이 끊어지거나 안되면 어떡하지? 세번째는 잘모르겠으나 비용이나 대규모 접속 및 소켓 통신이 이뤄질때 보완해줄 수 있을만한걸 찾다 보니 AWS API Gateway에서 지원하는 WebSocket API가 눈에 보였다. 내가 이해한 개념도는 아래와 같다. 각 클라이언트들이 연결을 맺고 통신하는 소켓 서버는 AWS API Gateway에 맡겨버리고, WebSokcet API를 통해 특정 라우트 키를 통해 원하는 엔드포인트 방식으로 .. 이전 1 2 다음