목록전체 글 (75)
코딩하는 오징어

컴파일 언어를 이용하는 개발자들은 코드를 작성하고 해당 코드를 컴퓨터에서 실행시키기 위해 빌드라는 작업을 한다. 빌드라는 작업은 소스 코드를 컴파일 할 뿐만아니라 dependency를 추가해주고 실행가능한 bundle(묶음 파일)을 생성한다. java에서는 jar파일 또는 war파일이 될 수 있다. 이러한 결과물을 우리는 Artifact(인공물)라고 부른다. 개발자가 필요한 라이브러리와 소스 코드의 classpath를 직접 명시해주고 Artifact를 생성할 수 있지만, 대개의 경우 Maven이나 Gradle 같은 빌드 툴을 이용하여 해당 작업을 자동화한다. Maven은 pom.xml에 Gradle은 build.gradle 파일에 빌드 작업을 각 빌드 툴에서 제공하는 명세 혹은 DSL로 작성한다. 그러면..

spring web mvc를 이용하여 서버 어플리케이션을 개발한다면 @Transactional을 이용하여 트랜잭션을 적용할 것이다. @Transactional이 적용된 메서드는 다음과 같은 flow로 메서드가 실행된다. (PlatformTransactionManager, DataSource 인터페이스에 대한 자세한 설명은 이 글에서 다루지 않는다.) 1. CglibAopProxy.DynamicAdvisedInterceptor.intercept(...) 2. TransactionInterceptor.invoke(...) 3. TransactionAspectSupport.invokeWithinTransaction(...) 4. TransactionAspectSupport.createTransactionIfN..
개발자는 어플리케이션을 개발 할 때 많은 것들을 고려한다. 코드를 작성하고 나서는 비즈니스 로직이 정확한 결과를 산출해내는지 검증하기 위해 테스트 코드를 작성하기도 하며, 성능 테스트를 통해 시스템에 병목 지점은 없는지 등을 확인한다. 어플리케이션이 정상적으로 시작되고 실행이 지속되는지는 매우 중요하다. 하지만 어플리케이션이 정상적으로 종료되는지도 굉장히 중요하다. 이번 글을 통해서 JVM 플랫폼 위에서 실행되는 어플리케이션이 정상적으로 종료되기 위한 여러 내용들을 소개하려고한다. 프로세스 종료 먼저, 프로세스를 종료시키기 위해 프로세스로 전달하는 시그널에 대해서 살펴보자. 시그널이 전달되면 시스템은 다음과 같이 동작한다. 시그널에대한 핸들러는 커널에 프로그래밍 되어 있으며 프로세스가 시그널을 받게 되면..

2021/02/23 - [Message Queue/Kafka] - Anatomy Kafka Consumer#1 Anatomy Kafka Consumer#1 Kafka는 Message Queue 시스템으로 현재 수 많은 곳에서 데이터를 처리하기 위해 사용되고 있다. kafka는 간단하게 다음과 같은 Architecture로 구성되어있다. kafka를 잘 활용하려면 topic의 구성 요소인 parit effectivesquid.tistory.com 지난 글에 이어 kafka의 consumer를 개발할 때 필요한 지식 및 전략들을 알아보자. 지난 글 1편을 읽어보고 이글을 읽는 것이 학습에 더 큰 도움이 될 것이다. 이 글은 다음과 같은 순서로 구성되어 있다. kafka consumer가 broker에게 보내..

Kafka는 Message Queue 시스템으로 현재 수 많은 곳에서 데이터를 처리하기 위해 사용되고 있다. kafka는 간단하게 다음과 같은 Architecture로 구성되어있다. kafka를 잘 활용하려면 topic의 구성 요소인 paritition들에 메시지가 어떻게 저장되는지, partition들의 replica가 broker들 사이에서 어떻게 관리되는지, 가용성과 메시지의 신뢰성있는 전달을 위해 producer application에서 다뤄야하는 option값들은 어떤 것들이 있는지 등 살펴보아야 할 것 들이 많다. 이러한 내용들은 차차 다뤄 보기로 하고, 이 글에서는 kafka client application중 하나인 consumer가 어떻게 동작하는지 자세히 살펴 볼 것이다. 이 글은 ka..
2020년 회고록을 작성하면서 2021년의 목표를 2020년과 동일하게 가져가겠다고 했었는데, 확실히 구체화 시키지 않으니 개인적인 성장이 더딘 것 같은 생각이 들었다. 그래서 구체화를 시키기로 했다. 여러가지가 있는데 크게는 완독할 기술 서적 리스트, 취득하고 싶은 자격증, 영어공부 세 가지이다. 완독할 기술 서적 리스트 카프카 핵심 가이드 (Kafka The Definitive Guide) Kubernetes Best Practices (쿠버네티스 모범 사례) 쿠버네티스 시작하기 도메인 주도 설계 구현 오브젝트 CODE The Hidden Languate Of Computer Hardware and Software 사이트 신뢰성 엔지니어링 Nginx HTTP 서버 운영체제와 정보기술의 원리 위의 도서..

작성하다보니 이 글은 개인적인 한 해의 일기가 되어버린 것 같다. 크게 도움은 안되는 글 같으니 읽지 않아도 좋을 것 같다. 한 사람이 한 해동안 얼마나 우울했냐를 구경하고 싶거나 동기부여가 필요한 분들만 보면 될 것 같다. 시간은 금과 같으니.. 2020년은 필자에게 좋은 일도 많고, 좋지 않은 일도 많은 다사다난한 해였던 것 같다. 코로나19라는 재앙이라면 재앙인 바이러스에 의해 평소에 즐기던 소소한 생활도 하지못했다. 필자는 일주일에 1~2회 정도 사우나를 갔었다. 스트레스를 푸는 필자만의 문화 생활이었고, 생각을 정리하는 공간이었는데 코로나19가 나의 소중한 공간과 시간을 빼앗아 갔다. 잡생각을 제거하고 스트레스를 푸는 활동을 못해서 그런지 우울한 해였다. 그러다 뜻밖의 김연아의 명언이 비수에 꽂..

JPA는 잘 알고 사용하면 굉장히 좋은 framework이지만 잘 모르고 사용한다면 여러가지 문제가 발생하는 어려운 친구이다. 여기서 다루는 문제외에도 N+1문제등 몇 가지 주의해야할 부분들이 있지만 해당 내용들은 다른 글에서 다루어 보겠다. 이번 글에서는 영속성 컨텍스트의 동작 방식에 의해 트랜잭션의 격리 수준이 정상적으로 동작하지 않는 것 처럼 보이는 것에 대해 공유하려한다. 먼저 트랜잭션 격리 수준에 대해 잘 모르겠다면 다음 글을 한번 보고 나서 해당 글을 읽으면 도움이 될 것 같다. 2018/03/09 - [Database/MySQL] - 데이터베이스 Transaction Isolation Level 데이터베이스 Isolation Level 오늘은 데이터베이스의 isolation level이 무엇..