728x90

분류 전체보기 166

Hugo 로 Github 페이지 블로그 만들기

Hugo와 Github 페이지 통합하기 Hugo는 가장 인기 있는 오픈 소스 정적 사이트 생성기 중 하나입니다. 로컬에 hugo를 쉽게 설치하고 정적 사이트를 Github 페이지에 배포할 수 있습니다. 로컬에 Hugo 설치하기 설치로 바로 들어가기 전에 Mac OS에 설치하는 방법에 대해서만 다루겠습니다. Windows나 Linux에서 설치하는 방법은 공식 문서를 참조하세요. brew install hugo hugo 설치가 완료되었다면 다음 단계로 넘어갑니다. Github에 배포용 저장소 만들기 Github에는 두 개의 저장소를 만들어야 합니다. 하나는 블로그의 글과 스킨을 관리하는 ** 쪽 이고, 다른 하나는 **사이트 배포 용입니다. 그래서 두 저장소를 관리하기 위해 submodule을 사용해야 합니..

JavaScript 2023.08.16

의존성 역전 원칙(Dependency Inversion principle)

의존성 역전 원칙 (Dependency Inversion Principle) 의존성 역전 원칙(DIP)은 SOLID 원칙 중 하나입니다. SOLID는 객체 지향 디자인을 더욱 이해하기 쉽고 유연하며 유지보수 가능하게 만들기 위한 다섯 가지 디자인 패턴 집합입니다. 의존성 역전 원칙을 이해하기 위해서 우리는 반드시 제어의 역전과 의존성 주입 개념에 대해서 이해해야 합니다. Inversion of Control (제어의 역전) 제어란 무엇일까요? 그리고 역전은 무엇을 의미할까요? 이러한 질문에 답해보겠습니다. 먼저 제어와 역전을 알아봅시다. 제어란 코드의 실행 순서를 결정하는 흐름을 말합니다. 아래의 예시와 같이 코드를 작성하면 코드는 위에서부터 아래로 예측 가능한 방식으로 실행됩니다. a = 10 b = ..

DesignPattern 2023.08.13

Ubuntu 에서 주사율 설정하는 법

우분투에서 어떻게 주사율을 설정할까요? 첫번째로 터미널을 킨 뒤 `xrandr` 명령어를 입력하여 입력되어 있는 모니터를 찾아야 합니다. 저 같은 경우는 보시다 시피 `XWAYLAND0` 로 설정되어 있습니다 아직 까지는 60 으로 설정되어 있는것을 확인할 수 있습니다. 위와같이 [설정] - [화면] 으로 가시면 해상도를 설정하실수 있는 창을 확인할 수 있는데요. 여기서 원하시는 해상도로 바꾸시면 됩니다. 그 이후 터미널에서 `` 을 입력해보면 아래와 같이 잘 반영된것을 확인할 수 있습니다.

Ubuntu 2023.07.20

Kotlin NoteBook In Intellij

What is Kotlin Notebook? Kotlin Notebook 은 Intellij 에서 Jupyter Notebook 의 Python 과 비슷한 형태로 코틀린을 쉽게 실행시킬 수 있도록 만든 것인데요. 조금 더 간편하고 쉽게 코틀린을 실행시켜야 하는 상황에서 사용하기 좋을거 같습니다. 생성하는 방법 1. Python 설치 일단 코틀린 Notebook 플러그인 을 실행시키기 위해서는 위와 같이 Python 을 요구하게 됩니다. 따라서 Python 을 Settings - Plugin 에 검색하여 다운받아 주도록 합시다. (이미 다운 받으셨다면 별도로 다운로드 하지 않으셔도 좋습니다.) 2. 코틀린 노트북(Kotlin Notebook) 설치 이제 위와 같이 코틀린 노트북 또한 Plugins 에서 검..

Kotlin 2023.07.11

Heap 튜닝 정리

Heap 튜닝 정리 개요 최근에 팀내에서 Memory 임계치가 70% 이상을 넘기는 일들이 발생했다. [사진] 지표를 통한 문제 분석 현재 팀내 시스템에는 08 ~ 22 사이에 다수의 일감을 분배해주는 큰 Dispatcher 시스템이 존재한다. 10초당 한번 씩 동작하고 있으며 DB 작업과 Queue 작업을 수반하고 수백~수천건의 객체들을 사용하게 된다. (중복 발행도 가능한 시스템이라 로드가 어느정도 있다.) 그래서 이 구간에서 Object Reference 가 잘 해제되지 않는건가? 라는 의심을 가지고 분석을 시작하게 됬다. 의심되는 부분을 일단 확인하기 위해 로그를 확인해봤는데 Dispatcher 시스템은 새벽시간대에는 동작하지 않는다는 것을 확인했다. 그래서 해당 시스템이 문제를 일으키지 않는다고..

JVM 2022.11.22

우아한 러닝 1주차

이벤트 스토밍 도메인을 빠르게 익히기 위해 하는 과정 도메인 지식의 상향 평준화가 목표, 서로 배우는 것이 중요함. 이벤트 스토밍은 기록 및 관리하려고 하면 안됨. 그냥 워크샵에서 끝내는게 좋음. -> 유지보수 하려고 하는 대상으로 만들지 않아야 함. 준비물 큰 회의실, 종이, 포스트잇 마커펜 실제 문제 해결에 관련된 모든 사람(질문이 있는 사람) -> 해당 도메인 전문가 느낌. 교육이나 회의를 리드하는 사람(진행자) 진행방법 벽에 커다란 종이를 붙여 놓고 포스트잇(도메인 이벤트 중심)을 붙여 나간다 도메인 이벤트 설명은 혼란스러운 탐험의 도메인 이벤트 설명을 참조. 비즈니스 프로세스를 이해하는 데에 초점을 맞춘다. 모든 사람의 생각을 허용하고 존중한다. 혼란스러운 탐험(1단계) 각자 알고 있는 도메인 ..

일일회고 2022.11.09

Kotlin 동시성 프로그래밍

동기식 프로그래밍 초기 컴퓨터의 문제 초기 컴퓨터는 하나의 프로그램만을 실행시키는 역할을 했다. 그래서 초기 시분할 시스템에서는 각 프로세스가 가상적인 폰 노이만 컴퓨터 였다. 폰 노이만 컴퓨터 답게 각각 명령어와 데이터를 저장하는 메모리 공간을 가지고 기계어로 된 명령어를 순차적으로 수행하며, 운영체제가 제공하는 I/O 수단을 통해 외부와 교류했다. 위와 같은 이유로 초기 컴퓨터의 문제점은 다양했다. 하나의 문제를 뽑자면, 외부 입출력과 같은 작업이 지속되면 프로그램이 블락(Block)되어 시간적으로 비효율적일 수 밖에 없었다. 스레드의 등장 위와 같은 문제점을 해결하기 위한 방법론 중 하나로 스레드 가 등장하게 되었다. 스레드는 PC(프로그램 카운터), 스택, 지역 변수등을 가지고, 공유해야 할 변수..

Kotlin 2022.11.07

Kotlin Sequence

Kotlin Sequence Kotlin 에는 Collection 과 함께 Sequence 라는 스펙이 존재한다. 공식문서에 따르면 Collection 처럼 Element 를 저장하는 방식이 아니고, Iterator 에 가깝다. 정확히는 순회하면서 Element 를 생산(Produce) 한다. Lazily Evaluation Sequence 의 가장 큰 장점은 지연 평가가 가능하다는 것이다. 즉, 우리가 Collection 을 사용하여 map, filter, ... 와 같은 연산을 수행하게 될 경우 그 즉시 값을 계산하게 된다. 예를 들면 listOf(1,2,3,4,5).map {it * 2} 와 같이 될 경우 5개 Element 를 그 즉시 계산하게 된다는 것이다. 당연하게도 위와 같이 즉시 연산이 필..

Kotlin 2022.10.25

Kotlin Coroutine Series - 7 ) Dispatcher

Dispatcher Dispatcher 는 코루틴에서 중요한 기능적 역할을 한다. 코루틴의 Task 가 어떤 Thread 에서 실행할지 결정하는 역할을 해준다. 앞서 봤듯이, 코틀린에서 우리가 코루틴을 이용하여 코드를 작성하면, 아래와 같이 분기가 쳐지는 것을 확인할 수 있다. fun originalFunction(continuation: Continuation): Any { continuation as OriginalFunctionContination if (continuation.label == 0) { continuation.thisLocalVariable = 10 continuation.thisLocalVariable2 = "Local Value" println("Start!!") continua..

Kotlin 2022.10.22

Kotlin Coroutine Series - 6 ) Coroutine Scope

Coroutine Scope 코루틴에서 영역(Scope) 는 코루틴 컨텍스트와 코루틴의 생명주기(LifeCycle) 을 관리하기 위해 사용된다. 따라서 코루틴은, 앞서 배웠던 구조화된 동시성(Structured Concurrency) 를 위해서, 자신만의 Job 을 보유하게 된다. GlobalScope 를 왠만해서 사용하지 말라고 하는 이유 또한, 코루틴의 시작과 종료를 관리하기 어려운 상태로 빠져들 수 있으므로 Memory Leak 현상을 초래할 수 있게 된다. coroutineScope 함수 coroutineScope(block) 함수는 새롭게 코루틴을 만드는 역할을 한다. coroutineScope 의 특이한 특성은 새로운 코루틴이 끝나기전까지, 이전 코루틴을 일시중단시키게 된다. 예를 들기 위한 ..

Kotlin 2022.10.22
728x90