-
프로그래머스 - 주식가격개발/Algorithm 2021. 3. 9. 12:03
programmers.co.kr/learn/courses/30/lessons/42584 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr @Test void stockPrice(){ int[] prices = new int[] { 2, 1, 2, 3, 1, 2, 4, 3 }; int[] result = solution(prices); System.out.println(Arrays.toString(result)); } public int[] solution(int[] pr..
-
두 테이블 데이터 조합시 findAllById vs findById 여러번카테고리 없음 2021. 3. 8. 17:35
연관관계는 없지만 두 개체의 값을 조합해야 할 때가 있다. 그리고 리스트에 여러개의 데이터라고 한다면 상식적으로 전체를 불러온 후 처리하는게 빠르다는 걸 알 수 있다. 하지만 더 빠를거리고 생각만 하고 있지, 얼마나 더 빠른지에 대해서는 감을 잡지 못하고 있었다. 그래서 이번에 비슷한 작업을 할 기회가 생겨 비교해 보았다. A의 값을 조회한 후 함께 조합할 값을 B에서 찾아 조합하여 리턴해야하는 경우 방법 1. A를 조회한 후 B에서 검색을 위해 매핑 값 리스트를 만들어 findAllById로 검색, B 결과를 HashMap 와같이 하여 A기준으로 조합할 때, 해시맵에서 B값을 빼와 조합한다. 결과. 100여개의 데이터 : 0.1~0.2 50000여개의 데이터 : 평균 4초 방법 2. A를 조회한 후 B..
-
objectMapper로 map to object 변환시 timeformat 이슈 문제카테고리 없음 2021. 2. 25. 19:21
java에서 obejctMapper를 사용하여 객체로 변환시 타임 타입은 objectMapper에 적용된 해당 deserializer를 사용하여 변환한다. 때문에 타임 포맷이 다른경우 해당 포멧을 serializer나 deserializer에 설정하여 타임 모듈에 등록하여 양 타입 변환에 사용한다. 최근 생긴 이mysql db 데이터를 불러왔을때 타임 타입이 epoche time 값으로 넘어오는 이슈가 있었다. 이런 경우에 와 같이 Deserializer를 생성하고 import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.Deseri..
-
jpa또는 querydsl로 union 쿼리 사용개발/Spring 2021. 2. 25. 18:55
보통 jpa로 불러오다가 좀 더 세밀한 쿼리가 필요하면 querydsl을 사용한다. 이번에 기존 테이블과, 이 테이블의 데이터를 백업한 두 테이블 데이터를 함께 불러와야하는 일이 생겼다. union 쿼리를 사용하면 되는데 jpa에서도, querydsl에서도 union은 지원하지 않는다. (아마 제대로 설계했다면 유니온이 왜 필요해? 라고 되묻는 것 같다.) 그래서 native query로 직접 입력 할 수밖에 없었다. 그래서 모습은 @Query(nativeQuery = true, value = "select * from (" + "select a.id, a.field1, a.field2 from test_tableA a where a.status =?1 union " + "select b.id, b.fi..
-
RequestBody의 데이트 타입 정해진 format으로 받기개발/Spring 2021. 2. 24. 16:51
Spring Restful 컨트롤러에서 클라이언트로부터 json타입의 객체를 받는 경우 Jackson 메세지 컨버터 클래스에서 객체 변환 작업이 일어난다. 나 같은 경우 커스텀된 타임 포맷 모듈을 오브젝트 매퍼로 생성하고, 이를 @Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(customObjectMapper()); return converter; } 처럼 빈으로 생성하여 사용하고있다. (..
-
aws elasticsearch snapshot 으로 데이터 백업 with java개발/Elasticsearch 2021. 2. 9. 19:00
지금 서비스하고 있는 aws elasitcsearch 버전이 6.8인데 7.7에서 힙 메모리 사용이 확 개선되어, 가장 최신 버전인 7.9 버전으로 마이그레이션 하려고 한다. 1. s3 bucket 생성 -snapshot 저장할 s3 bucket 생성한다. 2. IAM - 역할 생성 iam - 역할 - 역할 만들기 ec2 선택해서 다음 - 다음 - 다음 역할이름 입력하여 역할 만들기 완료 3. 역할에 신뢰관계 설정 생성한 역할에 신뢰 관계 - 신뢰 관계 편집 ec2 대신 es로 변경 { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Ac..
-
엘레강트 오브젝트 chapter 1개발/책 2021. 2. 6. 23:36
1.1 -er로 끝나는 이름을 사용하지 말자. -er로 끝나는 이름을 가진 클래스명은 잘못 지어졌다고한다. 그렇다면 흔히 쓰는 -controller는 어떻게 지어야할까. 아니면 구조가 프로젝트 구조가 어떻게 바껴야 할까? cotr의 주된 작업은 제공된 인자를 사용해서 캡슐화하고 있는 프로퍼티를 초기화하는 일. cotr = constructor 초기화 로직을 단 하나의 ctor에만 위치시키고 주 cotr이라고 칭하면, 다른 부 cotr이 주 cotr을 호출하도록 설계 (util성 기능을 담당하는 class 이름은 어떻게 지어야 할까?) 아래는 하나의 주 cotr(생성자) 다수의 부 cotr(one primary, many secondary)' 원칙을 따르지 않은 코드제 예제 public class Cash..
-
elasticsearch term match 비교개발/Elasticsearch 2021. 2. 4. 15:39
elasticsearch 검색을 할 때 쓰이는 term 또는 match 쿼리를 구분하여 사용하고자 정리해본다. 검색에 대해 찾다보면 자주 보이는 것이 쿼리와 필터 비교인다. 현재 사용중인 aws elasticsearch 6.8 에선 match, term 모두 query 안에 있으나, 이전 예제들을 보면 match는 query에, term은 filter에 속한다. 특징을 보면 query : 캐싱되지 않으며, 스코어링 연산을 통해 적합하고 유사성 높은 결과를 찾는다. fitler : 검색어에 대한 분석을 하지 않고 온전히 검색어와 일치하는 문서를 검색하고, 캐싱되어 속도면에 유리한 면이 있다. (RDBMS의 where 절이라 생각 할 수 있다) 수많은 데이터 중에 이름으로 검색한다 할때, 각 특징의 장점으로..