실전 개발해보기
-
redis 캐시 적용기 ( 부하테스트를 곁들인... )실전 개발해보기 2024. 3. 21. 20:37
처음에 UI가 때문에 부하테스트를 nGrinder로 하다가 Jmeter도 써봤는데 인텔리제이랑 UI가 많이 비슷해서 인텔리제이로 개발하다가 , Jmeter 쓰다가 번갈아 하기 좋은 것 같다. 아직은 내 레벨에선 Jmeter 부하테스트 기능상의 불편함도 찾지 못했다! 본론 부하테스트를 진행해보며 redis를 이용한 캐시의 우수성을 직접 확인해보려한다 상황은 다음과 같다. 내가 개발하는 프로젝트의 메인 페이지에서 비 로그인 유저에게는 좋아요 많은 순으로 이미지(url,제목 정보)를 반환한다. 우리 서비스에 대한 요청이 메인페이지에서 집중된다는 점을 고려하면 메인 페이지에 대한 효율성 고민이 필요하다고 생각했다. 일차적으로, 페이징 처리(무한 스크롤)가 되어있어 부담을 줄였지만.. 더 줄여보자..!! 고민 1..
-
Service에서 Service를 참조해야만하나? (with Facade 패턴)실전 개발해보기 2024. 2. 4. 11:26
이번 팀플을 해볼 때 내 도메인을 다른 도메인(팀원이)에서 가져다 쓸 것을 크게 고려하지 않고, 내 도메인에 대한 기능만 충실하면 된다고 착각해서, Presentation(Controller) | Application(Service) | (Domain) | Infrastructure(Repository) 구조로 짰다. 쿠폰은 내가 다른 Service 을 가져다 쓸 부분은 없고 도메인 과 레포지토리 정도였다. 그러나 다른 도메인의 Service에서는 Coupon에 대한 기능이 필요했다. 다 짜고 보니까 다른 ProductService에서 CouponService 에 있는 기능이 필요했다. 그래서 몇가지 해결법을 정리해보았는데, 해결법중 뭐가 정답이다! 라는건 없다고 생각한다. 각 방법끼리의 트레이드 오프..
-
동시성 문제 해결하기(1) - DB Lock실전 개발해보기 2024. 1. 23. 16:05
팀프로젝트 때 내가 맡았던 쿠폰 도메인... 쿠폰 도메인에서 가장 중요한 파트라하면 단연 쿠폰을 다운로드 하는 기능이 되겠다. 플젝 당시에는 락 관련 테스트 코드짜다가 에러가 너무 많이 나서 일단 Pessimistic Lock으로 구현해놓고 플젝이 끝난 지금, 다시 테스트 코드를 짜서 이것저것 비교해보며 공부해보려고 한다. 내 개발환경은 언어 : Java 프레임워크 : Springboot DB: Mysql Jpa(hibernate) 정도를 사용하고 있다. DB에서 테이블/레코드에 쓰는 락으로 대표적으로 Exclusive lock /Shared lock 가 있다. (여기서는 간단하게 정리) Exclusive lock (배타적 잠금) 쓰기 잠금(Write lock)이라고도 불린다. 어떤 트랜잭션에서 데이터를..
-
Bulk 데이터 삽입 최적화 - save() , saveAll() , batchUpdate()실전 개발해보기 2023. 12. 9. 14:36
상황 토이 프로젝트로 스포츠 경기 예매 시스템을 만들고있다. Game 클래스는 축구,야구 등 경기를 나타내는 도메인이고 Seat 클래스는 한 경기당 생성되는 수만개의 경기 좌석이다. Seat -> Game 은 N:1 단방향 (Seat에서 @ManyToOne 으로) 매핑이 되어있다. 스포츠 경기 특성상 한 경기마다 수만개의 좌석을 확보해야한다. 이 코드 짜기 직전에 RBF에서 팀원이 spring data jpa 에서 save()와 saveAll() 의 성능 비교를 보여줘서 bulk 데이터 저장에 쉽게 접근할 수 있었다. https://voidmelody.tistory.com/189 JPA의 save와 saveAll의 성능차이 spring batch를 통해 데이터를 가공하고 저장하는 업무가 있었다. 당시 나..
-
clone과 fork 를 기반으로 git 이해하기실전 개발해보기 2023. 8. 29. 18:01
모 사이트에서 진행하는 과제를 git을 통해 수행하려고했다. 그동안 나혼자 깃에 정리하고 개인프로젝트만 하다보니 fork,clone,pr 할 일이 없어서 이번에 좀 많이 헤맸다. fork & clone 이 뭐지? 중요한 차이점 '어디서 진행되는지'이다. Fork 먼저 알아보자. 우측에 Fork를 누르면 기존 레포지토리를 복사해서 내 레포지토리에 만들수 있다. 이름도 바꿀 수 있다. 그러면 이건 어디에 생기는가? 원격 저장소에 생긴다. 잠깐! Remote(원격 저장소) & Local (나만의 저장소) Remote 저장소는 Github,Gitlab과 같은 분산 저장소를 의미한다. 반면 Local 저장소는 내 컴퓨터에서 접근할수 있는 저장소를 의미한다. 위 그림을 보면 fork는 remote 저장소에서 복사해..