Java
-
'가상 면접 사례로 배우는 대규모 시스템 설계 기초' 책을 읽고 직접 구현하는 SNS 서비스 프로젝트, 이를 진행하며 남기는 기록. 🟢 MSA 기반 SNS 서비스 with AWS EKS가상 면접 사례로 배우는 대규모 시스템 설계 기초 책을 읽으며 11장, 뉴스 피드 시스템 설계를 재미있게 읽었다. 이를 직접 구현해 보고 싶다는 욕심이 생겨 MZ 세대에 맞는 SNS 서비스를 구현해 보기로 한다. 📃 요구사항 Grouping 했을 때 크게 5개의 도메인, 서비스가 필요하다. Timeline ServerUser ServerFeed ServerImage ServerNotification Server 내가 생각하는 주요 설계사항은 아래와 같다. 1. 유저의 개념은 팔로워(본인이 팔로우하고 있는 사람)와 팔로잉..
[Spring] MSA 기반 SNS 서비스 with AWS EKS [설계 / AWS 설정]'가상 면접 사례로 배우는 대규모 시스템 설계 기초' 책을 읽고 직접 구현하는 SNS 서비스 프로젝트, 이를 진행하며 남기는 기록. 🟢 MSA 기반 SNS 서비스 with AWS EKS가상 면접 사례로 배우는 대규모 시스템 설계 기초 책을 읽으며 11장, 뉴스 피드 시스템 설계를 재미있게 읽었다. 이를 직접 구현해 보고 싶다는 욕심이 생겨 MZ 세대에 맞는 SNS 서비스를 구현해 보기로 한다. 📃 요구사항 Grouping 했을 때 크게 5개의 도메인, 서비스가 필요하다. Timeline ServerUser ServerFeed ServerImage ServerNotification Server 내가 생각하는 주요 설계사항은 아래와 같다. 1. 유저의 개념은 팔로워(본인이 팔로우하고 있는 사람)와 팔로잉..
2024.08.18 -
이전 글에서 기획과 설계에 대한 부분을 다뤘고, 이제는 이것을 구현하는 과정을 담는 글을 기록, [Spring] 결제시스템, Spring Boot + MSA 로 리팩토링 [기획 & 설계]실무에서 결제 프로세스를 다루며 많은 문제점들이 발견했다. 레거시한 코드와 절차지향의 프로세스를 통해 처리를 하다 보니 성능이 떨어졌으며, 약간의 과부하만 발생해도 지연 문제가 빈번seung-seok.tistory.com 🟢 결제시스템, Spring Boot + MSA 로 리팩토링 아키텍처와 플로우를 설명했고 이제는 이것을 직접 구현해보자. 각각의 서비스에 대한 로직과 코드에 대해 깊이 설명하지 않고, 이를 구성하는 것에 초점을 두고 글을 작성한다. Docker 를 사용한 서비스 구성각각의 서비들을 Docker i..
[Spring] 결제시스템, Spring Boot + MSA 로 리팩토링 [구현]이전 글에서 기획과 설계에 대한 부분을 다뤘고, 이제는 이것을 구현하는 과정을 담는 글을 기록, [Spring] 결제시스템, Spring Boot + MSA 로 리팩토링 [기획 & 설계]실무에서 결제 프로세스를 다루며 많은 문제점들이 발견했다. 레거시한 코드와 절차지향의 프로세스를 통해 처리를 하다 보니 성능이 떨어졌으며, 약간의 과부하만 발생해도 지연 문제가 빈번seung-seok.tistory.com 🟢 결제시스템, Spring Boot + MSA 로 리팩토링 아키텍처와 플로우를 설명했고 이제는 이것을 직접 구현해보자. 각각의 서비스에 대한 로직과 코드에 대해 깊이 설명하지 않고, 이를 구성하는 것에 초점을 두고 글을 작성한다. Docker 를 사용한 서비스 구성각각의 서비들을 Docker i..
2024.08.07 -
실무에서 결제 프로세스를 다루며 많은 문제점들이 발견했다. 레거시한 코드와 절차지향의 프로세스를 통해 처리를 하다 보니 성능이 떨어졌으며, 약간의 과부하만 발생해도 지연 문제가 빈번하게 발생했다. 또한 컴포넌트 간의 결합이 너무 나도 강했으며 모든 관리를 주문 프로세스에서 처리해서 가독성과 유지보수성 모두 크게 떨어졌다. 이러한 아쉬운 점들을 개선하며 Java 와 Spring Boot 로 재구현, 비동기적으로 결제 프로세스를 처리하고 각 도메인 별로 서비스를 분리한 MSA 구조의 결제 서비스를 구현하는 프로젝트에 대한 내용을 담아보려고 한다. 🟢 결제시스템, Spring Boot + MSA 로 리팩토링이번 프로젝트는 위에 설명한 것처럼 비동기적인 처리 + MSA 구조의 결제 시스템을 구현할 것이다. 나..
[Spring] 결제시스템, Spring Boot + MSA 로 리팩토링 [기획 & 설계]실무에서 결제 프로세스를 다루며 많은 문제점들이 발견했다. 레거시한 코드와 절차지향의 프로세스를 통해 처리를 하다 보니 성능이 떨어졌으며, 약간의 과부하만 발생해도 지연 문제가 빈번하게 발생했다. 또한 컴포넌트 간의 결합이 너무 나도 강했으며 모든 관리를 주문 프로세스에서 처리해서 가독성과 유지보수성 모두 크게 떨어졌다. 이러한 아쉬운 점들을 개선하며 Java 와 Spring Boot 로 재구현, 비동기적으로 결제 프로세스를 처리하고 각 도메인 별로 서비스를 분리한 MSA 구조의 결제 서비스를 구현하는 프로젝트에 대한 내용을 담아보려고 한다. 🟢 결제시스템, Spring Boot + MSA 로 리팩토링이번 프로젝트는 위에 설명한 것처럼 비동기적인 처리 + MSA 구조의 결제 시스템을 구현할 것이다. 나..
2024.07.28 -
프로젝트를 MSA 구조로 진행하며, 서비스 로직에서 다른 서비스의 API 를 호출해야 하는 경우가 빈번하게 생겼다. 이를 RestTemplate 을 통해 해결할 수도 있지만 보다 더 나은, 간편한 기능을 통해 풀어본 내용들을 기록하고 공유하고자 이 글을 작성한다. 🟢 FeignFeign 은 Netflix 에서 개발된 Http client binder다. Feign 을 사용하면 웹 서비스 클라이언트를 보다 쉽게 작성할 수 있다. Feign 을 사용하기 위해서는 interface 를 작성하고 annotation 을 선언 하기만 하면 된다. 마치 Spring Data JPA 에서 실제 쿼리를 작성하지 않고 Interface 만 지정하여 쿼리실행 구현체를 자동으로 만들어주는 것과 유사하다. 사용법feign ..
[Spring] feign 에 대하여프로젝트를 MSA 구조로 진행하며, 서비스 로직에서 다른 서비스의 API 를 호출해야 하는 경우가 빈번하게 생겼다. 이를 RestTemplate 을 통해 해결할 수도 있지만 보다 더 나은, 간편한 기능을 통해 풀어본 내용들을 기록하고 공유하고자 이 글을 작성한다. 🟢 FeignFeign 은 Netflix 에서 개발된 Http client binder다. Feign 을 사용하면 웹 서비스 클라이언트를 보다 쉽게 작성할 수 있다. Feign 을 사용하기 위해서는 interface 를 작성하고 annotation 을 선언 하기만 하면 된다. 마치 Spring Data JPA 에서 실제 쿼리를 작성하지 않고 Interface 만 지정하여 쿼리실행 구현체를 자동으로 만들어주는 것과 유사하다. 사용법feign ..
2024.07.17 -
선착순 쿠폰 서비스를 기획, 구현 중이다. 하지만 혼자서 접속을 해서 동시 접속자의 상황을 재연하기에는 무리가 있다. 마우스를 잡은 손은 하나니까! 그렇기에 고민하던 중, Locust 에 대해 알게 되었고 동시 접속을 테스트하기에 적합할 뿐만 아니라 성능에 대한 테스트도 가능하다는 것을 알게 되었다. 지금부터 알아보자. 🟢 LocustLocust는 Python으로 작성된 오픈소스 부하테스트 도구이다. Locsut를 사용하면 분산 시스템에서 여러 사용자를 시뮬레이션하여 웹 애플리케이션의 성능을 측정할 수 있다. 또한 매우 사용하기 쉽고 확장성이 뛰어나며, 사용자 시나리오를 코드로 작성할 수 있어 유연성이 높고, 대시보드를 통해 실시간으로 테스트 결과를 모니터링 할 수 있어 테스트 중에 성능 이슈를 발견..
[Spring] 성능 테스트 ? Locust로! with Docker선착순 쿠폰 서비스를 기획, 구현 중이다. 하지만 혼자서 접속을 해서 동시 접속자의 상황을 재연하기에는 무리가 있다. 마우스를 잡은 손은 하나니까! 그렇기에 고민하던 중, Locust 에 대해 알게 되었고 동시 접속을 테스트하기에 적합할 뿐만 아니라 성능에 대한 테스트도 가능하다는 것을 알게 되었다. 지금부터 알아보자. 🟢 LocustLocust는 Python으로 작성된 오픈소스 부하테스트 도구이다. Locsut를 사용하면 분산 시스템에서 여러 사용자를 시뮬레이션하여 웹 애플리케이션의 성능을 측정할 수 있다. 또한 매우 사용하기 쉽고 확장성이 뛰어나며, 사용자 시나리오를 코드로 작성할 수 있어 유연성이 높고, 대시보드를 통해 실시간으로 테스트 결과를 모니터링 할 수 있어 테스트 중에 성능 이슈를 발견..
2024.05.23 -
간혹 비즈니스 로직이나 스케줄러 + 페이지 이렇게 2개의 프로젝트를 구현해야 하는 경우가 생기곤 한다. IntellJ 에서 각각을 실행시키고 관리도 별도로 진행해야 하기 때문에 항상 번거로움이 생긴다. 이를 효과적으로 관리하고 추후에도 다른 용도로도 도움이 될 것 같아, 현재 진행하는 프로젝트는 멀티 모듈로 구현하고 이 과정을 기록한다. 🟢 멀티 모듈Spring Boot에서 멀티 모듈 프로젝트는 하나의 큰 프로젝트를 더 관리하기 쉽고 모듈화된 여러 하위 프로젝트로 나누는 것을 의미한다. 이 접근법은 각 모듈이 독립적으로 개발되고 관리될 수 있도록 해서, 대규모 애플리케이션의 복잡성을 줄이고 유지보수를 용이하게 만들 수 있다. 각 모듈은 특정 비즈니스 로직이나 데이터베이스 작업, 서비스 API 등을 처리..
[Spring] Spring Boot 에서 멀티 모듈 구현간혹 비즈니스 로직이나 스케줄러 + 페이지 이렇게 2개의 프로젝트를 구현해야 하는 경우가 생기곤 한다. IntellJ 에서 각각을 실행시키고 관리도 별도로 진행해야 하기 때문에 항상 번거로움이 생긴다. 이를 효과적으로 관리하고 추후에도 다른 용도로도 도움이 될 것 같아, 현재 진행하는 프로젝트는 멀티 모듈로 구현하고 이 과정을 기록한다. 🟢 멀티 모듈Spring Boot에서 멀티 모듈 프로젝트는 하나의 큰 프로젝트를 더 관리하기 쉽고 모듈화된 여러 하위 프로젝트로 나누는 것을 의미한다. 이 접근법은 각 모듈이 독립적으로 개발되고 관리될 수 있도록 해서, 대규모 애플리케이션의 복잡성을 줄이고 유지보수를 용이하게 만들 수 있다. 각 모듈은 특정 비즈니스 로직이나 데이터베이스 작업, 서비스 API 등을 처리..
2024.05.22 -
다양한 알고리즘을 접하며 우선순위 큐를 종종 사용하곤 한다. 항상 정렬된 상태를 유지하고는 있는데 이게 어떠한 방식으로 돌아가는 지 파악하기 위해 이 글을 작성한다. 우선순위 큐와 관련된 힙에 대한 내용도 담아보자. 🟢우선순위 큐 (PriorityQueue)큐(Queue)는 먼저 들어오는 데이터가 먼저 나가는 FIFO(First In First Out) 형식의 자료구조이다. 우선순위 큐(Priority Queue)는 먼저 들어오는 데이터가 아니라, 우선순위가 높은 데이터가 먼저 나가는 형태의 자료구조이다.우선순위 큐는 일반적으로 힙(Heap)을 이용하여 구현한다 💡 힙(Heap)이란 ?힙(Heap)은 우선순위 큐를 위해 고안된 완전이진트리 형태의 자료구조이다. 여러 개의 값 중 최댓값 또는 최솟값을 ..
[Java] 우선순위 큐의 우선순위는 어떻게 지정할 수 있는가다양한 알고리즘을 접하며 우선순위 큐를 종종 사용하곤 한다. 항상 정렬된 상태를 유지하고는 있는데 이게 어떠한 방식으로 돌아가는 지 파악하기 위해 이 글을 작성한다. 우선순위 큐와 관련된 힙에 대한 내용도 담아보자. 🟢우선순위 큐 (PriorityQueue)큐(Queue)는 먼저 들어오는 데이터가 먼저 나가는 FIFO(First In First Out) 형식의 자료구조이다. 우선순위 큐(Priority Queue)는 먼저 들어오는 데이터가 아니라, 우선순위가 높은 데이터가 먼저 나가는 형태의 자료구조이다.우선순위 큐는 일반적으로 힙(Heap)을 이용하여 구현한다 💡 힙(Heap)이란 ?힙(Heap)은 우선순위 큐를 위해 고안된 완전이진트리 형태의 자료구조이다. 여러 개의 값 중 최댓값 또는 최솟값을 ..
2024.05.02 -
Intro 알고리즘을 풀이하며 정적 변수, static 을 많이 사용하곤 한다. 이에 대한 정확한 의미에 대해 알아보고 분석해 보고자 글을 작성한다. 🟢 정적(static)자바에서 static 키워드는 클래스 레벨의 변수나 메소드, 블록을 정의할 때 사용된다. 이는 인스턴스 생성 없이도 접근 가능하며, 모든 인스턴스에서 공유된다. static 변수는 프로그램이 시작할 때 메모리에 할당되고 프로그램이 종료될 때까지 유지된다. 왜냐하면 static 멤버는 클래스가 로드될 때 메모리의 메소드 영역에 할당되기 때문이다. 이는 모든 인스턴스가 공유하는 특성 때문에 유용하게 사용될 수 있다. 예를 들어, 어떤 클래스의 인스턴스들이 공통적으로 사용해야 하는 값을 static 변수로 선언할 수 있다. 하지만, sta..
[Java] 정적(static) 이란 무엇인가Intro 알고리즘을 풀이하며 정적 변수, static 을 많이 사용하곤 한다. 이에 대한 정확한 의미에 대해 알아보고 분석해 보고자 글을 작성한다. 🟢 정적(static)자바에서 static 키워드는 클래스 레벨의 변수나 메소드, 블록을 정의할 때 사용된다. 이는 인스턴스 생성 없이도 접근 가능하며, 모든 인스턴스에서 공유된다. static 변수는 프로그램이 시작할 때 메모리에 할당되고 프로그램이 종료될 때까지 유지된다. 왜냐하면 static 멤버는 클래스가 로드될 때 메모리의 메소드 영역에 할당되기 때문이다. 이는 모든 인스턴스가 공유하는 특성 때문에 유용하게 사용될 수 있다. 예를 들어, 어떤 클래스의 인스턴스들이 공통적으로 사용해야 하는 값을 static 변수로 선언할 수 있다. 하지만, sta..
2024.04.29