본문 바로가기

분류 전체보기

(17)
[DB] MongoDB 파헤치기 "MongoDB 의 특징이 뭐에요? 어떨 때 사용하나요?" 라는 질문을 받은 적이 있는데 사용은 해봤으나 NoSQL 중 하나이고 스키마가 없다라는 특징밖에 말할 수 없었다.. 자신있게 말할 수 있도록 정리를 해봐야겠다! NoSQL 이란? 먼저 NoSQL(Not only SQL)은 유연한 스키마 구조를 가진 데이터베이스로 특정 데이터를 목적에 맞게 저장하기 용이하다. 정확한 데이터 구조를 알 수 없거나 변경 및 확장 될 수 있는 경우, update 가 빈번하지 않은 경우, 데이터베이스를 수평적으로 확장해야하는 경우 사용하게 된다. (ex - mongodb, cassandra, hbase, hadoop 등) NoSQL 의 특징은 아래와 같다. 유연성: 유연한 스키마를 제공하여 보다 빠르고 반복적인 개발 가능..
[Spring Batch] ItemWriter JdbcBatchItemWriter ORM을 사용하지 않는 경우 Writer는 대부분 JdbcBatchItemWriter를 사용 @Bean public JdbcBatchItemWriter jdbcBatchItemWriter() { String sql = "INSERT INTO User(name, address) values (:name, :address)"; return new JdbcBatchItemWriterBuilder() .dataSource(dataSource) //DataSource DI .sql(sql) .beanMapped() .build(); } RepositoryItemWriter @Bean public RepositoryItemWriter repositoryItemWriter() { ..
[Spring Batch] ItemReader 방식 Cursor 방식 : Database에서 데이터를 Streaming Paging 방식 : 페이지 단위로 한번에 데이터를 조회 JdbcCursorItemReader @Bean public JdbcCursorItemReader jdbcCursorItemReader() { String sql = "SELECT id, name, address FROM User"; return new JdbcCursorItemReaderBuilder() .fetchSize(10) .dataSource(dataSource) //DataSource DI .rowMapper(new BeanPropertyRowMapper(User.class)) .sql(sql) .name("jdbcCursorItemReader") .build()..
[Spring Batch] Dynamic Scheduler 다이나믹 스케쥴링 Spring Batch를 개발하면서 서버가 Zookeeper로 클러스터링 되어있을 때 Master인 노드만 스케쥴링을 시작하도록 구현하고 싶었다. 따라서 처음에 자동으로 Start 하지 못하도록 설정하고, Master일 때 스케쥴링을 Start 해주도록 할 예정이다. 먼저, 스케쥴러는 서버가 시작할 때 자동으로 실행하게 된다. 이것을 막으려면 bootstrap.yml에 설정하나만 추가하면 된다. spring: batch: job: enabled: false 두번째로 DynamicAbstractScheduler를 구현하여 start / stop 할 수 있는 클래스를 만들 것이다. public abstract class DynamicAbstractScheduler { private ThreadPoolTask..
[Spring Batch] MongoItemWriter 구현 MongoItemWriter를 사용하면 Chunk 사이즈로 bulk 삽입이 되지 않고 한 row 씩 저장되는 것을 확인했다. bulk로 저장할 수 있도록 custom 하여 사용해보려고 한다. MongoItemWriter MongoItemWriter의 doWrite를 보면 아래와 같다. protected void doWrite(List
[개념] Spring Batch 란? Spring Batch 란? 벡엔드의 배치처리 기능을 구현하는 데 사용하는 프레임워크 Job Batch에서 실행 가능한 실행 단위. 여러 개의 Step을 포함하고 있는 객체. JobBuilderFactory로 원하는 Job을 쉽게 만들 수 있음. JobLauncher Job을 실행하는 책임이 있다. JobRepository를 통해 Job, Step, Item* 등을 생성하고 조립. JobRepository DB 또는 어딘가에 저장된 Job, Step 등을 조회(select) 또는 생성(insert), 수정(update). 어떤 Job이 실행되었으며 몇 번 실행되었고 언제 끝났는지 등 배치 처리에 대한 메타데이터 저장 예를 들어 Job 하나가 실행되면 JobRepository에서는 배치 실행에 관련된 정보..
[설치] 암바리 설치 (Ambari install on CentOS7) CentOS 부팅디스크 이슈 warning: Intel Kabylake processor with unknown PCH - this hardware has not undergone upstream testing. 문제 install 선택 매뉴에서 'e'눌러서 'quiet'를 지우고 'ctrl + x'를 누른다. Failed to start switch root 문제 부팅디스크 만들 때 win32diskinstaller로 만들어야 해결된다. CentOS 설치 시 고정아이피 등록방법 ubuntu /etc/network/interfaces 파일 설치시 네트워크 설정방법 선행작업 (모든 노드에서 실행) java 8 설치 $ yum list java*jdk-devel $..
JPA 도입을 위한 이해 JPA 개념 Object-Relational Mapping (객체 관계 매핑) 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계 ORM 프레임워크가 중간에서 매핑 JPA 자바 진영의 ORM 기술 표준으로 인터페이스의 모음 즉, 실제로 동작하것이 아니다. JPA 인터페이스를 구현한 대표적인 오픈소스가 Hibernate JPA 기본 이해 최근에는 Spring Boot 나 Spring Data JPA 처럼 추상화된 기술 기반의 JPA를 사용하기 때문에 실제 JPA가 어떻게 동작하는지 내부 구조나 원리를 이해하기 쉽지않다. JPA 자체를 기본부터 이해하면 문제가 발생했을 때 근본적인 원인을 쉽게 찾을 수 있다. 연관관계 매핑 객체지향 프로그래밍과 관계형 데이터베이스의 차이점의 문제로 ..