반응형

java

    문자열 연결 시 실행되는 내부 로직

    문자열 생성 String 문자열을 연결할 때 아래와 같이 객체로써 선언해서 사용할 경우 불필요한 객체가 만들어진다는걸 우리는 알고있다. String temp = new String("wedul"); 그래서 String을 아래와 같이 선언해서 String constants Pool에 저장해서 불변객체를 생성해서 동일한 문자열에 대해서 새로 생성하지 않고 가져다 사용할 수 있도록 할수있다. (effective java. 불필요한 객체를 만들지 마라.) String temp = "wedul" 문자열 연결 문자열 생성 시 우리는 + 로 문자열을 연결할 경우 새로운 문자열 객체가 계속 생성되기 때문에 이를 해결하기 위해서 StringBuilder를 통해서 모든 append가 끝나고 build를 통해 문자열 객체를..

    Java 이모티콘 찾기, 제거 등등

    이번 프로젝트를 진행하면서 이모티콘을 제거하거나 개수를 세거나 이모티콘을 포함한 전체 텍스트 문자를 세거나하는 작업이 있었다. 처음에는 단순하게 EmojiParser를 사용해서 이모티콘을 판단하여 개수도 찾고 이모티콘을 문장에서 제거하려고 했다. 하지만 테스트에서 사용했던 일부 이모지에서는 큰 문제가 없었으나 새롭게 생성되는 이모지를 걸러내지 못하는 이슈가 있었다. 확인해보니 해당 라이브러리에 마지막 릴리즈 날짜는 19년도였다. 이모티콘은 매년 많게는 수천개가 생성되는것에 비해 해당 라이브러리의 마지막 릴리즈 노트 날짜는 너무 처량했다. 해당 라이브러리를 사용하지 못하게 되었고 다른 방법이 없는지 고민하다가 regex를 사용하는 방법 등 여러가지를 사용했었다. 1. 화이트리스트 regex 사용하여 이모티..

    Bulk Index 진행 시 search api 느려지는 현상 해결 방법 리서치

    현재 회사에서 하고있는 프로젝트에 경우 Elasticsearch를 사용해서 데이터를 제공하고 있다. 서비스 특성상 초당 받는 데이터 업데이트 요청이 많고 real time engine이 아닌 elasticsearch에 거의 리얼타임 수준의 데이터 변경을 보여줘야한다. 그러다보니 들어오는 요청을 별도의 buffer를 많이 주어 업데이트 할 수 없기 때문에 들어오는 요청을 document id 기준으로 묶어서 bulk 업데이트 될 수있도록 기능을 개발했었다. 회사 블로그에 관련된 내용을 썼었는데 참고 https://techblog.woowahan.com/2718/ 검색을 위한 데이터 다루기 | 우아한형제들 기술블로그 {{item.name}} 안녕하세요. 우아한형제들 검색개발팀 정철입니다. 배달의민족 검색시스..

    Not Synchronized SimpleDateFormat

    SimpleDateFormat을 사용해서 Date를 String으로 format하거나 String을 Date로 파싱할 때 사용한다. public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); @SneakyThrows public static void main(String args[]) { Date parse = sdf.parse("2021-07-24"); String format = sdf.format(new Date()); System.out.println(parse); System.out.println(format); } 출력 결과 Sun Jan 24 00:07:00 KST 2021 2021-14-18 특히 계속 사용되..

    [번역] 2-2. Domain 모델 (Enum, UUID, Date, Attribute, Generated Properties)

    2.3.7 Enums 매핑 Hibernate는 기본값 유형으로써 다양한 방법으로 Java Enum의 매핑을 지원한다. @Enumrated 기본적인 JPAdml enums의 매핑 방법은 @Enumrated 또는 @MapKeyEnumrated 애노테이션을 통해 javax.persistence.EnumType에 표시된 두 가지 전략 중 하나에 따라 enum 값이 저장된다는 원칙에 따라 동작한다. ORDINAL - java.lang.Enum#ordinal에 기재된대로 Enum 클래스 내에서 Enum값의 순서에 따라 저장된다 STRING - java.lang.Enum#name 방식에 기재에 따라 Enum값의 이름에 따라서 저장된다. 아래 예시로 PhoneType이라는 Enum이 있다고 가정해보자. public e..

    [토이프로젝트] TimeLine 2.0 개선 오픈

    설계, 운영 모든면에서 실패토이프로젝트 TimeLine을 만들어서 오픈했었다. 개발의 목표는 단순하게 개발 블로그, 채용등에 대해 한번에 볼 수 있는 개발자를 위한 통합 페이지를 만드는 것이었다.https://wedul.site/626[토이 프로젝트 소개] 개발자 채용, 기술 블로그 정보를 모아주는 TimeLine혼자 공부를 집에서 어떻게 하면 효율적일까 고민을 많이했다. 집에서 주구장창 책을 읽고 해보면 스킬이 늘까? 그렇게 해봤지만 그게 정답은 아니었다. 남들에게는 모르겠으나 나에게는 아니었다. 회사에서 하는..wedul.site하지만 사용하는데 생각보다 불편한 부분이 많았고 설계부분에도 현재 시스템을 고려하지 않고 만들었던게 운영에 걸림돌이 되어버렸다. 그래서 서비스를 잠정적 중단하고 2.0을 만들..

    RestHighLevelClient를 사용하여 search after 기능 구현하기

    https://wedul.site/541에서 search after 기능을 사용해서 검색을 하는 이유를 알아봤었다. 그럼 spring boot에서 RestHighLevelClient를 이용해서 search after를 구현을 해보자. 1. Mapping 우선 index가 필요한데 간단하게 상품명과 지역 가격정보들을 가지고 있는 wedul_product 인덱스를 만들어 사용한다. { "settings": { "index": { "analysis": { "tokenizer": { "nori_user_dict": { "type": "nori_tokenizer", "decompound_mode": "mixed", "user_dictionary": "analysis/userdict_ko.txt" } }, "ana..

    Java 메모리 구조 및 GC 알고리즘 정리

    자바 메모리 구조는 1.8 이후로 일부분 바뀌었다. 이 부분에 대한 정리를 다시 하고 싶었고 GC 알고리즘에 대한 종류와 상세 내용을 정리하고 싶었다. 그럼 이 두 가지 사항에 대해 가볍게 정리해보자. Java 메모리 구조 Method Area 프로그램이 실행되는 도중에 아직 사용되지 않은 클래스들의 코드는 new를 통해 클래스의 인스턴스가 생성되면 JVM Method Area에 인스턴스 변수, 메스드 코드, 클래스 변수등을 저장한다. 해당영역은 모든 쓰레드 사이에서 공유되고 static 키워드로 생성된 변수 또한 저장을 Runtime Constant Pool 영역에 저장한다. 실 데이터를 저장하는 것이 아니라 레퍼런스만 저장하며 실제 데이터는 Heap 영역에 저장한다. JVM Language stack..

    백준 4673번 셀프 넘버

    1 ~ 10000까지의 숫자중에 셀프 넘버가 아닌 데이터를 noSelfNumber에 집어넣고 loop를 순회하면서 selfNumber 여부를 체크하면 된다. 간단한 문제이다. https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다..

    DDD. 애거리루트 정리

    애그리거트는 관련된 객체를 하나의 군으로 묶어주는 것 으로 상위수준에서 모델을 조망하는 방법 중 하나이다. 애그리거트는 비슷한 속성을 가진 객체를 묶어놓은 것을 의미한다. 예를 들어 주문 시스템에 주문 관련 애그리거트는 Order, Receiver, OrderLine.. 등이 있고 회원정보에는 Member, MemberInfo등으로 나눌 수 있다. 각 애그리거트에 연관된 객체를 담고 있으며 유사하고 동일한 라이프 사이클을 보유하고 있다. 애거리거트 루트 애그리거트에서 가장 핵심이 되는 주체 즉, 애그리거트 전체를 관리하고 책임지는 주체를 애그리거트의 루트 엔티티라고 한다. 애그리거트내에 존재하는 모든 엔티티는 루트 엔티티와 직간접적으로 연결되어있다. 애거리거트 루트의 핵심 역할은 애거리거트의 일관성을 유..

반응형