Framework/Spring
-
최근 코드드림 프로젝트를 다시 시작하면서 API 명세 작성을 위해 Springdoc을 이용했습니다.이전에 Springfox Swagger를 이용해본 경험이 있어 이번에는 Springdoc을 선택했고, 어떻게 사용하는지 포스팅을 통해 알아보겠습니다. ※ 테스트 환경Spring Boot 2.7.5Springdoc 1.6.10GradleSpringdocSpringdoc은 Spring Boot 프로젝트에 특화된 OpenAPI 3.0 기반 라이브러리입니다. 주요 특징은 다음과 같습니다.Spring Boot와의 강력한 통합 지원Spring MVC 또는 Spring WebFlux 컨트롤러와 자동으로 연동하여 OpenAPI 문서를 생Swagger UI와 OpenAPI 스펙을 기본적으로 포함하여 설정이 간단.Sprin..
[Spring Boot]Springdoc 적용하기 2024. 12. 23. -
최근 팀프로젝트로 회원가입을 통해 몇 개의 이미지들을 저장 받고, 조회가 가능한 기능을 구현하고 있습니다.농실농실과 같이 최소한의 비용으로 서버를 구동시킬 계획으로 Cafe24 호스팅을 염두해두고 있는데요. 아무래도 파일 저장소를 따로 두기에는 비용 가늠을 할 수 없어 이미지 파일을 Base64로 변환해 DB로 저장하기로 했습니다. Cafe24의 호스팅 서비스는 서버 용량내 DB 용량이 무제한이기 때문에 주기적으로 데이터를 정리하며 DB를 활용할 예정입니다. 본론으로 돌아와 이미지를 Base64로 변환하다보니 트래픽 용량을 생각해야 했습니다. 최대 등록 가능한 이미지는 20개로 기획했고, 테스트를 통해 확인했을 때 총 20개의 이미지가 담긴 응답 크기는 455KB( 227ms)로 최적화가 필요한 수준이..
[Spring Boot]압축 전송하기 2024. 12. 6. -
오랜만에 외부 API 연동을 하게 되어 기존에 사용중인 HttpClient 방식이 아닌 WebClient를 사용해보기로 했습니다. 오늘은 HttpClient, WebClient 각각의 사용 예제를 알아보겠습니다. ※ 테스트 환경Spring Boot 2.7JDK 11WebClient는 Spring 5부터 등장한 HTTP 클라이언트 라이브러리입니다.WebClient는 다음과 같은 특징이 있습니다.Spring Boot 지원: WebClient는 Spring WebFlux의 일부로, Spring Boot와 완벽히 통합됩니다.비동기 처리: WebClient는 기본적으로 비동기(reactive)이며, 동기 처리도 지원합니다.간결한 코드: 요청/응답 처리 코드가 간결하며, JSON 직렬화/역직렬화가 기본 지원됩니다...
[Spring Boot]HttpClient와 WebClient 사용해보기 2024. 11. 27. -
최근 약 3만건의 데이터를 저장하는 일이 있었습니다. 이번 포스팅에서는 MyBatis로 대량 데이터 저장할 때 효과적인 방법에 대해 알아보겠습니다. 테스트 환경Spring Boot 2.7JDK11MyBatisOracle대량의 데이터를 저장해야할 때 단건씩 저장하면 매우 많은 시간을 소요하게 됩니다. 때문에 보통 Bulk Insert를 통해 저장합니다.Oracle에서 Bulk Insert시에 사용할 수 있는 쿼리는 2가지로 볼 수 있습니다. INSERT ALLINSERT ALL은 여러 테이블에 동시에 데이터를 입력할 때 사용할 수 있는 구문입니다.INSERT ALL INTO [TABLE] (col1, col2) VALUES ('value1','value2') INTO [TABLE] (col1,..
[Spring Boot]대량 데이터 저장하기 2024. 10. 17. -
최근 이직한 곳에서는 Oracle DB를 사용하고 있었습니다.오랜만에 예전 기억도 되새길겸 연동 과정을 기록에 남겨봤습니다. 회사 환경과 동일하게 맞추기 위해 Spring Boot 환경에서 외부 톰캣을 사용했고, JNDI를 통해 DB 리소스를 가져왔습니다. DB연결에는 ojdbc를 이용했고, MyBatis 연결까지의 과정을 공유합니다. 테스트 환경Spring Boot 2.7.5JDK 1.8ojdbc8MavenMyBatis1. 의존성 주입Maven repository 접속해서 아래 의존성을 추가합니다. org.springframework.boot spring-boot-starter-data-jdbc org.apache.commons commons-dbcp2 org.mybatis...
[Spring Boot]Oracle DB 연결하기 2024. 9. 2. -
최근 Spring Security 설정을 하며 발견한 오류 입니다.해당 오류는 Spring Security의 AuthenticationProvider를 구현하며 메소드를 Overried하여 그대로 사용하는 경우 발생할 수 있습니다. AuthenticationProvider에는 authenticate, supports 두 메소드가 존재합니다.인터페이스 상속 후 자동으로 Overried를 하게 되면 supports 메소드의 리터값은 false로 고정되어 있습니다. public interface AuthenticationProvider { /** * Performs authentication with the same contract as * {@link org.springframework.security..
[Error]Spring Security authenticate 302 2024. 9. 2. -
최근 개발 중인 앱에 비밀번호 재설정 기능을 추가하게 되었습니다.앱에서 서버로 비밀번호 재설정 요청을 하면 비밀번호 랜덤 설정 후 메일 전송 로직을 실행하게 됩니다. 이 때, 앱에서는 메일 전송이 완료되기까지 기다릴 필요가 없기 때문에 비동기로 작동할 수 있게 처리했습니다. 오늘은 Spring Boot에 @Async를 이용한 비동기 처리를 알아보겠습니다.테스트 환경Spring Boot 2.7.5JDK 1.8Gradle비동기 처리 없이 비밀번호 재설정을 실행했을 때의 모습입니다. 메일 발송까지 기다리다보니 비밀번호 재설정은 되었음에도 메일 발송 속도에 따라 3~5초 정도의 딜레이가 추가되는 것을 확인할 수 있었습니다.*메일 발송으로 javax.mail 라이브러리를 사용하고 있고 Gmail STMP가 설정되..
[Spring Boot]@Async로 비동기 처리하기 2024. 7. 18. -
최근 만든 앱에 푸쉬 기능을 추가할 일이 생겨 Spring Boot로 구축된 서버에 Firebase를 적용했습니다.이번 포스팅에서는 Firebase Admin SDK를 이용해 푸쉬를 보내는 방법을 알아보겠습니다. 이외에도 FCM를 이용한 글이 있으니 참고해 주세요.Node를 이용한 FCM PushFlutter FCM 설정하기 ※ 테스트 환경Spring Boot 2.7.5JDK 1.8Gradle1. Firebase Admin SDK 다운로드파이어베이스 접속 후 Admin SDK를 다운받습니다. 다운받은 파일을 resousrces 디렉토리에 저장합니다. 2. 의존성 추가푸쉬를 위해 firebase-admin을 추가합니다.build.gradle implementation group: 'com.googl..
[Spring Boot]Firebase Admin SDK를 이용해 푸쉬 보내기 2024. 7. 4.