JUnit에서 Repository 테스트를 하기 위해, @SprintBootTest 대신에 @DataJpaTest 를 사용하여 테스트 코드를 작성 중인데 h2 대신에 실제 DB를 연동하려고 하지만 막상 실행해보면, h2 데이터베이스에 계속 연결이 되는 것을 보게 됩니다. 그래서 db 관련 profile이 의도한 대로 적용이 안되나 싶어서 mysql을 위한 profile도 활성화를 해보았지만 항상 h2 데이터베이스로 연결을 합니다. 2021-10-15 12:22:29.402 INFO [-] [main] a.m.s.SegmentBrowserApplicationTests : The following profiles are active: mysql-default-db 2021-10-15 12:22:30.390 ..
목차 select절에 조회 대상을 지정하는 것을 프로젝션 이라고 합니다. 프로젝션을 하는 여러 방법에 대해서 알아보도록 하겠습니다. 전체 또는 일부 컬럼 Projection QMember member = QMember.Member; List result = jpaQueryFactory.select(member) .from(member) .fetch(); List result = jpaQueryFactory.select(member.name) .from(member) .fetch(); List result = jpaQueryFactory.select(member.name, member.addr) .from(member) .fetch(); fetch의 리턴 타입이 List 타입 이기 때문에 select에 넘..
목차 Query 클래스 쿼리를 작성하기 이전에 몇 가지 인터페이스와 클래스에 대해 간단히 살펴보겠습니다. JPQLQuery 인터페이스는 JPQL 쿼리를 위한 Query 인터페이스이며, JPAQuery 클래스는 JPQLQuery 인터페이스를 구현한 클래스이며, 쿼리를 작성하고 실행하는 역활을 합니다. JPAQueryFactory도 JPAQuery를 생성해주는 factory클래스입니다. 결국은 JPAQuery를 사용하든, JPAQueryFactory를 사용하든 JPAQuery를 사용하는건 마찬가지 이지만, JPAQuery를 생성할 때 누가 더 간략하나 정도의 차이가 있어 코드 가독성 측면에서 Factory를 사용하는 것이 더 좋고, 많은 snippets 코드들이 Factory를 사용하므로 Factory를 사..
목차 QueryDSL 이란? QueryDSL은 비표준 오픈소스 프레임워크로 JPQL을 편하게 작성하도록 도와주는 빌더 클래스 모음 입니다. 코드기반이고, 단순하여 가독성이 좋아 사용하기가 좋습니다. 그리고 컴파일 시점에 오류 발견이 가능하고, 자동완성도 지원하여 실무에서 JPA 사용시 많이 사용되고 있는 프레임워크 입니다. 대부분의 쿼리를 QueryDSL로 작성할 수 있지만 JPQL에서 지원하지 않는 쿼리는 QueryDSL에서 작성할 수 없습니다. 예를 들어, UNION을 지원하지 않고 FROM 절에 서브쿼리를 지원하지 않습니다. 그래서 간혹 JPQL로 간단하게 쿼리를 작성할 수 있는 부분을 QueryDSL로 추가 작업을 통해서 구현하기도 합니다. QueryDSL 구현 Spring Data JPA에서 Q..
목차 1. GET 요청 1.1 단일, 복수 파라메터 @GetMapping(path = "/search") public ResponseEntity search(@RequestParam(name = "q") String queryText, @RequestParam(required = false) String mode){ return ResponseEntity.ok( searchService.search(queryText, mode) ); } GET /search?q="home"&mode="quick" 와 같이 값을 받는 컨트롤러 입니다. @RequestParam을 선언을 하면, 해당 변수로 쿼리 파라메터로 값이 넘어오게 됩니다. name = "q" 으로 쿼리 파라메터의 이름을 지정하거나 required = ..
Spring에서 파일 업로드 REST API를 만들기 위해서는 HTTP POST와 MultipartFile을 인자로 간단하게 만들 수 있습니다. 아래와 같이 컨트롤러에 Post endpoint를 만든 후, MultipartFile을 인자로 넣어줍니다. 그리고 로직을 구현할 Service 빈에 MultipartFile 객체를 넘겨줍니다. @RestController public class UploadController { UploadFileService uploadFileService; public UploadController(UploadFileService uploadFileService) { this.uploadFileService = uploadFileService; } @PostMapping("/..
일반적으로 Controller에서 Json Body를 받을 때는 DTO 클래스를 정의하여, 해당 클래스를 인자로 Body값을 받습니다. Jackson 라이브러리로 JSON과 POJO 간에 데이터바인딩을 이용하죠. 하지만, 개발을 하다보면 딱 고정된 규격이 아니라 확장가능한 유연한 규칙이 있는 가변 파라메터를 받기도 합니다. 저 같은 경우에는 json 바디를 받아 SQL Query를 구성하는 로직을 구현하였는데, 가용한 key 값들은 정해져있지만, Query 구성에 따라 전달되는 key값들과 level이 다릅니다. 이런 경우 아래와 같이 HashMap를 사용하여 Body를 받을수 있습니다. @RestController public class HashMapController { @PostMapping(pat..
starter-test 의존성도 잘 추가가 되어있고, 테스트 코드도 test/java 경로에 잘 들어가 있는데, IntelliJ에서 아래 테스트 코드를 수행하면 junit 패키지를 찾지 못한다는 에러가 발생하는 경우가 있습니다. import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.test.context.junit4.SpringRunner; import static org...
Dependency( Gradle ) implementation 'com.h2database:h2' H2 embedded 모드 spring: datasource: url: jdbc:h2:mem:testdb username: sa driver-class-name: org.h2.Driver h2: console: enabled: true H2 file 모드 Test 코드에서는 file에 데이터가 남지 않는다. 그냥 앱 실행을 하면, file에 데이터가 남아 있다. 그리고 Test 코드에서 ddl-auto를 create 로 했는데, 실제 테스트 돌아갈때 drop table을 하는데도 기존 데이터가 날아가지 않고 있다 앱 실행 시에는 drop 해서 파일에 있는 것이 다 날아감. 테스트 모드에서 실행하면, 임베디..
Spring Boot 에서 외부 설정 파일을 Yaml 파일 포맷으로 사용할 수 있습니다. properties 파일 포맷도 있지만, SpringBoot에서는 가독성이 더 좋은 Yaml 파일을 권장하고 있습니다. 먼저 properties와 Yaml 파일 포맷에 대해 알아보겠습니다. Properties 파일 포맷 properties 파일 포맷은 property 이름과 값으로 구성이 되고, 일반적으로 한줄로 명시를 합니다. property 이름과 값은 = 또는 : 으로 구분을 합니다.( 통상 = 을 많이 쓰고 있습니다 ) 그리고, 이름과 값 사이에 공백( white space )가 있으면, 이는 무시되므로 공백이 있어도 되고 없어도 무관합니다. property 이름의 계층( hierarchy )은 dot( . ..
- Total
- Today
- Yesterday
- SpringBoot
- scala
- Container
- Index
- spring
- AWS
- Java
- intellij
- mac
- Kibana
- Linux
- JPA
- tomcat
- Postman
- maven
- Filter
- apm
- Log
- Size
- elasticsearch
- install
- plugin
- error
- Spark
- JSON
- Git
- spring boot
- gradle
- logstash
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |