분류 전체보기

    Java :: LocalDateTime 을 Epoch Time 으로 바꾸기

    Java :: LocalDateTime 을 Epoch Time 으로 바꾸기

    날짜 정보를 API 를 통해 클라이언트에게 전송하는 중 날짜 데이터를 Epoch Millisecond 형식으로 달라는 요청을 받았다. Java8 LocalDateTime 형식의 데이터를 Epoch 시간으로 변경해보자. LocalDateTime → Epoch Second long toEpochSecond(ZoneOffset offset) 을 사용하자. long timeInSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC); LocalDateTime → Epoch Milliseconds Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant(); long timeInMillis = inst..

    Mac :: 터미널에 이모지 나타내기

    Mac :: 터미널에 이모지 나타내기

    다른 사람들의 블로그를 보다보니까 터미널 Host 나타내는 부분에 이모지가 있던데 이게 너무 귀여워보여서 나도 적용해보았다. 사전 환경 세팅 Iterm2 oh-my-zsh ZSH 세팅 터미널을 꾸미고 싶은 분이라면 이건 이미 깔려있을 것이라고 가정했다. 아직 설치하지 않았더라도 위 저 두 파일은 설치만 하면 된다. 설치가 끝났다면 쉘의 환경 변수 설정을 변경해주자. vi ~/.zshrc vi 에디터로 zsh 설정 파일에 들어가서 가장 하단에 아래 코드를 넣자. prompt_context() { # Custom (Random emoji) emojis=("🔥" "🐻" "🦊" "🍻" "🚀" "🌙") RAND_EMOJI_N=$(( $RANDOM % ${#emojis[@]} + 1)) prompt_segment ..

    Spring Boot :: @FeignClient 로 외부 REST API 간편 호출

    Spring Boot :: @FeignClient 로 외부 REST API 간편 호출

    들어가면서 카카오 및 애플 로그인을 구현하면서 외부 API 서버에 접근해 데이터를 받아와야 하는 일이 많아졌고, API 주소를 설정파일에 저장한 후 직접 HttpURLConnection 을 생성해서 연결하는 코드가 중복되게 되었다. 또 직접 HttpURLConnection 을 연결해 외부 API 에서 데이터를 받아오면 받아온 JSON 을 직접 파싱해야 하는 불편함도 존재했다. 정리하자면, 외부 API 를 간편하게 호출하고 싶어서 호출 결과를 직접 파싱하는 과정이 번거로워서 FeignClient 를 사용하게 되었다. 아래 설명에서는 많이 예시를 드는 Github API 를 이용해서 코드를 작성해보았다. FeinClient Feign 은 Netflix 에서 개발한 REST Client 이다. 기존에 Rest..

    EC2 :: Ubuntu Swap 메모리 설정

    EC2 :: Ubuntu Swap 메모리 설정

    EC2 프리티어 서버로 스프링을 띄우고, CI/CD 를 세팅하고 하다보면 메모리가 부족한 경우가 종종 있다. 메모리를 늘리려면 과금을 해야하고.. 간단한 실습이나 개발용 환경 세팅이라면 사양을 올리기보다 Swap 메모리를 이용해 이를 해결할 수 있다. Swap 파일 또는 파티션 확인 sudo free -m Swap 영역이 0 이니 설정을 해주자 Swap 파일 생성 sudo fallocate -l 2G /swapfile 용량이 2G 인 swapfile 이란 이름의 파일을 생성했다. 위 파일을 스왑파일로 설정하자. sudo mkswap /swapfile 600의 permission 을 권장한다고 하니 바꿔주자. sudo chmod 600 /swapfile Swap 활성화 sudo swapon /swapfil..

    Java :: 객체지향 패러다임

    Java :: 객체지향 패러다임

    적절한 객체에게 적절한 책임을 할당하여 서로 메시지를 주고 받으며 협력하도록 하는 것 점점 증가하는 SW 복잡도를 낮추기 위해 객체지향 패러다임 대두 중요한 두 가지 포인트 1. 클래스가 아닌 객체에 초점을 맞추는 것 2. 객체들에게 얼마나 적절한 역할과 책임을 할당하는가 절차지향 프로그래밍과 객체지향 프로그래밍의 차이 책임이 한 곳에 집중되어 있는 방식인가 → 절차지향 책임이 여러 객체로 적절히 분산되어 있는 방식인가 → 객체지향 High cohesion, loose coupling 높은 응집도와 낮은 결합도성격이 다른 것들은 분리를 시키는 것 ! 응집도가 높은, 비슷한 것끼리는 하나로 모아두고, 또한 변화가 생겼을 때, 다른 곳에는 영향을 미치지 않는다. 장점이 무엇일까 ? 변경이 생겼을 때 변경의 ..

    Java :: 객체지향의 5가지 설계원칙 SOLID

    Java :: 객체지향의 5가지 설계원칙 SOLID

    SRP : Single Responsibility Principle (단일 책임의 원칙) OCP : Open/Closed Principle (개방 폐쇄의 원칙) 확장에는 열려있고 변경에는 닫혀있다. 즉, 기존 코드를 수정하지 않고 기능을 추가할 수 있어야 한다. LSP : Liskov’s Subsititution Principle (리스코프 치환의 원칙) 상위 타입의 객체를 하위 타입의 객체로 치환해도 동작에는 문제가 없어야 한다. ISP : Interface Segregation Principle (인터페이스 분리의 원칙) 많은 기능을 가진 인터페이스를 작은 기능 단위의 인터페이스로 분리함으로써 클라이언트에게 필요한 인터페이스에 대해서만 구현체를 만든다. 클라이언트가 사용하지 않는 기능에 대해서 의존성..

    JUnit :: ParameterizedTest 로 경계값 테스트하기

    JUnit :: ParameterizedTest 로 경계값 테스트하기

    경계값에서 장애가 많이 일어난다 테스트할 때는 input 값의 경계값에 대해서 항상 테스트를 진행해야 한다 그러기 위해 ParameterizedTest 를 이용하면 여러 데이터 소스를 사용할 수 있다. build.gradle 수정 junit-jupiter-params 추가 testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' 자세한 내용은 아래 링크 참조 https://www.petrikainulainen.net/programming/testing/junit-5-tutorial-writing-parameterized-tests/ 실습 비밀번호 입력 값 검증 테스트 요구사항 비밀번호는 최소 8자 이상 12자 이하여야 한다. 비밀번호가 8자 미..

    Github :: Git LFS 로 Large Size 파일 관리

    Github :: Git LFS 로 Large Size 파일 관리

    에러 remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com. Enumerating objects: 16, done. Counting objects: 100% (16/16), done. Delta compression using up to 8 threads Compressing objects: 100% (14/14), done. Writing objects: 100% (14/14), 188.62 MiB | 2.82 MiB/s, done. Total 14 (delta 2), reused 0 (delta 0), pack-reused 0 remote: Reso..