Spring ElasticSearch 첨부파일 조회 스프링에서 ElastiSearch 첨부파일 조회하는 방법입니다. 클라이언트로부터 검색할 키워드를 받아서 검색하는 selectFile 메소드입니다.(88 ~ 110라인) attachment.content 속성에 색인된 첨부파일 내용을 wildcard를 통해 첨부파일의 내용을 조회합니다.(92 ~ 93라인) wildcard는 RDBMS로 비유하면 LIKE 검색과 같은 것입니다. ElastiSearch 조회 결과의 실질적 데이터를 사용자에게 전달하기 위해 조회 결과를 파싱 하여 리턴합니다.(95 ~ 109라인) REST API의 GET 메소드 방식을 사용해서 첨부파일의 내용을 조회합니다. kibana 조회 화면과 postman으로 조회한 결과를 비교하면 동일한 데이터가 확인된 것을 확인할 수 있습니다... Spring ElasticSearch 첨부파일 색인 스프링에서 ElasticSearch에 첨부파일 색인하는 방법입니다. 위의 코드는 클라이언트로부터 받은 첨부파일을 색인하는 insertFile 메소드입니다.(112 ~ 128라인) 먼저 멀티파트 요청의 첨부파일을 saveFileToDisk 메소드를 통해 서버에 저장합니다.(130 ~ 147라인) saveFileToDisk 메소드는 저장한 첨부파일 리스트를 리턴합니다.(146라인) 첨부파일 리스트 개수가 2개 이상이면 bulkFileElastic 메소드를 호출하고 1개면 saveFileElastic 메소드를 호출합니다.(123 ~ 127라인) bulkFileElastic 메소드는 2개 이상의 첨부파일을 한 번에 색인하는 메소드입니다.(149 ~ 170라인) 이전에 제가 작성한 ElasticSearch b.. Java Pattern 정규표현식 자바에서 Pattern 클래스를 통해 정규표현식을 처리할 수 있습니다. 위의 테스트 코드를 보면 @CsvSource를 통해 전화번호 정규표현식을 테스트하고 있습니다. 첫번째 문자열은 테스트 문자열이고, 두번째 문자열은 기대치 문자열입니다. 전화번호 정규표현식을 생성합니다.(19라인) 메소드 체이닝을 통해 앞의 전화번호 정규표현식을 컴파일하여 Pattern 객체를 생성하고 주어진 문자열이 정규표현식에 맞는지 확인하는 Matcher 객체를 생성합니다. Matcher 객체를 통해 주어진 전화번호가 정규표현식에 맞는지 확인합니다.(22 ~ 31라인) 22라인의 전화번호 유효성 확인하는 코드를 "Pattern.matches(reg, testStr);"으로 간단하게 수정할 수 있습니다. 정규표현식에 맞으면 기대했던.. 숫자 카드 나누기 프로그래머스에서 숫자 카드 나누기 문제를 풀었습니다. https://school.programmers.co.kr/learn/courses/30/lessons/135807 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제에 대한 설명은 위의 링크에서 확인하시면 됩니다. 두 개의 배열의 각각 최대 공약수가 상대편 배열의 최대공약수가 되지 않는 것이 이 문제의 핵심입니다. 먼저 배열을 오름차순으로 정렬합니다.(35 ~ 36라인) 각 배열의 최대공약수를 조회합니다.(38 ~ 39라인, 50 ~ 58라인, 60 ~ 68라인) 최대공약수를 조회할 때 유클리드 알고리.. JUnit5 MethodSource junit에서 @ValueSource, @CsvSource를 사용해서 메소드 파라미터를 전달하여 테스트를 진행합니다. 하지만 복잡한 파라미터를 전달해야 하는 경우 @MethodSource를 사용하면 됩니다. 파라미터를 생성하는 makeParams 메소드를 static으로 선언합니다.(20 ~ 26라인) static으로 선언해야 테스트 메소드를 일관성 있게 실행할 수 있기 때문입니다. File 객체, List 객체, String 객체 3개의 파라미터를 Arguments에 담아 Stream으로 테스트 메소드에 전달합니다.(21 ~ 25라인) 앞에서 작성한 makeParams 메소드로부터 파라미터를 받는 테스트 메소드를 선언합니다.(28 ~ 48라인) @MethodSource 어노테이션을 통해 makePa.. 문자열 압축 프로그래머스에서 문자열 압축 문제를 풀었습니다. https://school.programmers.co.kr/learn/courses/30/lessons/60057 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제에 대한 설명은 위의 링크에서 확인하시면 됩니다. 문자열에서 같은 문자가 연속해서 반복되는 경우 압축하는 것이 이 문제의 목표입니다. 문자열을 자르는 단위가 문자열 절반을 넘어가면 반복되는지 확인할 수 없기 때문에 루프 범위를 절반으로 설정합니다.(20 ~ 49라인) 문자열 단위만큼 연속 반복되는지 조회합니다.(.. Java thread lock synchronized 자바 멀티 스레드 환경에서 동시에 접근하는 자원이 있는 경우 동기화 처리가 필요합니다. 예를 들어 은행 계좌 이체나 티켓 예매 로직 같은 경우 동기화가 적용되어야 합니다. 위의 Ticket.java의 reserveTicket 메소드는 Lock 객체를 통해 주어진 티켓 수만큼 예매하고 있습니다.(22 ~ 35라인) Lock 객체 lock 메소드와 unlock 메소드 사이에 있는 코드는 동기화 처리되어 있어서 남아있는 티켓 수가 0보다 큰 경우 예매가 가능하고 0보다 작으면 예매가 되지 않고 있습니다. lock.lock()은 잠금을 설정하고, lock.unlock()은 잠금을 해제하고 있습니다. finally 블럭에 lock.unlock() 한 이유는 예외 발생 여부와 상관없이 잠금을 해제하기 위해서입니다... JDK 11 FileReader Encoding JDK 11 버전부터 FileReader 생성자에 인코딩을 설정할 수 있습니다. 11 이하 버전에서 인코딩을 통해서 파일을 읽으려면 예를 들어 FileInputStream fis = new FileInputStream(fileName); InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8")); BufferedReader br = new BufferedReader(isr); 이런 식으로 InputStreamReader를 사용해야 하는데 그럴 필요 없이 FileReader로 쉽게 해결할 수 있어서 유용합니다. 인코딩이 포함된 FileReader 생성자로 파일을 읽으면 정상적으로 출력되는 것을 확인할 수 있습니다. 인코딩이 포함.. 이전 1 2 3 4 5 ··· 34 다음