아래와 같은 사이드바에 장바구니에 담긴 상품 개수, 찜 개수, 최근 본 상품이 표시되도록 하는 기능을 구현하게 되었다. 그런데 개수 같은 경우에는 count 쿼리로 구해 model에 담아 view넘기는데 이 사이드바가 메인, 장바구니, 결제, 상품상세 페이지 등에 적용이되어서 해당 컨트롤러들마다 count 쿼리를 날리는 건 낭비라 생각해 @Aspect로 AOP를 적용하게 되었다. AOP 적용 아래는 사이드바에 공통으로 적용할 코드들을 담은 Aspect를 적용한 클래스이다. @Aspect @Component @Slf4j @RequiredArgsConstructor public class SidebarAspect { private final LikeService likeService; private fina..
적용하게 된 이유 장바구니에 있는 상품들 중에 체크박스가 활성화된 상품들만 결제 페이지로 넘기는 작업을 진행하면서 해당 상품들만 어떻게 GET 요청에 담아서 보내야할까? 라는 의문이 들었다. 처음에는 체크박스가 활성화된 상품들을 배열에 담아 해당 배열을 보내주어야 하는데 처음에는 axios를 통해 비동기로 POST 요청으로 해당 상품들의 정보들을 JSON 객체로 넘겨주려했었다. 하지만, 비동기로 요청하게 되면 컨트롤러에서 view를 반환할 때 해당 view에 체크박스가 활성화된 상품들의 데이터를 model에 담아 넘겨줘야하는데 요청에 대한 응답을 성공적으로 넘겨준후에 axios의 then 구문으로 넘어가게되면서 해당 데이터를 넘겨주기 힘들어지는 문제가 발생했다. (해당 위 방법으로 해결 할수 있을 수도 ..
MySQL에 주기적으로 특정시간에 DB에 어떤 작업을 해주어야 할 상황이 생길 때가 있다. 나는 이번에 쇼핑몰 프로젝트를 진행하면서 "장바구니에 담긴 상품은 최대 15일까지 보관되며 자동으로 삭제됩니다." 라는 장바구니의 정책이 있어서 이를 MySQL의 이벤트 스케쥴러와 프로시저를 활용하여 매일 자정에 15일이 지난 상품을 장바구니 테이블에서 삭제하도록 만들었다. 프로시저(Procedure) 프로시저는 MySQL의 함수(메서드)를 만드는 것이라고 보면 된다. 실행할 쿼리문을 함수로 빼서 재사용가능하고, 이 프로시저의 쿼리에 조건문이나 반복문도 함께 사용할수가 있다. 프로시저 생성 나같은 경우에는 현재날짜와 cart 테이블에 데이터가 생성된 시점을 비교해 15일이 지났으면 삭제하는 간단한 프로시저를 만들었..
이번 프로젝트에서 어드민 페이지 상품 등록 화면의 상세설명 부분에 아래와 같이 TinyMce 에디터를 적용하게 되었다. TinyMce 에디터를 사용하면 위와 같은 텍스트 편집기를 추가할 수 있는데 이번 포스팅에서는 TinyMce를 JavaScript로 적용하는 방법에 대해 설명하고 에디터를 커스터마이징하는방법에 대해 포스팅하려한다. TinyMce 적용방법 TinyMce Api Key 발급 tinymce를 적용하기전에 먼저 아래의 공식 홈페이지에 들어가서 회원가입 후 API KEY를 발급받아야한다. The Most Advanced WYSIWYG Editor | Trusted Rich Text Editor | TinyMCE TinyMCE is the most advanced WYSIWYG HTML edito..
이번 프로젝트를 진행하면서, 요청으로 받은 파라미터들이 @ModelAttribute 객체에 바인딩이 되지 않는 이슈를 겪어 이에 대해 정리해보고자 한다. 지금 진행하는 프로젝트에서 JPA와 MyBatis를 함께 사용하는 것이 아닌 오로지 MyBatis만 사용하면서 기존의 방식과 다른점으로 머리속이 복잡해지면서 많은 오류를 겪었다. JPA에서는 Entity 객체에 @Entity 어노테이션을 붙여 테이블이 생성하도록 해준다. @Entity 객체에 기본 생성자가 없을 경우에는 JPA가 작동하지 않을 것이다. 그 이유는 JPA는 Reflection API라는 것을 사용하여 객체를 생성해 기본 생성자가 필요하기 때문이다. 그래서 보통 Entity 객체에는 기본 생성자와 값 생성자가 포함된다. 그리고 Setter ..
@ModelAttribute 이 어노테이션은 보통 컨트롤러 메서드의 파라미터 객체의 앞에 사용되며 HTTP 요청을 받으면 HTTP 요청 파라미터를 자동으로 자바 객체에 바인딩 해준다. 요청을 처리하는 스프링 어노테이션으로 주로 @ModelAttribute와 @RequestBody가 많이 헷갈리는데 @ModelAttribute는 content-type이 application/x-www-form-urlencoded인 경우 즉 태그를 통해 제출한 데이터를 받아 객체로 변환하고, @RequestBody는 message body를 통해 넘어온 JSON이나 XML 형식들을 받아 객체로 변환한다. 이 두 어노테이션에 대한 차이는 아래 포스팅을 참고하여 알아 볼 수 있다. 2023.07.05 - [JAVA/Spring..