자바
-
Plain jar vs Executable jar(feat. plain jar 생성 방지)자바/스프링 2021. 11. 8. 23:38
스프링 부트 gradle 플러그인 2.5 버전부터 gradle 빌드 시 JAR 파일이 2개 생성된다. 별도의 설정을 하지 않았을 때 하나는 "프로젝트 이름-버전.jar", 다른 하나는 "프로젝트 이름-버전-plain.jar"이라는 이름을 가진다. Plain Archive "-plain"이 붙은 jar 파일을 "plain archive"라고 한다. (여기서 archive는 jar이든 war이든 빌드 결과물을 의미한다.) plain archive는 gradle의 "jar" task로 생성된다. plain archive는 어플리케이션 실행에 필요한 모든 의존성을 포함하지 않고, 작성된 소스코드의 클래스 파일과 리소스 파일만 포함한다. 이렇게 생성된 jar 파일을 "plain jar", "standard jar..
-
Java 배열을 List로 변경하는 방법자바 2021. 10. 17. 22:16
Java 배열 객체(int[], String[] 등)는 Arrays.asList() 메서드를 이용하면 List로 변경이 가능하다. String[] stringArray = {"a", "b", "c"}; List stringList = Arrays.asList(stringArray); Arrays.asList()의 경우 return 타입이 java.util.Array.ArrayList로 java.util.ArrayList와는 다르며, immutable한 객체이다. 따라서 아래와 같이 java.util.ArrayList로 만들어주어야 한다. String[] stringArray = {"a", "b", "c"}; List stringList = Arrays.asList(stringArray); ArrayLis..
-
Spring Data JPA 페이징과 정렬자바/스프링 2021. 10. 12. 23:31
Repository 인터페이스 작성 시 JpaRepository가 아니라 PagingAndSortingRepository를 상속하게 하면, Spring Data JPA에서 제공하는 페이징, 정렬 기능을 이용할 수 있다. public interface UserRepository extends PagingAndSortingRepository { ... } PagingAndSortingRepository를 상속하면 findAll(Pageable pageable)이나 findAll(Sort sort)과 같이 Pageable과 Sort 클래스를 파라미터로 받는 메서드를 명세할 수 있다. 기본적으로 제공되는 findAll(Pageable pageable)은 Page 객체를 리턴하지만, 커스텀 메서드를 통해 리턴 타..
-
Spring Data JPA DTO 사용 시 매핑 에러가 발생할 때(org.springframework.data.mapping.PropertyReferenceException: No property ...)자바/스프링 2021. 10. 8. 22:33
Entity가 아닌 DTO를 리턴하는 커스텀 Repository 메서드를 작성할 때, 메서드 이름에 "By 키워드가 없는 경우" 아래와 같은 매핑 에러가 발생한다. org.springframework.data.mapping.PropertyReferenceException: No property ... found for type Entity 클래스 이름! 즉, 조건문 없이 DTO List를 리턴하는 커스텀 findAll 메서드를 작성할 때도 메서드 이름 마지막에 By 키워드를 넣어야 한다. public interface UserRepository extends JpaRepository { List findUserNameListBy(); } By 키워드는 Entity의 일부 데이터를 조회하는 등의 파생쿼리를..
-
스프링부트 H2 데이터베이스 설정 방법자바/스프링 2021. 10. 4. 14:51
1. build.gradle에 아래와 같이 의존성을 추가한다. # build.gradle ... dependencies { ... runtimeOnly 'com.h2database:h2' ... } ... maven의 경우 아래와 같이 의존성을 추가한다. # pom.xml ... com.h2database h2 runtime ... 2. PropertySource(application.properties 등)에 아래와 같이 설정을 추가한다. # application.properties ... spring.datasource.url=jdbc:h2:mem:test spring.datasource.username=user spring.datasource.password= spring.datasource.dri..
-
스프링부트 profile 설정 방법자바/스프링 2021. 10. 3. 22:37
Spring Profiles는 환경에 따라 서로 다른 어플리케이션 설정을 사용할 수 있도록 하는 기능이다. @Component, @Configuration, @ConfigurationProperties 어노테이션이 사용된 스프링 빈은 @Profile 어노테이션을 추가하여 특정 profile에서만 로드되도록 할 수 있다. @Configuration(proxyBeanMethods = false) @Profile("production") public class ProductionConfiguration { ... } 또한 "application.properties" 등의 설정 데이터에서 활성화할 profile을 지정할 수 있다. spring.profiles.active=dev,test 활성화 할 profile..
-
[자바] JPA Entity 클래스에서 id를 Long 타입으로 해야하는 이유자바 2021. 7. 25. 21:11
JPA에 대해 찾아 보면서 하나 궁금한 점이 생겼다. 대부분의 예제에서 Entity 클래스의 id 컬럼 변수의 타입은 Long인 것이었다. 왜 int도 long도 아닌 Long 타입을 사용했을까? 알아본 결과 아래 2가지 이유로 Long 타입이 id 컬럼 변수의 타입으로 선호된다. 1. int, Integer에 비해 표현할 수 있는 숫자의 범위가 넓다. int: -2,147,483,648 ~ 2,147,483,647 long: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 2. Primitive 타입은 null이 될 수 없기 때문에, null 값을 정확하게 처리하기 위해서 Wrapper 클래스를 사용한다.