전체 글
무지했던 지난 날에 대한 속죄의 기록
-
데이터베이스를 다루며, 트랜잭션이란 개념에 대해 많이 들어봤지만 깊은 내부의 내용까지는 모두 잘 알지 못하는 것 같아 정리하는 글을 작성한다.🟢 DB 트랜잭션트랜잭션이란 DB 의 상태를 변경시키는 작업이다. 즉, 한꺼번에 수행되어야 할 연산을 모아놓은 것이다. 연산들을 모두 처리하지 못 한 경우에는 원 상태로 복구하며, 작업의 일부만 적용되는 현상이 발생하지 않는다. 이를 통해 트랜잭션은 작업은 완정성을 보장해준다. 사용자의 입장에서는 작업의 논리적 단위이고, 시스템의 입장에서는 데이터들을 접근 또는 변경하는 단위가 된다. ▪️ 트랜잭션의 4가지 특징, ACID1. 원자성(Atomicity)트랜잭션이 DB 에 모두 반영되거나, 혹은 전혀 반영되지 않아야 한다. (All or Nothing)2. 일관성..
[Database] 트랜잭션(Transaction)에 대하여데이터베이스를 다루며, 트랜잭션이란 개념에 대해 많이 들어봤지만 깊은 내부의 내용까지는 모두 잘 알지 못하는 것 같아 정리하는 글을 작성한다.🟢 DB 트랜잭션트랜잭션이란 DB 의 상태를 변경시키는 작업이다. 즉, 한꺼번에 수행되어야 할 연산을 모아놓은 것이다. 연산들을 모두 처리하지 못 한 경우에는 원 상태로 복구하며, 작업의 일부만 적용되는 현상이 발생하지 않는다. 이를 통해 트랜잭션은 작업은 완정성을 보장해준다. 사용자의 입장에서는 작업의 논리적 단위이고, 시스템의 입장에서는 데이터들을 접근 또는 변경하는 단위가 된다. ▪️ 트랜잭션의 4가지 특징, ACID1. 원자성(Atomicity)트랜잭션이 DB 에 모두 반영되거나, 혹은 전혀 반영되지 않아야 한다. (All or Nothing)2. 일관성..
2024.09.20 -
'가상 면접 사례로 배우는 대규모 시스템 설계 기초' 책을 읽고 직접 구현하는 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 -
프로젝트를 진행하며 이를 비동기로 처리하기 위한 방안을 모색하던 중, 메세지 브로커인 Kafka 를 사용하기로 결정했다. 처음 접해보는 기술인 만큼 직접 실습해보며, kafka 를 선택한 이유와 그 과정을 기록한다. 🟢 메세지 브로커메세지 송신자와 수신자를 중개하는 미들웨어다. 메세지 형태의 통신에 사용되며 (기존의 직접 호출과 다름) 시스템간 결합도를 완화할 수 있다. 메세지 처리 관련 기능을 모아놓은 컴포넌트의 개념이다.브로커의 종류메세지 브로커- 메세지 전달 기능- 큐 역할- 시스템 통합을 용이하게 하는데 중점- 주로 pub/sub 구조 사용 이벤트 브로커- 메세지 브로커의 기능을 포함하는 개념- 메세지의 인덱스(오프셋)을 통한 개별 엑세스 관리 (각각의 메세지를 식별하고, 누가 어디까지 소비했는..
[Docker] Docker Compose 로 Kafka Cluster를 !프로젝트를 진행하며 이를 비동기로 처리하기 위한 방안을 모색하던 중, 메세지 브로커인 Kafka 를 사용하기로 결정했다. 처음 접해보는 기술인 만큼 직접 실습해보며, kafka 를 선택한 이유와 그 과정을 기록한다. 🟢 메세지 브로커메세지 송신자와 수신자를 중개하는 미들웨어다. 메세지 형태의 통신에 사용되며 (기존의 직접 호출과 다름) 시스템간 결합도를 완화할 수 있다. 메세지 처리 관련 기능을 모아놓은 컴포넌트의 개념이다.브로커의 종류메세지 브로커- 메세지 전달 기능- 큐 역할- 시스템 통합을 용이하게 하는데 중점- 주로 pub/sub 구조 사용 이벤트 브로커- 메세지 브로커의 기능을 포함하는 개념- 메세지의 인덱스(오프셋)을 통한 개별 엑세스 관리 (각각의 메세지를 식별하고, 누가 어디까지 소비했는..
2024.07.27 -
프로젝트를 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 -
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 🟢 87390, n^2 배열 자르기간만에 프로그래머스 풀이를 작성한다. 코딩테스트를 앞두고 있는데 LEVEL 3 도 다시 풀어보려고 하니 너무 놓고 있었는지 하나도 못 푸는 상황.. 계정을 새로 파서 LEVEL2 부터 전부 풀이한다.🧀 프로세스 [문제 설명]정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.n행 n열 크기의 비어있는 2차원 배열을 만듭니다.i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.1행, 2행, ..., n행을 잘라내어 ..
[Java][프로그래머스] 87390, n^2 배열 자르기프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 🟢 87390, n^2 배열 자르기간만에 프로그래머스 풀이를 작성한다. 코딩테스트를 앞두고 있는데 LEVEL 3 도 다시 풀어보려고 하니 너무 놓고 있었는지 하나도 못 푸는 상황.. 계정을 새로 파서 LEVEL2 부터 전부 풀이한다.🧀 프로세스 [문제 설명]정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.n행 n열 크기의 비어있는 2차원 배열을 만듭니다.i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.1행, 2행, ..., n행을 잘라내어 ..
2024.06.23 -
선착순 쿠폰 서비스를 기획, 구현 중이다. 하지만 혼자서 접속을 해서 동시 접속자의 상황을 재연하기에는 무리가 있다. 마우스를 잡은 손은 하나니까! 그렇기에 고민하던 중, Locust 에 대해 알게 되었고 동시 접속을 테스트하기에 적합할 뿐만 아니라 성능에 대한 테스트도 가능하다는 것을 알게 되었다. 지금부터 알아보자. 🟢 LocustLocust는 Python으로 작성된 오픈소스 부하테스트 도구이다. Locsut를 사용하면 분산 시스템에서 여러 사용자를 시뮬레이션하여 웹 애플리케이션의 성능을 측정할 수 있다. 또한 매우 사용하기 쉽고 확장성이 뛰어나며, 사용자 시나리오를 코드로 작성할 수 있어 유연성이 높고, 대시보드를 통해 실시간으로 테스트 결과를 모니터링 할 수 있어 테스트 중에 성능 이슈를 발견..
[Spring] 성능 테스트 ? Locust로! with Docker선착순 쿠폰 서비스를 기획, 구현 중이다. 하지만 혼자서 접속을 해서 동시 접속자의 상황을 재연하기에는 무리가 있다. 마우스를 잡은 손은 하나니까! 그렇기에 고민하던 중, Locust 에 대해 알게 되었고 동시 접속을 테스트하기에 적합할 뿐만 아니라 성능에 대한 테스트도 가능하다는 것을 알게 되었다. 지금부터 알아보자. 🟢 LocustLocust는 Python으로 작성된 오픈소스 부하테스트 도구이다. Locsut를 사용하면 분산 시스템에서 여러 사용자를 시뮬레이션하여 웹 애플리케이션의 성능을 측정할 수 있다. 또한 매우 사용하기 쉽고 확장성이 뛰어나며, 사용자 시나리오를 코드로 작성할 수 있어 유연성이 높고, 대시보드를 통해 실시간으로 테스트 결과를 모니터링 할 수 있어 테스트 중에 성능 이슈를 발견..
2024.05.23