xit-file이란?
xit-file은 응용시스템에 다음과 같은 파일관리 기능을 제공하는 모듈이다.
- 파일의 저장
- 파일의 삭제
- 업무정보와 파일의 연계
설치
응용시스템 프로젝트가 xit-file을 사용하려면 pom.xml의 <dependency ../>
부분에 다음 중 하나를 포함해야 한다.
<groupId>cokr.xit.base</groupId>
<artifactId>xit-file</artifactId>
<version>23.04.01-SNAPSHOT</version>
<groupId>cokr.xit.base</groupId>
<artifactId>xit-base</artifactId>
<version>23.04.01-SNAPSHOT</version>
<groupId>cokr.xit.boot</groupId>
<artifactId>xit-base-starter</artifactId>
<version>23.04.01-SNAPSHOT</version>
정보유형 & 정보 키
관리하는 파일의 정보는 TB_FILE 테이블에 저장한다.
파일정보는 업무정보와 연계하기 위해 다음 데이터가 있어야 한다.
- 정보유형(infoType, INF_TYPE): 연계하는 업무정보 유형을 구분하는 코드. 응용시스템 프로젝트에서 결정
- 정보키(infoKey, INF_KEY): 연계하는 업무정보를 식별하는 키. 응용시스템 프로젝트에서 결정. 주로 해당 정보의 PK
이외에 프로젝트에서 파일정보를 추가로 구분해야 할 경우 subType 프로퍼티(SUB_TYPE 컬럼)를 사용할 수 있다.
설정
디렉토리
파일을 저장하는 디렉토리는 file-mapper.xml의 <sql id="fileDir"../>
항목에 설정한다.
다음은 '응용시스템 디렉토리/files/{업무정보별 디렉토리}/yyyy/mm/dd' 디렉토리를 지정하는 예다.
<sql id="fileDir">CONCAT('files/', DIR, DATE_FORMAT(CURRENT_DATE, '%Y/%m/%d/'))</sql>
다음은 'C:/temp/files/{업무정보별 디렉토리}/yyyy/mm/dd' 디렉토리를 지정하는 예다.
<sql id="fileDir">CONCAT('C:/temp/files/', DIR, DATE_FORMAT(CURRENT_DATE, '%Y/%m/%d/'))</sql>
URL
저장한 파일을 웹서버로 접근하기 위한 URL은 file-mapper.xml의 <sql id="fileUrl"../>
항목에 설정한다.
다음은 '응용시스템 디렉토리/files/{업무정보별 디렉토리}/yyyy/mm/dd' 디렉토리의 파일들에 대한 URL을 지정하는 예다.
<sql id="fileUrl">FILE_PATH</sql>
다음은 'C:/temp/files/{업무정보별 디렉토리}/yyyy/mm/dd' 디렉토리의 파일들에 대한 URL을 지정하는 예다.
<sql id="fileUrl">REPLACE(FILE_PATH, 'C:/temp/', '')</sql>
업무정보별 디렉토리
저장하는 파일을 업무정보별로 위치를 지정하려면 file-mapper.xml의 <sql id="fileDirs"../>
항목에 설정한다.
다음은 첨부파일(infoType = '00')은 'attachment', 제품 이미지 파일(infoType = '01')은 'product' 디렉토리로 설정하는 예다.
<sql id="fileDirs">SELECT INF_TYPE
,<include refid="cokr.xit.base.file.dao.FileMapper.fileDir" /> DIR
FROM (
SELECT '00' INF_TYPE, 'attachment/' DIR FROM DUAL UNION
SELECT '01' INF_TYPE, 'product/' DIR FROM DUAL
) FILE_DIRS</sql>
톰캣 설정
저장된 파일들을 웹서버가 서비스하기 위한 설정은 application.yml의
- spring.mvc.static-path-pattern: URL 패턴
- spring.web.resources.static-locations: 저장위치
항목으로 설정한다.
다음은 '응용시스템 디렉토리/files' 디렉토리의 파일을 지정하는 예다.
spring:
mvc:
static-path-pattern: ...,/files/**
web:
resources:
static-locations: ...,file:files/
다음은 'C:/temp/files' 디렉토리의 파일을 지정하는 예다.
spring:
mvc:
static-path-pattern: ...,/files/**
web:
resources:
static-locations: ...,file:C:/temp/files/
파일 테이블 조인
응용시스템의 테이블과 파일 테이블을 조인하려면 다음과 같이 한다.
SELECT ... <!-- 응용시스템 테이블 컬럼 -->
<!-- 파일정보 -->
, FILE_ID <!-- 파일 ID -->
, FILE_NM <!-- 파일 이름 -->
, FILE_PATH <!-- 파일 경로 -->
,<include refid="cokr.xit.base.file.dao.FileMapper.fileUrl" />FILE_URL
, ... <!-- 응용시스템 테이블 컬럼 -->
<!-- TB_FILE join -->
FROM 응용시스템 테이블 A LEFT OUTER JOIN TB_FILE B ON INF_TYPE = #{infoType} AND INF_KEY = '응용시스템 테이블 키값 또는 컬럼명' AND B.USE_YN = 'Y'