개요로컬 혹은 CI 서버에서 실제 운영 환경과 같은 디비를 사용하여 통합 테스트를 하고 싶어 TestContainers 설정을 적용했다.세부 설정은 docker-compose.yml로 관리하는게 편하여 이를 import하는 방식으로 구현했다. 환경스프링 부트 3.2.6Gradle 8.8자바 17 설정gradle에 라이브러리 추가ext { testcontainersVersion = "1.19.0"}dependencies { testImplementation "org.springframework.boot:spring-boot-testcontainers" testImplementation 'org.testcontainers:mysql' testImplementation 'org.sprin..
외부설정 문서화 yml 혹은 properties 파일에 프로퍼티 설정시 SpringBoot에 이미 정의되어 있는 document랑 자동완성을 확인할 수 있다. 개발자가 커스텀한 값들에 대해서도 문서랑 자동완성ㅇ을 지원하는 방법에 대해 알아보자. Spring Configuration Processor란? application.properties, application.yml 파일 등에 넣는 커스텀 설정의 자동 완성, 도움말 등을 지원해주는 도구이다. 실습 환경 Spring Boot 3.2.0 Gradle 8.2 라이브러리 의존성 추가 dependencies { annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'..
한 프로젝트에서 2개 이상의 DB를 연결해서 사용하기 위한 다중 DataSource 설정을 아래와 같이 했다. @Configuration @EnableTransactionManagement(proxyTargetClass = true) @EnableJpaRepositories( entityManagerFactoryRef = "aJpaEntityManagerFactory", basePackages = {"com.soap.repository"} ) public class ADbConfig { @Bean(name = "aDataSource") @ConfigurationProperties(prefix = "spring.a.datasource") public DataSource aDataSource() { retu..
기록용 직접 정의한 헤더값의 language값에 따른 예외처리 메시지 다중화 applicaiton.yml spring: messages: basename: i18n/exception encoding: UTF-8 resources/i18n/exception_eng.yml ※ 다른 포맷 사용시 그에 따른 값으로 변경 # exception_eng.yml unKnown: code: "-9999" msg: "An unknown error has occurred. SadPepe :(" userNotFound: code: "-1000" msg: "This member not exist. SadPepe :(" resources/i18n/exception_kor.yml ※ 다른 포맷 사용시 그에 따른 값으로 변경 # e..
POST 컨트롤러 호출시 @RequestBody로 요청받는 Request의 dto는 다음과 같습니다. public class Request { private String name; private ColorType colrType; private String redApple; private String greenApple; private String redOrange; private String greenOrange; //getter, setter ... public enum ColorType { RED, GREEN } colorType의 값이 RED면 redApple과 redOrange의 값은 필수, GREEN면 greenApple과 greenOrange의 값에 대한 필수값 체크를 하고 싶었습니다. 우선..
JPA와 Mybatis를 동시에 사용하고 있다. 두 기술의 트랜잭션을 서로 공유하면서 사용하고 있는데 세팅한 방법을 기술한다. 실무에선 2개 이상의 데이터베이스를 한프로젝트에서 사용한다. application.yml에서는 아래와 같이 세팅한다 spring: ${보통 DB이름}: //자유롭게 입력 datasource: type: com.zaxxer.hikari.HikariDataSource driverClassName: com.mysql.cj.jdbc.Driver jdbcUrl: ${DB URL} username: ${DB 계정이름} password: ${DB 계정비밀번호} hikari: poolName: ${poolName} //자유롭게 입력 connectionTimeout: ?? maximumPoolS..
목적 : 컨텐츠 검색시 싱글쿼터( ' )가 포함된 검색어가 있는경우 \를 붙여주기 마이바티스를 사용할수 밖에 없는 쿼리이며 mysql은 자바처럼 싱글쿼터를 \을 붙여줘야 인식하기 때문에 특정 컨트롤러에서 치환해도 되지만 공부할겸 필터에서 가공하는 코드를 작성해봤다. @ServletComponentScan @SpringBootApplication public class TestApplication { public static void main(String[] args) { SpringApplication.run(VodmanagerApplication.class); } } @ServletComponentScan 등록 등록해야 @WebFilter, @WebListener and @WebServlet 주석을 s..
Mockito를 이용한 테스트 코드 작성시 발생한 이슈를 간단히 정리하고자 합니다. @Table(name = "category") @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Category extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String name; @Column(name = "parent_id") private Long parentId; @Builder public Category(String name, Long pare..
회원 정보 수정에서 썸네일 업로드가 필요했습니다. 파일을 Gloud에 저장하여 업로드 및 다운이 필요했기에 현재 사용하고 있는 Google Cloud Platform을 선택하였습니다. 적용하는데 발생한 이슈위주로 적는 글이라, 자세한 설정은 아래 블로그를 참조해주세요. jyami.tistory.com/54 GCP Cloud Storage + Springboot 연동하기 이번 외주를 맡은 내용이 Google Cloud Storage를 이용해서 file을 업로드, 다운로드하는 API 기능을 구현해서 이 내용을 정리하고자 한다. Cloud Storage를 다루는 방법으로 Google Cloud Console, Cloud SDK를.. jyami.tistory.com 설정 gradle 설정을 다음과 같이 했습니다..
Actuator은 애플리케이션 관련 데이터 및 모니더링 정보를 제공해준다. 단순히 Actuator만 사용한다면 JSON 형식 혹은 XML로 확인할 수 있다. 하지만 GUI로 보고 싶다면 Actuator 기반 UI인 Spring Boot Admin을 사용하면 된다. (오픈소스) 자세한 내용은 백기선님의 "우아한 스프링 부트"를 참고하길 바란다. www.youtube.com/watch?v=z0EaPjF3pCQ 서버 애플리케이션 우선 admin 전용 서버를 띄우기 위해 프로젝트를 생성해야 한다. 멀티모듈로 해도되지만 필자는 그냥 start.spring.io를 통해서 프로젝트를 하나 생성했다. 라이브러리로 Spring Boot Admin (Server)를 추가해준다. ※ 주의할점 이것 때문에 약간 헤맸는데, 클..