분류 전체보기
-
부하를 적절하게 축소하기 (2)항해 플러스 백엔드 5기 2024. 8. 4. 18:41
1. 비즈니스 로직과 트랜잭션의 범위2. 애플리케이션 이벤트를 통한 관심사 분리2. 서비스의 분리고려사항현재 구현사항 중 트랜잭션 범위 및 비즈니스 로직 융합에 따른 문제에 대해 분석이 적절한지규모의 확장으로 서비스를 분리해야할때의 서비스 분리에 대한 아키텍처 설계가 적절한지서비스가 분리되기에 발생하는 현재 비즈니스의 트랜잭션을 보장하는 방식이 적절한지.비즈니스 로직에 부가기능 (데이터 전송, 이력 저장 등) 이 추가되었을 때, 발생하는 문제 및 해결방안을 고려하여 코드에 적용해 보았는지내가 개발한 기능의 트랜잭션 범위서비스의 규모 확장시 서비스 분리 방안서비스 분리에 따른 트랜잭션 처리의 한계와 해결 방안과 서비스 설계 문서
-
부하를 적절하게 축소하기 (1)항해 플러스 백엔드 5기 2024. 8. 4. 18:28
1. DB Query Optimization다량의 트래픽이 유입되는 경우 데이터의 조회 쿼리 성능은 인덱스와 함께 하느냐, 아니냐에 따라서 성능은 하늘과 땅 차이. 인덱스는 조회 성능을 높일 수 있지만 다음과 같은 사항들이 고려되어 설계되어야 함.한번에 찾을 수 있는 값 - 데이터 중복이 적은 컬럼인덱스 재정렬 최소화 - 데이터 삽입, 수정이 적은 컬럼인덱스의 목적은 검색 - 조회에 자주 사용되는 컬럼너무 많지 않은 인덱스 (약 3~4개) - 인덱스 또한 공간을 차지함인덱스 Column의 기준인덱스 대상 컬럼의 핵심은 높은 카디널리티(Cardinality) - 카디널리티: 데이터의 중복 수치사용자 테이블 (이름, 성별, 나이, 계좌번호, .. ) 있다.만약 인덱스 설정을 통해 사용자 조회 성능을 높이려..
-
7주차 회고노트항해 플러스 백엔드 5기 2024. 8. 3. 16:14
1. 이번 과제주제: 적은 부하로 트래픽 처리하기Step13조회가 오래 걸리는 쿼리에 대한 캐싱, 혹은 Redis 를 이용한 로직 이관을 통해 성능 개선할 수 있는 로직을 분석하고 이를 합리적인 이유와 함께 정리한 문서 제출 Step14Caching을 활용하여 부하를 최소화할 수 있는 비즈니스 로직을 파악해보고, 적절한 Caching Strategy를 적용하는 코드를 작성하여 제출2. 회고✏️ 문제과제, 프로젝트를 진행하면서 부딪혔던 기술적인 문제이번 주차를 지나며 겪었던 문제가 무엇이었나요?인기 상품 목록 조회의 경우 Redis 데이터 최신화를 어떤 방식, 주기로 가져갈 것 인지에 대한 고민여러 Redis 전략 중 적용하려는 기능과 가장 적합한 전략이 어떤 것 인지에 대한 고민✏️ 시도문제를 해결하..
-
적은 부하로 트래픽 처리하기항해 플러스 백엔드 5기 2024. 7. 29. 20:09
1. CachingCache란?데이터를 임시로 복사해두는 Storage 계층적은 부하로 API 응답을 빠르게 처리하기 위해서 캐싱을 사용Cache 사용사례DNS : 웹사이트 IP 를 기록해두어 웹사이트 접근을 위한 DNS 조회 수를 줄인다.CPU : 자주 접근하는 데이터의 경우, 메모리에 저장해두고 빠르게 접근할 수 있도록 한다.CDN : 이미지나 영상과 같은 컨텐츠를 CDN 서버에 저장해두고 애플리케이션에 접근하지 않고 컨텐츠를 가져오도록 해 부하를 줄인다.2. Server Caching 전략2.1. 메모리 캐시 (Application Leval)애플리케이션의 메모리에 데이터를 저장해두고 같은 요청에 대해 데이터를 빠르게 접근해 반환함으로서 API 성능 향상 달성Spring의 경우 ehcache, ca..
-
6주차 회고노토항해 플러스 백엔드 5기 2024. 7. 27. 16:27
1. 이번 과제주제: e-커머스 서비스 개발Step11: 나의 시나리오에서 발생할 수 있는 동시성 이슈에 대해 파악하고 가능한 동시성 제어 방식들을 도입해보고 각각의 장단점을 파악한 내용을 정리 제출구현의 복잡도, 성능, 효율성 등README 작성 혹은 외부 링크, 프로젝트 내의 다른 문서에 작성하였다면 README에 링크 게재Step12: DB Lock 을 활용한 동시성 제어 방식 에서 해당 비즈니스 로직에서 적합하다고 판단하여 차용한 동시성 제어 방식을 구현하여 비즈니스 로직에 적용하고, 통합테스트 등으로 이를 검증하는 코드 작성 및 제출2. 회고✏️ 문제과제, 프로젝트를 진행하면서 부딪혔던 기술적인 문제이번 주차를 지나며 겪었던 문제가 무엇이었나요?특정 사용자의 포인트 충천이 동시에 들어오는 요청..
-
e-커머스 서비스 동시성 문제와 극복항해 플러스 백엔드 5기 2024. 7. 22. 20:12
e-커머스 서비스 동시성 문제를 해결하면서 알게 된 내용을 정리해보고자 한다.1. 동시성 문제란?여러 작업(프로세스, 스레드, 트랜잭션 등)이 수행되면서 하나의 공통 자원에 대해 동시에 접근할 때 발생하는 문제Database 의 동일한 데이터에 동시에 여러 작업이 수행될 때, 의도하지 않은 작업 결과가 발생하는 경우를 의미한다.동시성 문제를 이해하기 위해 아래의 예시를 살펴보자. 아래는 예시는 재고차감 시나리오이다.Request 1 주문 요청이 들어오고 상품의 데이터를 조회하여 상품의 갯수가 10개인걸 확인하고 재고를 하나 차감하여 상품의 재고가 9개가 남았음을 커밋을 시도하려고한다.Request 2 주문 요청이 들어오고 아직 Request 1 주문 요청에 대한 트랙잭션 커밋이 되기 전으로 상품의 갯수..
-
[Spring] AOP란 무엇인가? (관점지향 프로그래밍)Spring 2024. 7. 21. 16:23
AOP(Aspect Oriented Programming)란?AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것이다. 그렇다면 이 관점(Aspect)을 지향하는 프로그래밍은 무엇일까? 아이를 키우는 육아 방식이나 교육 방식 등은 부모에 따라 제각각이다.어떤 부모는 아이의 언어 발달을 위해 책을 읽어줄 것이고, 어떤 부모는 동요나 만화를 들려줄 것이다. 이처럼 아이를 키우는 방식은 다를 수 있지만, 공통되는 부분이 존재한다.부모의 공통된 관심사는 어떤 방식으로 아이를 키우는 것과는 별개로 아프지 않고 잘 자라는 것이다. AOP는 부모들..
-
[Spring] 필터(Filter)와 인터셉터(Interceptor)Spring 2024. 7. 21. 02:46
Spring에서 공통적으로 여러 작업을 처리하고 중복된 코드를 제거 및 재가공하는 많은 기능을 가지고 있다.그 중 필터와 인터셉터라는 기능이 있고 이 둘의 공통점으로 Controller에 도달하기 전 처리되는 기능이지만, 역할이 다르므로 이 둘의 정의와 차리를 알아보자.1. 필터필터는 말 그대로 요청과 응답을 거른 뒤에 정제하는 역할을 한다. 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전, 후에 url 패턴에 맞는 모든 요청에 대해 부가 작업을 처리할 수 있는 기능을 제공한다. 디스패처 서블릿이란? 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 웹에서 이뤄지는 컨트롤러이므로, 필터는 스프링 범위 밖에서 처리가 되는 것 즉, 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의..