본문 바로가기
  • Code Smell

!101

[Java] URL 리소스 다운로드 URL 리소스 다운로드 Github 소스 URL 경로를 입력하면 다운로드 받는 스트림을 제공합니다. 대표적으로 이미지, 파일 같은 것을 다운로드 가능합니다. 코드 package sunghs.java.utils.file; import lombok.extern.slf4j.Slf4j; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; /** * URL 리소스 다운로더 * * @author https://sunghs.tistory.com * @see source */ @Sl.. 2021. 9. 8.
[LeetCode] 2. Add Two Numbers Add Two Number 문제 You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. Input: l1 = [2,4,3], l2 = [5,6,4] Output: [7,0,8] Explanation.. 2021. 8. 26.
[Java] 이진파일 문자열 변환 (binary to string) 이진파일 문자열 변환 (binary to string) 예전에 포스팅 한 내용을 토대로 바로 쓸수 있도록 java-utils에 추가하고 테스트 케이스를 만들었습니다. exe, docs, pptx, xlsx 파일 등 아래와 같이 문자열 변환이 불가능한 파일을 비트 연산으로 ascii 로 변경하는 작업입니다. 포스팅 보기 바이너리 파일을 텍스트 편집기 등으로 열면 이런식으로 보이죠. 문자열 변환이 불가능하기 보다는, new String(byte[] b) 로 읽고, 다시 getBytes() 로 쓰게 되면 데이터 손실이 발생하는데 그 손실 없이 String 으로 바꾸고 byte[] 로 바꾸는 기능입니다. 소스는 여기의 sunghs.java.utils.convert.BinaryConverter 클래스입니다. 소스.. 2021. 7. 27.
[Spring] 스프링 의존성 주입 방법 스프링 의존성 주입 3가지 방법 소스는 여기서 볼 수 있습니다. 의존성 주입(Dependency Injection)은 많이 아실거라 생각합니다. Spring 에서 지원하는 의존성 주입은 3가지 방법으로 사용가능합니다. Field(필드) 주입 Setter(수정자) 주입 Constructor(생성자) 주입 예를들어 주입받아야 하는 Service가 아래와 같은 코드로 되어있다고 하겠습니다. @Service public class ExampleService { public String businessLogic() { return "OK"; } } 각각의 서비스에서 3가지 주입 방법으로 주입해 보겠습니다. 1. Field 주입 필드주입은 Spring 초창기부터 현재까지 계속 사용되는 방법입니다. 멤버 객체에 @A.. 2021. 7. 26.
[Java] OpenJDK 벤더 별 지원 현황 (2021-06) OpenJDK 벤더 별 지원 현황 OpenJDK 가 벤더사 별로 여러가지 배포판이 존재하는데 차이점이 궁금해서 정리했습니다. 어디 간략하게 표로 정리한 곳을 못찾고 있었는데, stackoverflow에서 찾을 수 있었습니다. java - Difference between OpenJDK and Adoptium/AdoptOpenJDK - Stack Overflow Difference between OpenJDK and Adoptium/AdoptOpenJDK Due to recent Oracle Java SE Support Roadmap policy update (end of $free release updates from Oracle after March 2019 in particular), I've bee.. 2021. 6. 25.
[Spring Webflux] 대용량 List 병렬 처리 Spring webflux 대용량 List 처리 Mono와 Flux의 back-pressure를 이용한 publish, subscribe 를 이용하는 방법 외에 이미 만들어진 대용량 리스트를 병렬로 처리하고 싶은 경우가 있습니다. 이런 경우 ThreadPoolExecutor 등을 이용하여 처리 할 수 있겠습니다만, Config를 추가적으로 설정해야 하고, 실제로 사용하지 않는다 하여도 ThreadPool이 유지되어야 하기 때문에 사용하지 않는 자원이 낭비 될 수 있습니다. 예를들어 어떤 List의 사이즈가 10000개인데, 각 데이터에 대해 무엇인가 작업을 하고 싶은 경우 (예를들어 restTemplate으로 request 한다거나, DB에서 조회를 한다거나) 사용할 수 있습니다. asyncRestTem.. 2021. 6. 25.
[Programmers] 전화번호 목록 (Java) 문제 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 제한 사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해서 들어있지 않습니다. 입출력 예제 ["119.. 2021. 5. 14.
[Spring] Spring의 @EventListener Spring의 @EventListener 쓰는 이유? 의존성이 강한 로직들의 레이어를 분리할 수 있습니다. 예를 들어 A 서비스의 a 비즈니스 로직을 실행 할 때 B 서비스의 b 추가 로직을 같이 실행해야 하는 경우 A 서비스에 B 서비스를 주입시켜 a 로직 안에 b 로직을 녹이는 경우가 많습니다. 이렇게 점점 강해지는 결합을 이벤트 핸들러라는 레이어로 분리한 뒤 다시 핸들링 하는 느슨한 결합 형태로 만들 수 있습니다. A 서비스의 a 로직 실행 -> 이벤트 발행 -> B 서비스의 b 로직 실행 이렇게 되면 A 서비스는 B 서비스의 변경사항과 관련없이 수정이 필요없게 됩니다. Spring 4 버전 이상으로 올라오며 쓰기가 많이 편해졌습니다. 기존의 이벤트 객체는 ApplicationEvent 와, 이벤트.. 2021. 4. 21.
[JUnit] JUnit5 사용법과 TDD (2) - REST API 테스트 JUnit5 사용법과 TDD (2) JUnit 5의 dependency 추가 방법과 실행 순서, 기본 annotation에 대한 정리 -> TDD 정리 1 Spring 관련 주요 Test Annotation JUnit5와 spring-boot-test의 모든 annotation은 아니며 자주 사용되는 Annotation만 소개 @ExtendWith(Class[] c) 필요한 Class들을 Configuration 으로 만들어 사용 할 수 있다. (기존 Configuration 클래스도 땡겨 올 수 있다.) Configuration Component이므로 내부에 있는 Bean 까지 등록이 가능하다. Import 된 클래스는 주입으로 사용 가능. @Profile 클래스와 메소드 레벨에서 지정 가능하며, 특정.. 2021. 3. 30.