java
[Spring] MariaDB connection 끊김
가벼운 API는 상관이 없는데, 호출 한 번에 10분 넘게 소요되는 무거운 API의 경우 중간에 커넥션이 끊기는 현상이 발생했다. 검색을 해보니, DB의 wait_timeout(현재 3분)보다 커넥션이 지속되는 경우 발생하는 문제로 추정된다. 종료된 커넥션을 다시 사용하기 전에 해당 커넥션이 정상적인지 검사를 하는 작업이 필요했고, validation query 설정을 사용하기로 결정했다. 스프링 서버에 해당 설정을 추가한다. spring: datasource: tomcat: validation-query: "select 1" 설정 이후 장시간 소요되는 API에서도 커넥션 끊김 현상이 사라졌다. 참고자료 https://xzio.tistory.com/10 https://engineering-skcc.git..
[Spring] Failed to validate connection
서비스 운영 중 아래와 같은 경고 로그가 지속적으로 생겼다. hikariPool - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@7aa2f8a6 ((conn=463456) Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value. 서비스가 동작하는데 특별한 문제는 없었지만, 자꾸 경고 로그가 발생하는 것이 거슬려서 해결해보기로 한다. 경고 로그 마지막에 using a shorter maxLifetime value 라는 것이 보여서 해당 키워드로 열심히 검색해봤다. 알아본 결..
[Spring] AWS S3 객체 전체 조회 or 해당 level만 조회
기본 세팅 먼저 S3 버킷에 대한 퍼블릭 엑세스 설정이 필요하다. 해당 글을 참고하자. 2022.07.25 - [aws] - [AWS] S3 버킷 퍼블릭 엑세스 설정 [AWS] S3 버킷 퍼블릭 엑세스 설정 AWS S3 버킷을 퍼블릭하게 열어두고 사용할 때가 많다. 이번에는 S3 퍼블릭 엑세스에 대한 기본 세팅을 설명한다. 퍼블릭 엑세스 차단 기본적으로 아무 설정 없이 버킷을 생성하면 모든 퍼블릭 엑 gksdudrb922.tistory.com 또한, Spring Boot에서 S3 설정 및 접근에 대한 인증 키를 입력해야 한다. 해당 글을 참고하자. 2022.07.25 - [java/spring] - [Spring] AWS S3 접근 [Spring] AWS S3 접근 라이브러리 추가 implementati..
[Spring] AWS S3 접근
라이브러리 추가 implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' 인증 키 추가 본인 IAM 인증 키를 추가하면 된다. cloud: aws: credentials: instance-profile: false access-key: [access-key] secret-key: [secret-key] region: auto: false static: ap-northeast-2 stack: auto: false S3Config @Configuration public class S3Config { @Value("${cloud.aws.credentials.access-key}") public String accessKe..
[Spring] S3 Pre-Signed URL 생성
기본 세팅 먼저 S3 버킷에 대한 퍼블릭 엑세스 설정이 필요하다. 해당 글을 참고하자. 2022.07.25 - [aws] - [AWS] S3 버킷 퍼블릭 엑세스 설정 [AWS] S3 버킷 퍼블릭 엑세스 설정 AWS S3 버킷을 퍼블릭하게 열어두고 사용할 때가 많다. 이번에는 S3 퍼블릭 엑세스에 대한 기본 세팅을 설명한다. 퍼블릭 엑세스 차단 기본적으로 아무 설정 없이 버킷을 생성하면 모든 퍼블릭 엑 gksdudrb922.tistory.com 또한, Spring Boot에서 S3 설정 및 접근에 대한 인증 키를 입력해야 한다. 해당 글을 참고하자. 2022.07.25 - [java/spring] - [Spring] AWS S3 접근 [Spring] AWS S3 접근 라이브러리 추가 implementati..
[Spring] @Value, static 변수에 사용하기
spring이 제공하는 @Value은 application.yml 등과 결합하여 변수를 상수처럼 사용할 수 있는 유용한 애노테이션이다. 예를 들어, 다음과 같이 사용할 수 있다. # applicatio.yml example: name: Han age: 26 // Example.java @RestController @RequestMapping("/example") public class Example { @Value("${example.name}") String name; @Value("${example.age}") String age; @GetMapping public String example() { return "Name: " + name + ", Age: " + age; } } // localhos..
![[Spring] Spring Security + Swagger 3.0 적용](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbR2HHz%2FbtrHUCjm1Sh%2FAAAAAAAAAAAAAAAAAAAAABqwxYUVMSn0AGmeMZZE7wYbcct8dhlUTzM9fHhhBt3i%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D8AA1NKy1g%252Be%252FaOQ2uzEBbsB5sag%253D)
[Spring] Spring Security + Swagger 3.0 적용
Swagger는 REST API의 문서화, 테스트를 용이하게 해주는 프레임워크이다. Spring에 Swagger를 적용하는 과정은 이전 글에서 다루었다. 2022.07.16 - [java/spring] - [Spring] Swagger 3.0 적용 [Spring] Swagger 3.0 적용 Swagger는 REST API의 문서화, 테스트를 용이하게 해주는 프레임워크이다. 나같은 경우는 백엔드 개발을 하면서 API들을 직접 문서화시켜서 다른 개발자들과 공유하곤 했는데, Swagger를 사용하면 개발 gksdudrb922.tistory.com 이번에는 Spring Security가 적용되어 있는 프로젝트에서 Swagger를 어떻게 적용시킬 수 있는지 알아보자. SwaggerConfig 이전에 만들었던 Sw..
![[Spring] Swagger 3.0 적용](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fb1L7gh%2FbtrHqnUbIQZ%2FAAAAAAAAAAAAAAAAAAAAAEa7kjV6DrHTtskAI12LCM5vAygvkEd3p50WT58z_95S%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D5M1AyUaPaBOqajWTEBnrvtT3B8Y%253D)
[Spring] Swagger 3.0 적용
Swagger는 REST API의 문서화, 테스트를 용이하게 해주는 프레임워크이다. 나같은 경우는 백엔드 개발을 하면서 API들을 직접 문서화시켜서 다른 개발자들과 공유하곤 했는데, Swagger를 사용하면 개발과 동시에 자동으로 문서화를 시켜주기 때문에 요즘 유용하게 사용하고 있는 도구이다. 특히, Spring에서는 애노테이션을 통해 더 편리하게 Swagger를 사용할 수 있는데, 지금부터 해당 방법을 소개한다. 라이브러리 추가 먼저 Swagger 사용을 위해 구현체인 springfox 라이브러리를 추가한다. dependencies { ... implementation 'io.springfox:springfox-boot-starter:3.0.0' } SwaggerConfig Swagger를 위한 설정 ..