분류 전체보기154 [sharp] VipsJpeg: Invalid SOS parameters for sequential JPEG sharp는 이미지 프로세싱에 있어 사용되는 라이브러리로 서비스에서 이미지 업로드 기능을 지원하는 경우 이미지 사이즈를 줄이기 위해 자주 사용된다. 이번 포스팅에는 sharp 사용 시 마주친 오류와 어떻게 처리하였는지에 대해 정리해보겠다. 나의 경우 sharp를 업로드한 이미지를 조회 시 리사이징하기 위해 사용하고 있다. CloudFront + Lambda@Edge 스택을 사용하여 업로드한 이미지 조회 시 sharp를 사용하여 리사이징 된 이미지를 생성하고 있다. (참고: AWS 인프라 위에서 채팅 이미지 업로드부터 조회까지) 기능 오픈 이후 문제가 없었는데 갑자기 아래와 같이 VipsJpeg: Invalid SOS parameters for sequential JPEG 라는 오류 메세지가 나왔다. 관련.. 2022. 10. 2. Redis를 활용한 다양한 시스템 설계 Redis는 in-memory key-value storage로 주로 DB 레이어의 부하 분산과 빠른 응답을 위한 캐싱 레이어로 쓰인다.하지만 Redis는 value로 다양한 데이터 타입을 지원하고 있으며, 다양한 모듈과 이 모듈들을 포함한 Redis Stack 또한 제공하고있다. Redis에서 제공하는 데이터 타입들과 모듈을 활용하면 큰 노력 없이 다양한 종류의 시스템을 설계할 수 있다.이번 포스팅에서는 Redis를 활용하여 다양한 시스템을 설계하는 방법에 대해 알아보도록 하겠다. Rate LimitAPI 사용이나 특정 기능에 있어서 Rate Limit를 해야하는 경우가 종종 있다.- 하루에 한 번만 참여 가능한 이벤트- 인증 문자를 받고나서 다음 인증 문자를 받으려면 1분의 대기시간을 주기등의 .. 2022. 10. 2. [채팅 시스템] 특정 키워드에 대해 시스템 메세지 보내기 채팅 서비스가 처음에는 단순히 유저 간에 메세지를 주고받기 위함이었어도, 서비스가 고도화 되다보면 꼭 채팅 도메인과는 관련되지 않아도 서비스와 관련하여 유저의 주의를 끌기 위해 몇가지 기능이 추가될 수 있다. 그 중 하나로는 채팅방에 특정 키워드가 발생했을 때 해당 채팅방에 시스템 메세지를 보내는 기능이 있다. 실제 사례를 예로 들자면 당근마켓의 채팅 시스템 메세지 기능이 있을 것이다. 이처럼 채팅 도메인과는 약간 동떨어졌지만 채팅 시스템과 통합되어야하는 기능에 대해 어떤 식으로 시스템을 설계할지에 대해 정리해본다. 먼저 채팅을 위한 웹소켓 서버의 경우 Scaling을 위해 Message Queue나 Redis Pub/Sub 등을 사용하여 다른 웹소켓 서버와 연결된 유저에게 메세지를 보낼 것이다. 위.. 2022. 9. 13. 입개발) 슬랙 알림 기능 개발 가끔 새로 개발한 기능을 유저가 사용하는지 궁금할 때가 있다. 또는 배치를 돌릴 때 배치 결과를 보고싶을 때도 있다. 하지만 업무 중에 주기적으로 어드민 사이트나 DB 데이터를 매번 볼 수 없으니 운영 편의상 특정 이벤트(유저가 특정 액션을 했다던가, 특정 설정을 변경했다던가) 후에 슬랙 채널로 알림을 보내곤 한다. 슬랙 알림 기능을 개발할 때 참고할 수 있는 몇 가지를 정리해본다. Incoming WebHooks Incoming WebHooks는 특정 채널에 슬랙 메세지를 보내기 가장 쉬운 방법이다. 쓰기도 쉽고 설정도 매우 단순하다. Apps에서 Incoming WebHooks를 검색하여 추가를 할 때 간단한 설정만 해주면 된다. 그리고 만들어진 WebHooks의 URL로 HTTP 요청을 보내면 된다.. 2022. 8. 20. 다양한 Application Service 설계 방식들 한 서브 도메인의 기능을 담당하는 하나의 Service 클래스 가장 일반적인 방법으로 서브 도메인 관련 기능을 하나의 Service 클래스에서 처리하는 것이다. @Service class PostingService( private val postingRepository: PostingRepository, ) { @Transactional fun postPosting(command: PostPostingCommand): Posting { val posting: Posting = command.toEntity() return this.postingRepository.save(entity = posting) } @Transactional fun modifyPosting(command: ModifyPosting.. 2022. 8. 14. 엔티티의 id를 AUTO_INCREMENT가 아닌 UUID를 사용하고자 할 때는 왜 사용해야하나 첫째로는 보안적인 이유이다. AUTO_INCREMENT를 엔티티의 id로 쓰는 경우 id가 단순 숫자값이기 때문에 외부에서 데이터를 긁어가기가 좋다. 예를 들어 커머스 서비스인 경우 상품 데이터에 AUTO_INCREMENT id를 사용한다면 조회 API를 사용하여(단순 상품 조회 public API일 것이기 때문에) 모든 상품 데이터를 긁어갈 수 있을 것이다. (https://some-commerce/products/1, https://some-commerce/products/2, ..., https://some-commerce/products/102341, ...) 더 크리티컬한 경우는 API를 통해 유저의 개인정보를 조회할 때, 만약 보안 기능이 제대로 작동하지 않는 경우라면 타인의.. 2022. 7. 26. 이전 1 ··· 9 10 11 12 13 14 15 ··· 26 다음