[Java] Java 네트워크 Deep Dive
2023. 7. 30. 12:37
Java/Deep Java
백엔드 개발자의 중요한 소양 중 하나는 네트워크에 대한 이해입니다. 분산환경에 대한 경험을 요구하는 회사가 많아지면서 그에 따른 네트워크에 대한 이해도 그 어느 때보다 중요하게 됐습니다. 이번 포스팅에서는 Java NIO는 TCP를 어떻게 처리하는지 살펴보겠습니다. 포스팅에 첨부된 소스코드는 아래 github 링크에서 확인할 수 있습니다. GitHub - seonwoo960000/java-nio-practice Contribute to seonwoo960000/java-nio-practice development by creating an account on GitHub. github.com Java NIO(New I/O) Java NIO는 확장성 있는 Java 입출력(I/O) 기능을 구현할 수 있는 A..
[AWS] 사이드 프로젝트용 AWS IaaC - Cloudformation
2023. 7. 24. 08:11
Infrastructure/AWS
새로운 사이드 프로젝트를 시작할 때마다 AWS의 환경을 구축하는 작업은 저에게 있어 매우 귀찮은 일 중 하나였습니다. AWS는 cloudformation를 통해 infrastructutre as a code 기능을 제공하는데, 이 기능을 활용해 제 번거로움을 덜 수 있었습니다. cloudformation는 AWS에 구축하고자 하는 환경을 코드로 정의할 수 있도록 합니다. 따라서 동일한 환경을 재구축하는 게 매우 쉽고 인프라를 구축하는 데 있어 실수할 여지를 감소시킬 수 있습니다. 이번 포스팅을 통해 사이드 프로젝트를 위한 미니멀한 AWS 환경을 cloudformation를 통해 구축해 보겠습니다. 포스팅과 관련된 코드는 아래 github에서 확인할 수 있습니다. GitHub - seonwoo960000/..
[Spring Boot] Spring Batch Partitioning을 통해 Step을 분리해보자
2023. 7. 8. 14:21
Java/Spring Boot
Spring Batch 애플리케이션을 작업하다보면 이 애플리케이션이 처리해야하는 데이터가 많아졌을 때 다음과 같은 고민을 어떻게 해결할 수 있을지 궁금했습니다. 기존 코드 변경을 최소화하며 단일 서버의 처리량을 최대한 높이는 방법이 없을까? 동시성을 최소한으로 신경쓰고 처리량을 높일수는 없을까? 위 궁금증을 해소할 수 있는 방법을 찾던 중 spring batch의 partitioning 기능이 있다는 것을 알게됐습니다. 이번 포스팅에서는 위 궁금증을 spring batch에서 어떻게 해소해주는지 살펴보겠습니다. 코드는 아래 링크에서 확인해주세요. Main 브랜치에 partitioning을 적용하고 no-partitioning 브랜치는 일반적인 batch를 구현하였습니다. GitHub - seonwoo96..
[Central Dogma] 설정 관리의 최강자
2023. 6. 9. 21:04
Open Source/Central Dogma
Central Dogma는 라인에서 개발 및 관리하는 오픈소스입니다. 공식 사이트에서 CD(Central Dogma)는 다음과 같이 정의됩니다. Central Dogma is an open-source highly-available version-controlled service configuration repository based on Git, ZooKeeper and HTTP/2. 정의만 가지고 CD가 정확이 무엇을 하는지 모르겠으니, 그 기능에 대해 살펴보겠습니다. json, yaml, xml 형태의 설정파일을 CD에 저장하고 관리할 수 있습니다. 고가용성을 위한 복제 기능(multi-master repliaction)을 제공하고, 변경사항을 관리할 수 있습니다(version controlled ..
Chapter 7. Transactions
2023. 6. 6. 10:25
스터디/Designing Data-Intensive Applications
이번 장에서는 백엔드 개발자라면 매우 중요한 트랜잭션에 대해 소개합니다. 트랜잭션의 기본 개념과 더불어 다양한 DBMS에서 어떻게 트랜잭션을 구현하는지 살펴볼 수 있는 장이므로, 시간이 나실 때 읽을 것을 추천합니다. ACID Atomicity 원자성을 의미합니다. 트랜잭션 단위로 묶인 작업은 모두 성공하거나 모두 실패하는 트랜잭션의 속성입니다. MySQL은 트랜잭션의 원자성을 보장하기 위해 WAL(Write-Ahead Log)라는 로그성 파일을 활용합니다. 트랜잭션이 수행되는 과정에서 발생하는 데이터 변경을 로그로 WAL에 추가합니다(append). 만약 알 수 없는 이유로 시스템이 다운됐을 때, DBMS는 WAL를 참고해 반영되지 않은 트랜잭션의 작업을 디스크에 반영합니다. 트랜잭션이 WAL를 사용해..
[Career] 난 잘하고 있는걸까?
2023. 6. 4. 12:46
Career/회고
2년 만에 스타트업 CEO로 일하는 동갑내기 지인을 만났습니다. 그동안 배운 것을 이야기하며 즐거운 시간을 보냈습니다. 대화 중 가장 인상 깊었던 주제는 "주어진 일만 하는 사람과 자신의 목표를 향해 나아가는 사람은 어떤 경험적 차이가 있을까"였습니다. 친구들 또는 지인들과 얘기해 보면 현재가 만족스럽기 때문에 지금 하는 일에 충실한 사람들이 있고, 자기만의 목표가 있어 지속적으로 새로운 목표를 세워 열심히 도전하는 사람들이 있습니다. 이번 포스팅에서는 후자 유형의 사람들이 어떻게 동기부여를 얻는지 생각해 보고, 스스로 후자 유형이라고 생각하는 제가 목표를 향해 제대로 나아가고 있는지 회고해보고자 합니다. 대화를 나눈 지인분께서는 리스크를 감수하며 도전해 목표를 달성한 경험이 있습니다. 대학 졸업 후 창..
[Database] Isolation level에 따른 동시성 문제 분석
2023. 4. 30. 23:42
Database/Database 필수
데이터베이스 트랜잭션은 설정된 isolation level에 따라 방지할 수 있거나 방지할 수 없는 동시성 문제가 존재합니다. ANSI SQL(미국 표준 협회의 SQL 표준)은 isolation level에 따라 방지해야 하는 최소한의 동시성 문제를 다음과 같이 정의합니다. Isolation level Dirty Read Nonrepeatable Read Phantom Read Serialization Anomaly Read uncommitted O O O O Read committed X O O O Repeatable read X X O O Serializable X X X X 데이터베이스 구현체(MySQL, PostgreSQL 등)는 위 ANSI SQL을 따르기도 하지만 각각의 구현 방법에 따라 방지..
Cassandra는 어떻게 대규모 쓰기를 처리할까
2023. 4. 22. 16:58
논문
이번 포스팅에서는 분산환경에서 대규모 쓰기 처리를 지원하는 Cassandra 데이터베이스에 대해 살펴보겠습니다. Cassandra는 데이터를 저장할 때 SSTable을 활용합니다. SSTable은 상업용 데이터베이스에서 데이터를 저장하기 위해 사용되는 B tree와 성격이 많이 다르기 때문에 Cassandra를 이해하기 위해서는 SSTable에 대한 이해가 필요합니다. SSTable이 궁금하시다면 아래 포스팅을 참고해 주세요. Chapter 3. Storage and Retrieval 이번 챕터에서는 데이터베이스에 저장되는 데이터의 형태와 저장 방식에 따른 장단점에 대해 살펴보겠습니다. 데이터베이스는 데이터를 효율적으로 저장하고 찾기 위해 인덱스를 활용합니다. code-run.tistory.com Abs..