대충 넘어가지 않는 습관을 위한 기록 43

이미지 업로드 비동기 처리 개선 - Kotlin

이전에 이미지 관련 비용 최적화를 통해 약 88% 개선한 경험이 있다. (개선 후에 한 달이 지나고 나서 이전 비용 평균과 비교한 수치)https://hyunco.tistory.com/82 CloudFront 적용기 [AWS - S3]이전 이미지 관련 최적화 포스팅이다.https://hyunco.tistory.com/78 현재는 라즈베리파이로 이동해 있음. 명확한 해결은 없는 상" data-og-host="hyunco.tistory.com" data-og-source-url="https://hyunco.tistory.com/78" data-og-uhyunco.tistory.com 간단히 요약하자면 원본 이미지 파일을 업로드하고 조회하던 방식에서,업로드 시 webp 형식으로 변환, 압축, 리사이징 + 조..

Slack Webhook을 활용한 자동화 레포트 전송 - Spring Boot

문제 정의현재 서비스에서 가장 중요한 기능은 편지 작성과 AI 답장 생성이다.사용자가 편지를 작성하면, AI가 답장을 생성하여 다음 날 오전 10시에 전달하는 것이 핵심 플로우인데,만약 외부 API의 예상치 못한 문제로 인해 AI 답장이 생성되지 않는 경우가 발생할 수 있다면?이 경우 사용자들은 두 가지 문제를 겪을 수 있게 된다.빈 편지 봉투를 받게 되거나답장 자체를 받지 못하는 상황이 발생이러한 문제는 심각한 서비스 신뢰도 저하로 이어지며, 문제를 인지할 수 있는 방법 또한 매우 제한적이었다.운영자가 로그를 직접 조회해야 하거나DB를 일일이 확인해야 했으며최악의 경우, 이미 사용자로부터 CS 문의가 들어온 뒤에야 문제를 인지하게 되는 상황이 발생   해결 과정 문제를 해결하기 위해 두 가지 방법을 고..

Java 15 - 멀티라인 문자열, 특수 이스케이프 문자

이번에 개선 중인 서비스에서 카카오 알림톡 템플릿을 수정하기 위해 코드를 뒤적거리다가 새로운 지식을 알게 되어 기록한다.  @Override public String content(final Object... args) { validateTemplateParameters(4, args); return """ (...템플릿 내용...) \s 안녕하세요, %s %s님! \s 아래 '답장 보러 가기' 버튼을 누르시면 편지함으로 이동합니다. \s (...템플릿 내용...) """.formatted(ar..

운영 서버 스웨거 사용 제한

운영 서버에서 스웨거를 닫게 설정해줬다.간단하지만 기록 현재 상황- 스프링 프로파일 prod인 운영 서버, dev인 개발 서버로 운영 중이며 두 개의 서버 모두 한 개의 통합 배포 파일로 CI/CD를 관리하고 있다. 우선 docker-compose.yml에 아래의 값을 추가해준다. springserver: environment: - SPRING_PROFILES_ACTIVE=prod해당 설정으로 인해, application.yml의 프로파일을 읽을 수 있다.yml의 프로파일이 prod인 설정 파일만 읽고 배포를 실행한다.   그리고 SwaggerConfig에 Spring 어노테이션인 @Profile을 등록해서, 프로파일이 dev인 어플리케이션에만 해당되게 적용시킨다.@Profile("dev..

AWS 해킹 기록..

이번에 곧 런칭하려던 서비스의 AWS 계정이 해킹을 당했다.하루만에 75달러가 찍혔다..! 보안을 위해 꼭 해야 할 일들 (결론)더보기무조건 루트 계정에는 액세스 키를 생성하지 말고, 각 사용자마다 IAM을 발급받고 최소한의 권한만 생성하여 각각 기기별 MFA를 추가해줘야 한다. 이번 AWS 계정에는 루트 계정도 MFA를 추가했고 액세스 키를 생성하지 않았는데,문제는 다른 개발자들 쓰기 편하게 IAM을 하나 만들었는데, MFA 없이 과한 권한을 주었던 게 큰 실수였다. 그리고 급한 것들은 모두 처리 했으면, 꼭 예산 생성해서 알림이 오게끔 설정하자.  찾아보다가 본 유튜브 영상 - 현재 상황과 매우 비슷하다.https://youtu.be/vqDmY1UV_hM?si=ijn07SVOJeMkVPBi   우선 ..

CloudFront 적용기 [AWS - S3]

이전 이미지 관련 최적화 포스팅이다.https://hyunco.tistory.com/78 현재는 라즈베리파이로 이동해 있음. 명확한 해결은 없는 상" data-og-host="hyunco.tistory.com" data-og-source-url="https://hyunco.tistory.com/78" data-og-url="https://hyunco.tistory.com/78" data-og-image="https://scrap.kakaocdn.net/dn/1Jqhs/hyYci1OLos/BekgKsyb6P20KlZ4UxqzQK/img.png?width=403&height=119&face=0_0_403_119,https://scrap.kakaocdn.net/dn/cgzOPW/hyYceZpoeK/UksJZK..

개발·운영 환경 분리 적용기 - GitHub Actions를 활용한 배포 자동화 (개선 과정 포함)

최근 진행 중인 프로젝트의 CI/CD 파이프라인을 개선하면서, 기존의 단순 배포 방식에서 개발(Dev)과 운영(Prod) 환경을 분리하는 방식으로 변경했다. 이 과정에서 GitHub Actions를 활용하여 자동화된 배포를 구현했다.  이번 글에서는 초기 배포 방식부터 개발·운영 환경을 분리하게 된 과정과 최종적으로 설정한 GitHub Actions 배포 파이프라인을 정리해보려 한다.        처음에는 GitHub Actions에서 간단한 deploy.yml을 작성하여 배포를 자동화했다. 기존 deploy.yml 설정name: deployon: workflow_dispatch:jobs: build: runs-on: ubuntu-latest steps: - uses: action..

이미지 업로드 최적화 : 자바 - 코틀린 변환 기록

이번에 합류한 서비스에서 Java/Spring 으로 약 1년간 운영한 코드를, 여러 이유로 팀에서 코틀린으로 변환하며 새롭게 레포를 짜기로 했다.코틀린은 처음이라 앞으로도 헷갈리거나 오래 걸렸던 내용들이 있으면 기록하려고 한다. 이번 글은 곧 런칭하는 다른 서비스에 적용했던 최적화 s3 이미지 업로드 기능을 코틀린에 새로 적용하며 알게 된 내용들, 그리고 새로 적용한 기능을 기록하겠다.       S3StorageService@Serviceclass S3StorageService( private val imageUploader: ImageUploader) : IStorageService { companion object { const val CATEGORY_PROFILE: Stri..