Java Stack/Spring
Hystrix with Spring ( Circuit Breaker ) 를 사용할 때 주의해야 할 점.
Hystrix with Spring ( Circuit Breaker ) 를 사용할 때 주의해야 할 점.
2019.07.30기본 Hystrix 라이브러리는 직접 HystrixCommand를 상속받아 정의해서 써야 하므로 약간 번거롭다.Spring을 쓰고 있다면 @HystrixCommand 애너테이션으로 이런 번거로운 설정을 대신하는 라이브러리를 도입할 수 있다.아래 dependency를 추가하도록 하자. ```xml org.springframework.cloud spring-cloud-starter-netflix-hystrix 2.1.2.RELEASE````` spring-cloud-starter-hystrix``는 deprecated 되었기 때문에 `` spring-cloud-starter-netflix-hystrix``를 사용해야 한다는 점과, SpringBoot 2.x 대를 사용하고 있다면 hystrix 버전도 2.x...
[Spring] context.getBean() 사용하기
[Spring] context.getBean() 사용하기
2019.07.29Service 구현체가 많은 경우, 각각을 다 DI 하면 확장성이 떨어져 이를 Map에 담고 Interface로 꺼내 호출하는 방식을 자주 사용하게 된다. 다음과 같은 방법을 사용하면 Service Bean을 직접 불러올 수 있어 굳이 Map에 담지 않아도 사용 가능하다. 새로운 Service가 추가될 때 컨트롤러 쪽을 전혀 수정하지 않아도 되는 방식. (Map에 담는 방식은 생성자에서 map.put 해서 담아주어야 하니까...) ```java private final ApplicationContext context; // + DI ``` ```java PointChangeService pointChangeService = context.getBean(partnerCode + "PointChangeSer..
[Spring] DB 관련 : H2 설정
[Spring] DB 관련 : H2 설정
2019.07.23build.gradle에 다음을 추가. ``` runtimeOnly 'com.h2database:h2' // runtimeOnly 'com.h2database:h2:1.4.193' ``` 반드시 버전을 명시해줄 것. 버전 명시하지 않을 시 최신 버전이 설치되는데, 콘솔에서 connect해보면 자동으로 db 파일을 생성할 수 없어서 에러가 발생한다. :mem:을 써서 인메모리에 하든, :file:을 써서 파일로 저장하든 관계없이 에러가 발생함. 이는 어떤 취약점 때문에 자동으로 파일 생성하는걸 막아둬서 그렇다고 함. IFEXISTS 플래그를 주면 된다고 나와있는데 줘도 안됨. Database "mem:testdb" not found, and IFEXISTS=true, so we cant auto-creat..
RestTemplate 사용 시 ResponseType으로 generic 타입 받기 (ParameterizedTypeReference)
RestTemplate 사용 시 ResponseType으로 generic 타입 받기 (ParameterizedTypeReference)
2019.07.11Response를 받을 때 Generic 타입으로 매핑하여 받고 싶을 때가 있다. ```java DefaultResponseWrapper userInfoResponseWrapper = restTemplate.postForObject( userInfoUrl, new UserInfoRequest("MTA1", "HH_SERVICE", encryptedCi), DefaultResponseWrapper.class ); ``` 그러나 `` postForObject()`` 같은 함수는 generic이 들어간 타입을 응답으로 받을 수 없다. 위처럼 작성하면 오류가 발생한다. ParameterizedTypeReference를 사용하면 generic 타입을 응답으로 받을 수 있다. (generic 타입으로 매핑할 수 있..
[Spring] annotation : bean constraints, validation
[Spring] annotation : bean constraints, validation
2019.07.11beanvalidation.org/2.0/spec/#builtinconstraints https://www.baeldung.com/javax-validation @Size, @Past, @Min(1) @Pattern 등 애너테이션이 어떤 제약조건을 가지고 있는지 확인하려면 그냥 애너테이션 소스 확인해보면 된다. 참고로 `` @Email`` 애너테이션은 길이 제한도 겸하고 있다. `` {64}@{255}`` DB에 저장할 때도 VARCHAR2(320)으로 하면 깔끔하다. controller에서 data class 받으면서 한 번에 조건 체크 ```java @AssertTrue(message = "허용된 리스트 목록에 없는 코드") private boolean isInAllowList() { return !..
[Spring] annotation : lombok, builder
[Spring] annotation : lombok, builder
2019.07.10@Data https://projectlombok.org/features/Data ``kt @Data = RequiredArgsConstructor + ToString + EqualsAndHashCode + Getter + Setter`` ``kt lombok.noArgsConstructor.extraPrivate=true`` 이면 private NoArgsConstructor 까지 붙는다. (1.16.22에서는 기본으로 활성화) 단, 필드 final 아닐 때 여기서 `` RequiredArgsConstructor``는 다른 Constructor 애너테이션이나 명시적으로 선언된 Constructor가 없을 때만 붙는다. callSuper를 설정해야 하는 경우 해당 애너테이션과 Data를 함께 써도 된다...
Spring boot security 로그인 처리
Spring boot security 로그인 처리
2019.06.04spring security에서 "사용자"를 나타내는 인터페이스는 `` UserDetails``가 있음. 기본적으로 이를 구현한 `` User``라는 클래스가 제공되고 별다른 설정 없이 inmemory에 계정을 등록하거나 하는 테스트 용도의 코드에서는 자동으로 스프링에서 `` User`` 클래스를 사용하는 듯. 아무튼 요구사항에 따라 email이라던지.. id라던지 추가적인 정보를 저장해야 할 것 이므로 `` UserDetails``를 implements한 모델 클래스(Account)로 정의하거나, `` User`` 클래스를 extends한 클래스를 정의해도 된다. `` User`` 클래스를 확장하는 경우 중복 세션 방지 등의 기능을 자동으로 처리해줘서 편리한 부분이 있다. ```java @ToStrin..
[Spring] DB 관련 : JdbcTemplate
[Spring] DB 관련 : JdbcTemplate
2019.05.28JdbcTemplate [Spring JDBC] Spring JDBC를 이용한 데이터 접근 방식 [Spring JDBC] JdbcTemplate의 기본 사용법 JdbcTemplate query~ 다양한 타입 예제 Spring 기준이라 살짝 더 manual한데, SpringBoot에서는 application.properties에 설정해둔 datasource 설정을 바탕으로 JdbcTemplate을 이미 만들어두기 때문에 그냥 JdbcTemplate을 바로 DI받아서 사용하면 된다. ```java // query 결과가 없는 경우 EmptyResultDataAccessException가 발생한다. DAO 내에서 try-catch해주자. Product product = jdbcTemplate.queryForO..
Spring Framework의 IoC 컨테이너 / 빈(Bean) / DI 방식 정리
Spring Framework의 IoC 컨테이너 / 빈(Bean) / DI 방식 정리
2019.05.13spring core의 공식 docs. 웬만큼 궁금한건 여기 다 나와 있다. https://docs.spring.io/spring/docs/5.1.x/spring-framework-reference/core.html Core Technologies Letting qualifier values select against target bean names, within the type-matching candidates, does not require a @Qualifier annotation at the injection point. If there is no other resolution indicator (such as a qualifier or a primary marker), for a non- do..