New

  • 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 높은 응집도와 낮은 결합도성격이 다른 것들은 분리를 시키는 것 ! 응집도가 높은, 비슷한 것끼리는 하나로 모아두고, 또한 변화가 생겼을 때, 다른 곳에는 영향을 미치지 않는다. 장점이 무엇일까 ? 변경이 생겼을 때 변경의 ..

Hot

  • Python :: 5 - 여러 번 반복하는 일을 하자

    Python :: 5 - 여러 번 반복하는 일을 하자

    앞 장에서 우리는 무한 루프 구조를 살짝 경험해보았다. 프로그램에서 "반복" 이라는 것은 큰 의미를 가진다. 프로그램을 작성하는 것은 결국 우리가 직접 하기 어려운 일들을 컴퓨터에게 맡기는 것인데, 어떤 일을 반복해야 하는 횟수가 클수록 컴퓨터에게 맡겼을 때의 효율은 올라간다. "반복" 하기 위해서는 반복문을 사용하는데, 반복 구조를 사용하면 프로그램이 간결해지게 된다. 예를 들어 동일한 작업을 반복하기 위해 똑같은 문장을 복사하여 붙여넣기 하는 것보다 반복 구조를 사용하는 편이 프로그램을 간결하게 만든다. 또 프로그래밍에 필요한 시간도 단축할 수 있다. 반복문을 간단하게 맛보자. for i in range(100) : print("파이썬을 열심히 공부하자!") 뒤에서 배우겠지만 해당 코드는 문자열을 1..

  • GDB :: gdb 사용법 및 옵션 정리

    GDB :: gdb 사용법 및 옵션 정리

    GDB 라고 부르는 GNU Debugger는 GNU 소프트웨어 시스템을 위한 기본 디버거. GDB는 다양한 유닉스 기반의 시스템에서 동작하는 이식성 있는 디버거로, 에이다, C, C++, 포트란 등의 여러 프로그래밍 언어를 지원. GDB 사용법 % gcc -g test.c -o test % gdb (gdb) file [test] // symbol table을 불러와서 디버깅 준비. (gdb) list // 현재 위치에서 소스 파일의 내용을 10줄 보여줌. (gdb) run (r) // 프로그램 시작. (gdb) break (b) // 라인 번호나 함수 이름을 인자로 줄 수 있음. 특정 라인이나 함수에 브레이크 포인트 설정. (gdb) disas [func or var] // 특정 주소를 disassemb..

  • Python :: 8 - 연관된 데이터를 딕셔너리로 짝을 짓자

    Python :: 8 - 연관된 데이터를 딕셔너리로 짝을 짓자

    이전 장에서는 리스트와 튜플이라는 자료형에 대해 알아보았다. 이번에는 키를 이용해서 값을 추출할 수 있는 자료형인 "딕셔너리 dictionary" 에 대해서 알아보자. 주로 데이터베이스에서 흔히 볼 수 있는 구조인데, 딕셔너리는 값 value 과 관련된 키 key 가 있다는 것이 큰 특징이다. 딕셔너리를 만들 때는 중괄호 {} 를 사용한다. 간단하게 전화번호부를 만든다고 가정하고 딕셔너리에 대해 살펴보자. phone_book = {} # 공백 딕셔너리를 생성 phone_book["홍길동"] = "010-1234-5678" print(phone_book) # {'홍길동': '010-1234-5678'} 위의 코드를 보면 {} 를 이용하여 공백 딕셔너리를 만든다. 이름을 key 로 사용하고 value 에는 ..

  • Python :: 11 - 차트를 멋지게 그려보자

    Python :: 11 - 차트를 멋지게 그려보자

    데이터 과학을 공부하면서 "데이터 시각화 data visualization" 는 빼놓을 수 없다. 데이터 시각화는 점이나 선, 막대 그래프 등의 시각적 이미지를 사용하여 데이터를 화면에 표시한다. 효과적인 시각화는 사용자가 데이터를 분석하고 추론하는 데 도움이 된다. 사람들은 시각적으로 보이는 데이터를 직관적으로 이해할 수 있기 때문이다. 데이터를 시각화하기 위한 많은 도구가 파이썬에 있지만 우리는 matplotlib 라이브러리를 사용해서 공부해보고자 한다. matplotlib 라이브러리는 가장 널리 사용되는 시각화 도구이다. 간단한 막대 그래프, 선 그래프, 산포도를 그리는 용도로 제격이다. 이번 장에서는 matplotlib 을 이용하여 다양한 종류의 차트를 만들어보자. 우선 그래프 하나를 소개하겠다...

  • Spring Boot :: 처음 시작하는 Gradle 프로젝트 (build.gradle)

    Spring Boot :: 처음 시작하는 Gradle 프로젝트 (build.gradle)

    spring initializr 를 사용하면 빠르게 spring boot 의 설정을 할 수 있지만, 공부하는 입장에서 build.gradle 의 코드가 무슨 역할을 하는지, 추가로 의존성 추가가 필요하면 어떻게 해야 하는지는 알고 넘어가보자. 먼저 IntelliJ 에서 New Project 로 Gradle 프로젝트를 생성한 후에 build.gradle 파일을 지우고 아래 코드들을 순서대로 작성해보자. 다 작성하고 나면 spring boot 에 필요한 최소 설정은 다 추가되어 있을 것이다. // build.gradle buildscript { ext { springBootVersion = '2.1.7.RELEASE' } repositories { mavenCentral() } dependencies { c..