진짜 개발자
본문 바로가기

전체 글 (총 573개)

Spring JPA - JPA를 이용해 Commerce App 만들기 - 9.1 (무한카테고리 구현 및 Redis를 이용한 캐싱) 무한 Category 기능확장을 해보도록 하겠습니다. 이번 포스팅에서는 카테고리 기능을 별도로 구현하는 방법을 알아보고, 다음 포스팅에서 기존 시스템과 카테고리 기능을 결합해보도록 하겠습니다. 1. 과정 1.1 카테고리 기능을 별도로 설계 및 구현합니다. 1.2 카테고리 기능을 기존 시스템에 결합합니다. 2. 카테고리 기능 설계 및 구현 2.1 Table 설계 1. 요구 사항 item은 이름, 가격, 속한 카테고리를 가지고 있습니다. item은 하나의 카테고리에만 속합니다. categories는 이름, 상위 카테고리 id를 가지고 있습니다. categories는 여러 item을 가질 수 있습니다. 2. 설계 및 과정 level table 처음 생각한 방법은 level(depth) 별로 테이블을 만드는 것..
Mysql - Mysql 성능 최적화 - 1 (시스템 설정) MySQL의 시스템 설정 SQL의 실행 성능향상은 어플리케이션에서의 성능향상에 비해 보다 쉽게 수십배에서 수백배까지 가능합니다. 따라서 우리가 실행할 쿼리가 어떻게 동작하는지를 이해하는것이 정말 중요합니다. 이번 포스팅에서는, SQL 쿼리에 영향을 주는 MYSQL의 시스템설정들에 대해서 알아보도록 하겠습니다. ORACLE이나 여타 DB에서는 기본적으로 적용되는 설정들이 다르기 때문에, MYSQL에 대한 설정임을 주의해주세요. 1. SQL모드 설정STRICT_ALL_TABLES기본적으로 저장하려는 값의 길이가 컬럼에 지정된 길이보다 긴 경우, 기본적으로 에러가 발생하지 않고 가능한 길이만큼만 잘라서 저장이 되게 되어있습니다.이때, 만약 저장하려는 길이보다 긴 경우, 에러를 발생시켜 값이 저장되지 않기를 원..
Spring JPA - JPA를 이용해 Commerce App 만들기 - 8 (무한스크롤, 페이지네이션, 컬렉션 조회 최적화, N+1 문제해결) 제목 없음 안녕하세요, 이번 포스팅에서는 나의 주문 목록 페이지에 무한스크롤 기능을 추가해보도록 하겠습니다. 또한 JPQL을 이용해 컬렉션을 조회할때, 최적화를 하는 방법과, Pagination을 할 수 있도록 하는 방법도 알아보겠습니다. 1. 필요한 것우선 무한 스크롤을 만들기 위해 필요한것들을 생각해보도록 하겠습니다. 1.1 페이지네이션가장 먼저 떠오르는 것은 페이지네이션 입니다. 페이지네이션이란, 간단히 말씀드려 게시판에서 페이지를 나누는것을 말합니다. 한번에 수많은 데이터를 요청하기보다는, 사용자가 볼 만큼만 부분 부분 서버에 요청하도록 하여, 서버에 부하를 줄일 수 있도록 하는 기술입니다. 무한 스크롤구현을 위해서도 프론트에서 데이터를 페이지별로 받을 수 있도록, 서버단 페이지네이션 기능 구현이..
Spring JPA - JPA를 이용해 Commerce App 만들기 - 7 (장바구니 기능 추가) 이번 포스팅에서는 장바구니 기능을 추가해보도록 하겠습니다 이번 포스팅에서는 장바구니 기능을 추가해보도록 하겠습니다. 전체코드 : https://gitlab.com/galid1/jpa-commerce 1. 장바구니 도메인 계층1.1 요구사항 분석장바구니 기능에는 어떠한 기능들이 필요할지 먼저 파악해보겠습니다.장바구니에 여러 아이템을 추가할 수 있어야한다.아이템 추가시 이미 장바구니에 존재한다면, 수량을 증가 시켜야 한다.어떤 아이템을 얼만큼(수량) 담고 있는지 알 수 있어야한다.담고 있는 아이템을 제거할 수 있어야 한다.담고 있는 아이템의 수량을 수정할 수 있어야 한다. 1.2 설계1. 기능 추출하기public class CartEntity { public void addItemToCart(CartLine..
Spring JPA - JPA를 이용해 Commerce App 만들기 - 6 (계층별 테스트코드 작성) 이번 포스팅에서는, 계층별 테스트 코드 작성을 해보도록 하겠습니다 이번 포스팅에서는, 계층별 테스트 코드 작성을 해보도록 하겠습니다. https://galid1.tistory.com/783테스트코드를 작성해야하는 이유와, 간단한 팁들은 위 링크에 정리해두었습니다. 1. Domain 계층 테스트Domain 계층에서 테스트할 대상은 각 도메인의 애그리거트루트입니다. 이 글에서는 ItemEntity, ItemService, ItemController만을 테스트 하도록 하겠습니다. 테스트 할 것removeStockQuantity 호출시 주문 수량만큼 재고량이 차감이 되는지.재고량보다 많은 수의 주문을 할 시 에러가 발생하는지.재고량 추가시 추가수량만큼 재고량이 증가하는지.테스트 해야할 것들을 확인 했으니, 이제..
Test - Test 코드를 작성해야하는 이유와, 방법 1. 테스트코드의 중요성 1. Test Code를 왜 작성해야 하는가우선 테스트코드를 작성하기 전, 우리가 왜 TestCode를 작성해야 하는지를 먼저 알아야, 귀찮은 테스트코드를 꼭 작성하려고 할것 같습니다. 1.1 궁극적 목표테스트 코드를 작성하는 이유는, 잘 작동하는, 깔끔한 코드를 얻기 위해서 입니다. 그렇다면 왜 테스트코드를 작성하면, 깔끔한 잘 작동하는 깔끔한 코드를 얻을 수 있을까요? 테스트를 쉽게하기 위해서는, 어플리케이션 코드를 테스트하기 쉽게 짜야합니다. 결국 테스트 코드를 짜기 위해 노력하다보면, 어플리케이션 코드가 깔끔해진다! 는 말입니다. 1.2 시간의 단축테스트 코드를 작성하면 귀찮고 시간도 되려 오래걸리지 않냐 라고 생각할 수 있지만,(옛날 얘기이니.. 요새는 이렇게 생각하는분..
Spring JPA - JPA를 이용해 Commerce App 만들기 - 5 (컨트롤러 개발 및 뷰 개발) 이번 포스팅에서는, 실질적으로 사용자가 접근 요청을 하는 부분인 Controller와 사용자가 보게될 화면을 구현하도록 하겠습니다. 전체코드 : https://gitlab.com/galid1/jpa-commerce 1. 표현 계층의 역할 우리가 오늘 작성할 표현계층에서는 아래와 같은 일들을 수행합니다. 사용자의 요청값을 검증 사용자의 요청을 Service 계층에서 처리할 수 있는 형태로 변환합니다. Service 계층에 비즈니스 로직을 위임하고 결과값을 Model에 맵핑하여 View에 전달 결과값을 사용자에게 반환합니다. 2. 구현 2.1 ItemController 구현 @Controller @RequiredArgsConstructor public class ItemController { private ..
EventDriven - 이벤트주도 설계 따라해보기 (RabbitMq) 목표 이벤트 주도 설계를 이용하지 않았을 때의 문제점에 대해 알아볼 것 입니다. 이벤트 주도 설계를 이용한 뒤 유지보수성 향상, 도메인 로직의 명확성 향상, 어플리케이션의 성능과, 클라이언트의 경험을 향상 시킬 것 입니다. 서비스 확장이 편리한지, 확인합니다. 주의사항모듈간의 이벤트를 주고받기 위해 사용된 RabbitMq는 Docker를 이용해 설치했으며, 이 글에서 자세히 다루지 않습니다.이벤트주도 설계에 매우 정확한 지식을 가지고 설계한 것은 아니며, 이벤트로 모듈간 통신을하면 이런, 장점들이 있구나를 알아보기 위한 모의 시뮬레이션정도로 봐주시면 감사할것 같습니다. (제가 잘못된 지식을 가지고 있는 경우, 필히 댓글로 알려주시면 정말 감사드리겠습니다! 추가적으로 정확한 지식은 알아가고 있습니다~) 어..