본문 바로가기
  • Code Smell

java20

[JAVA] Java Object List 중복제거 Java Object List 중복제거 Github 소스 Java8 이상의 Collections에는 Stream API 사용 시 distinct라는 중복 제거 메소드가 있다. Stream API의 distinct 메소드는 Object 의 equals 로 비교하므로 객체 자체가 같은지를 비교한다. 따라서 리터럴 형태의 String을 인자로 갖는 List등은 비교가 가능한데, Dto 형태의 모델은 비교가 안되며 Object 자체도 같은 주소값을 가지는 경우에는 가능한데 안의 속성을 비교해야 하는 경우 비교가 어렵다. 이런 경우 사용 할 수 있는 Utils 클래스이다. 아래 학생 정보를 담는 클래스가 있다고 하자 Dto Class 예 @Data public class StudentInfo { private l.. 2021. 1. 4.
[JAVA] LocalDate, LocalTime, LocalDateTime 정리 LocalDate, LocalTime, LocalDateTime 정리 JodaTime이 Java의 기본으로 통합되며 생긴 날짜/시간 Object, Java8 부터 사용 가능하다. LocalDate : 년,월,일 정보 LocalTime : 시,분,(초),(나노초) 정보 LocalDateTime : 년,월,일,시,분,(초),(나노초) 정보 초와 나노초는 항상 생략 가능하다. 현재시간 구하기 LocalDateTime localDateTime = LocalDateTime.now(); LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); 3종세트 toString LocalDate : yyyy-MM-dd LocalTime : HH.. 2020. 11. 13.
[JAVA] SSLHandshakeException 발생 시 대처 [JAVA] SSLHandshakeException 발생 시 대처 정말 짜증나는 에러다. 1. JDK의 SSL 인증서 넣기 public 망이 아닌 사내 망에서 외부 통신 시 필요 할 수 있다. 보통은 인트라 망이면 SSL 인증서 파일을 제공할텐데 그 인증서 파일을 JDK에 추가 할 수 있다. 설치 된 JDK 홈 아래 lib/security 에 있는 cacerts 라는 파일에 인증서를 추가한다. Windows 기본 설치 경로라면 C:\Program Files\Java 아래 구성되어 있을 것이고 (자세한 사항은 환경변수를 참조하면 된다.) Mac 기본 설치 경로라면 /Library/Java/JavaVirtualMachines 아래 있을 확률이 높다. 예를들어 Mac 기준이라면 /Library/Java/Jav.. 2020. 10. 7.
[Java] Enum 멤버 변수로 Enum 객체 찾기 Enum 멤버 변수로 Enum 객체 찾기 예를들어 결과 코드를 정의한 enum이 있다. public enum ExamEnums { SUCCESS("200", "성공"), WAITING("300", "대기 중"), FAIL("500", "실패"), ETC("999", "기타 에러"); @Getter private final String code; @Getter private final String description; ExamEnums(String code, String description) { this.code = code; this.description = description; } } 어느 REST에서 resultCode를 보내주고, 그 코드와 설명을 enum에 정의했을 때 위와 같이 작성 할 수.. 2020. 9. 29.
[Java] RSA 양방향 암호화 RSA 양방향 암호화 Github AES/SEED 암호화는 하나의 키를 가지고 암/복호화를 같이하는 대칭키(=암호화/복호화 키가 같음) 암호화 방식이라면 RSA는 암호화 키와 복호화 키가 다른 비대칭키 암호화 이다. 키를 만드는 과정 1. 두 소수 p , q를 준비한다. 2. p - 1, q - 1과 각각 서로소인 정수 e를 준비한다. 3. ed를 (p - 1)(q - 1)으로 나눈 나머지가 1이 되도록 하는 d를 찾는다. 4. N = pq를 계산한 후, N와 e를 공개한다. 이들이 바로 공개키이다. 한편 d는 숨겨두는데, 이 수가 바로 개인키이다. 5. 이제 p, q, (p - 1)(q - 1)는 필요 없거니와 있어 봐야 보안에 오히려 문제를 일으킬 수 있으니, 파기한다.나무위키 RSA 설명 공캐키가 .. 2020. 8. 14.
[SPRING BOOT] REST API 개발하기 2 - ControllerAdvice, ExceptionHandler REST API 개발하기 2 - ControllerAdvice, ExceptionHandler GitHub 소스 ControllerAdvice 및 ExceptionHandler는 클라이언트에서 우리 API로 요청이 들어왔을 때, 에러가 발생한다면 어떻게 핸들링 할지에 대한 처리. 두 어노테이션은 하는 역할은 같지만, scope에 차이가 있는데, ExceptionHandler는 Exception마다 어떻게 처리할지에 대해 메소드 레벨에 선언하는 어노테이션이다. ControllerAdvice는 모든 컨트롤러에서 Exception이 발생한다면 핸들링을 담당할 핸들링 전용 Controller에 선언하는 어노테이션이다. Exception을 처리할 UserControllerAdvice를 만든다. package su.. 2020. 7. 11.
[Java] SEED-128 양방향 암호화 SEED128 양방향 암호화 Github AES-128과 같이 대칭키를 가진 양방향 암호화이다. 암호화 및 복호화가 가능하다. 유저키가 16자리를 기반으로 암/복호화를 진행한다. 국내 KISA에서 개발되었으며 JAVA 기본 내장 알고리즘이 아니므로 SEED 블록 알고리즘 클래스 파일이 필요하다. 너무 길어서 gitHub에 올려놓았다. https://github.com/sunghs/java-utils/blob/master/src/main/java/sunghs/java/utils/cipher/support/KisaSeedCbc.java 소스 /** * SEED-128 암호화 * * @author https://sunghs.tistory.com * @see source */ public class Seed12.. 2020. 7. 9.
[Java] AES-128 양방향 암호화 AES128 양방향 암호화 Github 코드 Hash 암호화와는 다르게 대칭키를 가지고 암호화와 복호화를 진행한다. AES 뒤에 붙는 128이나 192, 256은 대칭키의 bit수를 나타내는 것으로 AES-128의 경우 128bit의 대칭키를 쓰는 암호화 알고리즘이다. 128bit는 16byte이므로, 키의 String length가 16자리이다. (192bit = 24자리, 256bit = 32자리) 키의 길이에 따라서 암호화 라운드의 수만 다르므로 AES-128과 AES-192, AES-256은 구현되는 소스는 같다. 그러나 Java에서는 AES키 길이에 제한을 두기때문에 현재 공식적으로 AES-128밖에 지원하지 않는다. AES-128 이상 사용하려면 JRE의 정책 라이브러리를 갈아 끼우는 방법이 .. 2020. 7. 5.
[JAVA] CompletableFuture - 예제2 CompletableFuture 예제1 공통으로 사용할 로직 public class AsyncTest { public static final Logger log = LoggerFactory.getLogger(AsyncTest.class); public CompletableFuture task; public static void sleep(long time) { try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } } public static void log(String s) { log.info(s); } public static void main(String[] args) { AsyncTest asyncTes.. 2020. 5. 26.