본문 바로가기

728x90
반응형

전체 글

(694)
할인 쿠폰 개선하기 개요 할인쿠폰을 사용하면서 고도화해야 하는 요청들이 있었습니다. 또한 다양한 정책의 할인이 필요한 경우도 있었습니다. 이 과정들을 정리합니다. 1. 할인쿠폰 설계 개선하기 기존 할인쿠폰 테이블은 제품의 특정 상품을 제한하거나 사용 조직을 제한할 수 없었습니다. 그러다보니 다른 부서에서 만든 할인쿠폰을 사용하는 문제, 특정 제품이 아닌 전체 제품에 할인쿠폰이 적용되는 문제가 있었습니다. 따라서 할인쿠폰 테이블과 연관관계를 가지고 있던 할인쿠폰 제품 테이블을 개선하고 할인쿠폰 사용조직 테이블을 추가했습니다. 할인쿠폰 상품 테이블 개선 기존에 할인쿠폰기본(TB_DC_B) 테이블은 제품테이블(TB_PRDT)와 N:M 관계를 가지고 있었고 중간 테이블인 할인쿠폰 제품(TB_DC_PROD) 테이블이 있었습니다. 하..
지금 하는 일들을 절반의 시간 안에 해야 한다면? 개요 10년도 넘은 글이지만 김창준 님의 칼럼은 아직도 유용한 내용들이 많습니다. "지금 하는 일들을 절반의 시간 안에 해야 한다면?"을 주제로 작성하신 글을 읽고 실제 업무에 적용해보고 느낀 점을 기록합니다. 핵심내용 1시간 내에 끝내기로 한 것이 실제로 1시간 지났는데도 안 끝나면 무조건 다음 선택지 중에서 골라야 합니다. 하던 걸 이어서 마저 한다는 무조건 없습니다(5분만 더하는 것도 안됨). 다른 일을 1시간 동안 한다. 더 우선순위가 높은 일로 선택 성취하고자 하는 결과(outcome)를 생각해서 전혀 다른 접근법을 시도한다 다른 사람과 상의한다 1시간짜리 일을 완료했냐 아니냐 여부에 관계없이, 1시간이 끊어지는 마디마다, 그리고 좀 더 큰 마디(예컨대 하루, 1주일 단위)마다 다음 질문을 스스..
DataSourceBuilder, yml의 원리 및 @ConfigurationProperties 적용 개요 일반적으로 mysql DB 접속 정보를 application.yml에 설정했는데, master-slave를 구성하면서 DB 정보들을 java 설정 쪽으로 가져와야 했습니다. 1. 해당 정보를 어떻게 가져올 수 있는지 고민하던 중, DataSource로 받아오며, 손쉽게 DataSourceBuilder를 이용할 수 있다는 것을 알고 정리합니다. 2. @ConfigurationProperties을 통해서 application.yml에서 원하는 정보를 가져올 수 있습니다. DataSourceBuilder란? DataSourceBuilder는 공통 구현과 설정으로 DataSource를 편리하게 만들 수 있는 클래스입니다. 이 빌더에 의해서 구현할 수 있는 pooling Datasource에는 Hikari,..
수기 업로드 작업 자동화 및 이메일 솔루션 사용 개요 렌탈료 청구서, 렌탈료 납부서, 위약금 청구서, 렌탈료 납부서 총 4개의 메일 전송 기능이 필요합니다. 기존에 사용했던 기능에서 솔루션을 도입해 개선하는 건으로, 변경사항, 삭제사항, 추가사항을 정리하고 이메일 솔루션을 도입하였습니다. 미팅 내용 변경사항 - 렌탈료와 위약금 청구서 및 납입서 수기 업로드를 이메일로 전송으로 전환 - 여러 달을 합쳐서 보여주지 않고 1달을 기준으로 문서 작성 삭제사항 - 합산포함, 선납확인서 삭제 신규 추가사항 - 정기 전송 여부, 정기 전송 일자를 추가해 일 배치로 매일 전송 - 그룹 주문번호로 최대 15개까지 내용을 묶어서 보낼 수 있음 - 위약금 자동입력(프로시저 활용, 반환접수일 추가) 실행 프로세스 정리 청구서, 납입서 전송은 크게 [유효 주문번호 조회] -..
NICE API 일시불 취소 개발하기 개요 기존에 NICE API로 일시불 결제는 구현되어 있지만 모든 취소는 상담원을 통해서만 가능했습니다. 업무시간(8:30~19:00) 이외에 상담원이 부재하여 바로 취소를 할 수 없어서 NICE API 일시불 취소를 개발했습니다. NICE API 일시불 취소 순서도 취소 요청부터 취소 완료 후 알림톡 발송까지의 과정입니다. 순서도 설명 본인이 요청한 주문인가? 취소의 조건으로 본인이 요청한 주문인지, 취소가 가능한 상황인지 확인합니다. 추소 요청 주문번호에 따른 결제자 아이디가 현재 로그인 한 아이디인지 확인합니다. 또한 상품 준비 중(배송 준비 중) 상태를 기준으로 이전은 즉시 취소가 가능하며 그렇지 않다면 취소 접수를 통해 상담원에 안내합니다. 취소 가능한 상태인가? 중복 취소를 방지하기 위해서 취..
트랜잭션 전파 전략 7개 트랜잭션 전파 전략 7개 트랜잭션 전파 전략은 총 7가지가 있습니다. REQUIRED, REQUIRES_NEW, NESTED, MANDATORY, NEVER, SUPPORTS, NOT SUPPORTED를 하나씩 알아보겠습니다. REQUIRED 종속 된 트랜잭션은 현재의 트랜잭션을 따라갑니다. 만약에 현재 트랜잭션이 없다면 새로운 트랜잭션을 만듭니다. 트랜잭션 어노테이션의 기본 설정이기도 합니다. 트랜잭션 기본 설정입니다. 기존 트랜잭션 있음 : 기존 트랜잭션에 참여합니다 기존 트랜잭션 없음 : 트랜잭션 없이 진행합니다 REQUIRES_NEW 종속된 트랜잭션은 언제나 새로운 트랜잭션을 만들고 만약에 트랜잭션이 존재한다면 현재 트랜잭션을 잠시 지연시킵니다. 실제 트랜잭션 지연이 모든 트랜잭션 매니저에서 발생..
스프링 트랜잭션 이해 개요 스프링 트랜잭션의 적용 위치, 옵션 AOP 주의 사항을 학습합니다. @Transactional 동작 확인하기 @Transactional으로 프록시 방식의 AOP를 이용한 트랜잭션 작동은 아래와 같습니다. 트랜잭션 시작 시 트랜잭션 매니저는 데이터 소스에서 커넥션을 만들고 트랜잭션 동기화 매니저에 커넥션을 보관합니다. 트랜잭션 로직을 처리할 때 트랜잭션 동기화 매니저에 보관된 커넥션을 사용하고, 트랜잭션을 모두 종료시키고 커넥션을 반납합니다. 스프링에서 선언적 트랜잭션인 @Transactional를 예시 코드로 설명하겠습니다. @Slf4j @SpringBootTest public class TxBasicTest { ... @Test void txTest() { basicService.tx(); bas..
스프링 트랜잭션 추상화, 동기화 개요 스프링 트랜잭션의 추상화, 동기화를 이해할 수 있다. 트랜잭션 추상화 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);..

728x90
반응형