본문 바로가기

[IT]30

[Data JPA & Query DSL] Repository의 구현클래스 선정 규칙 @Autowired 의존성 주입 프로젝트 리팩토링을 하던 중, 한 가지 의문이 생겼다. @Autowired UserRepository userRepository; Controller나 Test 클래스에서 위와 같이 @Autowired 어노테이션으로 의존성을 주입받는다. 따라서 정확히 어떤 구현 클래스가 주입되는지 알 수 없다. 그렇다면, 인터페이스인 UserRepository가 Custom 인터페이스를 상속받고, Custom 인터페이스를 구현하는 클래스를 여러 개 생성하면, 어떤 클래스로 주입될까? UserRepositoryImpl클래스는 Custom인터페이스의 진짜 구현클래스고, ExampleImpl 클래스 역시 Custom인테페이스를 구현하지만 내부 구현 내용이 비어있는 깡통 클래스이다. 이 상황에서.. 2021. 4. 3.
[JMeter] 웹 앱 성능 테스트 도구 (대용량 트래픽 생성) 대용량 트래픽 여러 기업들의 채용공고를 쓰다 보면 우대사항에 이런 문구를 본 적이 있을 것이다. '대용량 트래픽 처리 경험이 있으신 분' 필자는 이런 문구를 볼 때마다 '중고 신입 찾네', '신입이 대용량 트래픽을 처리해 본 경험이 있을 리 없잖아?'라고 생각하곤 했다. 물론, 내가 대용량 트래픽에 관심이 없었던 것도 사실이다. 몇 번의 프로젝트를 하면서 성능이나 부하보다는 기능 구현에 초점을 잡고 개발했고, 그것만으로도 벅차서 밤을 새워가며 개발한 적도 많았다. 어떻게 보면 당연하다고 생각한다. 기능도 제대로 완성하지 못한 상태에서 성능이나 부하를 고려하는 사람은 많지 않을 것이다. 적어도 학부생이나 취준생이라면. 그런데, 최근 올라온 비바리퍼블리카(토스) 채용공고를 둘러보던 중, 또 다시 '그 문구'.. 2021. 3. 28.
[InteliJ] GroupId, ArtifactId 매번 당하고도 또 당해서 이렇게 포스팅을 하게되었다. SSAFY에서 STS(Spring Tool Suite)로 개발할 당시에 교수님께서 주신 코드를 Copy & Paste 해도 오류가 나는 경우가 많았는데, 높은 확률로 GroupId와 ArtifactId를 일치시키기 않아서 생기는 문제였다. 당시에는 주의해야 겠다고 생각만 하고 넘어갔는데, 오늘 그것 때문에 프로젝트를 몇 번이나 새로 만들었다. GroupId와 ArtifactId를 동일하게 설정하면 충돌이 나지 않을까?라는 생각에 조금 바꿔서 만들었는데, 한 2시간 정도 날린것 같다. (다음에 또 당하지 않으려고 이번엔 포스팅까지 한다.) InteliJ는 이번에 처음 쓰게 되었고, Community 버전으로도 좋은 기능이 많아서 계속 쓸 것 같다. 그런.. 2021. 3. 27.
[QueryDSL] Query DSL 기본문법 JPAQueryFactory 클래스이름에 Q가 붙은 이상한(?) 것을 만든 것처럼 Query DSL은 EntityManager말고도 한 가지가 더 필요하다. JPAQueryFactory jpaQueryFactory = new JPAQueryFactory(em); 위와같이 선언해서 사용한다. Test 코드에서 활용한다면, 다음과 같이 사용하면 모든 테스트 메소드에서 초기화 없이 사용할 수 있다. @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach public void createQF() { queryFactory = new JPAQueryFactory(em); } 기본 Q-Type 활용 다음은 Q클래스 인스턴스를 사용하는 2가지 방.. 2021. 3. 26.
[QueryDSL] JPQL vs Query DSL SQL과 오타 Mybatis, JDBC Template, JPQL 은 모두 쿼리문을 String 형식으로 직접 작성해서 구현하게 된다. 심지어 Spring Data JPA도 때때로 NativeQuery로 작성해야 한다. 백엔드 개발 경험이 한 번이라도 있다면, 쿼리를 작성하다가 오타가 난 경험이 있을 것이다. String으로 이뤄져 있기에 컴파일 단계에서 디버깅이 불가능하다. 그 말은 에러가 발생해도 띄어쓰기를 잘못 한 건지 대소문자를 잘못 쓴건지 알 수가 없다는 말이다. QueryDSL은 자바코드로 쿼리를 만들기 때문에 컴파일 시점에서 오류를 잡을 수 있고, 메서드 형식으로 작성하기 때문에 IDE 코드 어시스턴트의 도움도 받을 수 있다. 특히 현업에서 여러 번의 Join과 동적쿼리를 작성할 때, 그 진.. 2021. 3. 26.
[QueryDSL] 인텔리제이 환경설정 기본 환경 JAVA 11 Gradle InteliJ Community Edition 프로젝트 생성 스프링 부트 스타터(https://start.spring.io/) 사용기능 : Spring Web, Spring Data JPA, Lombok SpringBoot Version : 2.4.4 이번 포스팅에서는 DB 관련 설정은 건너뛰고 Query DSL 설정만 하도록 하겠습니다. build.gradle에 Query DSL 관련 내용을 추가해야 한다. 하기 전에 일단 SpringBoot가 정상 동작하는지 확인 후 진행하는 것을 추천한다! 우선 가장 위 plugin에 한 줄. plugins { id 'org.springframework.boot' version '2.4.4' id 'io.spring.depend.. 2021. 3. 26.
728x90