[개인공부] Spring Boot와 R2DBC 사이의 오류
공부 기록/Spring 2024. 2. 5. 16:18

발생한 오류 테스트를 하던 중 처음 보는 에러를 보게되었다. Caused by: org.springframework.dao.DataIntegrityViolationException: executeMany; no partition of relation "(테이블 명)" found for row; nested exception is io.r2dbc.postgresql.ExceptionFactory$PostgresqlDataIntegrityViolationException: [23514] no partition of relation "(테이블 명)" found for row 해당 오류는 Spring Boot에서 PostgreSQL를 R2DBC(Reactive Relational Database Connecti..

[Spring Boot] Jasypt를 사용하여 DB 정보 암호화
공부 기록/Spring 2024. 2. 1. 11:01

[Spring Boot] DB Connection Pool과 Hikari CP 설정 진행하던 프로젝트가 끝나고 테스트와 분석용으로 만든 페이지를 사용할 일이 없어졌다. 이걸 가지고 무엇을 더 할 수 있을까, 라고 고민을 하던 중 DB와 관련된 설정들을 기본으로만 해두고 세 justdo1tme.tistory.com 위와 같이 프로젝트의 DB Connection Pool 정보를 설정한 이후 DB 정보를 암호화 하였다. DB 암호화의 필요성 application.properties 파일이나 application.yml 파일에 DB의 비밀번호 또는 키 값을 명시해둘 경우, 실제 배포 환경에서는 대부분 외부 DB에 접근하기 때문에 아이디, 비밀번호, 서버 주소와 같이 중요한 값들이 외부로 노출되어 보안에 심각한 ..

article thumbnail
[Spring Boot] DB Connection Pool과 Hikari CP 설정
공부 기록/Spring 2024. 1. 30. 17:36

진행하던 프로젝트가 끝나고 테스트와 분석용으로 만든 페이지를 사용할 일이 없어졌다. 이걸 가지고 무엇을 더 할 수 있을까, 라고 고민을 하던 중 DB와 관련된 설정들을 기본으로만 해두고 세부적으로 설정하지 않은 것이 기억났다. 실무에서 꼭 설정이 필요한 DB Connection Pool과 DB 암호화에 대해 공부하며 설정을 바꾸었고 현 포스팅은 DB Connection Pool과 스프링 부트에서 사용하는 커넥션 풀 중 한 종류인 Hikari CP에 대해 정리하려 한다. 환경 설정 Spring Boot 2.7.11 Gradle 7.6.1 IntelliJ IDEA 2023.1 DB Connection Pool(DBCP) 일반적인 데이터 연동은 웹 애플리케이션이 데이터를 필요할 때마다 매번 데이터베이스에 연결..

article thumbnail
[개인공부] Gradle 8.0에서 발생한 에러와 해결
공부 기록/Spring 2023. 12. 5. 11:58

얼마 전 노트북 배터리의 방전으로 인해 프로젝트의 소스코드 다시 깃에서 내려받아야 하는 상황이 있었다. 프로젝트를 다시 셋팅하는 과정에서 Gradle 버전에 의해서 에러가 발생하게 되었고 해결과정과 어떻게 해결하였는지를 기록으로 남겨두려 한다. (2시간 정도 찾아 헤맸는데 에러 자체는 매우 간단하게 해결되서 허탈했었다.) 프로젝트 설정 환경 IntelliJ IDEA 2023.1 springboot framework 2.7.4 Gradle 8.0 JDK 11 에러 발생 이전 노트북을 포맷하기 전에 프로젝트 셋팅을 비교하며 동일하게 셋팅하였다. 하지만 Run을 실행하자 아래와 같은 문구가 나오며 에러가 발생하였다. A problem was found with the configuration of task '..

article thumbnail
[Spring Boot] 다중 Profile을 사용해서 환경 별 구성 다르게 하기
공부 기록/Spring 2023. 10. 23. 14:47

Spring Boot에서는 Spring Profiles을 사용하여 각 Profile에 따라 환경 구성을 다르게 설정할 수 있다. 로컬, 테스트, 운영 서버 등 프로젝트를 진행하면서 달라지는 환경 설정(DB, port 등)을 다중 Profile을 사용하면 매번 환경 설정을 수정할 필요없이 적용 가능하다. Profile 설정은 properties 파일 또는 yml 파일에 저장해두는데, 해당 포스팅은 properties 파일을 사용하여 다중 profile을 설정하는 방법을 작성하려고 한다. 참고로, 아래의 코드는 Spring Boot와 mybatis를 연동한 설정값도 포함하고 있다. 기본 개발 환경 Spring Boot 2.7.11 데이터베이스: postgreSQL IntelliJ 환경 별 properties..

article thumbnail
[개인공부] properties 문제 해결
공부 기록/Spring 2023. 9. 21. 14:27

아직까지도 모르는 것들이 많아서 공부용으로 만든 웹 페이지는 헐렁뚱땅 복잡하게 작성되어 있다. 그래서 그런지 2개의 다른 DB를 연결하고 싶어서 시도를 했고, 잘 되지 않아서 mapper 부분에 주석을 걸면서 비효율적으로 테스팅을 했다... 상용 DB와 local DB를 경우에 따라 사용해야 하는데 현상황을 본 사수분이 안타까워 하시면서 급한대로 properties 파일을 수정해주셨다. 그리고 properties 파일을 적용하면서 생긴 에러를 어떻게 해결했는지 간단하게라도 적어두려고 한다. resource 폴더 안에는 위의 이미지와 같이 파일이 위치해 있다. Gradle을 사용해 jar 파일을 실행해야 했기 때문에 Gradle build를 실행한 순간, 에러가 발생했다. Caused by: org.spr..

[Spring Boot] tomcat 에러 - The valid characters are defined in RFC 7230 and RFC 3986
공부 기록/Spring 2023. 6. 29. 13:50

React 프론트 서버에서 SpringBoot 백엔드 서버로 데이터를 넘기는 과정에서 The valid characters are defined in RFC 7230 and RFC 3986 라는 에러가 발생하였다. 문자를 뭘 정의하라는건가... 싶어서 문제의 원인과 해결방법을 찾아보았다. 문제는 넘겨받은 데이터에 들어있는 특수문자에 의한 인코딩 문제였다. SpringBoot는 내장 tomcat(톰캣)을 사용하고 있으며, 이 tomcat은 특정 버전 이상에서 RFC 3986 규격이 적용된다고 한다. RFC 3986에는 영어 문자(a-zA-Z), 숫자(0-9), -. ~4 특수 문자 및 예약 문자만 허용한다. 에러가 발생하지 않고 특수문자를 사용하기 위해서는 relaxQueryChars 옵션에 허용할 문자를..

article thumbnail
[Spring Boot] lombok 에러: cannot find symbol
공부 기록/Spring 2023. 6. 22. 18:01

간단한 웹 페이지를 제작하고 그걸 서버에 올리기 위해서 build를 하면서 문제가 생겼다... 캡쳐를 하진 못했지만 error: cannot find symbol 라는 문구와 함께 작성했던 코드를 찾을 수 없다는 오류 코드가 발생했다. 이쯤되면... 뭔가 새로운 시도를 하려고 할 때마다 별별 온갖 에러를 다 보는거 같다. 처음에는 내가 코드를 잘못 작성하였나 했지만 서칭을 해보니 lombok 에러였고 Gradle이 lombok을 인식하지 못해 발생한 에러였다. Gradle을 확인하니 lombok이 잘 깔려있다. 하지만 인식을 못하니 다시 buil.gradle의 dependencies 설정을 다시 작성하고 update 해주려고 한다. dependencies를 확인해보니 다음과 같이 lombok이 추가되어 ..

article thumbnail
[Spring] 로그 설정 및 출력 방법 - Logback
공부 기록/Spring 2023. 5. 3. 16:07

Logback을 사용하는 이유 Spring Boot의 기본 log 툴은 Logback이다. System.out.println()을 사용할 수도 있지만 로그 툴을 사용하는 이유는 아래와 같다. 출력 형식을 지정할 수 있다. log Level에 따라 남기고 싶은 로그를 별도로 지정할 수 있다. console 뿐만 아니라 파일이나, 네트워크 등 로그를 별도의 위치에 남겨 확인할 수 있다. System.out.println()을 사용할 경우 I/O 리소스를 많이 잡아 먹기 때문에 성능이 나빠질 수 있다. Log Level 레벨 설명 Fatal 매우 심각한 에러로 프로그램이 종료되는 경우가 많다. Error 의도하지 않은 에러가 발생한 경우로 프로그램이 종료되지 않는다. Warn 에러가 될 수도 있는 잠재적 사능..

[Spring WebFlux] CollectMap에 대하여
공부 기록/Spring 2023. 4. 10. 11:14

CollectMap이란? CollectMap은 Map 콜랙션으로 데이터를 모으는 리액터 모으기(aggregation) 연산 중 하나이다. 리액터 모으기의 종류에는 collectMap 이외에도 아래와 같은 종류가 있다. 1. List 형식으로 모으기 : collectList 2. Map의 값을 모으기 : collectMultiMap 3. 개수 새기 : count 4. 누적하기 : reduce 5. 누적하면서 값 생성하기 : scan CollectMap의 형식 Mono collectMap(Function