본문 바로가기
반응형

분류 전체보기714

DataSourceBuilder, yml의 원리 및 @ConfigurationProperties 적용 개요 일반적으로 mysql DB 접속 정보를 application.yml에 설정했는데, master-slave를 구성하면서 DB 정보들을 java 설정 쪽으로 가져와야 했습니다. 1. 해당 정보를 어떻게 가져올 수 있는지 고민하던 중, DataSource로 받아오며, 손쉽게 DataSourceBuilder를 이용할 수 있다는 것을 알고 정리합니다. 2. @ConfigurationProperties을 통해서 application.yml에서 원하는 정보를 가져올 수 있습니다. DataSourceBuilder란? DataSourceBuilder는 공통 구현과 설정으로 DataSource를 편리하게 만들 수 있는 클래스입니다. 이 빌더에 의해서 구현할 수 있는 pooling Datasource에는 Hikari,.. 2022. 12. 16.
수기 업로드 작업 자동화 및 이메일 솔루션 사용 개요 렌탈료 청구서, 렌탈료 납부서, 위약금 청구서, 렌탈료 납부서 총 4개의 메일 전송 기능이 필요합니다. 기존에 사용했던 기능에서 솔루션을 도입해 개선하는 건으로, 변경사항, 삭제사항, 추가사항을 정리하고 이메일 솔루션을 도입하였습니다. 미팅 내용 변경사항 - 렌탈료와 위약금 청구서 및 납입서 수기 업로드를 이메일로 전송으로 전환 - 여러 달을 합쳐서 보여주지 않고 1달을 기준으로 문서 작성 삭제사항 - 합산포함, 선납확인서 삭제 신규 추가사항 - 정기 전송 여부, 정기 전송 일자를 추가해 일 배치로 매일 전송 - 그룹 주문번호로 최대 15개까지 내용을 묶어서 보낼 수 있음 - 위약금 자동입력(프로시저 활용, 반환접수일 추가) 실행 프로세스 정리 청구서, 납입서 전송은 크게 [유효 주문번호 조회] -.. 2022. 12. 16.
NICE API 일시불 취소 개발하기 개요 기존에 NICE API로 일시불 결제는 구현되어 있지만 모든 취소는 상담원을 통해서만 가능했습니다. 업무시간(8:30~19:00) 이외에 상담원이 부재하여 바로 취소를 할 수 없어서 NICE API 일시불 취소를 개발했습니다. NICE API 일시불 취소 순서도 취소 요청부터 취소 완료 후 알림톡 발송까지의 과정입니다. 순서도 설명 본인이 요청한 주문인가? 취소의 조건으로 본인이 요청한 주문인지, 취소가 가능한 상황인지 확인합니다. 추소 요청 주문번호에 따른 결제자 아이디가 현재 로그인 한 아이디인지 확인합니다. 또한 상품 준비 중(배송 준비 중) 상태를 기준으로 이전은 즉시 취소가 가능하며 그렇지 않다면 취소 접수를 통해 상담원에 안내합니다. 취소 가능한 상태인가? 중복 취소를 방지하기 위해서 취.. 2022. 12. 9.
트랜잭션 전파 전략 7개 트랜잭션 전파 전략 7개 트랜잭션 전파 전략은 총 7가지가 있습니다. REQUIRED, REQUIRES_NEW, NESTED, MANDATORY, NEVER, SUPPORTS, NOT SUPPORTED를 하나씩 알아보겠습니다. REQUIRED 종속 된 트랜잭션은 현재의 트랜잭션을 따라갑니다. 만약에 현재 트랜잭션이 없다면 새로운 트랜잭션을 만듭니다. 트랜잭션 어노테이션의 기본 설정이기도 합니다. 트랜잭션 기본 설정입니다. 기존 트랜잭션 있음 : 기존 트랜잭션에 참여합니다 기존 트랜잭션 없음 : 트랜잭션 없이 진행합니다 REQUIRES_NEW 종속된 트랜잭션은 언제나 새로운 트랜잭션을 만들고 만약에 트랜잭션이 존재한다면 현재 트랜잭션을 잠시 지연시킵니다. 실제 트랜잭션 지연이 모든 트랜잭션 매니저에서 발생.. 2022. 12. 3.
스프링 트랜잭션 이해 개요 스프링 트랜잭션의 적용 위치, 옵션 AOP 주의 사항을 학습합니다. @Transactional 동작 확인하기 @Transactional으로 프록시 방식의 AOP를 이용한 트랜잭션 작동은 아래와 같습니다. 트랜잭션 시작 시 트랜잭션 매니저는 데이터 소스에서 커넥션을 만들고 트랜잭션 동기화 매니저에 커넥션을 보관합니다. 트랜잭션 로직을 처리할 때 트랜잭션 동기화 매니저에 보관된 커넥션을 사용하고, 트랜잭션을 모두 종료시키고 커넥션을 반납합니다. 스프링에서 선언적 트랜잭션인 @Transactional를 예시 코드로 설명하겠습니다. @Slf4j @SpringBootTest public class TxBasicTest { ... @Test void txTest() { basicService.tx(); bas.. 2022. 12. 1.
스프링 트랜잭션 추상화, 동기화 개요 스프링 트랜잭션의 추상화, 동기화를 이해할 수 있다. 트랜잭션 추상화 JDBC를 사용하다가 JPA로 기술을 변경하면 어떻게 될까요? JDBC 종속적인 수많은 코드들을 JPA로 변경해야 합니다. 그러다가 JPA가 또 다른 기술로 변경되면 어떻게 될까요? 해당 기술에 맞춰서 수많은 변경을 해야 합니다. 아래는 트랜잭션을 사용하는 JDBC 코드와 JPA 코드 비교입니다. 라이브러리가 완전히 바뀝니다. //JDBC public void accountTransfer(String fromId, String toId, int money) throws SQLException { Connection con = dataSource.getConnection(); try { con.setAutoCommit(false);.. 2022. 11. 30.
스프링 트랜잭션 전파 기본개념 개요 데이터베이스의 트랜잭션 고립 수준에 대해 공부하다가 스프링에서 트랜잭션이 부모와 자식 사이에 전파가 된다는 사실을 알았습니다. 여러 가지 전파 수준이 있는데, 수준에 따라서 어떻게 결과가 달라지는지 궁금해서 테스트를 통해 알아보도록 하겠습니다. 트랜잭션 커밋과 롤백 트랜잭션 시작 시 Hikari에서 커넥션(Connection)을 가져오고 커밋을 하면 Hikari에 커넥션을 반납합니다. 또한, 롤백도 마찬가지로 반영된 내용을 모두 롤백하고 Hikari에 커넥션을 반납합니다. 만약에 아래 코드처럼 첫번째 트랜잭션이 커밋되고, 두번째 트랜잭션이 롤백된다면 트랜잭션 사용은 어떻게 될까요? @Test void double_commit() { log.info("트랜잭션1 시작"); TransactionStat.. 2022. 11. 17.
스케줄링에 어떤 기술을 사용할까?(@Scheduled vs Spring Batch vs Quartz) 개요 Quartz는 오픈소스 잡 스케쥴링 프레임워크로 자바를 사용합니다. 단순하면서도 엄청난 유연성을 가지고 있으며 이를 통해 스케쥴링 추가와 DB 클러스터링 설정을 해보겠습니다. @Scheduled vs Spring Batch vs Quartz 스케쥴링을 위한 기술로는 크게 3가지를 선택할 수 있습니다. 스프링 기본 기능의 @Scheduled, Spring Batch, Quartz입니다. 처음으로 @Scheduled는 스케쥴링 기본 기능만 제공하며 DB 클러스터링이 가능하지 않습니다. 외부 라이브러리인 Shed Lock을 사용하여 제어할 수 있으나 현재 java 버전에 맞지 않아서 사용이 불가합니다. 현재 이 방식을 사용하고 있었는데 INSERT 작업의 경우 2개의 서버에서 중복 작업하는 문제가 발생하.. 2022. 11. 10.
객체지향과 4대 특성 객체란? 현실세계의 구체적인 사물(Object)과 더불어 정신적인 영역까지 포함한 하나의 "개념"으로 정의할 수 있는 모든 것입니다. 객체지향이란? 객체지향이란 시스템을 하나의 공동체로 바라보고 자율적인 객체들이 서로 상호작용하도록 객체를 이용해 시스템을 분할하는 것입니다. 객체지향의 시작은 객체에 적절한 책임을 부여는 것. 객체 간의 요청과 응답하는 협력으로 시스템이 구성됩니다. 자율적인 객체란, 상태(varaible), 행위(method)를 가지며 스스로 자신을 책임지는 객체를 의미합니다. 상태, 속성(Variable) 객체는 상태 정보를 저장하고 유지해야 하는데 이러한 속성은 변수로 정의됩니다. 속성 값이 바뀜으로써 객체의 상태가 변경될 수 있습니다. 기능(method) 외부로부터 직접 속성에 접근.. 2022. 11. 2.
반응형