안녕하세요.
|
개발자 삽질코딩입니다.

thumbnail
SpringBatch 간단 정리

스프링 배치의 장점 대용량 데이터 처리에 최적화되어 고성능을 발휘 효과적인 로깅, 통계 처리, 트랜잭션 관리 등 재사용 가능한 필수 기능 지원 수동으로 처리하지 않도록 자동화 스프링 배치 주의사항 스프링 부트 배치는 스프링 배치를 간편하게 사용 할 수 있게 래핑한 프로젝트입니다. 따라서 스프링 부트 배치와 스프링 배치에 모두에서 다음과 같은 주의사항을 염두해야 한다. 데이터를 직접 사용하는 편이 빈번하게 일어나므로 데이터 무결성을 우지하는데 유효성 검사 등의 방어책이 있어야한다. 배치 처리 시스템 I/O 사용을 최소화 필요. 잦은 I/O로 데이터베이스 커넥션과 네트워크 비용이 커지면 성능에 영향을 줄 수 있기 때문. 따라서 가능하면 한번에 데이터를 조회하여 메모리에 저장해두고 처리를 한 다음 그결과를 한번에 데이터베이스에 저장하는것이 좋다. 일반적으로 같은 서비스에 사용되는 웹 API, 배치, 기타 프로젝트들을 서로 영향을 줍니다. 따라서 배치 처리가 진행되는 동안 다른 프로젝트 …

가비지 컬렉션(GC)의 원리와 종류

1. 가비지 컬렉션? JVM의 Heap 영역에서 사용하지 않는 객체를 삭제하는 프로세스 (참고) JVM의 메모리 구조 메소드 영역 클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보같은 필드 정보와 메소드의 이름, 리턴 타입, 파라미터, 접근 제어자 정보같은 메소드 정보, Type정보(Interface인지 class인지), Runtime Constant Pool(문자 상수, 타입, 필드에 대한 레퍼런스가 저장됨), static 변수, final class 변수등이 생성되는 영역. 힙 영역 new 키워드로 생성된 객체와 배열이 저장되는 영역. String constant pool : 문자열 리터럴을 저장하는 공간 (String str = “abc” 에서 “abc” 부분) 메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역. 스택 영역 지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값등이 생성되…

트랜잭션 격리레벨, 락, 전파타입 정리

1. 트랜잭션 하나의 논리적인 작업 셋 자체가 100% 적용되거나 또는 아무것도 적용되지 않아야 함을 보장해 주는 것. 2. 트랜잭션의 성질 ACID 원자성(Atomicity) - 트랜잭션 내에서 실행한 작업들은 모두 성공하거나 모두 실패해야한다. 일관성(Counsistency) - 일관성 있는 데이터베이스 상태를 유지해야 한다. (무결성 제약 조건 만족) 격리성(Isolation) - 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 지속성(Durability) - 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 3. 트랜잭션 격리레벨 트랜잭션은 원자성, 일관성, 지속성을 보장한다 문제는 격리성 - 격리성을 완벽히 보장하려면 거의 차례대로 실행해야 하는데 이러면 동시성 처리 성능이 매우 나빠진다. ANSI 표준은 트랜잭션 격리 수준을 4단계로 나누어 정의했다. READ UNCOMMITED(커밋되지 않은 읽기) READ COMMITED(커밋된 읽기…

post-receive를 활용한 젠킨스 CI (github없이 CI하기)

github, gitlab등의 웹호스팅 기반 서비스를 사용한다면 젠킨스와 연동하기 쉬운데요. 여러가지 이유로 설치형 git을 사용해야만 하는 경우 CI를 어떤식으로 진행하는지 정리해봤습니다. 세 줄 요약 젠킨스 빌드를 원격으로 유발하는 URL 설정 git이 설치된 서버에 post-receive git hooks 설정 post-receive script 코드에 1번 URL을 연결 1. 젠킨스 설치 docker등의 가상환경에서 구축하는 방법도 있지만 지금은 windows 환경에서 설치해보겠습니다. 1.1 설치파일 다운로드 https://www.jenkins.io/ 에서 설치파일을 다운로드합니다. port를 설정합니다. 이번에는 1234로 설정하겠습니다. JDK 설정을 해줘야하는데 공식사이트를 잘 읽어보면 8과 11만 지원한다고 되어 있습니다. 나중에는 어떻게 바뀔지 모르니 공식 문서를 꼭 정독하시고 적절한 JDK 버전을 설정해주세요. localhost:1234에 접속해 보겠습니…