일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- elasticsearch
- 스프링 배치
- spark
- apache storm
- design pattern
- scala
- Clean Code
- hadoop
- elastic search
- 제주
- hibernate
- Java
- Spring Batch
- 엘라스틱서치
- Hbase
- 인텔리J
- Spring XD
- 도메인주도설계
- Storm
- Gradle
- Spring Boot
- hdfs
- nginx
- intellij
- DDD
- SBT
- Angular2
- Spring
- docker
- Linux
- Today
- Total
목록Methdology (53)
욱'S 노트
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 ..
이번 레시피를 요약해보면 성공적이고 생산적인 페어 세션의 기본적인 재료들에 대해서 설명한다.이 포스트는 피보탈 랩스의 소프트웨어 엔지니어인 Avery Yen과 Bella Bei에 의해 작성되었다. 피보탈에서는 페어프로그래밍을 항상 요구한다. 그러나 페어프로그래밍은 두 명의 프로그래머가 단지 컴퓨터 앞에 선다는 것은 아니다. 레시피 - 인분 : 1 패어 재료 - 2 엔지니어 - 1 컴퓨터 - 2 마우스 - 2 키보드 - 2 모니터 - 1 코드베이스 - 1 풀기위한 문제 비법소스 - 정직 - 공감 - 신뢰 - 계속적인 커뮤니케이션 - 빠른 피드백 - 정기적인 휴식 - 공유 - 친절 요리법 1. 컴퓨터를 미러링된 디스플레이에 출력되도록 세팅하자. 각 마우스와 키보드는 컴퓨터를 컨트롤 할 수 있도록 하자. 2...
Intention-revealing interface 개발자가 컴포넌트를 사용하기 위해 컴포넌트의 구현 세부사항을 고려해야 한다면 캡슐화의 가치가 사라진다. 도메인 내의 개념을 클래스나 메서드 형태로 명확하게 모델링하여 인터페이스로 전달해야 한다. 주의할 점은 수행 방법에 관해서는 언급하지 말고 오직 결과와 목적만을 표현하도록 클래스와 연산의 이름을 부여해야 한다. Side-effect-free function CQRS가 중요하다. comand-query responsibility segregation. 즉 명령과 질의는 엄격하게 분리되어야 한다는 것을 의미한다. 다수의 규칙에 따라 상호작용하거나 여러가지 계산이 조합되면 극도로 예측하기가 힘들어진다. 이 의미는 연산을 호출하는 개발자가 연산 자체의 구현..
모든 종류의 어플리케이션에는 규칙을 검사하는 Boolean 테스트 메서드가 있다. 규칙이 단순하다면 invoice.isOverdue와 같이 규칙을 검사하면 된다. 그러나 종종 업무규칙이 엔티티나 VO가 맡고 있는 책임에 맞지 않고 규칙의 다양성과 조합이 도메인 객체의 기본 의미를 압도할 때가 있다. 만약 규칙을 도메인 계층에서 분리를 한다면 예를 들어 응용계층으로 내린다면 상황이 더 악화된다. Specification은 다른 객체에 대한 제약조건을 기술하며, 제약조건은 존재할 수도 존재하지 않을수도 있다. 특정한 목적을 위해 술어와 유사한 명시적인 VO가 바로 SPECIFICATION이다. public class RouteSpecification extends AbstractSpecification im..
모든 객체는 생명주기가 있다. 일반적으로 객체는 생성자를 호출해서 만들어진 다음 가비지 컬렉터에서 삭제된다. 그러나 엔티티의 경우는 더욱 오래 지속되며, 메모리안에서만 시간을 보내지 않는다. 그리고 각 엔티티들은 상호의존성을 갖는다. 이러한 객체들을 관리하는데 실패한다면 도메인주도개발을 시도하는 것에 쉽게 좌절될 수 있다. AGGREGATE 어그리게이트는 우리가 데이터 변경의 단위로 다루는 연관 객체의 묶음을 말한다. 각 AGGREGATE는 루트와 바운더리가 있다. 루트는 단 하나만 존재하며 외부에서 객체를 참조할때는 어그리게이트 루트만을 통해서 이루어져야만 한다. 또한 삭제와 변경도 어그리게이트 루트를 통해서만 이루어져야 한다. 외부객체는 어그리게이트 루트만 접근할 수 있게 하고 내부만 감춰야만 한다...
엔티티 VS VO 어떠한 객체가 상태를 가진다면 엔티티와 VO라고 생각할 수 있다. 둘의 차이점은 연속성(continuity)와 식별성(identity)를 가지는 가에 있다. 연속성과 식별성이 필요하다면 엔티티이다. 여기에서 중요한 점이 영속성이 엔티티와 VO을 나누는 개념은 아니다. VO도 엔티티와 함께 데이터베이스에 저장될 수 있다. 연관관계 각각의 엔티티는 탐색 가능한 연관관계를 가질 수가 있다. 일대일, 일대다, 다대일, 다대다이다. 사실 현실 세계의 모든 엔티티들은 양방향 디펜더시를 가진다. 하지만 연관관계를 쉽게 다루기 위해선 단방향으로 관계를 단순화할 필요가 있다. -> 범균님은 무조건 양방향 디펜던시는 제거해야 한다고 한다. 탐색방향을 부여하고, 한정자를 추가하고 중요하지 않는 연관관계는 ..