본문 바로가기
  • Code Smell

!99

[Codility] BinaryGap (Java) 문제 A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is surrounded by ones at both ends in the binary representation of N. For example, number 9 has binary representation 1001 and contains a binary gap of length 2. The number 529 has binary representation 1000010001 and contains two binary gaps: one of length 4 and one of length 3. The number 20 has binar.. 2021. 3. 23.
[JUnit] JUnit5 사용법과 TDD (1) JUnit5 사용법과 TDD (1) 설명 JUnit은 자바의 단위 테스트 프레임워크이다. xUnit에서 파생되어 각 언어별 Unit 프레임워크가 존재한다. C : CUnit C++ : cppUnit Python : pyUnit Java : JUnit 현재 JUnit은 2021년 3월 기준 5버전까지 나온 상태이다. 공식사이트 프로젝트에 추가하기 spring boot 환경(intelliJ, Gradle)에서 추가하였다. JUnit은 spring-boot-starter-test에 기본적으로 포함 되어있다. build.gradle에 spring-boot-starter-test 패키지를 추가하고, 아래 useJUnitPlatform 을 테스트 영역에 작성한다. dependencies { ... implement.. 2021. 3. 19.
[Java] HeapDump 파일 만들기 HeapDump 파일 만들기 Github API 등 web application, 또는 daemon 형태의 java background application 서비스를 하다보면, OutOfMemoryException이 발생하는 경우가 있다. 또한 메모리가 튈 일이 없는 상황인데도 점차 주기적으로 Heap 점유율이 늘어난다던지 하는 경우가 있는데 이런 경우 HeapDump 파일을 만들어 분석하게 되면, 어느 객체가 메모리를 많이 차지하는지, 현재 참조가 끊어진 객체들은 어떤 것들이 있는지에 대해 분석 할 수 있다. spring 프로젝트의 경우 actuator 모듈을 도입하게 되면, HeapDump 파일을 내려 받을 수 있는데, 사실 힙덤프 하나만을 위해서 actuator 도입을 해야하는 부담스러운 상황이거나.. 2021. 3. 17.
[SPRING] 스프링 캐시 사용하기 spring에서 cache 관련 된 기능을 지원한다. 기존 cache 처리라고 하면, Redis, memcached 등의 추가적인 memoryDB를 이용하거나, application 레벨에서 사용 가능한 EhCache 등이 많이 쓰이는데, 이 중 application 레벨에서 사용 가능한 spring cache에 대한 소개이다. spring cache는 cache 기능의 추상화를 지원하는데, EhCache, Couchbase, Redis 등의 추가적인 캐시 저장소와 빠르게 연동하여 bean으로 설정 할 수 있도록 도와준다. 만일 추가적인 캐시 저장소와 연결하지 않는다면, ConcurrentHashMap 기반의 Map 저장소가 자동으로 추가된다. 캐시를 쓰긴 써야하는데, EhCache까지는 쓸 필요는 없고.. 2021. 3. 11.
[LeetCode] Climbing Stairs 문제 (memoization) Climbing Stairs 문제 (memoization) 문제 링크 : https://leetcode.com/problems/climbing-stairs/ 문제의 풀이 방법은 전형적인 피보나치 수열의 합 문제였는데, 이상하게 피보나치 풀이법인 recursive 방법으로 풀면 Time Limit Exceeded 실패가 발생했다. 실행 때 마다 시간이 좀 다르니 혹시 운이 없어서 그런가 했는데, 3번을 돌려도 똑같이 실패했다. 그래서 멤버변수로 Map을 하나 만들고, 이미 지나온 값은 메모리에 들고 있는 방식(memoization)으로 문제를 풀었다. 예를들어 피보나치 수열은 아래랑 같은 공식이 성립하는데 f(n) = f(n-1) + f(n-2) f(5) = f(4) + f(3) 과 같고 f(4) = f(.. 2021. 2. 10.
[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.
[Git] Push Author 변경하기 Git Push Author 변경하기 IntelliJ 등 IDE 에서 여러 Git 호스팅 서버 (깃랩, 비트버킷 )등 을 이용하다보면 기존 프로젝트를 가져왔을 때 login user가 다른 호스팅 서버 아이디로 되어 있는 등 commit author가 잘못 되어 있는 경우가 있다. 그럴 때 이미 서버로 push 해 버린 author를 변경하는 방법이다. git commit author 보기 & 바꾸기 git은 global user와 해당 프로젝트의 user를 따로 지정 할 수 있다. 따라서 현재 다른 계정으로 커밋자가 되어 있다면 아래 명령어로 확인한다. git config --list config 설정에서 user.name 과 user.email 을 확인한다. 이후 name 과 email을 원하는 것으.. 2020. 12. 6.
[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.