MinBangHome

SI 프로젝트에서 Database 관련 참고할 만한 내용 정리 본문

Develop/개발끄적

SI 프로젝트에서 Database 관련 참고할 만한 내용 정리

Byungwook Min 2019. 2. 25. 13:47

★ UI 개발부문

* 보통의 ONLINE 시스템은 보통 3초 내외의 처리 시간을 가져야 일반적이다. 그래서 ONLINE 프로그램에서 간혹 많은 데이터를 조회할때는 페이징 처리를 하거니 아님 조회조건을 많이 두어 조회 데이터의 양을 줄여 사용자에게 지루한 기다림의 시간을 만들지 않는다.

* ONLINE 시스템에서 엑셀 업로드/다운로드시에는 특히 주의해야 한다. 잘못하면 전체 시스템이 먹통이 되기 쉽다(Memory leaks 흔히 말하는 Out of Memory). UI에서 등록 및 처리 건수를 100건 또는 시스템에 맞게 적당한 수 만큼만 업로드 가능하게 한다던지, 별도의 배치서버쪽으로 비동기 처리를 하게 하는 방법도 있다.

* UI 개발담당자들은 데이터에도 관심을 가져야 한다. 엑셀 업로드/다운로드나, 다량의 데이터 조회에 잘 대응할려면 내가 처리하는 데이터들이 구성이 어떤지 데이터 량은 얼마인지 어느정도 예측하면 프로그램을 해야 한다. 고려하지 않고 개발하다가는 서버를 먹통으로 만들고 회사와 고객사를 불편한 현실 속으로 몰고 갈 수 있다.

* UI 개발담당자는 Database의 데이터 타입이나 길이를 참고하여 UI의 입력값 verification에 참고한다.(UI 프로그래밍에서 타입이나 길이 체크는 기본이며 시스템 안정화에 많은 도움을 준다.)

 

 

★ [공통]

* 테이블들은 대부분 INSERT_USER_ID, INSERT_DATE, UPDATE_USER_ID, UPDATE_DATE, USE_YN/DEL_YN 컬럼들을 가져 데이터의 생성 및 최소한의 변경 이력을 관리한다.

* 테이블에 시퀀스를 사용할때 의미있는 접두사를 이용해보자. 코드값만 봐도 금방 어떤 코드이며 어느 테이블의 PK인지 한방에 확 알수 있으면 UI나 기능체크시에 잘 못된 값이 넘어오거나 설정되었는지 금방 알 수 있다.

* 시퀀스 크기는 "월 데이터 생성량 * 12개월 * (짧게는2~3년, 보통 5년, 정말 길면 10년 시스템 운영 예측 기간) * 여유분" 하여 시퀀스 크기를 결정한다. 

* 보통 테이블이나 PK, INDEX 생성은 설계 담당자가 진행한다. 그런데 어처구니 없게도 요청을 하면 DBA가 테이블 스페이스나 grant 관련 스크립트 추가 작성해서 요청하라고 한다. @.@ 이건 아닌것 같소.... 테이블 스페이스나 database 사용자 및 권한 관리는 DBA가 하는 것이라고 생각합니다.

 

 

★ 공통 코드

* 공통 코드는 "코드 그룹 정보", "코드 정보"로 테이블을 나누어 관리한다.

* 코드정보는 절대 데이터 삭제는 하지 않는다.

   단지 사용여부, 삭제여부, 유효종료일 같은 값으로 관리 할 뿐 절대 삭제하지 않는다. 삭제시 예전 데이터를 조회할때 어려움이 발생한다.

* 코드는 보통 유효시작일시 ~ 유효종료일시, 또는 삭제 여부 같은걸로 관리하면 신규코드 적용이 날짜나 시간에 예민하면 유효시작/종료일시로 관리하고 그리 예민하지 않으면 삭제 여부 정도 또는 사용여부 정도로 관리한다.

* 코드정보에는 꼭 display order 같은 순서 컬럼을 둔다. 보통 코드 정보를 화면에 콤보박스로 구성을 많이 하는데 사용자들이 자주 쓰는 코드 순으로 하고 싶다느 요구사항이 많다. 그래서 꼭 순서값을 설정할 수 있는 컬럼이 필요하다.

* 코드 정보에 추가 값을 설정할 수 있게 param1, param2, param3 정도의 여분의 컬럼을 둔다. 가끔 상세 업무 중에 코드값에 추가 값을 설정할 경우가 간혹 있는데 확장 컬럼이 없으면 코드에 코드값을 연결해야 하는 경우가 있다.

* 간혹 비슷한 의미의 코드유형들을 시스템이나 업무에 따라 달리 이용한다면, "코드 그룹 정보"에 시스템 코드나 업무 구분코드를 추가로 둔다. 그래서 시스템이나 업무에 유니크한 코드들을 관리하게 한다.(되도록이면 동일한 업무일 경우는 동일한 코드를 사용하여 중복 및 코드 동기화에 유용하게 한 코드를 등록해서 사용하는걸 권장한다.)

 

 

★ 사용자 정보

* 한국에서는 사용자 정보 관련해서 개인정보 보호, 개인정보 동의 관련 기능 필요.

* 사용자 상태코드 관리(일반사용, LOCK(패스워드 오류횟수 초과), 휴먼, 탈퇴, 퇴사)

  사용자는 이슈가 많은 정보라 상태코드를 잘 관리한다. 사용자계정이 사용불가일때 불가인 이유가 본인 탈퇴인지, 시스템에서 탈퇴를 시켰는지, 퇴사로 인한 것인지 상태 및 변경 사유를 알 수 있게 구성한다.

* 시스템에서 패스워드 변경 주기를 설정하여 패스워드 최종변경 기준으로 주기적으로 변경을 하게 유도한다.

  패스워드는 단반향 암호화를 해서 DB에 저장한다. 데이터가 노출되더라고 패스워드를 복호화 못하게 한다.(요즘 DB 암호화 솔루션도 있다. 암호화를 하던 암호화 솔루션을 적용하던 보안이 좋아지면 반대로 성능은 반비례한다.)

  얼마전에 인터넷에서 봤는데 암호화 된 문자를 계속 수집해서 임의로 무작정 요청해서 로그인을 하는 경우도 있다고 한다. 사용자 별로 랜덤한 키를 따로 관리하며 접속 시간을 함께 이용하도록 해서 재사용이 어렵게 한다.

  위와 같이 무작위로 ID.PW요청을 막기위해 패스워드 오류횟수도 시스템에서 관리하여 오류 횟수가 넘어서면 사용자를 LOCK 처리 시킨다.

* 사용자 인증시 가입한 email이나, 핸드폰 번호 인증을 한다.

 

★ 메뉴 정보

* 메뉴 정보는 보통 상.하 관계가 있는 트리 구조로 구성한다.

* 속도를 위해서 상.하 관계가 있는 컬럼 기준으로 인덱스를 구성한다.

* 사용유무, 일시숨김


'Develop > 개발끄적' 카테고리의 다른 글

[VB] BOF, EOF 사용  (0) 2024.01.02
자재 이동  (0) 2020.03.09
ocx 란?  (0) 2019.02.25
WBS 란  (0) 2019.02.25
Comments