Spring Framework로 개발하다 보면 Service를 도메인 기준으로 나누는 경우가 많다. 그러다 보면 Aservice에서 BService로 참조를 하게 될 경우도 있고, 반대로 BService에서 AService로 참조할 수도 있게 된다. 이런 경우에 각 서비스 클래스를 빈으로 만들면서 서로를 참조하기 때문에 다음과 같은 오류를 만나게 된다. 실무에서는 매우 복잡한 비지니스 구조를 가지고 있기 때문에, 추후에 해당 문제를 해결하기 위한 방법이 애매하게 된다. 물론 서비스의 빈생성을 @Lazy 등.. 과 같은 방법으로 지연 로딩하여 생성 순서를 정해줄 수 있지만, 여러가 서비스가 얽혀 있는 상황이라면 깔끔한 방법이 되지 못한다. 이러한 구조에서 가장 간단하게 개발할 수 있는 방법으로 @Event..
실무를 하다 보면 종종 다른 데이터베이스에 같은 이름의 테이블이 존재하게 된다. 예를 들어, A와 B 데이터베이스에 Category라는 테이블이 있고, 하나의 프로젝트에서 두 개의 엔티티를 만들어 사용할 수 있다. # 스키마가 다른 같은 이름의 테이블 create table schema_a.category ( category_seq int auto_increment primary key ); create table schema_b.category ( category_seq int auto_increment primary key ); 보통 이런 경우 테이블 명칭을 그대로 사용하여 엔티티 클래스 이름으로 사용하여 다음과 같이 사용할 수 있다. 나는 막연하게 @Table에 스키마와 테이블 명칭을 지정해두었으니..
실무를 하다 보면 일괄로 데이터를 업데이트하거나 인서트하는 작업을 자주 하게 된다. 이런 작업을 기능으로 만들 경우에 입력된 값이 수정이나 입력될 수 있는 값인지 검증하는 작업이 들어간다. 간단하게 생각해보면 클라이언트에서 입력된 값이 a, b라면 아래와 같은 쿼리로 풀 수 있을 것이다. select * from Account where Login_Id in ('a', 'b'); 하지만, 복잡한 실무에서는 단일 값으로만 검증을 취할 수 없다. 예를 들어, 회원의 아이디 이메일, 아이디, 이름으로 검증을 취해야 할 경우 위와 같은 쿼리로는 불가능하게 된다. 물론 회원의 고유 일련번호(account_seq)로 판단은 가능하겠지만, 클라이언트에서 회원의 고유 일련번호는 모르는 경우가 많을 것이다. 이럴 경우,..
보통 JPA를 활용하여 개발할 때 데이터베이스에 Y, N 여부 값을 넣을 경우에는 boolean converter를 따로 만들어서 사용하곤 한다. 하지만, 경우에 따라 버그(?)가 발생하는 경우가 있어 남긴다. CONFIG 테이블에 BooleanToYNConverter를 사용하는 칼럼이 있어, DB값이 Y라면 엔티티에는 true, 반대의 경우에는 false로 가져올 때, 해당 칼럼을 where 절로 쿼리를 select 할 때, case when 구문으로 true, false를 임의로 주면 파라미터 바인딩이 제대로 되지 않는 현상이다. 샘플 코드는 아래를 보자. @Entity @Table(name = "CONFIG") @Setter public class Config { @Id @GeneratedValue..
이전 포스팅에서 한 테이블 내에서 특정 값을 그룹핑하여 최댓값을 가진 row를 가진 방법을 보았었다. 이때 Row_Number를 사용하여 추출한 데이터가 가장 빠른 방법으로 보였는데, 이는 서브 쿼리로 해야 한다는 점이 있다. 하지만.. JPQL?hibernate?에 의해 where절과 select절에서만 서브 쿼리가 사용 가능하다고 한다..(내부적인 원리는 나중에 따로 공부해봐야겠다.) 참고 글 : https://stackoverflow.com/questions/60258377/querydsl-4-x-subqueries-in-the-from-clause QueryDSL 4.x subqueries in the FROM clause Are subqueries in the from clause support..
최근에 동일 테이블에서 그룹핑하여 최대값을 가진 row 데이터를 리스트에 출력하는 업무를 맡았다. 가장 효율적인 쿼리가 무엇일까 고민하다가 생각해낸 두가지 방법과 실제로 성능이 어떤지 테스트해보았다. 요구사항은 다음과 같다.(실제 업무와 비슷하게 예시로 들었다.) 특정 회원에게 가장 최근에 적용된 권한이 어떤 권한인지 검색한다. 그 권한은 시스템 관리자가 설정한 적용날짜에 따라 적용되고, 적용날짜는 하나의 테이블에 회원 일련번호와 적용날짜, 권한정보 하나의 로우로 로그데이터와 같이 insert만 해놓은 테이블(update 없음)에서 회원에게 설정된 가장 최근 적용날짜, 적용날짜가 같은 정보가 있다면 가장 최근에 등록된 데이터에서 권한정보를 가져와야한다. 비유를 들려하니 내가 봐도 뭔소리인지 모르겠고.....
- Total
- Today
- Yesterday
- 의미
- Multi IN Clause
- @EventListener
- 로그인
- 네트워크
- IN Clause
- QueryDSL
- Queue
- beforeunload
- API
- 자바
- 장점
- SDK
- 원리
- on('seek')
- map
- SET
- playbackRate
- 예제
- oauth
- playsinline
- list
- 관리자 도구
- login
- @subselect
- 특징
- jwplayer
- @subquery
- Animation
- join subquery
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |