일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 제주
- 엘라스틱서치
- intellij
- 스프링 배치
- hdfs
- Spring
- docker
- 도메인주도설계
- 일본 백패킹
- Spring Batch
- Gradle
- hadoop
- Angular2
- 구마모토 백패킹
- 인텔리J
- SBT
- design pattern
- apache storm
- elastic search
- DDD
- Spring XD
- Hbase
- Storm
- Linux
- Clean Code
- scala
- elasticsearch
- Java
- Spring Boot
- nginx
- Today
- Total
목록Methdology (68)
욱'S 노트
예외(Exception)의 문제점예외를 던지는 것은 부수효과이다. 그로 인한 문제점은 제어 상실이다. 제어 상실은 예외가 처리되지 않아 프로그램이 중단되거나, 호출 스택위의 어떤 코드가 예외를 잡아서 예외를 처리하는 상황을 의미한다.아래의 코드를 보면 치환 모델이 제공하는 단순한 추론을 벗어나서 참조투명성이 깨지는 것을 확인할 수 있다. 예외를 사용하면 프로그램 전체에서 전역적 추론을 해야되는 문제가 발생한다.fun failingFn(i: Int): Int { val y: Int = throw Exception("boom") // return try { val x = 42 + 5 x + y } catch (e: Exception) { 43 // ..
대수적 타입(ADT)대수적 타입 즉 Algrebraic Data Type은 합타입과 곱타입으로 표현된 타입이다. 그렇다면 합타입과 곱타입이란 무엇인가?합타입대표적으로 enum class가 있다. 아래의 RGB 타입은 RED, GREEN, BLUE 3가지만 존재할 수 있다.enum class RGB { RED(), GREEN(), BLUE()}곱타입대표적인 예로 class가 있다.data class Person(val name: String, val age: Int, val email: String)val lazysoul = Person("lazysoul", 33, "kotlin@gmail.com")val goinhacker = Person("goinhacker", 36, "fp@gmail..
불변 데이터(Immutable Data)이전 회차에서 살펴보았다시피 부수효과란 함수 내부의 구현이 함수 외부의 상태에 영향을 끼치면 안된다는 것을 의미한다. 가장 기본적인 룰은 기존 데이터를 변경하지 않고, 새로운 데이터를 만들어 내면 된다. 코틀린에서는 copy라는 내장함수를 제공하기 때문에 쉽게 다를수 있다.data class Deposit(val amount: Int) { fun withdraw(amount: Int): Deposit = copy(amount = this.amount - amount)} val deposit = Deposit(100)val newDeposit = deposit.withdraw(50) Optics기본적으로 코틀린의 Data클래스는 불변 데이터 ..

개요프로그래밍의 패러다임은 세가지가 있다. 명령형 프로그래밍 혹은 절차식 프로그래밍(Imperative Programming)객체지향 프로그래밍(Objective Programming)함수형 프로그래밍(Functional Programming)왜 함수형 프로그래밍이 등장하게 되었을까? 간단한게 말하자면 함수형 프로그래밍은 명령형 프로그래밍의 대안이다. 나같은 경우도 객체지향과 함수형 프로그래밍을 혼합해서 사용한다. 프로그램을 역할을 나눌 때는 객체지향으로 로직을 전개할 때는 함수형 프로그래밍을 사용하는 편이다.명령형 프로그래밍은 지시를 하나하나 내리는 방식을 의미한다. 지시를 수행함으로써 시스템의 상태가 변경된다. 하지만 시스템이 커질수록 코드에 대한 추론이 어려워지고 복잡성이 증가하며 테스트가 어렵다는..
요약 스크럼칸반등장시기1995년2004년핵심스프린트WIP(Work In Process)상황프로젝트와 같이 목표가 명확하고 업무 산정 및 할당이 용이한 상황지속적으로 업무를 다루며 프로젝트 진행 및 ops를 동시에 수행해야 하는 작은 단위에 팀스크럼스크럼은 여러 개의 스프린트로 나누어 진다. 스프린트는 프로젝트 단위로 상이하지만 대체적으로 1~2주 단위로 진행된다.스프린트의 시작 시점에 해당 스프린트 기간 동안 작업할 수 있는 개발자의 개개인의 시간들을 모두 합쳐 총 작업 시간을 책정하고, 수행할 작업들을 추산하는 플래닝을 진행한다.스프린트 종료 시점에는 진행했던 작업들에 대한 회고를 진행한다.기본적으로 스프린트는 플래닝한 작업를 완료하는 것을 목표로 진행한다. 스프린트 중간에 들어오는 이슈들은 백로그에 ..
Use nouns to represent resourcesRESTful URI는 리소스를 언급해야 되며, 행동을 언급해서는 안된다. 예를 들면 다음과 같다.Users of the systemUser AccountsNetwork Devices etc.http://api.example.com/device-management/managed-deviceshttp://api.example.com/device-management/managed-devices/{device-id}http://api.example.com/user-management/usershttp://api.example.com/user-management/users/{id} 더 명백하게 리소스 아키타입을 4가지 카테고리 분류하자.(document,..
작성자1. 좋은 CL 설명 작성하기기능변경RPC 서버 메시지 빈칸 목록에서 크기 제한을 제거합니다.FizzBuzz와 같은 서버에는 매우 큰 메시지들이 있고 재사용 이점이 있습니다. 빈칸 목록을 더 크게 만들고 시간이 지남에 따라 천천히 빈칸 목록을 해제하는 고루틴(goroutine)을 추가합니다. 따라서 유휴 서버는 모든 빈칸 목록을 해제합니다. 리팩토링TimeKeeper를 사용하여 TimeStr과 Now 메서드를 사용하도록 태스크를 구성한다.태스크에 Now 메서드를 추가하여, borglet() 접근자 메서드를 제거할 수 있습니다. (OOMCandidate에서 borglet의 Now 메서드 호출하는데만 사용) 이것은 TimeKeeper에 위임하는 Borglet 메서드를 대체합니다. 결국, Now 메서드를..

Spring MVC스프링 MVC의 기본동작은 ThreadPerRequest이다. Sync/Blocking1 Request -> 1 Thread많은 수의 Thread Pool을 사용한다.스레드 수가 너무 많으면 컨텍스트 스위칭에 대한 비용이 증가스레드 수가 너무 적으면 스레드 고갈로 인한 지연이 발생하는 문제점을 가지고 있다.처리 순서는 다음과 같다.일단 요청이 들어오면 스레드를 하나 할당 받는다.요청은 Filter -> DispatcherServlet -> Controller로 전달되고, 해당 스레드는 IO작업이 발생하더라도 블락킹된다.Spring WebFlux스프링 WebFlux의 동작 방식은 EventLoop이다. Async/Non-BlockingN Request -> 1 ThreadN: M 이지만 ..

에코서버 작성간단한 에코서버를 작성해보자. 아래 코드에서는 한번에 하나의 요청만을 처리하게 된다.import java.net.ServerSocketimport java.net.Socketobject BlockingServer { @JvmStatic fun main(args: Array) { val server = ServerSocket(8080) while (true) { val socket = server.accept() handleRequest(socket) } } fun handleRequest(socket: Socket) { println(Thread.currentThread().name..

IO 모델이란?어플리케이션에서 디바이스간 데이터 전송 및 수신을 위해서는 OS의 시스템콜이 발생한다.write system call의 경우, OS 커널은 전송하고자하는 데이터를 소켓 전송 버퍼에 복사하고, read system call의 경우 OS 커널은 수신 받은 데이터를 소켓 수신 버퍼에 복사한다.Linux IO 기본개념File Descriptor리눅스 혹은 유닉스 계열의 시스템에서 프로세스가 파일을 다룰 때 사용하는 개념이다. 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값이며 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스의 인덱스이다. 리눅스(유닉스) 에서는 모든것을 파일로 취급한다.(파일, 소켓 등) 각각의 프로세스는 File desciptors의 테이블을 가지고 있다.IO ..