Tech/Spring17 SpringBoot 커스텀 프로퍼티에 대한 문서와 자동완성 ※ Spring Configuration Processor 외부설정 문서화 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'.. Tech/Spring 2024. 4. 17. 2개 이상의 DB를 사용하는 Spring Boot 환경에서 Spring Data Jpa 사용시 트랜잭션 관련 에러 한 프로젝트에서 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.. Tech/Spring 2023. 1. 29. 요청으로 들어온 language 값에 따른 GlobalExceptioner에서 다국어 처리 (i18n, yml) + spring validaiton 다국어처리 기록용 직접 정의한 헤더값의 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.. Tech/Spring 2022. 5. 23. Validation 클래스 단위 제약과 조건부 검사 설정 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의 값에 대한 필수값 체크를 하고 싶었습니다. 우선.. Tech/Spring 2021. 12. 22. Mybatis와 Jpa 사용시 트랜잭션 묶어서 사용하는 방법(※ 멀티 datasource 설정 / QueryDsl) 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.. Tech/Spring 2021. 7. 24. Spring Filter에서 request Body 가공하기 목적 : 컨텐츠 검색시 싱글쿼터( ' )가 포함된 검색어가 있는경우 \를 붙여주기 마이바티스를 사용할수 밖에 없는 쿼리이며 mysql은 자바처럼 싱글쿼터를 \을 붙여줘야 인식하기 때문에 특정 컨트롤러에서 치환해도 되지만 공부할겸 필터에서 가공하는 코드를 작성해봤다. @ServletComponentScan @SpringBootApplication public class TestApplication { public static void main(String[] args) { SpringApplication.run(VodmanagerApplication.class); } } @ServletComponentScan 등록 등록해야 @WebFilter, @WebListener and @WebServlet 주석을 s.. Tech/Spring 2021. 7. 19. 단위 테스트를위한 ReflectionTestUtils 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.. Tech/Spring 2021. 3. 23. Springboot + GCP Cloud Storage 연동(파일 업로드, 다운로드) 회원 정보 수정에서 썸네일 업로드가 필요했습니다. 파일을 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 설정을 다음과 같이 했습니다.. Tech/Spring 2021. 3. 22. Spring Boot에서 Actuator 및 Spring Actuator Admin 설정 방법 Actuator은 애플리케이션 관련 데이터 및 모니더링 정보를 제공해준다. 단순히 Actuator만 사용한다면 JSON 형식 혹은 XML로 확인할 수 있다. 하지만 GUI로 보고 싶다면 Actuator 기반 UI인 Spring Boot Admin을 사용하면 된다. (오픈소스) 자세한 내용은 백기선님의 "우아한 스프링 부트"를 참고하길 바란다. www.youtube.com/watch?v=z0EaPjF3pCQ 서버 애플리케이션 우선 admin 전용 서버를 띄우기 위해 프로젝트를 생성해야 한다. 멀티모듈로 해도되지만 필자는 그냥 start.spring.io를 통해서 프로젝트를 하나 생성했다. 라이브러리로 Spring Boot Admin (Server)를 추가해준다. ※ 주의할점 이것 때문에 약간 헤맸는데, 클.. Tech/Spring 2021. 3. 21. Google 소셜 로그인 Google API 클라이언트 라이브러리 + GoogleIdTokenVerifier 사용하는 방법 Rest API 서버에서 OAuth2.0을 사용하여 소셜 로그인을 구현해야 했습니다. 프론트는 리액트를 사용했기에 SPA방식을 고려해야 했습니다. 보통 아래와 같은 흐름으로 구현이 됩니다. 그림상으로는 1~3번 까지는 SPA에서 처리한다음 4번에서 code와 redirect_url을 반환합니다. 현재 진행하는 프로젝트에서는 5번의 access_token과 id_token값까지 프론트에서 받은 다음, access_token을 백엔드 서버에 제공하여 소셜 정보를 받는 과정으로 변경하였습니다. 구글 소셜 로그인 API를 구현하는 방식은 아래 블로그에 잘 설명되어 있습니다. (accessToken 값을 제공받는 과정까지 있습니다.) antdev.tistory.com/68 [Google Login API] Goo.. Tech/Spring 2021. 3. 15. Spring Boot Validation 순서 정하기 & 테스트 코드 프론트에서 유효성 검사를 수행하지만, 백단에서도 유효성 검사를 수행해야 안전한 애플리케이션을 만들 수 있습니다. Spring Boot의 Validation은 가장 많이 쓰이는 유효성 검사 라이브러리 입니다. 적용하는 방법은 구글링하면 수많은 포스팅이 존재하니 생략하고 바로 이슈 및 해결을 설명드리겠습니다. public class UrlDto { public static class Request{ @Data @Builder @NoArgsConstructor @AllArgsConstructor public static class Save{ @NotBlank(message = "Link 필드는 필수입니다.") @Pattern(regexp="^((http(s?))\\:\\/\\/)([0-9a-zA-Z\\-]+\.. Tech/Spring 2021. 3. 15. SpringBoot에서 HttpOnly 쿠키방식을 이용한 refreshToken 발급 jwt의 access_token과 refresh_token를 구현하는 과정에서 프로젝트 프론트 팀원분이 refresh_token은 쿠키에 담아서 전송해달라는 요청이 들어왔다. 과정은 대략 아래와 같다. 전송방식은 Http Only 방식으로 쿠키에 담아 전송하였다. httpOnly란 Set-Cookie HTTP reponse 헤더에 포함되는 flagf이다. cookie를 생성할 때 HttpOnly를 사용하는 것은 브라우저가 HttpOnly를 지원할 경우 쿠키는 클라이언트 측 스크립트에 접근할 수 없다. 악성 스크립트(XSS 공격)에 의한 위험을 완화시켜준다. 즉, http only 쿠키 방식으로 저장된 정보는 Javscript의 Document.cookieAPI로 접근이 불가능하다. 따라서 XSS 취약점 .. Tech/Spring 2021. 2. 27. 이전 1 2 다음