본문 바로가기

전체 글

(79)
JUnit5 User Guide 공부 #3 JUnit5 #3 Junit5 User Guide를 읽어보면서 Junit5를 공부하는 게시글입니다. #1 바로가기, #2 바로가기 이번 게시글에서는 JUnit5 User Guide의 Writing Tests 중 나머지 부분들에 대해 알아보겠습니다. 1. Dependency Injection for Constructors and Methods JUnit5 이전까지는 테스트 생성자와 메서드에 매개변수를 가질 수 없었습니다. Junit5에서는 테스트 생성자와 메서드에 매개변수를 가질 수 있고 이는 Dependency Injection을 가능하게 합니다. ParameterResolver는 런타임 시 매개변수를 정의하는 특징이 있습니다. JUnit5 Jupiter에서는 등록된 ParameterResolver에 의..
JUnit5 User Guide 공부 #2 JUnit5 #2 Junit5 User Guide를 읽어보면서 Junit5를 공부하는 게시글입니다. #1 바로가기, #3 바로가기 이번 게시글에서는 JUnit5의 Assertions, Assumptions, Conditional Test등에 대해 알아보겠습니다. 1. Assertions JUnit5 Jupiter의 Assertions Method들에는 JUnit4의 Assertions의 많은 메서드들이 포함되어 있고 람다를 활용한 추가적인 기능을 제공합니다. 모든 메서드는 org.junit.jupiter.api.Assertions의 static 메서드로 정의되어 있습니다. 먼저 테스트 실패 시 메시지에 대해 알아보겠습니다. 1) 테스트 실패 시 메시지 class SampleTest { @Test void..
JUnit5 User Guide 공부 #1 JUnit5 #1 Junit5 User Guide를 읽어보면서 Junit5를 공부하는 게시글입니다. #2 바로가기, #3 바로가기 이번 게시글에서는 JUnit5의 특징과 라이프 사이클에 대해 알아보겠습니다. Junit5란? Junit5는 이전 버전과는 다르게 3가지의 서로 다른 하위 프로젝트들로 구성되어 있습니다. 하위 프로젝트는 총 3개이며 아래와 같습니다. 우리가 작성하는 테스트 코드는 JUnit Vintage 혹은 JUnit Jupiter에 의해 실행되며 IDE나 Build Tool은 JUnit Platform을 통해 해당 테스트들을 구동시킵니다. 1. JUnit Platform JVM위에서 테스트를 실행시키는 기반 역할을 합니다. 2. JUnit Jupiter JUnit5 기반의 테스트를 실행시키..
Spring Boot, Vue.js 캘린더 일정 조회 및 세부사항 조회 추가된 이벤트 조회 및 상세보기 지난 게시글에서 구현한 이벤트 추가하기에 이어 이벤트 조회 및 상세보기를 구현해 볼 것이다. Event 조회는 Event의 시작일 혹은 종료일이 해당 캘린더의 Month와 같은 것들만 조회할 것이다. 캘린더에 보이는 이벤트를 클릭했을 때 이벤트의 세부 정보를 볼 수 있는 Dialog를 띄울 것이다. 이벤트 조회 Spring Boot Event의 시작일의 연도, 개월과 종료일의 연도, 개월을 각각 비교해야 하고 이벤트를 조회하는 회원도 고려해야 한다. 쿼리가 조금씩 난잡해질수록 QueryDSL를 사용하는 게 매우 효율적이다. 그러므로 Event를 조회하는 쿼리는 QueryDSL로 작성해 볼 것이다. QueryDSL 의존성 추가 plugins { id "com.ewerk.gr..
WebSocket이란? WebSocket 웹 소켓 프로토콜은 TCP 커넥션 위에서 클라이언트와 서버 간 양방향, 전이중 통신 채널을 수립하는 표준화된 방법을 제공한다. 웹소켓의 상호작용은 HTTP 요청에 Upgrade 헤더를 사용하여 웹 소켓 프로토콜로 스위치 한다. HTTP 요청 GET /spring-websocket-portfolio/portfolio HTTP/1.1 Host: localhost:8080 Upgrade: websocket // (1) Connection: Upgrade // (2) Sec-WebSocket-Key: QUIQmkdoq123asodqdpwqeWOE== Sec-WebSocket-Protocol: v10.stomp, v11.stomp Sec-WebSocket-Version: 13 Origin: ht..
JPQL 서브쿼리, 조건식, 기본 함수 JPQL 서브 쿼리, 조건식, 기본 함수 JPQL의 서브 쿼리와 조건식, 기본 함수에 대해 알아본다. JPQL서브 쿼리 em.persist(new Member("A", 10)); em.persist(new Member("D", 15)); em.persist(new Member("B", 20)); em.persist(new Member("C", 30)); List result = em.createQuery ("select m from Member m" + " where m.age > (select avg(subM.age) from Member subM)", Member.class) .getResultList(); result.forEach(System.out::println); Hibernate: sele..
JPQL 페이징, 조인과 조인 ON 절 JPQL 페이징, 조인과 조인 ON 절 JPQL 페이징 방법과 다양한 조인들에 대해서 알아본다 페이징 IntStream.rangeClosed(1, 50).forEach(i -> em.persist(new Member("member" + 1, i))); List result = em.createQuery ("select m from Member m order by m.age desc", Member.class) .setFirstResult(10) .setMaxResults(10) .getResultList(); order by로 정렬이 가능하다. 나이를 내림차순으로 지정하였다. setFirstResult로 조회 시작 위치를 지정할 수 있다. 0부터 시작이므로 11번째부터 가져올 것이다. setMaxResu..
Spring ArgumentResolver로 Jwt 복호화 하기 JWT토큰 활용 Spring, Vue를 통해 프로젝트를 개발하다가 현재 요청을 보내는 사용자가 누구인지 확인하는 방법이 있는지 고민을 해보았다. OAuth 2.0, JWT 게시글에서 볼 수 있듯이 JWT의 PAYLOAD에는 Client의 정보가 들어있다. 스프링에서 JWT를 복호화해서 간편하게 가져오게 해주는 API가 있는지는 모르겠지만 경험 삼아 직접 구현해보기로 하였다. RequestHeader 클라이언트에서 JWT 토큰을 Authorization Header에 담아 보내는 것을 알 수 있다. 이 헤더를 컨트롤러에서 받아서 처리하면 된다. @PostMapping public ResponseEntity save(@RequestBody @Valid BoardSaveRequestDto dto, @Reque..