Dev 91

Partitioner와 Multi Thread를 활용한 Spring Batch 성능 개선

8비트 MSX로 컴퓨터를 배웠으나 나의 첫 컴퓨터는 IBM XT였고, 꽤 오랜 기간 DOS를 사용했다. 그래서인지 아직도 배치하면 AUTOEXEC.BAT가 같이 생각난다. 이번에 정리할 내용은 많이 사용하는 스프링 배치의 성능 개선에 대한 것이다. 배경백엔드 서비스를 운영하는 개발팀은 이미 다양한 배치를 운영하고 있을 것이고, 스프링 배치로 구현되었을 확률이 높다. 많은 배치는 서비스 사용량이 적은 새벽에 실행되고, 서비스가 작을 때는 성능에 민감하지 않아도 괜찮다. 하지만, 서비스가 커지고 배치가 처리해야 하는 데이터의 양이 증가하면서 배치의 실행 시간도 같이 증가할 것이다. 예를 들어 매일 새벽 3시에 시작하는 배치의 실행 시간이 점진적으로 증가하여 9시까지 실행되고 있다면 문제가 될 수 있고, 1시..

Dev 2024.05.21

가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

책을 손에서 놓지는 않았었는데, 독서 후기를 정리한 지가 벌써 꽤 오래되었다. 다 읽은 책을 덮고 내용을 복기하며 글로 정리한다는 게 은근히 시간이 들어가는 작업이긴 하다. 현재 회사로 이직할 때 디자인 인터뷰라는 다소 생소한 테크 인터뷰 과정을 지원자 입장에서 거쳤고, 최근에는 같은 과정을 면접자 입장에서 진행하고 있다. 이와 관련된 기술 도서 하나를 개인적으로 추천하려고 한다. 코딩 테스트에는 많이들 익숙하지만, 디자인 인터뷰는 아직 낯설어 하는 분들이 많다. 이 책이 많은 도움이 될 것이라고 생각한다. 이 책은 2021년에 출간된 '가상 면접 사례로 배우는 대규모 시스템 설계 기초’ 도서에 이은 후속작으로 분량이 2배 정도 늘어난 것 같다. 전작은 시스템 아키텍처에 대한 가벼운 소개 정도로 추상화 ..

Dev 2024.03.16

진화적 아키텍처

감사하게도 한빛미디어 출판사에서 도서 리뷰 요청을 해주셨다. 책도 보내주셨지만, 이제 종이책은 보기 힘들어서 알라딘 이북으로 직접 구매해서 봤다. 그러므로, 이 글은 직접 구매한 도서를 읽고 간단히 정리하는 것으로 그동안의 도서 후기와 다르지 않다. 얼마 전에 봤던 '소프트웨어 아키텍처 The Hard Parts’ 저자의 신간이다. 책의 표지에는 '개정판'이라는 언급이 없는데, 이 책은 2017년에 출간된 'Building Evolutionary Architectures: SUPPORT CONSTANT CHANGE'의 개정판이다. 진화적 소프트웨어 아키텍처는 여러 차원에 걸쳐 유도된 변화와 점진적 변화를 지원한다. 이 책은 위와 같은 정의를 어떻게 실현할 수 있는지에 대한 세부적인 사항을 설명한다. 그중..

Dev 2023.09.24

자바 알고리즘 인터뷰 with 코틀린 - 102가지 알고리즘 문제 풀이로 완성하는 코딩 테스트

베타리더로 참여했던 '자바 알고리즘 인터뷰 with 코틀린 - 102가지 알고리즘 문제 풀이로 완성하는 코딩 테스트' 도서가 곧(2023년 9월 20일) 출간됩니다. 전작도 재밌게 봤었고, 이번 신작도 미리 읽어보면서 재밌었습니다. https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=324537416 자바 알고리즘 인터뷰 with 코틀린 코딩 테스트와 알고리즘 인터뷰를 준비하는 개발자들을 위한 최고의 책 『파이썬 알고리즘 인터뷰』가 자바와 코틀린 코드로 무장하고 한층 업그레이드되어 돌아왔다! 200여 가지가 넘는 풍부 www.aladin.co.kr

Dev 2023.09.14

소프트웨어 아키텍처 The Hard Parts

