Spring

· Spring
앞서 Spring Batch를 소개하고 간단한 예제를 작성하고 실행해보았다. Spring Batch는 메타 테이블이 있어야 정상적으로 작동하고 MySQL을 사용할때는 직접 메타 테이블을 생성해야 한다고 했다. 그렇다면 메타 테이블에는 어떤 정보들이 있는지 간단히 알아보자. BATCH_JOB_INSTANCE BATCH_JOB_INSTANCE 테이블은 Job Parameter에 따라 생성되는 테이블이다. Job Parameter는 Spring Batch가 실행될때 외부에서 받을 수 있는 파라미터를 의미한다. 예를 들어, 특정 날짜를 Job Parameter로 넘기면 Spring Batch에서는 해당 날짜 데이터로 조회/가공/입력 등의 작업을 할 수 있다. @Slf4j @RequiredArgsConstruct..
· Spring
스프링 배치(Spring Batch)란? Spring Batch는 엔터프라이즈 시스템의 운영에 있어 대용량 일괄처리의 편의를 위해 설계된 가볍고 포괄적인 배치 프레임워크다. Spring의 특성을 그대로 가져왔기 때문에 DI, AOP, 서비스 추상화 등 Spring 프레임워크의 3대 요소를 모두 사용할 수 있다. 보통 아래와 같은 경우 많이 사용한다. 대용량의 비즈니스 데이터를 복잡한 작업으로 처리해야하는 경우 특정한 시점에 스케쥴러를 통해 자동화된 작업이 필요한 경우 (ex. 푸시알림, 월 별 리포트) 대용량 데이터의 포맷을 변경, 유효성 검사 등의 작업을 트랜잭션 안에서 처리 후 기록해야하는 경우 Spring Batch는 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관..
· React Native
Animated 사용법 리액트 네이비트에서 애니메이션을 구현할 때는 Animated라는 객체를 사용한다. 일단 Animated를 사용하려면 Value를 하나 만들어야 한다. import React, {useRef} from 'react'; import {Animated} from 'react-native'; function Sample() { const animation = useRef(new Animated.Value(1)).current; } Value를 만들 때는 이렇게 useRef를 사용해야 한다. 래퍼런스 선택 외에 특정 값을 컴포넌트 생성 시에 설정하고, 컴포넌트가 사라질 때까지 재사용하고 싶은 경우에도 이와 같이 useRef를 사용해 구현할 수 있다. Value의 생성자 함수 인자에는 초깃값..
· Spring
H2 Database란? H2DB는 자바 기반의 오픈소스 관계형 데이터 베이스 관리 시스템(RDBMS)이다. H2DB는 서버(Server) 모드와 임베디드(Embedded) 모드의 인메모리 DB 기능을 지원하고 디스크 기반 테이블을 또한 생성할 수 있다. 또한 브라우저 기반의 콘솔모드를 이용할 수 있으며, 별도의 설치과정이 없고 용량도 2MB(압축버전) 이하로 매우 저용량 이므로 매우 가볍고 빠르며, JDBC API 또한 지원하고 있다. SQL 문법은 다른 DBMS들과 마찬가지로 표준 SQL의 대부분이 지원된다. In-memory Database란? 데이터를 디스크에 저장하는 Mysql이나 Oracle과 같은 DBMS와는 다르게 데이터 스토리지의 메인 메모리에 설치되어 운영되는 방식의 데이터베이스 관리 ..
· Spring
보통 기본적인 유효성 검증은 Validation 어노테이션들로 설정한다. 만약 더 섬세한 유효성 검증이 필요할때는 자신만에 어노테이션을 만들어 설정할 수 있다. 만약 연락처 필드의 유효성 검증(PhoneValidator)을 만든다고 가정해보겠다. // @Phone 어노테이션 @Inherited @Documented @Repeatable @Constraint(validatedBy = PhoneValidator.class) @Target({ ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @ReportAsSingleViolation public @Interface Phone { Stirng message() defaul..
· JPA
JPA 표준 예외 정리 JPA 표준 예외들은 javax.persistence.PersistenceException의 자식 클래스다. 그리고 이 예외 클래스는 RuntimeException의 자식이다. 따라서 JPA 예외는 모두 언체크 예외다. JPA 표준 예외는 크게 2가지로 나눌 수 있다. 트랜잭션 롤백을 표시하는 예외 트랜잭션 롤백을 표시하지 않는 예외 트랜잭션 롤백을 표시하는 예외는 심각한 예외이므로 복구해선 안 된다. 이 예외가 발생하면 트랜잭션을 강제로 커밋해도 트랜잭션이 커밋되지 않고 대신에 javax.persistence.RollbackException 예외가 발생한다. 반면에 트랜잭션 롤백을 표시하지 않는 예외는 심각한 예외가 아니다. 따라서 개발자가 트랜잭션을 커밋할지 롤백할지를 판단하면..
· JPA
순수하게 J2SE 환경에서 JPA를 사용하면 개발자가 직접 엔티티 매니저를 생성하고 트랜잭션도 관리해야 한다. 하지만 스트링이나 J2EE 컨테이너 환경에서 JPA를 사용하면 컨테이너가 제공하는 전략을 따라야 한다. 스프링 컨테이너의 기본 전략 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다. 이 전략은 이름 그대로 트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다는 뜻이다. 트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다. 그리고 같은 트랜잭션 안에서는 항상 같은 영속성 컨텍스트에 접근한다. 스프링 프레임워크를 사용하면 보통 비즈니스 로직을 시작하는 서비스 계층에 @Transactional 어노테이션을 선언해서 트랜잭션을 시작한..
· JPA
Spring Data JPA Spring Data JPA는 Spring Data 프로젝트 하위 프로젝트 중 하나다. Spring Data 프로젝트는 JPA, 몽고 DB, NEO4J, REDIS, HADOOP, GEMFIRE 같은 다양한 데이터 저장소에 대한 접근을 추상화해서 개발자 평의를 제공하고 지루하게 반복하는 데이터 접근 코드를 줄여둔다. Spring Data JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트다. Spring Data JPA는 애플리케이션을 실행할 때 basePackage에 있는 리포지토리 인터페이스들을 찾아서 해당 인터페이스를 구현한 클래스를 동적으로 생성한 다음 스프링 빈으로 등록한다. 그래서 JpaRepository만 상속받고 구현체를 구현하지..
· JPA
Hibernate란? 하이버네이트는 자바 언어를 위한 ORM 프레임워크이고 JPA의 구현체로, JPA 인터페이스를 구현하고 내부적으로 JDBC API를 사용한다. 하이버네이트는 자바객체를 통해 데이터베이스가 Oracle, MySql, MSSQL 등 에 상관없이 다룰수 있도록 하는 추상화를 목표로 한다. Mybatis에 익숙한 사람들이라면, Mybatis 구조가 들어가는 자리에 Hiberante가 들어오는 구조라고 이해하면 된다. 이를 통해 개발자는 SQL를 직접 사용하지 않고 메서드 호출만으로 쿼리가 수행된다, 즉 SQL을 작성하는 시간을 줄여 생산성이 높아진다. 하지만 직접 SQL을 작성하는것보다는 성능상 좋지 않고 세밀하게 데이터를 조작하기 힘들다. 이를 보안하기 위해 JPQL과 NativeQuery..
· Spring
사이드 프로젝트를 진행하면서 Test Results에 결과만 나와서 어떤 Test를 했는지 확인이 불가했다. 요게 Run Test를 할때 Gradle을 기준으로 Test를 진행하기 때문에 목록이 보이지 않는것이다. 기준을 IntelliJ IDEA로 변경하게 되면 Test를 진행한 목록이 잘나온다. Run tests using을 InteilliJ IDEA로 변경해주고 다시 테스트를 해보면 목록이 잘 나온다.
beekei
'Spring' 태그의 글 목록 (2 Page)