전체 글

아무거나 넣는 하드디스크
실무

[DB] CONNECT BY와 WITH RECURSIVE 계층형 데이터 조회 | 민민의 하드디스크 - 티스토리

내용신청 마스터테이블이 있을 때, 키값은 순번(신청순번 시퀀스)SN이 계속 쌓인다. UP_SN컬럼도 있다. 해당 컬럼은 상위 이력을 보기 위해 존재하는 컬럼이다. 신청순번/상위신청순번이 있다고 가정.신청되고 반려되어도 재신청이 가능하고, 신청 건에 대한 모든 이력을(반려포함) 보고싶을 때 사용하려고 설계되었다. - 처음 신청 시에는 상위 순번이 없음 (UP_SN : NULL)- 신청 건에서 반려처리되면 재신청이 가능 (재신청 시 새로운 순번으로 신청내용 INSERT 됨)- 반려된 건에서 재신청 시 SN이 새로운 신청 건의 UP_SN 값으로 들어감.   예제 데이터디테일테이블에는 신청 내역이 있고,반려되면 새로운 신청(up_sn이 이전 sn을 참조)승인되면 더 이상 재신청이 없음snup_sn상태신청자신청일..

실무

[Spring] 데이터 전달하기: Model, Map, DTO 비교와 최적 활용 | 민민의 하드디스크 - 티스토리

몇개에 실무 프로젝트를 진행하면서 많이 배우고 느낀 것 중 하나는 데이터 전달 방식이다.실무에서는 데이터를 주고받을 때 여러 방식이 사용되는데, 주요 방식으로는 Model 클래스 사용, Map 사용, DTO(Entity) 사용 등이 있다. 각각의 방식이 효율적인 경우와 장단점에 대해 생각해봤다. 1. Model 클래스 사용Model은 Spring MVC에서 View와 데이터를 공유하는 용도로 사용주로 컨트롤러에서 화면(View)으로 데이터를 넘길 때 사용됨.Thymeleaf, JSP 같은 템플릿 엔진에서 활용됨.예시@Controllerpublic class UserController { @GetMapping("/user") public String getUser(Model model) { ..

실무

[DB] 트랜잭션과 데이터베이스 락(Transction & DB Lock) | 민민의 하드디스크 - 티스토리

서론 (개인적인 생각)대부분 웹프로그래밍 업무는 CRUD가 기본 프로세스, 그 외에 전자결재 API, 외부 연계(인터페이스), 내부 연계, 기관 연계 등등 개발의 중점보다는(기본은 되는 정도) 업무(도메인)의 중점(중요도)이 더 크다고 생각한다.예시로,신청과 관리- 내부에서도 승인(결재 프로세스)와 같은 구분이 있어야 visible 되는 기능 또는 화면도 있고,  어떤 흐름에 따라 변경이 잦은 프로세스도 있을 것이다. 신청페이지와 관리자페이지의 상호작용이 중요하다고 생각이 들었다..업무를 잘못 이해하면 개발을 아무리 잘해도 고객의 만족도를 높이지 못한다는 것.그래서 더 많은 테스트를 해보고, JUnit과 같이 코드로 진행하는 테스트로 먼저 검증하고 사용자 테스트를 거치거나 하는 식이다. (공공SI는 대부..

실무

[DB] ROWNUMBER와 RANK의 차이 | 민민의 하드디스크 - 티스토리

프로젝트 중 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 ..

실무

[DB] ROWNUM 사용 시 주의점/활용법 | 민민의 하드디스크 - 티스토리

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가 신청/변경/삭제 등 비즈니스..

실무

[DB]Mybatis insert/update 시퀀스 관리 | 민민의 하드디스크 - 티스토리

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..

개발 환경/Eclipse

[Eclipse] WebLogic.cmd 서버 이클립스 콘솔에서 로그(실행시키기)띄우기 | 민민의 하드디스크 - 티스토리

프로젝트 환경이 내부망이라 직접 캡쳐하진 못했고, 이 부분은 기록해놓고 싶어서 기억을 더듬어 올려보려고 한다.프로젝트 서버가 WebLogic이고 서버실행을 startWebLogic.cmd(예시)같은 파일을 돌려서 서버를 구동시켰다.서버는 잘 켜지고, 문제없지만 개발자는 로그를 봐야되는게 생명인데 복잡한 프로세스나 많은 쿼리가 돌아가는 화면을 실행시키면 로그가 모두 올라가서 짤리게 된다.(로그가 안 보임)진짜 너무너무 불편해서 이클립스 개발환경에서 직접 서버를 띄우고 로그도 볼 수 있게 하는 방법을 적어보려고 한다.  서버 실행1. External Tools Configurations...  2. Program > New Configuration 3. 경로/이름 입력Name: 사용자가 설정하면 됨Locat..

DB(Database)

[DB] 성능 튜닝 ANALYZE TABLE [테이블] COMPUTE STATISTICS | 민민의 하드디스크 - 티스토리

원래 테이블 수도 많아서 DBA 쪽에서 일괄적으로 해주는 작업이라고 들었는데, 기존에 시스템에서 이행된 쿼리라 작업이 되지 않아 쿼리 PLAN이 최적화되지 않았다고 들었다.업무 중 3개의 테이블을 조인하여 조회쿼리를 만들어서 조회해보니 조회시간이 20s 이상 걸리는 상황이 생겼는데, 해당 쿼리를 5s 이하로 줄인 방법에 대해 적어보려고 한다. 사용 명령어 ANALYZE TABLE [테이블명] COMPUTE STATISTICS;DB 성능 튜닝에서 ANALYZE TABLE [테이블] COMPUTE STATISTICS를 사용하면 쿼리 최적화에 필요한 최신 통계 정보를 수집하여 옵티마이저가 효율적인 실행 계획을 수립할 수 있게 도와준다고 한다. 여기서 통계 정보는 테이블의 데이터 분포, 인덱스 사용 빈도, 행의..