인턴으로 들어와서 하게된 프로젝트
이번에 새로 신입으로 오신 다른 직원분과 둘이서 팀프로젝트로 하게 되었다.
'자동 메일 송신 프로세스 만들기' 프로젝트에 대해 정리하고자 한다.
이 프로젝트의 순서도는 다음과 같다.
결국 이 프로젝트의 목적은 알림을 메일로 보내는 것이다.
중요한 것은 3가지이다.
1. 어떤 내용을 보낼 것인가 (알림 내용 리스트)
2. 언제 보낼 것인가 (알림 전송 시간)
3. 누구에게 보낼 것인가 (알림 수신자)
이 내용을 사용자가 입력하여 데이터베이스에 저장해둔다.
배치프로그램은
데이터베이스에 저장된 내용을 토대로 알림 전송 목록을 만든다
일종의 (내용, 시간, 수신자) 의 조합쌍을 만드는 것이다.
그리고 이 조합쌍들의 목록을 메일 전송 배치프로그램이
실제 메일을 전송하도록 만든다.
우리는 처음으로 데이터베이스 레이아웃부터 고민했다.
어떤 컬럼을 만들어야하고, 어떤 컬럼을 PK, FK로 할 것인지를 고민했다.
두시간 정도의 논의 끝에 레이아웃 틀을 어느정도 만들었다.
(그리고 그 틀로 작업을 하던 중 문제점을 발견하여
3일 뒤 두시간을 더 논의해서 레이아웃을 수정했다.)
나는 데이터베이스에 대한 경험이 부족해서
실제 레이아웃 작성은 경험이 있는 다른 신입직원분께 부탁드렸다.
그동안 나는 데이터베이스에 데이터를 입력할 윈도우 폼 프로그램을 만들었다.
알림 전송 시간 설정 프로그램은 다음과 같은 레이아웃을 가진다.
알림 리스트 조회는 알림타입, 알림 제목으로 검색하도록 하였다.
알림 타입에는 어떤 종류의 알림인지 (입고 알림, 출고알림, 판매알림 등)
알림 제목에는 설정한 알림 제목이 무엇인지 (~일자 수험분야 도서 입고 알림입니다 등)
조회 쿼리는 간단하게 다음과 같이 하였다.
SELECT ALARM_LIST_ID AS L_ALARM_LIST_ID
,ALARM_LIST_TYPE AS L_ALARM_TYPE
,ALARM_LIST_TITLE AS L_ALARM_TITLE
FROM '알림내용리스트TABLE'
WHERE CORP_CD = '고객사법인코드'
AND ALARM_LIST_TYPE LIKE '%'||'타입검색문구'||'%'
AND ALARM_LIST_TITLE LIKE '%'||'제목검색문구'||'%'
ORDER BY
ALARM_LIST_ID
알림 내용 리스트를 결과로 쭉 받아보고나서,
보낼 내용을 클릭하면 (레코드 클릭) 레코드 선택이벤트가 발생한다.
메일을 보낼 정보를 특정하기 위해
내용 - 시간 / 내용 - 수신자 쌍으로만 정보를 설정했을 때,
내용이 겹친다고 반드시 한쌍으로 정보가 결정되지 않는다.
내용1 - 9시 & 내용1 - 홍길동
내용1 - 10시 & 내용1 - 홍판서
다음과 같이 데이터가 있을 때,
홍길동에 내용1이 연결되어있고, 내용1에 9시가 연결되어있으므로
내용1을 홍길동에게 9시에 보낸다.
위와 같이 보면 의도대로 작동하는 듯 보인다.
그러나
홍길동에 내용1이 연결되어있고, 내용1에 10시가 연결되어 있으므로
내용1을 홍길동에게 10시에 보낸다?
홍판서에게 내용1이 연결되어 있고, 내용1에 9시가 연결되어 있으므로
내용1을 홍판서에게 9시에 보낸다?
위와 같은 의도치않은 논리적 오류가 발생할 수 있다.
따라서 '내용1- 9시' 와 '내용1 - 홍길동'을 연결하는 중간 다리가 필요한데
우리는 이를 위해 '메일코드' 라는 공통코드를 사용하기로 했다.
그래서 이렇게 공통코드를 사용할 경우,
하나의 리스트를 선택했을 때, 시간대가 여러개가 나올 수 있다.
따라서 시간대를 하나로 특정하기 위해 공통코드를 조건으로 넣어줘야 하는데,
사용자가 공통코드를 매번 기억해서 입력하기란 쉽지 않을 것이라고 판단했다.
따라서 해당 리스트에 딸려있는 공통코드들을 콤보박스로 넣어주는 아이디어를 떠올렸다.
그러나..
이 아이디어를 구현하던 도중, 프로젝트를 지시하신 대표님으로부터 중간점검을 받게 되었고
중간 점검 결과 테이블 레이아웃부터, 엔트리 폼까지 전부 뜯어고치게 되었다.
위 UI로는 추가적인 수정사항이 발생할 때, 프로그램 자체를 뜯어고쳐서 새로 만들어야 하고,
테이블 레이아웃 역시 추가적인 데이터를 넣기 위한 수정이 용이하지 않아
처음부터 다시 만들어야 하는 문제가 있었기 때문이다.
그래서 테이블 레이아웃은 다음과 같이 수정되었다.
<메일 내용 테이블>
메일제목, 내용, 보낼 자료를 추리는데 사용할 쿼리,
쿼리 조회 결과를 테이블에 담을 때의 테이블 디자인 (색상, 폰트) 설정
위 자료를 등록한 사람, 등록한 날, 수정한 사람, 수정한 날짜를 모두 저장하는 구조로 만든다.
목록 ID와 법인코드를 조합하여 PK로 사용한다.
이 메일 내용 테이블을 기준으로
전송시간 테이블과, 수신자 테이블을 다음과 같이 만들었다.
<전송시간 테이블>
내용과 시간을 연결하기 위해 알람목록 ID를 FK로하면서 PK로 하는 테이블 구조로 만들었다.
알람 목록과, 알람기간 ID는 모두 동일한 시퀸스를 사용하도록 하였다.
알람 전송 요일은 비트마스크를 사용하여 저장한다.
일 | 월 | 화 | 수 | 목 | 금 | 토 |
1 | 2 | 4 | 8 | 16 | 32 | 64 |
오라클에는 십진수 숫자를 가지고 이진수처럼 BITAND 연산을 수행하는 함수가 있다.
이 함수를 활용하여 어떤 요일이 선택되고 선택되지 않았는지 알 수 있다.
값의 저장은 선택된 날짜의 숫자값들을 모두 더한 값을 저장하면 된다.
<수신자 테이블>
받을 그룹ID를 기록하도록 되어있다.
실제 유저 한명한명을 기록하기보다, 유저들의 그룹을 기록하도록 하고,
나중에 실제 전송할 때, 유저 테이블과 조인하여 실제 보낼 유저를 추려내도록 하였다.
'인턴 > 델파이' 카테고리의 다른 글
[프로젝트] 자동 메일 송신 프로세스 만들기(2) : 알람 전송 리스트 테이블 만들기 (0) | 2021.02.18 |
---|---|
[델파이] 2. 델파이 소스파일의 구성 (0) | 2021.02.18 |
[델파이] 1. 델파이 프로젝트의 구성 (0) | 2021.01.08 |
[델파이 DB조작 예제] 3. Banded Table 사용해보기 (0) | 2020.08.28 |
[델파이 DB조작 예제] 2. DB 데이터 조작하기 (0) | 2020.08.28 |