본문 바로가기
반응형

분류 전체보기386

[spring] 테스트 중 Unable to initialize 'javax.el.ExpressionFactory' 해결하기 - validator 2.0.0(JSR-380) 적용 레거시 프로그램에 validator를 적용하기로 했다. validator는 총 3가지 버전이 있는데 다음과 같다 Bean Validation 1.0(JSR-303) Bean Validation 1.1(JSR-349) Bean Validation 2.0(JSR-380) 그래서 추가하기 위해서 다음의 패키지를 추가한다 javax.validation validation-api 2.0.1.Final org.hibernate hibernate-validator 6.0.17.Final 그리고 servlet.xml 에 bean을 등록했다 테스트를 위해 Controller에 Post API를 하나 생성한다. @RestController public class TestValidatorController { @PostMa.. 2020. 3. 17.
[react] 다국어 처리(react-i18next) 적용하기 사용 패키지. bootstrap 은 디자인을 깔끔하게 보이게 하기위해 추가 npm install i18next --save npm install react-i18next --save npm install react-bootstrap --save 프로젝트는 다음과 같이 구성했다. i18n.js 파일 생성 및 옵션설정 import i18n from "i18next" import {initReactI18next} from "react-i18next"; import translationEn from './translation.en' import translationKo from './translation.ko' const resource = { en: { translation: translationEn }, k.. 2020. 3. 14.
[springboot, oauth2] 라인(LINE) 소셜 로그인 연동(jwt, jwkSetUri) 소셜로그인이 필요해 Spring 에서 제공하는 oauth2 를 사용했다. 이 글은 그 과정에서 겪은 것들을 기록하는 것이다. ​ 여기서는 라인로그인 기능을 이용하는 것이며 JWT를 이용해 토큰을 던져준다. 사용되는 알고리즘은 HS256인데 이 부분을 가장 애먹었다.(Spring oauth2 를 사용하면 기본 알고리즘은 RS256 이다) ​ 우선 Line Developers 사이트에 방문하여 Products 를 생성한다. 생성한 후엔 Web App을 켜주고 콜백을 설정했다. 이제 Spring을 설정한다. SpringBoot 버전은 2.2.5 를 사용했고 빌드 툴은 gradle을, 그리고 의존성을 다음과 같이 추가했다. dependencies { implementation 'org.springframewor.. 2020. 3. 9.
[spring, axios] Content-Type 을 json 또는 application/x-www-form-urlencoded 로 전송 테스트 제목: [spring, axios] Content-Type 을 json 또는 application/x-www-form-urlencoded 로 전송 테스트 서버와의 통신 시 유형을 정하는 경우가 있는데, 상황에 따라 에러가 각기 나와 이참에 정리해두려 한다. SpringBoot 2가지 유형을 받을 컨트롤러를 생성한다 TestController.java @RestController public class TestController { // application/json 으로 받을 때 @PostMapping(value = "/test/json") public String testIndex(@RequestBody Map map) { System.out.println("map = " + map); return ".. 2020. 3. 4.
[dbms] where에 In 절 사용 시 알아두면 좋은 것 실무에서 in 절을 자주사용한다. 예를 들면 다음과 같은 경우다 select * from test_a a where id in (1,2,3) 위 쿼리가 실행되면 id가 1,2,3인 row를 조회해서 가져온다. in절은 row를 하나씩 점검하며 값이 존재하는지를 확인한다. 프로그램으로 보면 for 문을 돌리는 느낌이랄까. ​ 그런데 In 절은 사실상 다음 같은 쿼리와 같은 결과를 낸다. select * from test_a where id = 1 union all select * from test_a where id = 2 union all select * from test_a where id = 3 여기서 인덱스 여부가 중요하다. 인덱스가 설정되어 있는 칼럼이라면 위와 같은 접근이 훨씬 좋은 퍼포먼스를 .. 2020. 2. 27.
[mysql] 조회, Index냐 Full Scan이냐 데이터가 제법 쌓여있는 테이블이 있는데, 거기를 조회할때마다 가급적이면 인덱스를 쓰겠금 유도한다. 그런데 최근 SQLP 공부하면서 인덱스를 무조건 태우는 것이 좋지 않암을 많이 깨닫는다. 그럼 인덱스를 사용할때와 아닐때의 차이는 어느 기준으로 분류해야할까를 찾아보고 정리해보앗다. 진행은 MySQL로 했으며 해당테이블은 약 2억개의 데이터가 탑재되어 있는 거래정보 테이블이며, 고객테이블과 조인하는 고정이었다. 특정 기간을 조회하는 일이 빈번해서 생성일자를 기반한 인덱스가 생성되어있는 상태다. 특정기간 데이터를 조회하려는 것이었고, 조회조건에 생성일자 범위를 넣어 조회했다. 그런데 다음과 같이 인덱스가 아닌 Full scan(ALL)이 되고 있었다. 실행결과는 약 15분정도 소요됐다. 이번에는 힌트를 이용해.. 2020. 2. 21.
반응형