복제 방식에는 크게 두 가지가 있음1. 리더-팔로워 복제리더가 모든 쓰기를 처리함.팔로워는 리더의 데이터를 따라감.대부분의 데이터베이스가 이 방식을 씀.읽기를 팔로워로 분산하면 성능은 좋아짐.근데 리더 장애 시 복구가 어려울 수 있음.또 팔로워의 데이터가 최신이 아닐 수도 있었음.2. 멀티리더 복제여러 노드가 동시에 쓰기 처리함.충돌이 발생할 수 있음.충돌 해결 정책이 필요했음.지리적으로 분산된 시스템에서 유용함.3. 리더 없는 복제모든 노드가 동등하게 읽기/쓰기 처리함.높은 가용성을 가짐.일관성 유지가 어려움.애플리케이션이 충돌을 감수하거나 직접 해결해야 했음.복제를 하면 생기는 문제도 있었음. • 복제 지연 때문에 읽었을 때 최신 데이터가 아닐 수 있었음. • 팔로워가 리더보다 뒤처질 수 있었음. •..
1. 파티셔닝이란?파티셔닝은 데이터를 여러 파티션 또는 샤드로으로 나누어 저장하는 방법입니다. 각 파티션은 독립적인 저장소이자 처리 단위가 되어, 분산 시스템에서 데이터 작업을 병렬로 수행할 수 있게 해준다.예:트위터는 유저 ID 기준으로 트윗을 파티셔닝하여 수억 명의 사용자 트윗을 분산 저장MySQL의 샤딩된 테이블은 서로 다른 서버에 분산되어 트래픽을 나눔2. 파티셔닝 키 (Partitioning Key) 선택파티셔닝에서 가장 중요한 결정은 어떤 필드를 기준으로 데이터를 나눌 것인지입니다. 이 필드를 샤딩 키라고 부른다.좋은 파티셔닝 키의 조건:균등 분산: 특정 키에 데이터가 몰리지 않아야 함쿼리 효율성: 자주 조회되는 쿼리가 해당 키로 빠르게 조회 가능해야 함불변성: 파티셔닝 키는 한 번 저장된 후..
5장. 복제 (Replication)1. 복제를 사용하는 이유데이터 복제는 하나의 데이터를 여러 서버에 저장하여 다음과 같은 목적을 달성하기 위해 사용된다.내결함성 향상: 하나의 서버가 장애를 일으켜도 다른 복제본을 통해 서비스 지속 가능지연 시간 단축: 사용자와 가까운 지역의 서버에서 응답 제공 가능읽기 처리량 확장: 읽기 요청을 여러 서버에 분산하지만 복제는 동기화 지연, 일관성 문제, 충돌 처리와 같은 복잡한 문제도 함께 수반한다. 2. 리더-팔로워 복제구조리더 서버에서만 쓰기 가능팔로워 서버는 리더의 데이터를 복제하여 읽기만 수행리더의 변경 사항은 로그를 통해 팔로워로 전달데이터 흐름클라이언트가 리더에게 쓰기 요청리더가 데이터를 변경하고 로그에 기록리더가 변경 로그를 팔로워에게 전송팔로워가 로그를..
1장. 신뢰할 수 있고, 확장 가능하며 유지 관리가 쉬운 애플리케이션 설계1. 애플리케이션의 역할 변화예전에는 애플리케이션이 단순히 데이터를 입력받아 저장하고 조회하는 역할이었지만,지금은 수많은 사용자, 데이터, 외부 서비스와 통신하는 복잡한 시스템이 됨.이런 변화 속에서, 애플리케이션의 핵심 품질 속성 세 가지를 기준으로 설계해야 함.2. 신뢰성 (Reliability)장애가 발생해도 시스템이 올바르게 동작하는 것.장애의 예:하드웨어 오류 (디스크 불량, 서버 다운 등)소프트웨어 오류 (버그, 예외 처리 실패)사람의 실수 (잘못된 설정, 운영 실수 등)이를 대비하는 방법:복제(replication): 데이터를 여러 곳에 복사해 장애 시에도 접근 가능리트라이와 타임아웃: 일시적 오류에 대비모니터링과 알림..
회고를 시작하며 2023년은 나에게 많은 일이 있던 해였다. 이룬것도 많았고 놓친것도 많았다. 말고 많고 탈도 많았던 2023년을 되돌아보자. 팀 이동 줌인터넷 재직 당시 다른 팀에서 진행하는 스터디에 합류해서 같이 공부해 보자는 제안을 받았다. 평소 다른 팀들과 친해질 수 있는 계기가 없기 때문에 좋은 기회라고 생각되어 가상 면접 사례로 배우는 대규모 시스템 설계 기초 라는 책을 같이 학습하였다. 단순히 책을 읽는 것으로 끝나지 않고, 각자 생각하는 설계를 화이트보드에 적어가면서 토론하는 방식으로 진행되었는데 새삼스레 다른 팀 문화를 느낄 수 있어 좋은 경험이었다. 스터디를 진행하던 도중 파트장님이 같이 근무해 보자는 제안을 먼저 해주셨고, 몇 차례의 면담 끝에 핀테크개발팀 에 합류하게 되었다. 사내에..
회고를 시작하며 2022년 하반기는 개인의 성장보다는 회사 업무에 집중했던 시기였다. 이직 후 회사 업무 프로세스에 적응이 필요하기도 했고 보상 심리가 생겨 나름대로 휴식도 많이 취했다. 스스로 만족스럽지 못한 2022년 하반기 회고를 시작해보자 파일럿 프로젝트 사내 신규 입사자들은 입사 후 파일럿 프로젝트를 진행하는 문화가 있다. 입사 시기에 맞춰 파일럿 프로젝트 과제를 준비해주셨고 내가 진행했던 과제는 기존 회원 구조를 통합 회원으로 개선하는 것이었다. 통합 회원을 간단하게 설명하면 하나의 계정이 여러 개의 소셜 아이디와 연동하는 것을 의미한다. 단기간에 기존 회원 구조를 파악하면서 개선하는 것은 생각보다 쉽지 않았다. 인수인계를 해주신 파트장님도 다른 파트에서 근무하고 계셨고, 회원 서비스 담당 기..
회고를 시작하며 올해를 맞이하며 처음으로 정했던 첫 목표는 회고 작성하기 였다. 자신을 아무리 잘 알고 있다고 해도 스스로 칭찬과 피드백을 글로 남긴다면 지속적인 성장에 도움을 줄 수 있으리라 생각했다. 2022년 상반기는 선택과 집중 이 필요한 시기였고 나에게 많은 변화가 있던 시간이었다. 시나브로 모르는 사이에 조금씩 조금씩 라는 의미를 가진 순우리말이다. 나는 올해의 키워드를 시나브로 로 정했다. 출퇴근 시간, 평일 저녁, 주말에 꾸준히 공부하는 습관을 길들였다. 이렇게 꾸준히 공부하는 습관은 시나브로 어느샌가 머릿속에 지식으로 축적되리라 생각했고 매일 공부하기 위해 노력하였다. 1일 1커밋 문화는 지속해서 공부하는 습관을 길들이기에 효과적이라고 생각한다. 시각적으로 재미도 있고, 공부한 내용을 p..
상수보다는 열거형을 사용하자 Enum Class 은 열거형이라고 불리며, 서로 연관된 상수들의 집합을 의미합니다. Enum Class 의 장점 Enum Class 는 완벽한 싱글톤이다 Thread-safety, Serialization 이 보장된다 기존 코드의 문제점 비즈니스 로직의 코드를 테스트도 만들어서 꼼꼼하게 점검했지만, 깔끔한 코드를 추구하는 스프링 사용자답게 만들어진 코드를 다시 한번 검토해보자. 코드에 중복된 부분은 없는가? 코드가 무엇을 하는 것인지 이해하기 불편하지 않은가? 코드가 자신이 있어야 할 자리에 있는가? 앞으로 변경이 일어난다면 어떤 것이 있을 수 있고, 그 변화에 쉽게 대응할 수 있게 작성되어 있는가? 트랜잭션 트랜잭션 경계설정 데이터베이스는 그 자체로 완벽한 트랜잭션을 지원..
의존관계 주입 방법은 크게 4가지가 있습니다. 다양한 의존관계 주입 방법을 알아보고 최근 스프링에서 왜 생성자 주입 방식을 권장하는지 살펴보겠습니다. 수정자 주입 자바빈 프로퍼티 규약의 setter 메소드 방식을 사용하는 방법입니다. 선택, 변경 가능성이 있는 의존관계에 사용됩니다. @Component public class MemberService { private MemberRepository memberRepository; @Autowired public void setMemberRepository(MemberRepository memberRepository) { this.memberRepository = memberRepository; } public Member selectMember(Long ..
초난감 예외처리 초난감 예외처리 1 try { ... } catch(SQLException e){ }예외를 잡고는 아무것도 하지 않는 코드이다. 예외 발생을 무시해버리고 정상적인 상황인 것처럼 다음 라인으로 넘어가겠다는 분명한 의도가 있는 게 아니라면 연습 중에도 절대 만들어서는 안 되는 코드다. 초난감 예외처리 2 } catch(SQLException e) { System.out.println(e); }초난감 예외처리 3 } catch(SQLException e) { e.printStackTrace(); }예외가 발생하면 화면에 출력해주는데 뭐가 문제일까? 운영서버로 올라가면 콘솔 로그를 누군가가 계속 모니터링하지 않는 한 이 예외 코드는 심각한 폭탄으로 남아 있을 것이다. 예외를 처리할 때 반드시 지..