Spring 12

@EnableScheduling 설정하지 않았는데 Schedule 동작 시

@EnableScheduling을 설정하지 않았는데도 Schedule이 동작하고 있을 때 한번 확인해보세요. 전체적으로 라이브러리를 훑어봤는데 Redis Config부분에서 발견되었습니다. spring-session-data-redis 사용하고, Redis 활성화 시에 RedisHttpSessionConfiguration를 사용하게되는데 아래와 같이 @EnableScheduling이 적용되어 있습니다. @Configuration @EnableScheduling public class RedisHttpSessionConfiguration extends SpringHttpSessionConfiguration implements EmbeddedValueResolverAware, ImportAware { pri..

Spring 2024.01.17

Querydsl Tech Talk 정리

사내에서 Querydsl에 대해 Tech Talk 진행할 기회가 생겨 준비한 내용을 기록합니다 Querydsl 타입에 안전한 방식으로 HQL 쿼리를 실행하기 위한 목적으로 만들어짐 타입에 안전하도록 도메인 모델을 변경하면 소프트웨어 개발에서 큰 이득을 얻게 됨 도메인 변경이 직접적으로 쿼리에 반영됨 쿼리 작성 과정에서 코드 자동완성 기능을 사용함으로써 쿼리를 더 빠르고 안전하게 만들 수 있게 됨 JPA, JDO, JDBC, Lucene, Hibernate Search, MongoDB, Collections 그리고 RDFBean을 지원 사용하기 도메인 타입 작성(ex: Customer) Querydsl에 의해 자동으로 QCustomer라는 쿼리타입 생성 (JPA의 경우) JPAQuery 인스턴스로 쿼리 작..

Spring 2021.08.10

Thymeleaf - 표준 표현식

${...} : Variable expressions - OGNL 표현식, 스프링환경에서는 Spring EL ${shop.product.name} *{...} : Selection expressions - 변수 표현식과 동일하지만, 전체 컨텍스트 맵이 아닌 이전에 선택한 객체가 기준이됨 *{product.name} ... ... ... #{...} : Message (i18n) expressions - .properties 같은 파일에서 값을 읽어 표현 할 수 있다. Spring 환경에서는 MessageSource과 통합됨 (docs.spring.io/spring-framework/docs/4.3.30.RELEASE/spring-framework-reference/htmlsingle/#context-fu..

Spring 2021.01.27

SpringBoot Mysql Datasource 세팅

SpringBoot에서 Mysql Datasource 세팅하기. 필자는 JPA, Gradle로 진행했다.(Mybatis같은 환경도 아래 세팅으로 사용가능 할 듯) Gradle.build dependencies { ... implementation ("mysql:mysql-connector-java") implementation "org.springframework.boot:spring-boot-starter-data-jpa" ... } JPA 사용시에만 JPA 의존을 추가하자 DatabaseConfig.java @Slf4j @EnableJpaAuditing @Configuration public class DatabaseConfig { @Bean public PasswordEncoder passwordE..

Spring 2020.11.16

Spring Cloud Gateway - API Gateway 맛보기

1. 앞서 알고가기 Spring Cloud Gateway 로 API Gateway 구축에 앞서 필요한 개념을 먼저 간단하게 정리해봤다. 1-1. API Gateway 란? 인증 / 모니터링 / 오케스트레이션 등과 같은 기능을 포함한 향상된 Reverse Proxy다. Netflix zuul, Amazon API Gateway, Spring Cloud Gateway 같은 것들이 잘 알려진 Api Gateway 구현체들이다. 1-2. Spring Cloud Gateway (이하 SCG) 란? Spring Reactvie 생태계에 구현된 API Gateway이다. Gateway Handler Mapping으로 들어오는 요청들을 적절한 대상으로 라우팅하는 간단하고 효과적인 방법을 제공한다. 그리고 Spring ..

Spring 2020.10.19

Spring Security OAuth2 - Authorization endpoint

AuthorizationServerEndpointsConfigurer에서 PathMapping 메소드를 제공한다. 이 메서드는 두 개의 변수를 받는다. 기본 경로 (프레임워크가 제공) 커스텀 경로 ("/"로 시작) public AuthorizationServerEndpointsConfigurer pathMapping(String defaultPath, String customPath) { this.patternMap.put(defaultPath, customPath); return this; } 프레임워크가 제공하는 경로는 다음과 같다 Authorization Endpoint: /oauth/authorize Token Endpoint: /oauth/token Approval Endpoint: /oauth..

Spring 2020.10.07

Spring Jpa - Query DSL + Gradle 6 설정

최근 Spring boot + jpa 로 프로젝트 진행하다 jpa 인터페이스 네이밍 방식의 단점을 느끼고 Query DSL을 도입하면서 정리한 글 기본 제공 @Query와 인터페이스 메서드 네이밍 방식은 한계가 있고 가독성도 안좋음 // 쿼리가 길어질수록 더러워짐 @Query(value="UPDATE Work W SET W.workGroup = :workGroup WHERE W.workSeq = :workSeq", nativeQuery = false) // 네이밍이 길어질수록 더러워짐 Page findByWorkGroup_WorkGroupNmContainingAndWorkNmContaining(String workGroupNm, String workNm, Pageable pageable); 1. Grad..

Spring 2020.09.21

Spring Jpa - Paging api 처리하기

JPA를 이용해서 Paging API를 처리해보자. JpaRepository는 PagingAndSortingRepository를 상속받고 있으므로 CurdRepository보다 하위 클래스인 JpaRepository를 상속받아 구현하자. public interface WorkGroupRepository extends JpaRepository { Page findByWorkGroupNmContaining(String workGroupNm, Pageable pageable); } 예제 @RestController @RequestMapping("/workgroup") @RequiredArgsConstructor public class WorkGroupController { @GetMapping public P..

Spring 2020.09.18

Spring Data Jpa Auditing

Spring Data Jpa Auditing Audit: 회계 감사, 감사하다 테이블 설계시 항상 공통적으로 들어가는 생성일자, 수정일자 등의 컬럼에 대해 자동으로 값을 넣어주는 기능을 Spring-Data-Jpa에서 제공한다. @EnableJpaAuditing 활성화 @EnableJpaAuditing @Configuration public class DatabaseConfig { @Bean public DataSource dataSource() { ... @EnableJpaAuditing 어노테이션을 활성화 시켜줘야 한다. 위치는 Config 클래스나 Application.class와 같은 root 클래스에 추가한다. Entity 설정 @Entity @Table(name = "BOARD") @IdCla..

Spring 2020.07.29

ApplicationContext와 Singleton

스프링은 객체 컨테이너 스프링의 핵심 기능은 객체를 생성하고 초기화 하는 것이다. BeanFactory 인터페이스: 객체 생성과 검색에 대한 기능을 정의한다. ApplicationContext 인터페이스: 메시지, 프로필/환경 변수 등을 처리할 수 있는 기능을 추가로 정의한다. AnnotationConfigApplicationContext: ApplicationContext의 구현체, 자바 어노테이션을 이용하여 클래스로부터 객체 설정 정보를 가져온다. GenericXmlApplicationContext: ApplicationContext의 구현체,XML로부터 객체 설정 정보를 가져온다. GenericGroovyApplicationContext: ApplicationContext의 구현체,그루비 코드를 이..

Spring 2020.07.29