💡 넥스트 스탭의 TDD, 클린 코드 with Kotlin 8기 강의를 수강하며 정리한 내용입니다. 목차배경TDD, 클린 코드 미션을 진행하며 객체지향 설계에 대한 많은 고민을 하고 있다. 이번에는 잘못된 설계로 인해 발생한 양방향 의존성 사례를 살펴보고, 양방향 의존성으로 인해 발생하는 문제와 해결 방법에 대해 정리하였다. 내용미션을 진행하며, 양방향 의존관계가 발생하고 있다는 피드백을 받았다. 기능 구현에만 신경쓰다보니, 설계를 놓쳤는데 이번 기회에 양방향 의존성에 대한 문제점과 해결 방안을 알아볼 수 있었다. 기존 코드와 문제점양방향 의존성이 발생한 코드는 다음과 같다.Rows.ktclass Rows( val rows: List,) { fun updateMineCounts(): Rows..
목차배경최근 넥스트 스탭의 TDD, 클린 코드 with Kotlin 8기를 수강하며, 가능한 함수형 프로그래밍을 따르고 불변 객체로 설계하며 과제를 수행하고 있다. 최근 몇 년간, Java 8부터 도입된 Stream API와 코틀린의 일급 시민, 람다 표현식 등 등 함수형 프로그래밍은 새로운 패러다임으로 떠오르고 있는데, 그 중 불변 객체는 함수형 프로그래밍의 패러다임과 잘 맞는 중요한 구현 방안 중 하나이다. 이번 글에서는 불변 객체 설계와 그 예시, 장점과 단점을 살펴본다.예시value 값을 갖는 Element 인터페이스를 작성해보자. 이 인터페이스를 구현하는 방안은 가변과 불변에 따라 두 가지로 나뉜다. 먼저 가변 객체로 설계하고 구현하는 방안은 다음과 같다. updateValue() 메서드를 호출..
💡 넥스트 스탭의 TDD, 클린 코드 with Kotlin 8기 강의를 수강하며 정리한 내용입니다. 목차배경TDD, 클린 코드 미션을 진행하며 TDD와 클린 코드, 객체지향 설계에 대한 인상 깊은 많은 피드백을 받을 수 있었다. 이번에는 그 중 하나인 객체지향 설계 중 클래스 네이밍에 대한 얘기이다. 클래스클래스가 객체를 인스턴스화한다. 클래스는 객체의 팩토리이다. (객체가 살아있는 생명체라면 클래스는 객체의 어머니) 클래스 네이밍클래스의 이름은 무엇을 하는지에 대한게 아닌 무엇인지에 기반을 두고 지어야 한다. 즉, 올바른 클래스 이름을 짓기 위해선 클래스의 객체가 무엇을 캡슐화할 것인지 관찰하고 적절한 이름을 지어야한다. 즉 이를 통해, 외부에서 객체에게 무엇을 하도록 메시지를 던지면 객체 스스로 무..

💡 최상용님의 실습으로 배우는 선착순 이벤트 시스템 강의를 듣고 정리한 내용입니다. 목차 글 목록[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (1/3) - 동시성 이슈와 Redis로 해결하기[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (2/3) - Kafka로 시스템 안정성 향상하기[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (3/3) - 요구사항 변경과 쿠폰 발급 실패 예외처리[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (번외) - DLT(DeadLetterTopic)을 이용한 메시지 Consume 재처리 배경지난 [시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (3/3) - 요구사항 변경과 쿠폰 발급 실패 예외처리에서 쿠폰 발급 Consumer에서 ..

💡 최상용님의 실습으로 배우는 선착순 이벤트 시스템 강의를 듣고 정리한 내용입니다. 목차 글 목록[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (1/3) - 동시성 이슈와 Redis로 해결하기[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (2/3) - Kafka로 시스템 안정성 향상하기[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (3/3) - 요구사항 변경과 쿠폰 발급 실패 예외처리[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (번외) - DLT(DeadLetterTopic)을 이용한 메시지 Consume 재처리 배경지난 글에 이어서 쿠폰 발급 시스템을 고도화하고 안정성을 향상시켜본다. 이번 글에서는 발급 가능한 쿠폰 개수를 ID당 1개로 제한하는 요구사항이 추가되..

💡 최상용님의 실습으로 배우는 선착순 이벤트 시스템 강의를 듣고 정리한 내용입니다. 목차 글 목록[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (1/3) - 동시성 이슈와 Redis로 해결하기[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (2/3) - Kafka로 시스템 안정성 향상하기[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (3/3) - 요구사항 변경과 쿠폰 발급 실패 예외처리[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (번외) - DLT(DeadLetterTopic)을 이용한 메시지 Consume 재처리 배경지난 [시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (1/3) - 동시성 이슈와 Redis로 해결하기 글에서 가장 기본적인 선착순 이벤트 시스..

💡 최상용님의 실습으로 배우는 선착순 이벤트 시스템 강의를 듣고 정리한 내용입니다. 목차 글 목록[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (1/3) - 동시성 이슈와 Redis로 해결하기[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (2/3) - Kafka로 시스템 안정성 향상하기[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (3/3) - 요구사항 변경과 쿠폰 발급 실패 예외처리[시스템 디자인] 실습으로 배우는 선착순 이벤트 시스템 (번외) - DLT(DeadLetterTopic)을 이용한 메시지 Consume 재처리 배경실시간 이벤트를 진행하거나 트래픽이 순간적으로 몰릴 때(혹은 그러한 상황이 예상될 때) 발생할 수 있는 이슈와 해결방안에 대해 알아보기위해 인프런의 실..

💡 최상용님의 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 듣고 정리한 내용입니다. 목차 글 목록[시스템 디자인] 재고시스템으로 알아보는 동시성이슈 해결방법 (1/3) - 동시성 이슈와 Application Level로 해결하기[시스템 디자인] 재고시스템으로 알아보는 동시성이슈 해결방법 (2/3) - 데이터베이스 락(Lock)으로 해결하기[시스템 디자인] 재고시스템으로 알아보는 동시성이슈 해결방법 (3/3) - 레디스 분산 락(Lock)으로 해결하기배경지난 [시스템 디자인] 재고시스템으로 알아보는 동시성이슈 해결방법 (2/3) - 데이터베이스 락(Lock)으로 해결하기에 이어 이번에는 레디스(Redis)를 활용하여 동시성 문제를 해결해본다. 동시성 문제를 해결하기 위해서 레디스에서는 대표적으로 L..

💡 최상용님의 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 듣고 정리한 내용입니다. 목차 글 목록[시스템 디자인] 재고시스템으로 알아보는 동시성이슈 해결방법 (1/3) - 동시성 이슈와 Application Level로 해결하기[시스템 디자인] 재고시스템으로 알아보는 동시성이슈 해결방법 (2/3) - 데이터베이스 락(Lock)으로 해결하기[시스템 디자인] 재고시스템으로 알아보는 동시성이슈 해결방법 (3/3) - 레디스 분산 락(Lock)으로 해결하기배경지난 [시스템 디자인] 재고시스템으로 알아보는 동시성이슈 해결방법 (1/3) - 동시성 이슈와 Application Level로 해결하기 글에서 멀티 스레드 환경에서 개발할 때 발생할 수 있는 경합 상태(Race condition)를 비롯한 동시성 이..

💡 최상용님의 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 듣고 정리한 내용입니다. 목차 글 목록[시스템 디자인] 재고시스템으로 알아보는 동시성이슈 해결방법 (1/3) - 동시성 이슈와 Application Level로 해결하기[시스템 디자인] 재고시스템으로 알아보는 동시성이슈 해결방법 (2/3) - 데이터베이스 락(Lock)으로 해결하기[시스템 디자인] 재고시스템으로 알아보는 동시성이슈 해결방법 (3/3) - 레디스 분산 락(Lock)으로 해결하기배경과거 애플리케이션 실행 속도가 너무 느려 해결방안을 고민하던 도중 멀티 스레드 환경에서 처리할 수는 없을까 의문을 가졌던 적이 있다. 하지만 당시에는 멀티 스레드 환경으로 개발할 때 발생하는 이슈와 주의해야할 점, 이슈 해결 방안에 대해 충분한 지식..