본문 바로가기

전체 글49

FullCalender 성능 최적화(& 리팩토링) FullCaleder 오픈소스를 이용한 스케줄 관리 졸업작품 프로젝트를 진행하는 도중 다양한 문제가 계속해서 발생했고 차근차근 수정하려 하는 중인데, 현재 직면한 가장 큰 문제는 쿼리 성능 최적화이다!.. 전체 스케줄 페이지를 클릭하는 경우 , DB 에 스케줄 데이터가 100개도 안됨에도 불구하고 버벅이며 페이지가 열리는 현상이 발견됐고, 로그를 확인해보니 어마어마한 쿼리문이 찍히고 있었다. (단 한번의 클릭만으로 어마어마한 스크롤 길이..) 다른 문제들보다 가장 시급한 문제라고 생각됐고, 최근 들었던 강의(쿼리 성능 최적화)를 활용할 수 있는 좋은 기회라 생각돼서 실제 프로젝트에 적용해보려 한다. 쿼리문을 분석해보니 다음과 같은 코드가 스케줄의 개수만큼 반복되고 있음을 확인할 수 있었다. 양방향 연관관.. 2022. 5. 6.
스프링 게시판 만들기 - 7 (1) (조회수, 댓글 작성) 이전 스프링 게시판 만들기 - 6 에서 페이징 처리와 검색을 구현해보았다. 이번에는 간단하게 조회수를 올리는 기능과, 댓글 기능 을 구현해보려 한다. https://dodokong.tistory.com/54 스프링 게시판 만들기 - 6 (게시판 구현 & 페이징 처리 & 검색) 지금까지의 포스팅에서는 Bootstrap 을 이용해서 화면을 만드는 법과, Spring Security 를 이용해서 로그인을 구현해보았습니다. 이번 포스팅에서는 게시판을 구현해보려 합니다. 게시판도 동일하게 Bo dodokong.tistory.com 조회수 증가 Board 도메인은 다음과 같다. 처음 설계에서는 countVisit 이 없었는데 조회수 기능을 넣기 위해 Long 타입으로 추가하였다. int, long 이 아닌 Long.. 2022. 4. 4.
스프링 게시판 만들기 - 6 (게시판 구현 & 페이징 처리 & 검색) 지금까지의 포스팅에서는 Bootstrap 을 이용해서 화면을 만드는 법과, Spring Security 를 이용해서 로그인을 구현해보았습니다. 이번 포스팅에서는 게시판을 구현해보려 합니다. 게시판도 동일하게 Bootstrap 을 이용해서 UI 를 그리고, JPA 를 이용해서 페이징 처리를 하려 합니다. HTML 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 7.. 2022. 3. 31.
지연 로딩 & 조회 @JsonIgnore 스프링 부트 활용 강의 중, @JsonIgnore 에 관한 내용이 존재한다. @JsonIgnore 는 무한 루프 조인을 막기 위해서 쓰는 어노테이션인데, 예를 들면 다음과 같다. (위의 예에서 @JsonIgnore 는 무시) Order 를 조회하는 경우, XtoOne 관계로 이어진 Member 와 Delivery 가 문제가 된다. Order 에서 Member 를 조회하면 위와 같은 Member 에서 조회를 하게 되는데 이 때, List orders 가 조회되게 된다. 그렇게 되면 또 다시 Order 테이블로 들어가서 조회를 하다가 다시 Member 를 조회하고 이게 무한 루프로 조회하며 장애를 일으킨다. 이렇듯 양방향 연관관계가 걸린 경우, 한쪽은 반드시 @JsonIgnore 처리를.. 2022. 3. 23.
변경 감지(Dirty Checking) & 병합(Merge) JPA 에는 따로 Update 에 관한 쿼리문이 존재하지 않고 ( @Query로 만드려면 만들겠지만 ) Update 를 변경 감지와 병합 두 방법을 통해서 실행하게 된다. 변경 감지(Dirty Checking) 과 병합(merge) 에 대해서 알기 전에 영속 컨텍스트와 준영속 엔티티 두 개념에 대해서 알아야 한다. 영속성 컨텍스트란 ? JPA 에 존재하는 엔티티 매니저를 통해 쿼리문을 날리면 자동으로 해당 엔티티는 영속성 컨텍스트에 들어가서 트랜잭션이 끝나는 시점까지 따로 관리하게 된다. 앞선 JPA 포스팅에서 다룬적이 있는데, Member member = new Member(); 로 객체만 생성한 경우 비영속 상태 memberService.save(member) 처럼 DB에 쿼리를 날린 경우 영속 상태.. 2022. 3. 21.
FullCalendar 와 DB 연동하기 -6 (코드 수정 & 매니저별 조회) 이전의 포스팅들에서 뭔가 테이블 설계가 이상하다.. 쿼리문이 이상해.. 했었는데 다행히 회의에서 팀원들의 명석한 두뇌로 테이블을 대폭 수정했다. 테이블 수정하면서 기존 코드를 이것저것 바꿔야 하는게 좀 있었지만 마음이 후련하달까.. 기본적인 스케줄 CRUD 는 이미 이전 포스팅에서 모두 이야기했기 때문에 추가적인 내용은 필요 없을 것 같다. ( 단지 테이블 구조가 바뀌어서 수정만 있었을뿐!..) 이번에 추가한 내용은 자잘한 오류 수정과, A 매니저가 로그인 한 경우, A 매니저의 스케줄만 보이게 하는 로직을 짰다. (로직이라 하기도 민망) 사실 메인은 이벤트 색상을 바꾸는걸 해보려 했는데 음.... 결국 이번에도 못했다. 모두 같은 색상도 통일성 있어서 좋지 않을까.. 수정 & 추가 저장할 때 , ale.. 2022. 3. 7.