전체 글
-
[vue] vee-validation yup 자바스크립트 validation 체크프론트엔드/Vuejs 2021. 9. 15. 18:05
npm install -S yup 기본사용법 import * as yup from 'yup'; let schema = yup.object().shape({ name: yup.string().required(), age: yup.number().required().positive().integer(), email: yup.string().email(), website: yup.string().url(), createdOn: yup.date().default(function () { return new Date(); }), }); // check validity schema .isValid({ name: 'jimmy', age: 24, }) .then(function (valid) { valid; // =>..
-
[spring boot] 스프링 부트 2.1 변경 내역Spring/spring boot 및 기타 2021. 8. 31. 23:39
1. 자바 11 지원 2. 스프링 데이터 JPA, lazy 모드 지원 3. 의존성이 많이 변경됨. 스프링 프레임워크 5.0 -> 스프링 프레임워크 버전 5.1 로거 설정 개선 spring-jcl 컴포넌트 스캐닝 성능 개선이 가능한 “컴포넌트 인덱스" 기능 제공 -> https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-scanning-index 함수형 프로그래밍 지원 - > https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux-fn 코틀린 지원 리액티브 프로그래밍 모델 지원 -> https://d..
-
[SPRING]스프링 어노테이션 정리Spring/Annotation 2021. 8. 24. 23:46
@Configuration @Configuration: 이 어노테이션을 단 클래스는 빈 설정을 담당하는 클래스가 된다. 이 클래스 안에서 @Bean 어노테이션이 동봉된 메소드를 선언하면, 그 메소드를 통해 스프링 빈을 정의하고 생명주기를 설정하게 된다. 자바 기반의 config가 싫다면 XML 쓰면 된다. @Configuration을 클래스에 적용하고 @Bean을 해당 Class의 method에 적용하면 @Autowired로 Bean을 부를 수 있다. @ComponentScan: @Configuration 어노테이션과 함께 쓰면, 이 클래스는 자바 빈 설정 클래스이며, 이 @ComponentScan 어노테이션에서 제공하는 package 속성을 통해 스프링 빈 범위를 정의할 수 있다. 복수개를 지정하고 싶..
-
[spring] Mybatis batch upsert 하는 방법(mysql)Spring/spring boot 및 기타 2021. 8. 11. 18:13
spring 에서 mybatis 로 bulk upsert 를 해줘야 할때 아래와 같이 작업을 했다. jpa 를 사용하면 saveall 메소드로 bulk upsert 가 가능했는데, mybatis 에서는 메소드를 직접 만들다 보니 그런게 없어서, 직접 만들어줘야 한다. 일반적으로는 pk 로 데이터 조회 후 없으면 insert 있으면 Update 를 해줘야 하나 매번 select 를 하기 db 커넥션도 아깝고 코드가 번거롭다. 하지만 mysql 에는 ON DUPLICATE KEY UPDATE 기능 이 있어 이미 데이터가 있다면 update 를 할 수 있다. 해당 방식은 INSERT를 하다가 PK값이 존재하면 UPDATE를 한다는 조건이 있는데 이 조건을 만족하기 위해 테이블에 무조건 PK값이 지정이 되어있어..
-
[Spring] multi datasource 동적으로 사용 - AbstractRoutingDataSourceSpring/spring boot 및 기타 2021. 8. 3. 01:19
사용이유 datasource 커넥션을 로직이나 상황별로 나눠야 하는 상황이 올 수 도 있고, 어플리케이션단에서 샤딩을 구현해야 할 수 도 있고, read 커넥션 및 write 커넥션의 datasource 를 나눠야 하는 경우가 있다. 애초에 다른 datasoure 파일을 만들어도 되지만, 동적으로 쿼리 요청시마다 datasource 를 변경해야 할 때 AbstractRoutingDataSource 를 사용하면 된다. AbstractRoutingDataSource란? spring-jdbc 모듈에 포함되어 있는 클래스로, 여러 DataSource를 등록하고 특정 상황에 맞게 원하는 DataSource를 사용할 수 있도록 추상화한 클래스이다. 구현방식 AbstractRoutingDataSource는 이름 기반..
-
[Java CompletableFuture]CompletableFuture 로 List 를 쓰레드 병렬처리 구현하기Java/Java Thread 2021. 7. 9. 14:37
CompletableFuture 하나만 있으면 비동기 처리 및 여러 병렬처리를 원하는 대로 할 수 가 있다. 여기서 코드 구현하려는 내용은 list 데이터가 있고, 각 list 의 item 이 http 커넥션을 통해 데이터를 가져오는 등 순차적으로 수행하기에는 시간소요가 오래걸랄때 쓰레드를 이용해 시간을 줄여보고자 한다. List list = itemRepository.findAll(); ExecutorService executorService = Executors.newFixedThreadPool(10); log.info(list.size() + "개"); List resultList = list.stream().map( item -> CompletableFuture.supplyAsync(() -> {..
-
[Elasticsearch] 엘라스틱서치 bool query 사용DB/Elasticsearch 2021. 6. 29. 18:33
query_string 쿼리는 여러 조건을 조합하기에는 용이한 문법이지만 옵션이 한정되어 있다. 여러 쿼리를 조합하기 위해서는 상위에 bool 쿼리를 사용하고 그 안에 다른 쿼리들을 넣는 식으로 사용 가능하다. bool 쿼리는 4개의 인자를 가지고 있고, 그 인자 안에 다른 쿼리들을 배열로 넣는 방식으로 동작한다. must : 쿼리가 참인 도큐먼트들을 검색 must_not : 쿼리가 거짓인 도큐먼트들을 검색 should : 검색 결과 중 이 쿼리에 해당하는 도큐먼트의 점수를 높인다 filter : 쿼리가 참인 도큐먼트를 검색하지만 스코어를 계산하지 않는다. must 보다 검색 속도가 빠르고 캐싱이 가능. GET /_search { "query": { "bool": { "must": [ { }, … ], ..
-
[vue] vuex binding helper - vue store 사용하기프론트엔드/Vuejs 2021. 6. 25. 15:23
vue 에서 vuex 를 사용하여 store 를 만들면, getters 의 경우 this.$store.getters.[getter이름] 로 사용가능 actions 의 경우 this.$store.dispatch(‘[action이름]’, data) 과 같이 사용할 수 있다. 또는 직접 state 에 바로 접근해서 this.$store.state.book.message 로도 사용가능은 하다. helper 없이 기본적으로 사용 {{getMsg}} Click store/index.js store 를 하나만으로는 사용하기 어려우므로 기능별 또는 페이지별로 분리해야한다. 기능/페이지별로 store를 분리하고, 하나의 store에는 state, mutations, actions, getters를 포함해서 관리하는게 편..