티스토리

뇌세포CPR
검색하기

블로그 홈

뇌세포CPR

dooduz.tistory.com/m

DooDuZ 님의 블로그입니다.

구독자
9
방명록 방문하기

주요 글 목록

  • [예약 구매 프로젝트] 가상 스레드 적용 더 많은 요청을 견딜 수 있게 하기이전 포스팅에서 캐싱 전략을 사용해 동시성과 성능 개선을 거쳤지만, 여전히 남아있는 문제가 있었습니다. 바로 처리 가능한 동시 요청 수에 대한 것이었는데요. 여태까지 진행한 대부분의 테스트는 스레드 1000개 x 루프 5번을 기준으로 진행했습니다. 한 번에 5000개의 스레드를 사용하지 않은 이유는 단순했습니다. 안정성이 보장되는 요청의 개수가 1000개였기 때문이죠. 제 목표는 10000개의 요청을 한 번에 받아내는 것이었고, 2000개 요청만 진행돼도 종종 HttpHostConnectException이 발생하는 기존 성능은 목표에 한참 못 미치는 것이었습니다. 요청 처리 속도가 빨라질수록 더 많은 요청을 받아낼 수 있었기 때문에, 조금이라도 성능을 개선하고자 Java.. 공감수 1 댓글수 0 2024. 8. 6.
  • [예약 구매 프로젝트] Test Code 테스트 그거 어떻게 하는 건데프로젝트를 진행하면서 어려운 부분이 정말 많았지만, 그중에서도 가장 스트레스받았던 부분이 바로 테스트였습니다. 다른 건 공부해서 하면 되겠다 싶었는데 테스트는 어떻게 짜야하나 도저히 감이 잡히질 않았습니다. 하여 정리해 보는 좌충우돌 테스트코드 작성기... 테스트에 대한 정확한 정보를 정리하는 글은 아니고, 제 이해가 어떤 식으로 변화했는지에 대한 글입니다. 아래 카테고리 역시 서로 구분되는 개념으로 나눈 게 아니라 제가 인지한 순서대로 구성했습니다. Unit먼저 단위 테스트 입니다. 코드를 작은 단위(ex - 기능) 별로 분리해서 테스트하는 것을 말합니다. 쉽게 생각하면 메서드 단위의 테스트부터, 메서드 내부에 적용할 로직에 대한 테스트라고 할 수 있을 것 같습니다. 먼저 .. 공감수 0 댓글수 0 2024. 7. 30.
  • [예약 구매 프로젝트] 상품 조회 캐싱 추가 적용 - 성능 테스트 더 더 빠르게, 최적화는 끝이 없다지난 캐싱 전략 글에서 조회 캐싱까진 진행하지 못해서 아쉽다는 말을 포스팅 말미에 적었었지요. 이전엔 DB write 작업을 효율적으로 하기 위한 캐싱을 적용했다면, 오늘은 Read에 대한 캐싱을 적용하고 성능이 얼마나 개선되었는지 말해보려 합니다. 재고 캐싱에 대한 글은 아래 링크로! [예약 구매 프로젝트] 캐싱 전략 적용예약 구매 프로젝트지난달 말부터 대규모 동시 요청 상황을 가정한 예약 구매 프로젝트를 진행 중입니다. 예약 구매라는 말이 와닿지 않는다면 온라인 티켓팅, 한정판 도서/앨범 구매 등을 떠올dooduz.tistory.com  public ProductDto getProduct(Long productId) { String key = String.val.. 공감수 1 댓글수 0 2024. 7. 27.
  • [Spring Security] Session vs Token Session - StatefulSpring Security는 기본적으로 formLogin을 통한 Session 방식 인증/인가를 지원합니다. 다른 처리 없이 UserDetails와 UserDetailsService를 구현하고 로그인하면 JSESSIONID라는 쿠키가 발급되는 걸 볼 수 있습니다. 로그인된 사용자의 정보는 서블릿 컨테이너의 Session Storage에 저장되어 사용되는데 이처럼 사용자 정보를 서버가 기억해두는 것을 stateful이라고 표현합니다. 요청이 인증 관련 쿠키를 포함하고 있으면 쿠키에 담긴 키를 통해 session에 접근하고 로그인된 사용자인지 검증합니다. 프로젝트 규모가 작고 트래픽이 크지 않을 경우, 간편하게 구현할 수 있는 세션 방식 로그인은 좋은 선택지 중 하나일 수 .. 공감수 2 댓글수 0 2024. 7. 25.
  • [예약 구매 프로젝트] 동시 주문 요청 처리 수요는 많고 공급은 적다지금 진행 중인 예약구매 프로젝트의 메인 주제는 짧은 시간에 몰리는 대규모 트래픽을 처리하는 것입니다. 특정 브랜드들의 콜라보 한정 상품이나 온라인 티켓팅 등을 생각해 보면, 사려는 사람은 많고 제공되는 자원은 한정적인 것이죠. 그래서 대규모 트래픽이라고 하면 서버 부하나 성능에 대한 생각이 먼저 떠오르는 게 사실입니다. 그러나 막상 기능을 구현하다 보면 먼저 마주치게 되는 문제가 있습니다. 많은 요청이 하나의 자원을 바라보고 조작하려 하게 되는, 이른바 동시성 이슈입니다. 동시 주문 시나리오편의상 하나의 아이템이 남아있고 아이템을 구매하기 위한 무수히 많은 요청이 들어오는 상황을 가정해 보겠습니다. 지난 포스팅에 올렸던 기본 주문 플로우를 사용한다고 가정해 보죠. 아이템에 대한 .. 공감수 1 댓글수 0 2024. 7. 24.
  • [예약 구매 프로젝트] 캐싱 전략 적용 예약 구매 프로젝트지난달 말부터 대규모 동시 요청 상황을 가정한 예약 구매 프로젝트를 진행 중입니다. 예약 구매라는 말이 와닿지 않는다면 온라인 티켓팅, 한정판 도서/앨범 구매 등을 떠올려보면 좋습니다. 프로젝트 요구 사항에 따르면 동시 1만 건 요청 시 데이터 정합성이 유지돼야 하고 사용자 경험도 일정 수준 이상으로 확보해야 합니다. 이번 글에선 사용자 경험, 즉 응답 속도 개선을 위해 어떤 방법을 선택했는지 적어보려 합니다. 아래는 기본 기능 구현 때 짜놓은 주문 로직 시퀀스입니다.1. 클라이언트의 주문 요청이 들어옵니다.2. 서버는 주문 목록의 상품 재고를 DB에서 확인합니다.3. DB는 재고 정보를 반환합니다.4. 재고가 충분하다면 주문 수량만큼 재고를 차감하고 DB에 반영합니다.5. 반.. 공감수 3 댓글수 4 2024. 7. 23.
  • [예약 구매 프로젝트]Spring Security - JWT 적용 Stateless이번 프로젝트를 진행하면서 가장 많이 한 생각은 서버 리소스를 어떻게 하면 조금이라도 아낄 수 있을까 하는 것 이었습니다. 동 시간대 수만명의 동시 접속을 고려해야하는 상황에서 로직 하나, 스레드 하나의 비용을 최소화 시켜야 했습니다. 이번엔 서버 리소스를 아끼는 첫 번째 관문 Stateless 로그인에 대해 다룹니다. Spring Security와 JWT를 사용하여 구현했습니다.   [Spring Security] Session vs TokenSession - StatefulSpring Security는 기본적으로 formLogin을 통한 Session 방식 인증/인가를 지원합니다. 다른 처리 없이 UserDetails와 UserDetailsService를 구현하고 로그인하면 JSESS.. 공감수 1 댓글수 0 2024. 6. 26.
  • Spring Security 인증(Athentication)인증이란 사용자가 누구인지 확인하는 단계를 의미한다. 로그인을 예로 들면, 아이디와 패스워드를 통해 인증에 성공하는 경우 사용자 정보, 권한 등이 포함된 토큰이 발급된다. 일반적으로 JWT(Json Web Token) 형식을 사용한다.인가(Authorization)인가란 인증을 통해 검증된 사용자가 애플리케이션 내부의 리소스에 접근할 때 접근 주체(principal)가 해당 리소스에 접근할 권리가 있는지 확인하는 과정을 말한다. 일반적으로 사용자가 인증 단계에서 발급받은 토큰은 인가 내용을 포함하고 있으며, 사용자가 리소스에 접근하면서 토큰을 함께 전달하면 애플리케이션 서버는 토큰을 통해 권한 유무 등을 확인해 인가를 수행한다.Spring Security스프링 시큐리티는 애.. 공감수 2 댓글수 0 2024. 6. 13.
  • JPA Dirty Checking JPA는 엔티티의 상태 변화를 감지하여 변경된 내용이 있는 경우 Update SQL을 처리한다.  Service에서 특정 Entity를 가져오라고 하면 EntityManager는 DB에서 해당 값을 찾아 가져온 후 PersistenceContext에 Entity를 저장하고, 동시에 loadedState에 해당 Entity의 초기 상태를 저장한다.  가져온 Entity의 값을 변경하게 되면 즉시 DB에 반영되는 게 아니라 persistenceContext 내부에 있는 entityInstance의 value가 바뀐다.만약 위 상태에서 다시 객체의 상태를 원래 값으로 업데이트한다면 트랜잭션이 commit 하더라도 update query는 실행되지 않는다. loadedState에 있는 값과 현재 entity I.. 공감수 0 댓글수 0 2024. 6. 10.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.