Spring - No Offset 페이지네이션으로 페이징 성능을 개선해보자!
·
Spring
웹 서비스에서 페이지네이션은 흔하게 사용되는 기능 중 하나이다. 현재 진행중인 66Challenge에서도 페이지네이션이 기능이 필요했고 JPA에서 기본적으로 제공하는 Offset 페이지네이션을 적용했다. Offset 페이지네이션은 Pageable 객체를 통해 페이지네이션을 구현하는 방식이다. // Offset Pagination SELECT * FROM 테이블 WHERE 조건문 ORDER BY id DESC LIMIT 컨텐츠개수 OFFSET 페이지번호 * 컨텐츠개수 하지만 Offset 페이지네이션에는 두 가지 문제점이 있었다.😕 이번에는 이 문제점을 어떻게 해결하여 페이징 성능을 개선했는지에 다뤄 보려고한다. Offset 페이지네이션의 문제점 1. 뒤로 갈수록 심해지는 성능 저하 Offset 페이지네이션..
Git - .gitignore가 작동되지 않을 때 해결 방법
·
나의 에러 일지
리포지토리에 올리지 않고 싶은 파일들이 있다. 그럴 때 .gitignore 파일에 올리고 싶지 않은 파일의 경로를 넣어주면 자동으로 file changes 목록에서 제외를 시켜준다. 이번에 사이드 프로젝트에서 FCM을 구현하다가 Public Repository에 공개해서는 안되는 파일이 있었는데, .gitignore에 해당 파일을 추가는데 Changes에 나오는 것이다. 원인 .gitignore에 파일을 추가하기 전 stage 올라갔던 파일들은 캐시처리가 되어서 캐시에 남아있기 때문이다. (공개해서는 안되는 파일인줄 모르고 해당 파일을 stage에 올렸었다.) 해결 방법 캐시를 제거하면 해결된다. 아래 명령어를 입력하면 된다. git rm -r --cached git add git commit -m "g..
Java - UnsupportedOperationException 원인과 해결법
·
나의 에러 일지
팀 프로젝트가 끝이 났다. 모든 정신을 프로젝트에 집중하다보니 한 달이라는 시간이 금방 지나갔다. 그동안 손을 놓아버린 알고리즘과 다시 친해지기 위해 오랜만에 문제 하나를 풀어보았다. 오늘 다루게 될 에러는 알고리즘을 풀면서 만난 UnsupportedOperationException이다. Array를 List로 변환한 후 List 요소를 삭제하고 싶었는데, 이 과정에서 에러가 발생했다. 아래는 에러가 발생했던 코드이다. class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; List compList = Arrays.asList(completion); for (String s..
AWS EC2 - EC2 배포시 Scheduled가 지정된 시간에 실행되지 않았을 때 원인과 해결법
·
나의 에러 일지
프로젝트로 66일 동안 습관을 유지하는 서비스를 만들고 있었다. 매일 자정 습관을 인증했는지 확인하는 지 체크하는 요구사항이 있었다. @Transactional @Scheduled(cron = "0 0 0 * * *") public List notAuthTodayCheck() { ... return challenges; } 분명 로컬에서는 잘 실행되었는데, EC2 배포 후에는 로직이 잘 작동되지 않았다. 확인해보니 자정에 실행되어야 할 로직이 9시간 전인 오후 3시에 실행되었다. (처음에는 로직을 잘못 짠줄 알고 한참 헤맸다ㅠㅠ) 이유가 뭐였을까? EC2에서 새 인스턴스를 만들게되면 KST가 아닌 UTC로 표시된다. UTC는 한국시간보다 9시간 느리기 때문에 한국 시간으로 자정에 실행되어야 할 로직이 U..
QueryDSL - NoSuchBeanDefinitionException: No qualifying bean of type 'com.querydsl.jpa.impl.JPAQueryFactory' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 원인과 해결 방법
·
나의 에러 일지
지금까지는 친절한 JPA 덕분에 쿼리에 대한 고민없이 편하게 쿼리 메서드를 이용해서 DB를 조회했었는데, 이번 프로젝트에서는 쿼리 성능 최적화와 쿼리 공부를 목적을 위해 QueryDSL을 사용해보기로 했다. JPQL은 맨땅에서 작성해야되는 느낌이라 막막했다면 QueryDSL은 문법을 자동 완성해주고 직관적이어서 요리조리 쿼리를 짜볼 수 있어서 좋았다. 처음으로 직접 짠 쿼리로 DB 슬라이스 Test를 진행하려는데 아래 에러를 만났다. NoSuchBeanDefinitionException: No qualifying bean of type 'com.querydsl.jpa.impl.JPAQueryFactory' available: expected at least 1 bean which qualifies as ..
JPA - AnnotationException: mappedBy reference an unknown target entity property 에러 원인과 해결법
·
나의 에러 일지
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: challenge.server.habit.entity.Habit.user in challenge.server.user.entity.User.habits 도메인 별 Entity를 구현한 후 첫 실행에서 만난 에러. 원인도 단순하고 해결법도 단순하다. 에러 내용을 해석해보자면 user에서 habit으로 mappedBy reference한 대상이 무엇인지 알 수 없다는 의미이다. 내 코드에서 어떤 내용이 문제였는지 알아보자 원인 package challenge.server.user.entity; import challenge.serv..
Spring Security - There is no PasswordEncoder mapped for the id "null" 원인과 해결법
·
나의 에러 일지
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null" at org.springframework.security.crypto.password.DelegatingPasswordEncoder$UnmappedIdPasswordEncoder.matches(DelegatingPasswordEncoder.java:289) ~[spring-security-crypto-5.7.5.jar:5.7.5] at org.springframework.security.crypto.password.DelegatingPasswordEncoder.matches(DelegatingPasswordEncoder.java:237) ~[spr..
Github - Pull request template 작성과 설정
·
Git
💡Pull request template은 왜 필요할까? PR의 내용이 중요한 이유는 Pull Request를 통해 코드 리뷰를 받기 때문입니다. 코드 리뷰를 통해 팀원 간의 코드 스타일을 맞출 수 있고, 혼자서는 발견하기 어려운 위험 요소도 발견할 수 있습니다. PR 내용만으로도 변경 사항과 이유를 충분히 이해할 수 있어야 합니다. PR Template을 만들어 Repository에 추가하면 PR을 할 때 PR body에 template의 내용을 자동으로 볼 수 있습니다. PR의 내용을 표준화해서 일관성 있는 좋은 품질의 Pull Request를 유지할 수 있습니다. pull_request_template.md 파일 생성 프로젝트의 Repository에서 파일을 생성합니다. 템플릿은 다음 위치 중 한 ..
Git - Commit template 작성과 설정
·
Git
팀원들과 함께 논의해서 Commit message convention을 정리했다. 이제 터미널에서 커밋 시 참고할 수 있는 템플릿을 만들어 보자 1. git message 파일 생성.gitmessage 파일을 생성합니다.$ touch ~/.gitmessage.txt 2. Commit template 작성editor를 사용해서 .gitmessage 파일에 Commit template를 작성합니다. (필자는 vim을 사용했다.)$ vim ~/.gitmessage.txt# Title Message# () - [#issueNumber-]: # ex) feat - #123: 로그인 기능 추가##### Subject 50 characters ################# -> |# 한 줄 공백. subject과 ..
Git - Commit Message Convention 커밋 메시지 컨벤션
·
Git
해당 Convention은 Udacity Git Commit Message Style Guide을 참조하여 작성한 내용입니다.  메시지 구조커밋 메시지는 크게 제목, 본문, 꼬리말 세 가지 파트로 나누고 한 줄을 띄어 구분합니다.type(옵션): subject // 제목 body(옵션) // 본문footer(옵션) [#issueNumber-] // 꼬리말제목 : 어떤 작업을 했는지 명확하게 드러나야하고, 너무 길지 않게 작성해야 합니다.본문 : 긴 설명이 필요한 경우에 작성합니다. 어떻게 했는지가 아니라, 무엇을 왜 했는지를 작성합니다.꼬리말 : 이슈 번호를 참조시킬 때 주로 사용합니다. 선택사항입니다. 제목typetype은 subject와 함께 제목 내에 포함됩니다.type: subject 의 형태이며..
Cold Bean
'분류 전체보기' 카테고리의 글 목록 (16 Page)