--- description: globs: alwaysApply: true --- # 데이터베이스 가이드 ## 데이터베이스 설정 ### PostgreSQL 연결 - **JNDI 리소스명**: `plm` - **드라이버**: `org.postgresql.Driver` - **설정 파일**: [context.xml](mdc:tomcat-conf/context.xml) ### 초기 데이터 - **스키마 파일**: [ilshin.pgsql](mdc:db/ilshin.pgsql) - **역할 설정**: [00-create-roles.sh](mdc:db/00-create-roles.sh) ## MyBatis 설정 ### SqlSession 사용 패턴 ```java public List> getData(Map paramMap) { SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try { return sqlSession.selectList("namespace.queryId", paramMap); } finally { sqlSession.close(); // 반드시 리소스 해제 } } ``` ### 트랜잭션 처리 ```java public void saveData(Map paramMap) { SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); // autoCommit=false try { sqlSession.insert("namespace.insertQuery", paramMap); sqlSession.update("namespace.updateQuery", paramMap); sqlSession.commit(); // 명시적 커밋 } catch (Exception e) { sqlSession.rollback(); // 오류 시 롤백 throw e; } finally { sqlSession.close(); } } ``` ## 매퍼 XML 작성 가이드 ### 기본 구조 ```xml ``` ### 파라미터 바인딩 ```xml ``` ### PostgreSQL 특화 문법 ```xml INSERT INTO table_name (id, name, reg_date) VALUES (nextval('seq_table'), #{name}, now()) UPDATE table_name SET status = #{status} WHERE id = #{id}::numeric ``` ## 주요 테이블 구조 ### 메뉴 관리 - **MENU_INFO**: 메뉴 정보 - **MENU_AUTH_GROUP**: 메뉴 권한 그룹 - **AUTH_GROUP**: 권한 그룹 정보 ### 사용자 관리 - **USER_INFO**: 사용자 정보 - **DEPT_INFO**: 부서 정보 - **USER_AUTH**: 사용자 권한 ### 코드 관리 - **CODE_INFO**: 공통 코드 - **CODE_CATEGORY**: 코드 카테고리 ## 데이터베이스 개발 모범 사례 ### 1. 파라미터 검증 ```xml ``` ### 2. 페이징 처리 ```xml ``` ### 3. 대소문자 처리 ```xml ``` ### 4. NULL 처리 ```xml ``` ## 성능 최적화 ### 인덱스 활용 ```sql -- 자주 검색되는 컬럼에 인덱스 생성 CREATE INDEX idx_user_dept ON user_info(dept_code); CREATE INDEX idx_menu_parent ON menu_info(parent_id); ``` ### 쿼리 최적화 ```xml ``` ### 배치 처리 ```xml INSERT INTO table_name (col1, col2, col3) VALUES (#{item.col1}, #{item.col2}, #{item.col3}) ```