본문 바로가기

Trouble Shooting

(14)
Redis Cache 성능 측정 1. API 설명 음식점 예약 어플을 제작 중에 있다. 특정 조건에 따른 음식점 리스트를 출력하고자 한다. 성능 개선을 위해 캐시를 활용할 것이며 뚜렷한 변화가 있는지 측정하고자 한다. 입력 : 나라명, 도시명, 동명, 음식점 타입, 페이지, 페이지 당 크기 출력 : 해당 조건에 맞는 음식점 리스트 2. 기존 코드 - 서비스 클래스의 메서드 @Override public HashMap getStoreList(String country, String city, String dong, String type, int page, int size) { return storeDAO.getStoreList(country, city, dong, type, page, size); } - DAO 클래스의 메서드 @Over..
QueryDSL - 3중 Join N+1 해결 보통 두개의 테이블에서 N+1 문제 발생시 Left Join을 통해서 해결을 한다. API 제작 중에 3개의 테이블을 Left Join해서 N+1문제를 해결하고자 하였으나 쿼리문을 3개 발생시켜 이를 해결해서 쿼리문의 양을 줄이고 DB 서버에 부하를 줄이고자 하였다. API API를 간단하게 설명하면 사용자가 음식점에서 예약을 하면 예약이 DB에 영속화 된다. 이 후 정보 요청시 예약만한 경우에는 예약 정보만을 출력하지만 사용자가 해당 예약정보에 맞는 주문까지 하고 정보 요청시 총 3가지의 정보가 들어가게 된다. 기존 코드 해당 코드처럼 작성시 총 3개의 쿼리문이 발생한다 N+1문제는 발생하지 않지만 두개의 left join이 제대로 처리되지 않는다. 예를 들어, 1번 테이블과 2번테이블은 1대1, 2번..
Query DSL, Entity대신 DTO로 받기 Querydsl 사용시 Entity가 아닌 DTO로 받는 방법을 간단하게 정리해보고자 한다. API - 작성하고자 하는 API를 설명해보자면 가게마다 운영시간 정보가 있다. 가게 이름, 가게 쉬는 시간 리스트, 가게 시작시간, 가게 종료 시간, 예약 다시 받는 시간 간격(예를 들어, 한시간 뒤에 해당 테이블을 다시 받겠다.) - 여기서 가게 쉬는 시간은 여러 시간이 존재할 수 있으므로 다른 테이블을 통해 조인 관계로 설정을 해두었다. - 이제 API에서 클라이언트가 받고싶은 데이터는 해당 데이터 전체이다. 따라서 Entity보단 입력 받은 데이터를 그대로 전달해줄 수 있는 DTO를 통해 데이터를 전달하는게 더 효율적이다. StoreTimeInfoDTO result = queryFactory .select..
Querydsl 적용과 고찰 이번에 진행하고 있는 프로젝트에서 querydsl을 적용해보고 있다. 발생하는 고찰들에 대해서 정리하고자 한다. 1. Query DSL을 통해 불필요한 데이터 제거 및 DB내의 데이터 순환 효율성 처리 로그인 API - 로그인의 기존 로직은 해당 아이디에 맞는 Entity를 찾고 해당 엔터티가 null이면 아이디가 존재하지 않음으로 보고 오류를 발생시킨다. 그리고 기존의 받은 비밀번호와 해당 아이디 엔터티에 해당하는 비밀번호가 일치하지 않으면 또 오류를 발생시킨다. - 고찰 : querydsl의 장점인 가독성 부분에 대해서는 문제가 없어보인다. findByUserId라는 메서드는 충분히 이해가 가능하다. 다만, 필요없는 데이터도 가져온다. 현재 아래에서 필요한 데이터는 비밀번호 데이터 뿐인데, Entit..
SELECT + JOIN 개선에 대한 고찰 1. 문제 인식 단계 : 문제가 발생했음을 인식하고 해당 문제를 명확하게 기술한다. 1-1. API 설명 현재, 하나의 API를 제작 중에 있다. API : 가게이름을 받고, 그 가게의 쉬는날을 반환한다. Entity는 아래와 같다. 1. StoreRestDaysEntity (부모 엔터티) - Days Id (Identification) - Store Name - Set - Created At - Updated At 2. StoreRestDaysMapEntity (자식 엔터티) - Day Id (Identification) - StoreRestDayMapEntity - (Days Id (FK)) - Date 위의 엔터티에서 부모 엔터티는 StoreRestDaysEntity이고 자식 엔터티는 StoreRe..
Trouble Shooting 1. 문제 인식 - 문제가 발생했음을 인식하고 해당 문제를 명확하게 기술한다. 2, 현상 분석 - 문제가 발생한 상황을 자세히 분석하고, 문제의 범위와 영향을 확인한다. 3. 원인 파악 - 문제의 원인을 추정하고 가능한 원인을 찾기 위해 검토 및 실행을 진행한다. 4. 해결 방법 - 원인을 바탕으로 가능한 해결 방법을 도출한다. 5. 해결 적용 - 도출된 해결 방법을 적용하여 문제를 해결한다. 6. 결과 확인 - 해결 방법이 문제를 해결했는지 확인하고, 필요한 조치를 취한다.