본문 바로가기

전체 글

코틀린 코루틴의 정석 (1) JVM 프로세스, 스레드 메인 스레드: 프로세스의 시작, 끝을 함께하는 매우 중요한 역할을한다. 예외로 인해 메인 스레드가 강제로 종료되면, 프로세스도 강제 종료된다. 단일 스레드 프로그래밍 스레드 하나만 사용해서 실행되는 애플리케이션 단일 스레드의 한계 : 스레드는 하나의 작업을 수행하는 동안 다른 작업을 수행하지 못한다. 응답성이 안 좋아진다. 멀티스레드 프로그래밍, 스레드를 여러개 사용해 작업을 처리하는 프로그래밍 기법 각각의 스레드가 한번에 하나의 작업을 처리하므로 여러작엉블 동시에 처리하는 것이 가능해진다. (병렬처리) 1.3 스레드, 스레드 풀을 이용한 멀티 스레드 프로그래밍 Thread 클래스를 이용한 방법 및 한계 Thread 클래스를 상속하는 클래스 class ExampleThread :.. 더보기
코틀린 동시성 프로그래밍 - 3 Job Vs Deferred Job : -Fire and Forget 방식 작업 - 한 번 시작된 작업은 예외가 발생하지 않는한 대기하지 않는다. - launch 블록을 통해 생성 - 잡의 예외는 잡을 생성한 곳 까지 전파된다. 잡의 라이프 사이클 wait children +-----+ start +--------+ complete +-------------+ finish +-----------+ | New | -----> | Active | ---------> | Completing | -------> | Completed | +-----+ +--------+ +-------------+ +-----------+ | cancel / fail | | +----------------+ | | V V +--.. 더보기
Reactive Programming Pull vs Push 리액티브 프로그래밍은 Push, Pull 로 모두 구현가능하다. Producer -> Cosumer 관계에서 Producer는 데이터를 생상하는 쪽 Consumer는 데이터를 받는 쪽이라고 가정한다. Pull방식 : Consumer가 데이터가 필요할때 Producer에게 요청하는 방식 그리고 요청받은 데이터가 들어오면 콜백 함수나 이벤트 핸들러 등을 통해 그 데이터를 처리 하는 방식 함수의 리턴 타인이 Promise, Iterable 등이면 Pull 방식이다. 이 방식은 문제가 있다. 위 다이어그램은 Service(Consumer), Database(Producer) 사이의 플로우이다. getNextAfterId로 Cosumer가 요청 (pull) 하면 Producer는 쿼리해서 response를 내려준.. 더보기
1 새로운 인프라 환경이 온다. 1. 애자일 방법론 사용자마다 독립적인 환경에서 개발해도 모두 동일한 결과가 보장되며 성능을 보장하며 가용 리소스를 최대한 확보할 수 있는 인프라 환경 => 컨테이너 인프라 환경 2. 컨테이너 인프라 환경 컨테이너를 중심으로 한 인프라 환경 하나의 운영 체네 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 상태 각 가상머신마다 독립적인 운영체제를 가지고 있는 방식과 달리 운영체제를 공유하고 있어 자원을 더 효율적으로 사용할 수 있다. 3. 모놀리식 vs 마이크로 서비스 모놀리식 아키텍처 (Monolithic Architecture) 하나의 어플리케이션에 여러 가지 기능을 가진 서비스들이 통합돼 있는 구조 모놀리식 아키텍처은 초기 구성이 용이하며 개발이 단순하며 코드 관리가 간편하지만 코드 .. 더보기
카프카 개요 및 설명 팀에서 카프카를 사용한다는데 도대체 이야기를 이해하기 힘들어서 공부하면서 포스팅 하기로 함 Before Kafka 처음에는 앱간 데이터 전송은 단순한 Source -> Target 단방향 통신으로 시작했으나 Source, Target 앱 개수가 많아지면서 데이터 전송 라인이 매우 많아짐. => 데이터 전송 라인이 많아지면 앱 배포와 장애에 대응하기 어려워짐 => 타깃 애플리케이션 장애시 그대로 소스 애플리케이션으로 장애 전파 => 데이터 프로토콜 파편화가 심해짐(데이터 포맷에 변경이 생기면 온군데에다가 다 수정해줘야함) After Kafka - 아파치 카프카는 LinkedIn 데이터팀에서 만든 신규 시스템으로 Source와 Target 사이의 Coupling을 느슨하게 결합시켜 Source는 카프카에 데.. 더보기
Kotlin 익명 클래스 코틀린에서 익명 클래스를 만들 때에는 object 키워드를 이용하면 된다. object 키워드는 싱글턴 패턴을 구현할때 사용 키워드기도 하지만, 익명 클래스를 만드는 용도로도 사용할 수 있다. 인터페이스에 함수가 하나만 있을 경우 SAM( Single Abract Method) 또는 함수형 인터페이스(Functional Interface)라고 부르며) 이경우 object를 생략하고 람다식으로 익명 클래스를 만들수 있다. (반드시 fun interface 키워드로 인터페이스를 정의해야한다 !!) interface AA { fun aa() fun bb() } fun interface SAM{ //반드시 fun를 붙여줘야한다. fun sam(n : Int) : Boolean } fun main(){ val a.. 더보기
Junit 분석 JUnit은 저자가 많다 하지만 시작은 켄트벡과 에릭 감마, 두 사람이다. 두 사람이 함께 아틀란타 행 비행기를 타고 가다 JUnit을 만들었다. 켄트는 자바를 배우고 싶었고 에릭은 켄트의 스몰토크 테스트 프레임워크를 배우고 싶었다. "비좁은 기내에서 엔지니어 둘이 랩탑을 꺼내 코드를 짜는 일 밖에는 다른 무엇을 하겠는가?" 공중에서 세 시간 정도 일한 끝에 두 사람은 JUnit 기초를 구현했다. package junit.tests.framework; import junit.framework.ComparisonCompactor; import junit.framework.TestCase; public class ComparisonCompactorTest extends TestCase { public voi.. 더보기
창발성 떠오름 현상은 하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상이다. 모든 테스트를 실행한다. 중복을 없앤다. 프로그래머 의도를 표현한다. 클래스와 메서드 수를 최소로 줄인다. 테스트를 철저히 거쳐 모든 테스트 케이스를 항상 통과하는 시스템을 만들라. - 테스트가 가능한 시스템을 만들려고 애쓰면 설계품질이 높아진다. - SRP 를 준수하는 클래스일수록 테스트하기 쉽다. - 테스트 케이스가 많을수록 개발자는 테스트 코드를 쉽게 작성한다. - 결합도가 높으면 테스트 케이스를 작성하기 어렵다. DIP 의존성 주입, 인터페이스 추상화 등을 통해 결합도를 낮춘다. - 테스트 케이스를 만들고 계속 돌려라라는 간단하고 단순한 규칙을 따르면 시스템은 낮은 결합도.. 더보기