본문 바로가기

전체 글

(45)
JPQL의 특징 JPQL이란? 객체지향 쿼리 언어로써 엔티티에 대한 쿼리를 만드는데 사용된다. 이번에 알게된 PQL의 특징은? 1) JPQL은 사용되기전 flush를 한번 한 후 사용된다 그 이유는 영속성 컨텍스트와 DB사이의 데이터 차이가 있을수도 있기때문에 그렇다고한다. + QueryDSL이나 Criteria같은 JPQL 빌더들도 flush를하고 쿼리를 날린다. 2) JPQL을 통해 가져온 데이터는 영속성컨텍스트에 저장이 된다. 만약 영속성 컨텍스트에 저장된 데이터를 똑같이 가져왔으면 가져온 데이터를 버린다 3) JPQL을 사용하면 영속성 컨텍스트에 들렸다가 없을경우 DB로 가는 것이 아니라 바로 DB로 냅다 직행한다. 즉 바로 JPQL을 SQL로 변환하기 때문에 내가 엔티티에 설정한 어노테이션인 LAZY와 같은게 ..
QueryDSL은 왜 Q-Class를 사용할까? QueryDSl로 개발을 하려면 Q-Class를 이용해 개발을 해야 한다. Q-Class와 같은걸 만들어 사용하는 방식이 처음이라 그런지 왜 굳이 이런 방식으로 사용하는거지? 라는 궁금증이 생기게 되었다. 그래서 이러한 궁금증을 내 나름대로 해결하여 한번 정리해보려고한다. Q-Class는 어떻게 생성되는것일까? Q-Class의 생성은 컴파일 시점이다. JPAAnnotationProcessor라는 친구가 컴파일 시점에 작동을 하는데, 해당 APT가 @Entity와 @Embeddable과 같은 어노테이션을 찾는다. 그 후 해당 내용들을 분석하여 Q-Class들을 생성하게 된다. 이때 APT는 Q-Class을 생성할때 Entity-Class와 최대한 비슷한 패키지 구조를 유지하려고 한다. 그럼 왜 QueryD..
ElasticBeansTalk은 어떻게 상태를 체크할까? 엘라스틱 빈스톡을 사용하다 보면 콘솔로그에서 초록색으로 된 OK, 노란색으로 된 Warn, 빨간색으로 된 Fail등의 상태를 볼 수 있다. 그럼 빈스톡은 어떻게 이런 상태를 판별하는것일까? 빈스톡 처음 설정시 모니터링 기능을 Enhanced로 선택해서 배포 하게 되면 인스턴스에 분석기를 장착 한다. 해당 분석기는 여러가지 정보 ( OS 상태, Application-level health metric 등 ) 를 수집하여 이를 Cloud Watch에 기록을 한다. 이때 빈스톡은 분석기를 통해 수집된 데이터 및 로드벨런싱을 통한 헬스체크, 리소스 모니터링등을 종합 판단하여 상태를 체크한다고한다. 1. 로드벨런싱을 통한 HealthCheck ELB를 통해 각각의 인스턴스에 매번 10초에 한번씩 Request를 ..
QueryDSL 삽질기 QueryDSL을 이용해서 전체리스트를 뿌려주는 쿼리를 작성하고 있었고, 해당 쿼리는 페이징이 들어가야했다. 작성을 완료한 후! 잘되었겠지 하고 실행 ... postman으로 요청을 보냈다... BUT ,,,, expectin CLOSE, found '(' ... 내가 잘못 작성을 한 것 일까? 다시 한번 보았지만 이상한 부분은 없었다. 무슨 문제가 있는거지 열심히 검색을 하였다. 일단 내가 작성한 쿼리에는 GroupBy 가 들어가 있고, 페이징에 전체 리스트의 갯수를 구하기위해 fetchCount() 를 실행한 쿼리였다. 그러다 발견한 글은 https://github.com/querydsl/querydsl/issues/1614 JPA fetchCount() and group by not working ..
SpringDataJPA에서 Custom 할때 지켜야하는 규칙 s최근 프로젝트에서 QueryDSL을 적용한 후 실행시켰을때 아래와 같은 문제가 발생하면서 작동이 되지 않는 문제가 있었다. No property search found for type ********! 이유는 네이밍 규칙 때문에 발생한 오류였다 SpringDataJpa가 제공하는것 외의 QueryMethod를 사용하려면 SpringDataJPA가 정한 규칙을 따라야한다 . 그 규칙은 바로 { reposiotory 명 + Impl } 과 같은 방식으로 네이밍을 하는 것이다. 허나 나의 경우에는 바보같이 UserCheckRepositoryImpl이 맞는 네이밍이라면 UserRepositoryImpl 로 작성을 하여 발생한 버그 였다 그럼 왜 SpringDataJPA는 위와 같은 네이밍 규칙을 갖는것일까? ..
클린코드를 읽고나서 이번 한달동안 클린코드를 틈틈히 읽어 완독을 하였고, 내가 작성한 코드에 대해서 회고를 해보려고한다. 이전회사 CTO님이 변수명 하나하나에 신경쓰고, 단수복수에 매우 신경을 많이 써서 항상 코드에 대한 지적을 많이받아왔다. 그 때는 "에이 뭐 이런걸로 계속해서 피드백을 주는거지?" 라고 생각을 하고, 그 순간순간 피드백에 대해 작성하였다. 참으로 바보 같은 생각이고 어리석은 행동 이었다. 그때 클린코드를 읽었더라면 이런생각을 하지 않았을텐데.. 허허허.. 결국 개발은 혼자서 하는것이 아니고, 다같이 코드를 작성하는것이기 때문에, 남들이 보더라도 쉽게 코드를 작성하는것이 가장 중요하다. 이전에 나를 되돌아보면 정말 클린코드 반대로 개발을 했던것 같다. 변수명을 신경쓰지 않고, 함수를 분리하지않고 하나로만 ..
확장성 있는 하드웨어서버 개발기록 보호되어 있는 글입니다.
Redis 메모리 퇴거 정책 LRU, LFU, Random Redis에 대해서 공부를 하던중 Redis는 메모리가 부족하게 되면 설정한 퇴거 알고리즘에 맞게 메모리를 확보한다는것을 알게 되었다. 종류로는 LRU(Least Recently Used), LFU(Least Frequently Used), Random 3가지 종류가 있다. 각각의 3가지 종류는 또 3가지의 방법을 이용해서 메모리를 확보한다. 메모리 제한에 도달하게 되면 데이터를 지우지 않고 OOM을 반환하는 noeviction 방식 모든 데이터를 대상으로 키를 삭제하는 allkeys 방식 만료된 데이터 중에서 삭제하는 volatile LRU, LFU, Random은 3가지 방식을 이용해서 삭제를 한다. 그럼 LRU, LFU, Random 알고리즘이란? LRU 알고리즘이란? 데이터마다 사용한 시간을 표시..