전체 글
-
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..
-
데이터베이스별 boolean 데이터 타입(PostgreSQL, MySQL, Oracle)DB 2021. 10. 15. 23:06
boolean 타입의 데이터를 저장할 때 항상 0과 1, 'Y'와 'N' 등의 값으로 대체해서 저장하곤 했다. 나는 주로 PostgreSQL을 사용하는데, 문득 boolean 데이터 타입은 진짜 없을까? 하고 찾아보게 되었다. PostgreSQL 결론은 PostgreSQL은 boolean 데이터 타입을 지원한다. 스펙은 아래와 같다. 데이터 타입 이름 boolean 데이터 타입 사이즈 1 byte true로 인식되는 값 't', 'true', 'y', 'yes', 'on', '1' false로 인식되는 값 'f', 'false', 'n', 'no', 'off', '0' 공백은 무시되며, 대소문자도 무시된다. 공식 문서 상으로는 TRUE와 FALSE라는 예약어 사용을 권장하고 있다. select 문으로 b..
-
PostgreSQL timestamp vs timestamptzDB 2021. 10. 14. 23:28
PostgreSQL에서 날짜와 시간을 표현하는 데이터 타입은 6가지가 있다. 하지만 그 중에서 날짜와 시간을 한번에 표현할 수 있는 데이터 타입은 timestamp와 timestamptz 2가지밖에 없다. timestamptz는 이름에서 알 수 있듯이 timestamp에 추가로 타임존 정보를 가지고 있는 것처럼 보인다. 그러나 두 가지 데이터 타입의 길이는 모두 8 byte이다. 즉, timestamptz가 더 많은 데이터를 가지고 있지 "않다"는 뜻이다. SELECT pg_column_size('2000-01-01 00:00:00 +00:00'::timestamp) as "timestamp byte size", pg_column_size('2000-01-01 00:00:00 +00:00'::timest..
-
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 클래스를 사용한다.