본문 바로가기

Back/Java8

[JAVA][시큐어코딩] 적절하지 않은 난수 값 사용 상황프로젝트 마무리 단계에서 소스코드 보안약점 진단 실행 후, 수정이 필요한 사항이 생겼다.적절하지 않은 난수 값 사용에 대한 개념과 수정 방안에 대해 정리해보겠다.   ✔️적절하지 않은 난수 값 사용 ???공격자가 예측 가능한 난수를 사용할 경우 다음 숫자를 예상하여 공격이 가능해지는 보안약점을 일컫는다.난수란 특정한 순서나 규칙을 가지지 않는 수를 뜻하는데, 난수 값을 결정하는 시드 (Seed) 값이 고정될 경우 예측 가능한 난수값이 생성된다고 한다.   ✔️보안 대책JAVA의 java.lang.Math.random() 메소드 사용을 자제해야 한다.예측이 거의 불가능하게 암호학적으로 보호된 java.security.SecureRandom 클래스를 사용하는 것이 안전하다.  ✔️보안 취약점 대응📌 [.. 2024. 8. 1.
[JAVA][시큐어코딩] Null Pointer 역참조에 대응하기 상황 프로젝트 마무리 단계에서 소스코드 보안약점 진단 실행 후, 수정이 필요한 사항이 생겼다.Null Pointer 역참조에 대한 개념과 수정 방안에 대해 정리해보겠다.   ✔️Null Pointer 역참조 ???널 포인터(Null Pointer) 역참조는 ‘일반적으로 그 객체가 널(Null)이 될 수 없다’라고 하는 가정을 위반했을 때 발생한다. 공격자가 의도적으로 널 포인터 역참조를 발생시키는 경우, 그 결과 발생하는 예외 상황을 이용하여 추후의 공격을 계획하는 데 사용될 수 있다.이 취약점으로 인해 의도치 않게 프로그램이 종료되는 경우가 생길 수 있으니 주의 깊게 다루어야 중요한 부분이다. 📌 이 게시글은 이전에 작성한 게시글 내에 있는 코드에서 Null Pointer 역참조가 발생할 수 있는 부.. 2024. 8. 1.
[JAVA] 파일 관련 Stream, I/O 성능 개선 (File 복사 기능) 상황통합테스트 시점에 파일을 copy하는 기능에서 오류가 나서 수정 요청이 들어왔다.단위테스트 당시에는 문제가 없었는데, 디버깅을 걸어보니 파일의 용량이 큰 경우에 생기는 이슈라는 것을 알게 되었다. InputStream, OutputStream을 사용하는 기존 코드에서 BufferedStream 사용으로 변경하여 해결하였다. 이 이슈를 해결하는 과정에서 알게된 것을 정리해보려고 한다. 본문JAVA에서 자료를 읽거나 쓰기 위해 Stream을 사용한다.  입출력과 관련된 것은 java.io 패키지에서 제공하고 있다.  ✔️1. Stream InputStream과 OutputStream에 대해 이해해보기 전 Stream의 개념에 대해 먼저 정리가 필요하다. 📌Stream이란?- 스트림이란 데이터, 패킷, .. 2024. 7. 24.
[JAVA] Stream Collectors.groupingBy 널(null) 사용하기 상황 데이터를 grouping 해서 Map으로 리턴해야 하는 상황이다. grouping할 key 값이 nullable한 상황인데, Map의 key값은 null이 될 수 없기때문에 문제가 발생했다. 아래와 같은 exception을 뱉었다. Caused by: java.lang.NullPointerException: element cannot be mapped to a null key 🫥참고로, 만약 그룹핑할 key가 절대로 null이 아니라면 아래와 같이 간단하게 처리할 수 있다. Map map = list.stream().map(li -> new ResponseDto(li) ).collect(Collectors.groupingBy(ResponseDto::getCode)); 해결 ✔️Null값이 있는 Gr.. 2023. 4. 7.
[Java] Stream 스트림으로 중복 값 찾기 Stream Java 8 부터 도입된 Stream을 이용해서 중복 값을 찾는 방법을 알아보자. 방법 ✔️1. Stream.distinct() disticnt() 메서드는 중복되는 요소들을 제거하고 새로운 스트림을 반환한다. 📌 중복된 값을 제거하고 List 반환하기 List list = Arrays.asList("A", "B", "B", "C", "D", "D"); List distinctList = list.stream() .distinct() .collect(Collectors.toList()); // 결과 // [A, B, C, D] 📌 중복된 값이 무엇인지 찾기 List list = new ArrayList( Arrays.asList("A", "B", "B", "C", "D", "D") ); Li.. 2023. 2. 22.
[Java] Optional 개념, 사용법 Optional이란? Java8부터 지원하는 Optional class에 대해 기록하려고 한다. 개발하다 보면 정말 자주 만나게 되는 예외가 바로 NPE(NullpointerException)다. NPE를 내뱉지 않게 하려면 null-safe하게 만들기 위해 null여부를 꼼꼼하게 검사해야 된다. 하지만 그렇게 하다보면 코드가 복잡해지고, 가독성은 떨어지고, 각 변수마다 null값 체크하다보면 프로그래머의 실수로 놓치는 부분이 생길 수 있다. Optional는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. Optional 을 이용하면 위 문제들을 해결할 뿐만 아니라, 가독성 좋고 NPE를 방지하는 코드를 만들 수 있다. Optional 활용하.. 2023. 2. 21.