본문 바로가기

분류 전체보기101

Window 환경 React App에서 Docker Volume 사용하기 윈도우 환경 React에서 Volume을 사용하기 위해서는 WATCHPACK_POLLING 환경 설정을 사용해야 한다. 명령어로 실행하기 위해서는 하기 내용과 같이 -e 옵션과 함께 WATCHPACK_POLLING 옵션을 true 값으로 주면 된다. 두 번째 -v 옵션에서 PowerShell 에서는 ${pwd}를 사용하면 되고, CMD 환경에서는 %cd%를 사용하면 된다. docker run -it -p 3000:3000 -v /app/node_modules -v ${pwd}:/app -e WATCHPACK_POLLING=true 그다음 리액트 앱에서 변경하면 실시간으로 변경되는 것을 확인 할 수 있다. REFERENCE https://stackoverflow.com/questions/70488471/d.. 2023. 12. 20.
필드 1부터 N까지 자동으로 채우기 (+ 랭킹) 특정 필드에 Auto Increment 없이 1부터 N까지 순서대로 값을 채워야 하는 경우가 있다. 그런 경우, 간단하게 해당 Update 문으로 해결이 가능하다. UPDATE T JOIN (SELECT @rank := 0) r SET Number=@rank:=@rank+1; 해당 테이블이 있을 때, seq 필드를 업데이트하기 위해서는 다음과 같이 사용한다. UPDATE tb_rank JOIN (SELECT @rank := 0) r SET seq=@rank:=@rank+1; 쿼리를 실행하면 1부터~N까지 값이 채워지는 것을 확인 할 수 있다. 2023. 12. 10.
[JPA] PK가 아닌 필드에 Auto Increment 사용하기 ✍ 배경 PK를 String으로 사용하는 테이블이 있는데, 별도 필드에 AUTO INCREMENT를 적용해야 하는 경우가 생기게 되었다. 흔하지 않은 상황이지만 JPA를 사용할 때 이런 경우 어떻게 해결해야 할지 찾아본 내용을 공유하고자 한다. 🔎 테스트 환경 - MariaDB 10.6 - HeidiSQL - Spring Boot 2.7.2 MySQL/MariaDB 외에 다른 데이터베이스를 사용하는 경우는 해당 방식이 적용되지 않을 수 있다는 점을 알아뒀으면 좋겠다. 하지만 방식은 거의 유사할거라고 생각한다. 🔎 공통 필자가 찾아낸 방식은 2 가지 인데, 이 방식들은 모두 공통적으로 처리해야 하는 부분이 있었다. 1. 데이터베이스에 시퀀스를 무조건 등록해야한다. create sequence SHIBA_S.. 2023. 12. 9.
flatExtracting 활용해서 내부 리스트 내용 검증하기 필자는 List 내용을 검증할 때 보통 extracting과 contains 관련 메서드를 활용을 하는데, 가끔 List 내부에 있는 List까지 검증해야 하는 경우가 있다. 이런 경우 일반적인 extracting 메서드를 사용하면 검증에 실패한다. @Builder @Getter public static class ShibaDto { private Long id; private String name; private List elementList; } @Builder @Getter public static class Element { private Long id; private Long age; private List innerElementList; } @Builder @Getter public stati.. 2023. 12. 3.
Querydsl Paging & Count Query 최적화 fetchResults() - Deprecated 기존에는 fetchResults()를 사용하여 페이징 처리할 때 개발자가 별도의 count 쿼리를 작성하지 않아도 돼서 편리했다. 하지만 Querydsl 5.0 버전부터 fetchResults는 Deprecated 되었다. fetchResults()는 개발자가 작성한 select 쿼리를 기반으로 count 용 쿼리를 내부에서 만들어서 실행한다. 단순 쿼리에서는 동작에 문제가 없었으나, 다중 그룹 쿼리(group By) 등 복잡한 쿼리에서는 잘 작동하지 않는다. 사용자들에게는 fetch() 후 결과를 count 하여 사용하라는 대안을 제시한다. Querydsl에서 페이징 처리를 할 때 다음과 같이 보통 Pageable를 파라미터로 받고 pageSize, o.. 2023. 11. 11.
전체 통합 테스트 시간 속도를 증가시키는 Spring Test Context Caching 😂 배경 필자는 프로젝트를 진행하면서 통합 테스트 코드를 작성할 때 각 케이스마다 테스트 메서드를 작성하고 실행하고, 메서드 작성이 적당히 마무리되면 클래스 내에 있는 모든 테스트 메서드를 실행시켜 보는 방식으로 진행해 왔다. 그러다가 테스트 코드가 어느 정도 양이 쌓였을 때 전체 테스트를 돌렸는데, 시간이 굉장히 오래 걸리는 것을 확인하고는 충격을 받았다. 그렇게 전체 테스트 코드 수행 속도에 대해 고민을 하게 되었고, Context Caching에 대해 알게 되었다. [ Context Caching ] 스프링 테스트 프레임워크는 ApplicationContext가 생성되면 이를 캐시에 저장하고, 만약 재사용이 가능한 경우라면 다른 테스트를 돌릴 때 이를 재사용한다. 이처럼 테스트에서 띄운 컨텍스트를 .. 2023. 11. 8.
JPA Auditing @createdDate 테스트 코드 작성하기 😎 배경 API를 구현할 때 요구사항에 조건이나 기능에 생성 시간, 수정 시간이 포함되어 있는 경우, 올바른 시간 값을 반환하는지 확인해야 할 필요가 있다. 보통 JPA를 사용한다면 생성자/생성 일자/수정자/수정 일자를 간단하게 추가하기 위해 BaseEntity, Audit 기능을 많이 사용할 것이다. 필자가 진행 중인 프로젝트에도 매번 Audit를 활용하고 있다. 그런데 테스트 코드를 작성하다 보면 조회 조건이나 결과에 생성/수정 시간 값을 올바르게 적용하고 반환하는지 궁금할 때가 있다. 그럴 때 어떻게 테스트를 해야 할지 고민하다가 해당 포스팅을 작성하게 되었다. 방법 필자가 찾아본 방법 중 사용하기 가장 괜찮은 방법은 2가지 방법이었다. 첫 번째는 DateTimeProvider Mocking을 통해.. 2023. 10. 30.
[JPA] orphanRemoval 옵션을 사용할 때 Update 주의사항 😂 배경 프로젝트 개발 중 특정 엔티티에 10개가 넘는 필드를 업데이트를 해달라는 비즈니스 요구사항이 있었다. 그래서 10개가 넘는 필드를 각각 업데이트하는 메서드를 작성했는데.. 보기에 별로 좋아 보이지 않았다. 필자는 JPA의 save() 메서드가 통해 저장과 변경에 대한 기능을 한 번에 제공하고 있다는 걸 알고 있었다. 그래서 빌더 패턴으로 기존 ID, 값, 변경된 값을 추가한 새로운 엔티티를 만들어서 save()를 통해 업데이트하는 게 보기에도 좋고 효율적으로 보였다. 생각대로 코드를 작성하고 테스트 한 뒤 나름 결과에 만족했다. 그러던 어느 날 운영 팀에서 연락이 온다. "업데이트를 했더니 연결된 데이터가 다 사라졌는데요?" "????" 운영 중에 클라이언트가 업데이트를 했는데, 데이터가 다 사.. 2023. 10. 28.