Development

    [프로그래머스 코딩 테스트 연습] 스택/큐 - 프린터 (코틀린)

    https://programmers.co.kr/learn/courses/30/lessons/42587?language=kotlin 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr data class Document( val priority: Int, val isTarget: Boolean ) class Solution { fun solution(priorities: IntArray, location: Int): Int { var answer = 0 val documents = priorities.mapIndexe..

    여러 깃헙 계정을 SSH 방식으로 사용하는 방법

    Context 깃헙은 Repository에 Push, Clone 등의 액션을 취할 때 계정을 인증하게끔 되어 있다. public repository라면 설정에 따라 크게 상관없을 수 있으나 private repository 이거나 권한이 엄격히 관리되는 repository라면 인증이 필수적이다. 일반적으로 계정 인증은 계정명/패스워드로 이루어지지만 현재 깃헙에서는 이러한 방식의 인증을 사용할 수 없도록 제한하고 있다. 이를 대체할 수 있는 가장 대표적인 방법이 SSH 인증 방식인데, 많은 사람들이 하나 Mac에서 여러 깃헙 계정을 운영하는 것에 어려움을 겪는 것을 보고 글을 남겨본다. Windows & Linux는 기본적으로 되는 것 같으나 Mac에서는 추가적인 작업이 필요하다. 깃헙 SSH Key 등록..

    DI(Dependency Injection)는 왜 필요한가?

    Context DI에 대한 이야기를 하기 전, 의존성 그 자체에 대한 이야기를 먼저 해보자. 의존성은 무엇이고, 언제 발생하는가? 바리스타가 커피를 만들기 위해선 커피 머신의 협력이 필요하다. 즉 바리스타의 '커피 만들기' 라는 행위는 커피 머신에 의존적이다. 어떠한 애플리케이션은 작업을 처리하기 앞서 설정 값을 참조한다. 이 때 애플리케이션은 설정 값에 의존적이다. 두 번째 예시를 코드로 옮겨보면 다음과 같다. Calculator는 CalculatorConfig의 값에 따라 동작 여부를 결정한다. data class CalculatorConfig( val name: String, val status: Boolean = true ) class Calculator { fun isAvailable(): Bo..

    스택과 힙 메모리, 그리고 멀티 스레드

    JVM Memory는 스택과 힙 영역으로 구분된다. 이들은 어떻게 다르고 멀티 스레드에서는 어떻게 동작하는걸까? Context 코틀린 프로그래밍에서 클래스의 인스턴스를 생성할 때 비용이 발생한다. 인스턴스를 생성하고 더 이상 사용하지 않을 경우 가비지 콜렉션 과정을 통해 메모리에서 해제하는 과정 또한 비용이 발생한다.따라서 인스턴스를 매번 생성할 필요가 없는 경우 매번 인스턴스를 생성하지 않는 것이 성능 측면에서 더 유리하다. 이 때문에 개발자는 요청마다 매번 인스턴스를 생성해야 하는지, 생성하지 않고 이미 생성된 인스턴스를 재사용할 것인지를 판단해야 한다. 이에 대한 기준은 인스턴스가 상태 값을 유지해야 하는지에 따라 구분된다. 송금 관리 시스템 예를 들어 은행 송금 시스템의 경우엔 송금을 관리하는 하..

    localhost는 IPv6와 IPv4 어떤걸로 동작할까?

    Java를 이용해 웹 서버를 구현하던 중 신기한 현상(?)을 발견해 그 내용과 해결 방법을 공유해보려 한다. Context Java에서 서버소켓을 생성하기 위해선 ServerSocket 클래스가 사용된다. int port = 8080; try (ServerSocket listenSocket = new ServerSocket(port)) { log.info("Web Application Server started {} port.", port); // 클라이언트가 연결될때까지 대기한다. Socket connection; while ((connection = listenSocket.accept()) != null) { // Do something .. } } 그리고 해당 서버에 액세스하는 방법은 크게 3가지 ..