✅ 개발자 Q&A 커뮤니티 서비스 입니다.
| 분류 | 기술명 |
|---|---|
| BackEnd | Java, Spring (Boot, Security, JPA), Junit, Mockito, Redis, MySql |
| DevOps | AWS(EC2, RDS, S3, ElasticBeanstalk, GithubAction) |
| Tools | IntelliJ, Gradle |
- com.aksme
- domain
- api
- controller
- request
- service
- reqeust
- response
- controller
- common
- config
- constant
- error
- http
- interceptor
- jwt
- resolver
- uitl
- ResultResponse
- dao
- api
- domain
비동기 이미지 업로드 처리 개선 [이슈 및 PR]
- 여러 건의 이미지를 업로드할 때 단일 쓰레드인 [nio-8080-exec-2] 에서 처리되어 성능 문제가 발생하는 문제를 식별
- @async 메서드를 다른 메서드 내부에서 호출, CompletableFuture의 join()을 사용함으로써 동기화 문제가 발생하는 문제를 해결 하고 로그를 통해 확인함
- 매번 게시글 조회수를 업데이트할 경우 DB 커넥션의 부하가 지속적으로 증가하게 되어 Redis를 도입하여 이를 처리함.
- 이후 실제 DB와의 데이터 정합성을 위해 @Scheduled을 사용하여 1분마다 지속적으로 DB에 update 쿼리가 수행됨.
예외 정의 및 예외 메시지 커스텀 처리[적용코드, 적용코드]
- 인증 및 비즈니스 로직 오류를 효과적으로 관리하기 위해 맞춤형 예외 클래스를 생성함.
@RestControllerAdvice를 활용하여 다양한 예외를 전역적으로 처리하고, 상세한 오류 정보를 로깅하며 API 클라이언트에게 의미 있는 피드백을 제공함.- 특정 오류 코드를 HTTP 상태와 매핑하여 일관된 에러 응답을 구현함으로써 애플리케이션의 안정성과 디버깅 효율성을 향상시킴.
- 글로벌 예외 처리 로직을 통해 내부 서버 오류, 비즈니스 예외, 유효성 검증 오류, 인증 예외 등을 구체적으로 핸들링함.
RestTemplate 추가 설정 및 에러 핸들링 구현 [설정코드]
- RestTemplate의 연결 시간 초과(TTL)를 1초, 읽기 시간 초과(TTL)를 5초로 설정하여 안정적인 HTTP 클라이언트 설정을 구성
RestTemplateBuilder를 사용하여 1초의 연결 시간 초과와 5초의 읽기 시간 초과를 설정하여 네트워크 요청의 안정성을 향상- RestTemplate을 활용한 HTTP 요청 시 발생할 수 있는 예외 상황을 적절히 처리하여 클라이언트의 신뢰성을 높임.
인터페이스 계층을 활용한 파일 업로드 서비스 DI 및 확장성 개선 [적용코드,적용코드,적용코드]
FileStorageService인터페이스 계층을 추가하여 구체적인 구체화를 추상화 하여 DIP, OCP 원칙을 준수함FileService는 인터페이스를 통해 파일 저장 서비스를 의존하게 하여, 다양한 파일 저장소 구현체를 쉽게 교체하고 확장 가능하도록 설계
Parameter Resolver를 통한 컨트롤러 메서드 간소화 및 토큰 처리 개선 [적용 코드, 적용코드]
HandlerMethodArgumentResolver를 사용하여 컨트롤러 메서드에서 반복되는 토큰 검증 및 파싱 로직을 분리하여 코드의 간결성과 재사용성을 높임.AccountArgumentResolver를 통해@AccountInfo,@TokenParser애노테이션이 붙은 메서드 파라미터에 대해 토큰에서 사용자 정보를 추출하여AccountDto,TokenDto객체를 자동으로 주입함.- Authorization 헤더 유효성 검사를
AuthorizationHeaderUtils를 사용하여 일관되게 처리함으로써 코드의 중복을 제거하고 유지보수성을 향상시킴.
공통 응답 클래스 개선[적용 코드]
- 제네릭을 활용하여 다양한 타입의 응답 데이터를 처리할 수 있는
ResultResponse클래스를 도입함. success메서드를 통해 성공적인 응답을 쉽게 생성할 수 있으며,fail메서드를 통해 실패 메시지를 포함한 응답을 간편하게 생성할 수 있도록 구현함.- 응답의 일관성과 가독성을 높여 클라이언트와의 통신에서 발생할 수 있는 혼란을 줄이고, 코드의 재사용성을 향상시킴.
다중 이미지 업로드 및 비동기 처리로 응답 속도 개선 [적용 코드]
@Async를 사용하여 비동기 처리로 이미지 업로드를 수행함으로써 서버의 응답 속도를 개선하고, 사용자가 빠른 피드백을 받을 수 있도록 함.AsyncConfig를 통해 비동기 처리를 위한 스레드 풀 설정을 구성하여 효율적인 리소스 관리를 가능하게 함.- 이미지 파일의 확장자 유효성 검사를 통해 잘못된 파일 업로드를 사전에 방지하고, AWS S3에 안전하게 업로드되도록 함.
ElasticBeanstalk를 활용한 모니터링 구현
![]() |
![]() |
|---|
- AWS Elastic Beanstalk를 통해 배포된 애플리케이션에 대한 실시간 모니터링을 수행하여, 시스템 상태 및 성능을 지속적으로 파악함.
- Elastic Beanstalk의 환경 경보 설정을 통해 애플리케이션에 문제가 발생할 경우, 어드민에게 이메일 알림을 발송하여 신속하게 대응함.