얼마 전에 발표자로 참여했던 카카오 테크밋 행사의 패널 토의에서 리팩터링 전과 후의 차이를 수치로 측정할 객관적인 지표에 대한 질문의 답변으로 설명한 내용 중에 발표에서 소개했던 '코드 복잡도'와 이 책에서 읽었던 피트니스 함수에 대해서 간단히 소개했었다. 이 책은 예전에 소개했던 '소프트웨어 아키텍처 101'(이하 101)의 후속으로 많은 내용이 101과 이어지며, 101은 저자가 2명이었는데, 이 후속작은 저자가 4명으로 늘었다. 그 영향인지 가상의 팀을 구성하고 대화체로 상황을 설명하는 방식이 추가되었지만, 책의 분위기는 크게 달라지지 않았다. 101에서 계속 강조하던 트레이드오프의 중요성도 계속 강조된다. 소프트웨어 아키텍처에서는 최고의 설계를 고집하지 마세요. 그 대신에 나쁜 것 중에서 제일 나..

Dev 2023.08.06

gdbserver ptrace issue on Apple Silicon M1/M2

Docker's Multi-architecture support 애플 실리콘 칩을 기반으로 실행되는 macOS를 위한 'Docker Desktop For Mac'은 애플 실리콘 칩셋(이하 AArch64)에서 AMD64로 빌드된 이미지의 컨테이너 실행을 위해 Qemu 가상화를 사용한다. 'The Magic Behind the Scenes of Docker Desktop'와 4.1.3.0 Release note에서 관련 내용을 확인할 수 있다. 이 글은 이전 포스팅 'Full Remote Mode Of CLion With Docker'(이하 이전 포스팅 1번)와 'Remote Debug via GDB/gdbserver Of CLion With Docker'(이하 이전 포스팅 2번)에서 공유한 내용을 AArc..

Dev 2023.06.06

Sharing Containers Across Multiple Docker Compose

배경 실무에서 개발 중인 여러 프로젝트의 로컬 개발 환경에서 통합 테스트를 수행하기 위해 Docker Compose(이하 컴포즈)를 사용하고 있다. A라는 서비스를 실행하려면 MySQL, Zookeeper, Memcached가 필요하고, B라는 서비스를 실행하려면 MySQL, Zookeeper, Redis가 필요하다. 이렇게 서비스마다 필요한 외부 서비스(이하 컨테이너)들이 겹치는 것과 그렇지 않은 것이 있다. 중복되는 컨테이너들은 컴포즈의 컨테이너 네이밍 기능과 포트 매핑 기능으로 호스트에 노출하는 컨테이너의 이름과 포트를 서로 달리하여 각 프로젝트가 모두 자신만의 컨테이너를 사용하도록 구성되어 있다. 모두 A, B, C, D 이렇게 4개의 서비스가 이런 방식으로 구성되어 있고 서로 독립된 환경으로 그..

Dev 2023.05.29

JetBrains의 IDE에서 북마크 정보 마이그레이션

노후 장비 교체 이슈로 신규 M2 맥북을 받았다. 매번 맥북을 교체할 때마다 애플의 '마이그레이션 지원' 기능으로 편하게 작업했었는데, 이번에는 인텔 칩셋 환경에서 애플 실리콘 환경으로 넘어가는 것이라서 수동으로 세팅하기로 했다. 사용하는 앱들 하나씩 확인해서 새로 설치하고 설정 Export 하고 Import 하고 한 땀 한 땀 작업했다. JetBrains의 IDE는 'Settings Sync'라는 좋은 기능이 있어서 매우 편하게 끝나는 줄 알았는데, Bookmarks 정보는 Sync에 미포함이다. 코드 내비게이션에 북마크를 애용하고 있어서, 이걸 모두 버리고 갈 수는 없었다. 구글링으로 찾은 아래 문서에서 IntelliJ의 'Bookmarks' 정보를 추출하는 방법에 대한 기본적인 정보를 찾았다. 참고..

Dev 2023.05.22

자바 최적화 (Optimizing Java)

자바 코드 레벨의 최적화와 JVM, GC 튜닝 정도의 설명이 있으려나 했는데, 하드웨어 레벨의 이야기와 바이트 코드와 핫스팟에 대한 세부적인 이야기들로 매우 재밌게 읽었다. 개발하면서 코드 구현의 중요도는 가능하면 가독성과 테스트 용이성이 좋은 코드로 구현하는 것에 두고 있다. 최적화에 대한 고려는 적합한 자료구조를 선정하는 것, 불필요한 블로킹을 하지 않는 것 외에는 코드 구현 레벨에서 딱히 최적화에 신경 쓴 적은 없었던 것 같다. 심지어 명시적인 함수를 명시적으로 인라인으로 선언해 본 지도 좀 되었다. 대부분의 병목은 코드 구현 레벨보다 외부 연동에서 발생한다. 꽤 오래전에 사서 필요한 부분만 보고는 잊고 있다가 올해 다 봤다. 오래전에 리디북스에서 구매했었기에 PDF 형식의 eBook에서 텍스트 복..

Dev 2023.05.13
반응형