오늘 통합 환경 테스트 코드를 작성하면서, 갑자기 헷갈린 게 있는데, 단위 테스트랑 통합 환경 테스트가 헷갈렸다. 어디서 헷갈렸나!!!! 나는 통합 환경 테스트를 서비스 레이어 부터 DB까지 건들이는 테스트 코드로 짜고 있었는데 내가 지금 단위 테스트를 하는 건가? 통합 환경 단위 테스트인건가? 머릿속이 복잡해지면서 헷갈리기 시작했다. 그래서 검색을 해봤는데 어떤 글은 컨트롤러부터, 어떤 글은 서비스 부터... 등등 다 다른 것이다 뭐지??? 우선 결론부터 통합 환경 테스트 스프링 기준으로 통합 환경 테스트는 스프링 컨테이너가 돌아가는 환경이다. 통합 환경 테스트는 실제 DB를 건들인다. 실제 어플리케이션 환경에서 동작하는 방식을 테스트하려는 목적 단위 테스트 단위 테스트는 스프링 컨테이너가 돌아가지 않..
TIL
구현 기능 중에 컬럼 위치 변경 기능이 있어서 어떻게 구현할까? 고민을 많이 했다. 우선 첫번째로 생각난 것은 Entity 내부에 Position 값을 주고 정렬 그 값을 기준으로 정렬하는 것이다. Position을 어떻게 주고, 변경할 때는 Position을 어떻게 변경해야할까? Entity 내부에 List For문으로 하나하나 돌면서 업데이트 쿼리 보내기? 효율이 진짜 안좋아질 거 같았다. 그래서 쿼리를 최적화를 하는데 어떻게 할까? 하다가 연산하는 쿼리를 한 번에 날리게끔 생각했다. 우선 포지션 값은 2의 제곱으로 사용하기로 정했는데, 이유는 1,2,3,4,5 와 2,4,8,16,32 를 했을 때, 하나만 순서 변경하는 데에는 문제가 없지만 여러개를 한 꺼번에 옮기라는 요구가 있으면, 1,2,3,4..
오늘 팀 프로젝트를 시작하며 @ColumnDefault 어노테이션을 사용했다 코드 @Entity @Getter @NoArgsConstructor @AllArgsConstructor @Table(name = "boards") public class Board extends TimeStamp { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String title; @Column(nullable = false) private String username; @ColumnDefault("'#ffffff'") private String backgroundColor; @C..
최근 코드 리팩토링을 하면서, 이미지 파일 업로드 기능 추가를 위해 기존 @RequestBody 에서 @ModelAttribute 로 바꿔 사용했다. @PostMapping("/todos") public ResponseEntity createTodoCard( @ModelAttribute @Valid CardPostRequestDto cardPostRequestDto, @AuthenticationPrincipal UserDetailsImpl userDetails) { CardResponseDto responseDto = cardService.createTodoCard(cardPostRequestDto, userDetails.getUser()); return ResponseEntity.status(201)...
@Override public void deleteTagMappingByCardId(Long cardId) { queryFactory .delete(cardHashTag) .where(cardHashTag.card.id.eq(cardId)) .execute(); } 어제 만들어놨던 코드인데, 위 부분에 문제가 있다는 것을 알 수 있다. 벌크 연산인데, EntityManager flush(), clear() 을 하지 않는다는 점이다. flush및 clear를 추가하지 않은 이유는 밑에와 같다. 위의 이유에서 추가적인 이유가 있었다. 나는 편의를 위해 JpaConfig 라는 클래스를 만들어서 JPAQueryFactory를 빈으로 만들고 주입받고 있었다. @RequiredArgsConstructor @Enab..
개요 기존에 작업했던 ToDo API 에서 동적 쿼리 기능을 써보고자 해시태그 기능을 만들고 해시태그 기준으로 동적 쿼리로 검색하는 기능을 추가하려고 했다. 기존 ERD 수정 된 ERD @Override public CardResponseDto createTodoCard(CardPostRequestDto cardPostRequestDto, User user) { String title = cardPostRequestDto.getTitle(); String content = cardPostRequestDto.getContent(); // 만약 글 내용이 // 오늘 할 일 1. 2. 3. // #화이팅 #아아 #으으으으 뒤에 이런 글이 더 있다면 // hashTags[0] = 오늘 할 일 1. 2. 3. /..