목록Spring (14)
개발자는 기록이 답이다

UtilityClass는 lombok v1.16.2에서 실험적인 기능으로 도입되었다. @UtilityClass를 사용하면, 컴파일 시점에 생성자 private 으로 만들어 주고, 모든 메서드를 static으로 만들어 준다. package com.devkuma.tutorial.lombok; import lombok.experimental.UtilityClass; @UtilityClass public class UtilityClassTutorial { public int plus(int a, int b) { return a + b; } } 위 코드는 @UtilityClass로 인해 아래와 같이 변경된다. package com.devkuma.tutorial.lombok; public final class Ut..

테스트 코드도 코드이기 때문에 중복되는 코드를 리팩토링을 하려고 합니다. 리팩토링하면서 발견한 점과 리마인드해야할 사항에 대해서 정리하고자 합니다 테스트 클래스에 @어노테이션은 1개만 존재할 수 있습니다. 상속을 단순히 재사용하기 위해 사용하면 많은 문제가 발생합니다. 현재 프로젝트에서 SecurityTest랑 MemberRepositoryTest에서 각 단일 테스트 전에 @BeforeEach어노테이션을 사용하여 Member를 데이터베이스에 저장하는 코드가 중복되어 사용되고 있습니다. 이 코드는 유저 중복을 확인하거나 로그인이나 로그인 실패 테스트를 위해서 사용하기 위해 작성되었습니다. 다른 테스트코드에서도 중복되는 부분을 별도의 상위 클래스를 상속 받도록 구현했기 때문에, 이번 상황도 SetupMemb..

프로젝트를 진행하면서 열심히 테스트를 하는 중인데, 갑자기 아래 에러가 발생하면서 테스트가 되지 않았습니다. com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction 락을 기다리다가 타임아웃을 초과했다고 나오는데, 해당 이슈를 해결하기 위해 아래 명령어를 사용했습니다. SHOW FULL PROCESSLIS; 현재 데이터베이스에서 실행중인 모든 스레드와 해당 스레드가 현재 실행중인 쿼리에 대한 정보를 반환하는 메소드입니다. 해당 명령어를 사용하면 MySQL 서버에서 실행 중인 모든 작업을 볼 수 있으며, 각 작업의 상태 및 해당 작업이 수행 중인 쿼리에..

프로젝트를 진행하면서 단위테스트에 대한 트러블 슈팅 과정을 적어보겠습니다. 테스트 코드 작성을 제대로 작성하면 간단하게 풀리는 내용이었지만, 그 과정에서 고민했던 내용들을 복기하면서 실수를 방지하고자 합니다. 1. private 메소드를 테스트하려고 하는 이유 해당 메소드들은 상위 메소드에서 호출되는 메소드들입니다. 그래서 findEvent()메소드, findCoupon()메소드를 '단위 테스트'목적으로 아래처럼 작성했었어요. 우선 맥락을 이해하기위해 설명하자면, 기존에는 상위메소드에서 @Transactional이 걸려있으면, 하위메소드에서 해당 트랜잭션에 참여하기 위해 @Transactional을 걸어줘야 한다고 생각했습니다. 왜냐하면 @Transactional을 사용하면Propagation.REQUI..