내용신청 마스터테이블이 있을 때, 키값은 순번(신청순번 시퀀스)SN이 계속 쌓인다. UP_SN컬럼도 있다. 해당 컬럼은 상위 이력을 보기 위해 존재하는 컬럼이다. 신청순번/상위신청순번이 있다고 가정.신청되고 반려되어도 재신청이 가능하고, 신청 건에 대한 모든 이력을(반려포함) 보고싶을 때 사용하려고 설계되었다. - 처음 신청 시에는 상위 순번이 없음 (UP_SN : NULL)- 신청 건에서 반려처리되면 재신청이 가능 (재신청 시 새로운 순번으로 신청내용 INSERT 됨)- 반려된 건에서 재신청 시 SN이 새로운 신청 건의 UP_SN 값으로 들어감. 예제 데이터디테일테이블에는 신청 내역이 있고,반려되면 새로운 신청(up_sn이 이전 sn을 참조)승인되면 더 이상 재신청이 없음snup_sn상태신청자신청일..
몇개에 실무 프로젝트를 진행하면서 많이 배우고 느낀 것 중 하나는 데이터 전달 방식이다.실무에서는 데이터를 주고받을 때 여러 방식이 사용되는데, 주요 방식으로는 Model 클래스 사용, Map 사용, DTO(Entity) 사용 등이 있다. 각각의 방식이 효율적인 경우와 장단점에 대해 생각해봤다. 1. Model 클래스 사용Model은 Spring MVC에서 View와 데이터를 공유하는 용도로 사용주로 컨트롤러에서 화면(View)으로 데이터를 넘길 때 사용됨.Thymeleaf, JSP 같은 템플릿 엔진에서 활용됨.예시@Controllerpublic class UserController { @GetMapping("/user") public String getUser(Model model) { ..
서론 (개인적인 생각)대부분 웹프로그래밍 업무는 CRUD가 기본 프로세스, 그 외에 전자결재 API, 외부 연계(인터페이스), 내부 연계, 기관 연계 등등 개발의 중점보다는(기본은 되는 정도) 업무(도메인)의 중점(중요도)이 더 크다고 생각한다.예시로,신청과 관리- 내부에서도 승인(결재 프로세스)와 같은 구분이 있어야 visible 되는 기능 또는 화면도 있고, 어떤 흐름에 따라 변경이 잦은 프로세스도 있을 것이다. 신청페이지와 관리자페이지의 상호작용이 중요하다고 생각이 들었다..업무를 잘못 이해하면 개발을 아무리 잘해도 고객의 만족도를 높이지 못한다는 것.그래서 더 많은 테스트를 해보고, JUnit과 같이 코드로 진행하는 테스트로 먼저 검증하고 사용자 테스트를 거치거나 하는 식이다. (공공SI는 대부..
프로젝트 중 UI팝업을 누르면 사용자가 최근 사용한 주소 10개 데이터를 그리드로 출력해야 되는 화면이 있었다.프론트 쪽에서는 사실 그리드에 데이터만 뿌려주면 되고, 적용버튼(or 더블클릭이벤트)이 눌리면 선택된 주소가 자동으로 텍스트박스에 바인드 되는 정도의 기능만 있으면 돼서, 쿼리만 잘 짜주면 되겠다 생각했다.내가 생각했던 쿼리는 최근 사용 주소 '10개' 니까 사용자id에 따라 RANK로 묶어서 RN 아래와 같은 예제 데이터가 있다고 가정해보자.예제 데이터원하는 출력 결과 1. RANK() 사용 (잘못된 방식)SELECT *FROM ( SELECT *, RANK() OVER (PARTITION BY user_id ORDER BY used_at DESC) AS rn ..
1. 테이블 구조 및 로직마스터테이블 : 디테일테이블 => 1:N 구조마스터 테이블 구조 컬럼명 설명 SN 순번(PK), 사용자 식별용 REQ_DT 신청 날짜 FG_CD 구분 코드 ('01' - 신청, '02' - 변경, '03' - 삭제) CREATE_DT 데이터 생성 일자 디테일 테이블 구조컬럼명설명SN순번(PK), 사용자 식별용 START_DT 시작 날짜 (신청, 변경, 삭제의 시작일) END_DT 종료 날짜 (신청, 변경, 삭제의 종료일) FG_CD구분 코드 ('01' - 신청, '02' - 변경, '03' - 삭제)CREATE_DT데이터 생성 일자 마스터테이블에 신청한 사용자A에 대한 데이터가 쌓임 (KEY 값 1개) 디테일테이블에서 사용자A가 신청/변경/삭제 등 비즈니스..
1. 시퀀스 기반 (SELECT user_seq.NEXTVAL FROM DUAL)오라클과 같은 시퀀스 지원 DB에서 사용 SELECT member_seq.NEXTVAL FROM DUAL INSERT INTO members (id, name, email) VALUES (#{id}, #{name}, #{email}) selectKey를 사용하여 INSERT 전에 시퀀스 값을 미리 가져옴keyProperty="id"로 ID 값을 자동 매핑함 2. 시퀀스 테이블 기반 (sequence_table에서 순번 관리)MySQL처럼 시퀀스가 없는 DB에서 사용2.1 UPDATE sequence_table SET seq_value = seq_value + 1 W..