1 분 소요

인프런 실전! Querydsl 강의 내용 정리


조회 API 컨트롤러 개발

편리한 데이터 확인을 위해 샘플 데이터를 추가하자.

샘플 데이터 추가가 테스트 케이스 실행에 영향을 주지 않도록 다음과 같이 프로파일을 설정하자.

src/main/resources/application.yml

1
2
3
spring:  
  profiles:  
    active: local

이제 메인(테스트 말고) 에서 가짜 데이터를 스프링 시작 시점에 넣도록 설정해 보자.

src/main/java/study/querydsl/controller/InitMember.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Profile("local")  
@Component  
@RequiredArgsConstructor  
public class InitMember {  
  
    private final InitMemberService initMemberService;  
    @PostConstruct  
    public void init() {  
        initMemberService.init();  
    }  
  
    @Component  
    static class InitMemberService {  
        @PersistenceContext  
        EntityManager em;  
  
        @Transactional  
        public void init() {  
            Team teamA = new Team("teamA");  
            Team teamB = new Team("teamB");  
            em.persist(teamA);  
            em.persist(teamB);  
            for (int i=0; i< 100; i++) {  
                Team selectedTeam = i % 2 ==0 ? teamA:teamB;  
                em.persist(new Member("member" + i, i, selectedTeam));  
            }  
        }  
    }  
  
}

@Profile("local")

여기있는 이거 때문에 테스트 때는 스프링을 돌려도 실행되지 않는다.

뭐 100명 멤버 넣는 로직이다.

다음과 같이 The following 1 profile is active: "local"이라고 로그에 나온다.

샘플 데이터를 만들었다면 이제 컨트롤러를 만들어 보자.

src/main/java/study/querydsl/controller/MemberController.java

1
2
3
4
5
6
7
8
9
10
11
@RestController  
@RequiredArgsConstructor  
public class MemberController {  
  
    private final MemberJpaRepository memberJpaRepository;  
  
    @GetMapping("/v1/members")  
    public List<MemberTeamDto> searchMemberV1(MemberSearchCondition condition) {  
        return memberJpaRepository.search(condition);  
    }  
}

우리가 이전에 만들어 놨던 MemberTeamDto로 반환을 하고

MemberSearchCondition으로 검색 조건을 완성한다.

결과가 잘 나온다.

검색 조건을 추가해 보자.

?teamName=teamB&ageGoe=31&ageLoe=35&username=member31

검색 조건을 추가해도 아주 잘 나오는 걸 볼 수 있다.

댓글남기기