본문 바로가기

java7

Java Random 클래스(Feat ThreadLocalRandom, SecureRandom) TDD 학습을 진행하던 도중 Random으로 값을 뽑아야 할 일이 생겼습니다. JAVA 에서는 Random에 대한 다양한 클래스들을 제공하고 있는데요! 이에 대해 하나씩 살펴보는 시간을 가져볼까 합니다. 우선 첫번째로 알아볼 Random 클래스 입니다. JAVA 1.0때부터 존재했었는데요! 역사가 있는 클래스 입니다. 본문 내용을 읽어보면 아래와 같은 내용을 확인하실 수 있습니다. 대략 요약하자면 이렇습니다. Random은 다중 스레드 환경에서는 스레드간 경합이 발생하여 성능저하가 발생하니 ThreadLocalRandom을 사용하는 것이 좋습니다. Random에서 만드는 의사난수는 보안적으로 안전하지 않으니 SecureRandom을 사용해야 합니다. 그럼 하나씩 살펴보도록 하겠습니다. Random vs .. 2022. 6. 15.
Optional orElse, orElseGet 차이 JAVA 8에서는 Optional을 사용할 수 있습니다. Optional에서는 다양한 기능들을 제공하는데요! 그 중 orElse, orElseGet에 대해서 정확히 알고 사용해야 할 부분이 있어 작성하게 되었습니다. 자세한 기능설명을 하기위해 클린코드에서 배운 학습 테스트를 해보겠습니다. class OptionalTest { @Test void test1() { String print = "Optional test"; String result1 = Optional.ofNullable(print).orElse(nullPrint1()); String result2 = Optional.ofNullable(print).orElseGet(this::nullPrint2); assertThat(result1).isE.. 2022. 6. 15.
Java Comparable vs Comparator 우리가 사용하고 있는 자바언어에서는 다양한 인터페이스들을 제공해주고 있는데요! 얼마전에 개인 공부를 하던 중 객체를 정렬해야하는 경우가 있었습니다. 대략적으로 알지만 Comparable와 Comparator 인터페이스를 이번 기회에 확실하게 정리하고 싶어 작성하게 되었습니다. Java Docs 일단 JAVA에서 제공하는 기본적인 인터페이스 임으로 공식 문서를 확인해 보겠습니다. java.lang.Comparable java.util.Comaprator 공식 문서를 확인해보니 Comparable 인터페이스는 해당 인터페이스를 구현하는 객체들의 순서를 적용한다고 합니다. Comparator에서도 객체들의 전체 순서를 적용한다고 하는데요! 일단 Comparator는 명시적으로 @FunctionalInterfa.. 2022. 6. 15.
Logging Framework는 어떤게 좋을까? 프로그램 개발을 할때 중요한 요소 중 한 부분은 바로 로깅 처리입니다. 어떤 로깅 프레임워크를 사용할지, 로그레벨 정책은 어떻게 가져갈지 등에 대한 고민은 개발을 들어가기전 결정해야 됩니다. 최근 읽고있는 자바 성능 튜닝이야기 책을 통해 Log4j, Logback을 알게되었고 앞으로 진행해야될 프로젝트에 어떤 로깅 프레임워크를 적용할지 결정하려고 합니다. 자바에서는 Log4j → Logback → Log4j2 시간 순으로 로깅 프레임워크가 나왔습니다. 이들 중 각각의 성능을 비교해보도록 하겠습니다. Log4j 첫 로깅 프레임워크이며 그래서인지 SLF4J를 기본적으로 지원하지 않습니다. 그래서 별도의 의존성 slf4j-log4j12를 설치해야 합니다. 또한 2015년 말 이후로는 더 이상 업데이트를 하지 .. 2021. 8. 16.
Redis Cache를 이용한 애플리케이션 성능 향상시키는 방법 캐싱이란 무엇인가 오랜 시간이 걸리는 작업의 결과를 저장해서 향후 동일한 요청 시 시간과 비용을 단축시키는 기법입니다. 고성능 애플리케이션을 만드는데 가장 중요한 포인트 중 하나입니다. 캐싱의 종류 및 비교 캐싱에는 크게 로컬캐싱과 글로벌 캐싱으로 나누어서 생각해볼 수 있습니다. 로컬 캐싱 : WAS 서버에서 사용 글로벌 캐싱 : 별도의 캐시 서버를 둬서 사용 로컬캐싱 vs 글로벌 캐싱 항목 로컬 캐싱 글로벌 캐싱 저장위치 애플리케이션 서버에 저장 별도의 캐시 서버에 저장 데이터간 공유 다른 서버에서 참조하기 어려움 서버간 데이터 공유 쉬움 Memory, Disk 사용 애플리케이션 장비와 공유 별도의 서버를 사용함으로 해당 서버의 리소스를 모두 사용가능 캐시 데이터 변경 시 - 해당 서버를 제외하고 모든.. 2021. 8. 11.
Jenkins를 사용한 CI 구성 젠킨스의 설치 과정은 공식사이트에 잘 설명되어 있으니 설치방법에 대해서는 링크로 대신하겠습니다. Jenkins를 설치했으면 정상적으로 서비스가 동작하는지 확인합니다. sudo systemctl start jenkins sudo systemctl stop jenkins sudo systemctl restart jenkins Jenkins는 기본 포트가 8080이며, 혹시라도 접속이 안될 시 방화벽을 확인합니다. CI를 사용할 프로젝트를 생성합니다. 생성 시 Pipeline을 선택합니다. 그리고 Github에 pull request를 수신하기 위해서는 플러그인을 설치해야 합니다. GitHub Pull Request Builder 플러그인을 설치합니다. 플러그인을 설치 후 아까 만들어둔 프로젝트 설정으로 돌아.. 2021. 8. 5.
Java CheckStyle 적용 프로젝트를 진행하면서 혼자 코드를 작성하는 것이 아니라 협업을 하다 보니 코드 품질이 떨어지는 현상이 발생하였습니다. 이를 해결하기 위해 프로젝트에 CheckStyle을 반영하는 과정을 공유하고자 합니다. Intellij에 Checkstyle반영 처음에는 각자의 IDE에 checkstyle 파일을 다운받아 개발 시 적용될 수 있도록 설정하였습니다. 몇몇 설정들은 상의하에 수정하여 가독성을 향상시켰습니다. 하지만 프로젝트가 진행될수록 간헐적으로 자동정렬 단축키를 누르지 못한 파일들이 생겨나고 카멜표기법 등 일관되지 않는 코드들이 커밋되어가고 있었습니다. 이런 문제들이 종종 발생하여 다른 방법을 찾아보게 되었습니다. Git Pre commit에 Checkstyle 적용 찾아보니 Git에서는 Pre Commi.. 2021. 6. 10.