본문 바로가기

전체 글299

테스트 더블 테스트 중인 시스템의 일부분이 준비되지 않거나 어려운 상황에서 대안으로 사용될 수 있는 가짜 컴포넌트Dummyfake 객체stubspymock MOCK테스트용 가짜 객체행위 검증(특정 행동을 지정하고 그 행동이 의도대로 이루어졌는지를 검증함)PaymentClient paymentClient = mock(PaymentClient.class); mocking테스트 대상 객체의 행동을 검증when(orderRepository.save(any())) .thenReturn(savedOrder); public class EventService { private final Logger logger; public EventService(Logger logger) { this.logger .. 2026. 2. 2.
테스트 종류 테스트 레벨별 단위 테스트 (Unit Test)함수·메서드·클래스 단위의 최소 범위 테스트통합 테스트 (Integration Test)여러 모듈/컴포넌트 간 상호작용 검증시스템 테스트 (System Test)전체 시스템을 하나의 제품으로 테스트인수 테스트 (Acceptance Test)사용자·비즈니스 요구사항 충족 여부 검증 테스트 목적별기능 테스트 (Functional)요구사항대로 기능이 동작하는지 검증비기능 테스트 (Non-Functional)성능, 보안, 사용성, 안정성 등 품질 속성 검증성능(Performance)부하(Load)스트레스(Stress)보안(Security)신뢰성(Reliability)확장성(Scalability)사용성(Usability) 테스트 기법블랙박스 테스트내부 구현을 모르고 .. 2026. 2. 1.
QnA 왜 ManyToOne일때는 Lazy로딩을 해야할까?기본적으로 eager 로딩이나, 불필요한 데이터조회를 방지하기 위해서실무에서 eager를 사용하면 연관된 쿼리를 전부 날리므로 성능상 이슈 가능하이버네이트 공식문서에서도 lazy를 권장JPA의 매우 안타까운 단점 중 하나는 @ManyToOne연관 관계가 기본적으로 즉시(eager)로 처리된다는 점입니다. 이는 우리가 원하는 경우가 거의 아닙니다. 거의 모든 연관 관계는 지연(lazy)으로 처리되어야 합니다. 연관 대상 객체가 2차 캐시에 존재할 확률이 매우fetch=EAGER 높다고 판단될 때만 지연 처리가 타당합니다 . 그렇지 않은 경우에는 반드시 명시적으로 지연 처리를 지정해야 합니다 .fetch=LAZY A Short Guide to Hiberna.. 2026. 1. 25.
build시 intellij, gradle 차이 Gradle실행 메뉴의 실행 및 debug 작업 실행hotswap 기능도 동작프로젝트에서 annotationProcessors를 사용한다면(ex: querydsl), gradle 방식을 사용해서 annotation 프로세서가 올바르게 활성화 되도록 하는 것을 권장 IntelliJ증분빌드를 지원하므로 build 속도를 높일 수 있음순수 java or kotlin 프로젝트 build시 효율적gradle 프로젝트 빌드 프로세스 일부를 지원하지 않으므로 유의. https://www.jetbrains.com/help/idea/work-with-gradle-projects.html?utm_source=chatgpt.com#delegate_build_gradle 2026. 1. 25.
검색 조건 쿼리 조회 관련 쿼리 리스트member.username.eq("member1") // username = 'member1'member.username.ne("member1") //username != 'member1'member.username.eq("member1").not() // username != 'member1'member.username.isNotNull() //이름이 is not nullmember.age.in(10, 20) // age in (10,20)member.age.notIn(10, 20) // age not in (10, 20)member.age.between(10,30) //between 10, 30member.age.goe(30) // age >= 30member.age.gt(30.. 2026. 1. 25.
JPQL vs Querydsl 정리JPQL은 문자열 기반 쿼리로 유연하지만, 파라미터 바인딩과 오타 관리가 전적으로 개발자 책임Querydsl은 타입 안전한 자바 코드 기반 쿼리 빌더로, 파라미터 바인딩을 자동 처리하고 컴파일 시점에 오류를 발견할 수 있어실무에서 유지보수성과 안정성이 높음. 비교점JPQL- 파라미터를 setParameter로 바인딩 필요- 런타임시점에서 오류를 찾을 수 있음Querydsl- 내부에서 자동으로 파라미터 바인딩. sql 인젝션 회피 가능- 컴파일 시점에서 문법오류등 검증 가능 JPQL@Test public void startJPQL() {//member1을 찾아라. String qlString = "select m from Member m " + .. 2026. 1. 25.