본문 바로가기

전체 글159

재고시스템으로 알아보는 동시성 이슈 해결방법 눈여겨보다 인프런 할인 때 지른 강의. 트래픽이 많은 현업에서는 언어 수준의 동기화나 싱글 스레드 기반의 레디스를 많이 사용한다고 하던데, 마침 이 강의에서 간단한 요구사항과 함께 구현을 개선해나가는 과정을 소개해주셔서 도움이 되었다. 분산 환경에서의 락을 위해 레디스를 사용하는데, 자바에서 제공하는 구현체 중 Redisson이 락 획득 실패 시 재시도를 기본으로 제공하기 때문에 개발자 입장에서 사용하기 더 편하다는 팁을 얻었다. 외부 시스템에 의존하는 로직의 테스트는 어떻게 작성하는게 좋을지 아직도 의문이다. 재고시스템으로 알아보는 동시성 이슈 해결방법 | Notion Built with Notion, the all-in-one connected workspace with publishing capab.. 2024. 1. 18.
가상 면접 사례로 배우는 대규모 시스템 설계 기초 클라우드 커뮤니티에서 정말 추천을 많이 받았던 시스템 설계 책! GDSC 멤버들과 함께 읽어보았다. MSA 스터디와 마찬가지로 시야가 넓어지는 느낌을 많이 받았다. 구현 레벨까지 내려가지 않고 시스템 수준에서 책임을 나누기 때문에 이해하기 쉬웠고, 이대로 구현해도 좋을 정도로 깔끔한 설계라는 느낌을 받았다. 나중에 클라우드 커뮤니티 멤버분들 이야기를 들어보니 여기 소개된 아키텍처를 실제고 구현해보신 분들도 계셨다(!) 나도 개인 프로젝트할 때 하나 구현해보고 싶다. 개인적으로 검색어 자동완성과 뉴스피드 시스템이 재밌어보인다. 스터디원 중에 개발자 면접에서 이 책의 도움을 받았다는 분이 계셔서 엄청 뿌듯하고 집중해서 읽게 되었다. 나는 언제쯤 면접 가려나 ㅎ.ㅎ 가상 면접 사례로 배우는 대규모 시스템 설계.. 2024. 1. 18.
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 클라우드 클럽 3기에서 Spring Cloud로 개발하는 MSA 스터디를 주최하고 운영해보았다. MSA가 궁금한데 쿠버네티스는 너무 어렵고, 그나마 익숙한게 Spring이어서 Spring Cloud 제품을 사용해보고 싶었다. 마침 클라우드 클럽 멤버들 중 스프링 사용자들이 있어서 이 분들과 함께 스프링 클라우드와 마이크로서비스를 공부해보고자 스터디를 열었다. 모집하고 보니 스프링을 사용해보지 않으신 분들도 계셔서 복습했는데, RESTful API 구현하면서 HATEOAS라는 것도 알게 되었다. 스터디가 끝난 후 회고하면서, 다소 아쉬운 부분도 있었지만(후반부에 참여율이 떨어짐) MSA 입문은 성공적으로 한 것 같아 기쁘다. 기본 철학은 모듈화를 분산 환경에 적용하는 것이고, 변경 사항을 유연하고 빠르게 .. 2024. 1. 18.
6장 퍼블릭 인터페이스 설계 6장 관련 이야기 나눈 내용 트레이드오프 상황을 보니 설계에 정답은 없다. 어렵다!! 끊임없이 수정하고 검증해봐야 한다. 앞에서 본 예제들은 이상적인 수정이었구나. 이번에 소개된 원칙들은 생각보다 적용하기 어려워보인다. 어떻게 활용할 수 있을까? 우선 책임주도설계나 리팩토링으로 코드를 이동시키고, 인터페이스가 이 원칙들을 위반하는지 확인하자. 이때 코드를 보고 원칙을 위반한 것 같다고 접근하더라도, 어떤 조치를 취할 것인지는 캡슐화, 응집도, 결합도를 따져야 한다. 그리고 어떤 결정을 내렸는지 기록으로 남겨두면 나중에 새로 온 사람이 보거나 설계를 개선할 때 활용할 수 있을 것 같다. 이름이 의도를 드러내도록 바꾸니 협력을 이해하는데 확실히 도움이 되었다. 협업을 한다면 네이밍 컨벤션을 사용해야할 것. .. 2024. 1. 18.
만들면서 배우는 클린 아키텍처 마이크로서비스를 공부하고 나서 소프트웨어 아키텍처에 대한 관심이 생겼다. 클린 아키텍처를 읽어볼까 하다가 코드부터 쳐보고 싶어서 쿡북인 를 읽고 코드를 익혀보았다. 헥사고날 아키텍처를 살펴보면서 가장 인상적이었던 부분은 DIP를 적용해서 계층 간 의존성을 역전한 부분이었다. 우아한 객체지향 세미나에서 처음 봤을 때는 잘 와닿지 않았던 부분인데, 패키지로 모듈 범위를 정하는 것을 보고 나니 되게 멋지고 간단한 접근 방법인 것 같다. 코드를 추가하면서 내가 느낀 헥사고날 아키텍처의 장점은 로직을 빠르게 찾을 수 있는 부분인 것 같다. API 진입하는 부분에 문제가 있으면 웹에 접근하는 패키지 부분을 보면 되고, DB 매핑하는 부분이 궁금하면 JPA 설정한 클래스의 코드를 살펴보면 된다. 유스 케이스가 궁금하.. 2024. 1. 17.
마이크로서비스의 실패 사례와 모듈형 모놀리스 제안! 우아한 모놀리스 세미나 마이크로서비스 → 모놀리스 ?! 😱 본질은 “얼마나 빨리 변경을 수용해 고객에게 비즈니스적 영향을 전달할 수 있는가?” 충분한 도메인 분석과 관리 인력이 뒷받침해주지 않으면 마이크로서비스가 비즈니스 민첩성의 발목을 잡을 수 있다. 처음 만드는 시스템이라면, 모듈화된 모놀리스 서비스로 출발해 트래픽 변동에 따라 유연하게 분리하고 통합하는 방법을 시도해볼 것을 권장한다. 얼마 전 클라우드 커뮤니티 세미나에서 DDD 발표하신 분이 계셨다. 현업에서는 MSA를 어떻게 사용하고 있나 궁금해서 이것저것 질문했더니 코드 일부분을 보여주셨는데, 너무 복잡해서 깜짝 놀랐다. 코드가 더러워지기 딱 좋아보이고, 인프라 관리도 굉장히 복잡해보였다. 발표자분께서도 복잡성에 대해서 인정하셨고, 그 부분이 관건이라고 하셨다. 복잡.. 2024. 1. 17.