기존 코드 @SpringBootApplication(exclude = SecurityAutoConfiguration.class) public class TodoAppApplication { public static void main(String[] args) { SpringApplication.run(TodoAppApplication.class, args); } @Bean JPAQueryFactory jpaQueryFactory(EntityManager em) { return new JPAQueryFactory(em); } } 이게 기존 코드다 근데 Gradle Build 를 하면 WebMvcTest 하는 부분에서 계속 오류가 발생한다. @WebMvcTest를 쓰면 Mvc관련 빈들'만' 전부 주입 받는데..
TIL
QueryDSL을 쓰며 궁금했던 점이 왜 굳이 Qclass를 쓰는 거지? 궁금했었다. 타입 안정성 등의 여러 이유로 Qclass를 쓴다는데... Entity는 이걸 못하는 건가? 궁금해졌다. 그래서 열심히 살펴보며 흐름 파악하는 글... 자세한 글이 아님... Qclass @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of = {"id", "username", "age"}) public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String username; private int age;..
QueryDSL QueryDSL은 JPAQueryFactory가 필요하다 JPAQueryFactory는 생성자로 EntityManager가 필요하다 public class QueryDsl { @Autowired EntityManager entityManager; JPAQueryFactory jpaQueryFactory; public void method() { jpaQueryFactory = new JpaQueryFactory(entityManager); } } 이런 식으로 받아주면 된다. JpaQueryFactory 기본 문법은 SQL 문법이랑 매우 비슷하다. 기본 문법 select() SQL의 SELECT다 SELECT * FROM users # 여기서 SELECT. 매개 변수로 컬럼을 넣어주면 된다..
오늘은 동적 쿼리랑 정적 쿼리가 뭔지 배웠다 정적 쿼리 정적 쿼리란 검색했을 때 바뀌지 않는 쿼리다 바뀌지 않는 쿼리...? 검색값이 바뀌지 않는 쿼리라고 생각하면 된다. 만약 ORDERS라는 테이블에 가격 컬럼과 주문번호 컬럼이 있다고 가정하고 1번 주문 5000원 2번 주문 8000원 3번 주문 10000원 이라고 가정하면 SELECT * FROM ORDERS -> order_id price 1 5000 2 8000 3 10000 이런 식으로 안에 들어 있는 값에 따라 딱 정해져서 나온다 쿼리의 구조가 항상 동일 하다. 즉 구조가 변경되지 않는다 동적 쿼리 동적 쿼리란 어떤 인자에 의해서 쿼리의 결과가 바뀔 수 있는 쿼리다 만약에 가격이 8000원 이하인 주문만 출력하고 싶다 하면 SELECT * F..
AOP란? AOP(Aspect Oriented Programming) 관점 중심 설계다. 예를 들어 '부가기능'과 '핵심기능' 과는 관점(Aspcet)이 다르다. 따라서 핵심기능과 부가기능을 분리해서 부가기능 중심으로 설계가 가능하게 하는 것이 AOP다 AOP를 사용해서 부가기능을 모듈화 할 수 있다. 모듈화 - 유지보수성을 높이기 위해 코드를 여러개의 모듈로 나누는 것 @Aspect Spring Bean 클래스에만 적용 가능 클래스를 AOP화 하게 해주는 어노테이션 어드바이스 종류 @Around: '핵심기능' 수행 전과 후 (@Begore + @After) @Before: '핵심기능' 호출 전 @After: '핵심기능' 수행 성공/실패 여부와 상관없이 언제나 동작 @AfterReturning: '핵심기..
오늘은 기존 개인 투 두 프로젝트에서 Service를 인터페이스화 시키고 Service 구현체를 만드는 리팩토링을 진행하였다. public interface CardService { // ... } @Service public class CardServiceImpl implements CardService { // ... } 의문점 굳이 인터페이스를 써야하나? 라는 의문점을 가진 것은 아니다. Spring에서 의존성 관리를 위해서 @Service 어노테이션을 갖고있는 클래스의 Bean을 빈팩토리에 넣어서 가지고 있는데, 내가 CardService인터페이스를 Controller에서 주입을 받는다고 하면 Spring 은 자동으로 인터페이스의 구현체 Bean을 찾아서 주입을 해준다. 여기서 들었던 의문이다. ..