13 시작하기
hanmj edited this page 2 months ago

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'