Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions common-component/elementary-technology/directory-exist-check.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,84 @@ menu:
weight: 15
parent: "system"
---

## 개요

비즈니스 로직을 처리하면서 필요시 디렉토리의 존재를 확인할 수 있는 공통 기능을 제공한다.

본 기능은 전자정부 표준프레임워크 공통컴포넌트 요소기술 내에 구성되어 있다.

## 설명

1. 대상 디렉토리가 존재하는지 확인하는 기능
2. 특정 위치 이하로 대상 디렉토리가 존재하는지 확인하는 기능
3. 대상 디렉토리의 최종수정일자가 특정 구간 내에 포함되는 경우에 한해서 존재 여부를 확인하는 기능
4. 대상 디렉토리가 특정 소유자에 의해 생성된 경우에 한해서 존재 여부를 확인하는 기능(WINDOWS 시스템에서는 지원하지 않음)

### 관련 소스

| 유형 | 대상 소스명 | 설명 | 비고 |
| --- | --- | --- | --- |
| Service | `egovframework.com.utl.service.EgovFileTool.java` | 파일관리 툴 요소기술 클래스 | |
| JSP | `WEB_INF/jsp/egovframework/cmm/utl/EgovDrctryExst.jsp` | 테스트 페이지 | |

### 메소드

<!-- markdownlint-disable MD013 -->
| 결과값 | 메소드명 | 설명 | 내용 |
| --- | --- | --- | --- |
| boolean | `getExistDirectory(String targetDirPath)` | 디렉토리 확인 | 대상 디렉토리경로(`targetDirPath`)를 입력받아 확인한다. 성공 시 `true`, 실패 시 `false`를 리턴 |
| ArrayList | `getExistDirectory(String baseDirPath, String targetDirName, int cnt)` | 디렉토리 확인 | 확인할 위치기준 디렉토리경로(`baseDirPath`)를 입력받아 하위 디렉토리 중 대상 디렉토리(`targetDirPath`)가 존재하는지 확인한다. 성공 시 확인된 절대경로를 문자열 정보로 LIST에 담아서 리턴 |
| boolean | `getExistDirectory(String targetDirPath, String fromDate, String toDate)` | 디렉토리 확인 | 대상 디렉토리경로(`targetDirPath`)를 입력받아 생성일자가 조건구간(`fromDate`과 `toDate` 사이) 내에 포함되는지 확인한다. 성공 시 `true`, 실패 시 `false`를 리턴 |
| boolean | `getExistDirectory(String targetDirPath, String owner)` | 디렉토리 확인 | 대상 디렉토리경로(`targetDirPath`)를 입력받아 디렉토리 소유자조건(`owner`)에 일치하는지 확인한다. 성공 시 `true`, 실패 시 `false` 리턴 |
<!-- markdownlint-restore -->

### Input

* **targetDirPath**: String 타입의 절대경로를 포함하는 확인대상 디렉토리경로 (예: `/product/jeus/egovProps/tmp/dir1`)
* **baseDirPath**: String 타입의 절대경로를 포함하는 확인할 위치기준 디렉토리경로 (예: `/product/jeus/egovProps/tmp`)
* **targetDirName**: String 타입의 확인대상 디렉토리명 (예: `dir1`)
* **cnt**: int 타입의 디렉토리 존재 확인할 반복 횟수 (예: `10`)
* **fromDate**: String 타입의 날짜 정보 (예: `20090101`)
* **toDate**: String 타입의 날짜 정보 (예: `20090731`)
* **owner**: String 타입의 사용자 계정명 (예: `jeus`)

### Output

* **boolean** 타입: 존재 여부 `true` / `false`
* **ArrayList** 타입: 기준 경로 이하로 존재하는 디렉토리 목록 (예: `{"/user/com", "user/com/com", "user/adt/com"}`)

> [!NOTE]
> 메소드의 입력 항목 중에서 `fromDate`, `toDate` 항목은 Validation 체크가 적용된다
> ([요소기술 validation 체크](/common-component/elementary-technology/validation-check/) 참조).

## 환경설정

N/A

## 사용방법

```java
import egovframework.com.utl.sim.service.EgovFileTool;

String targetDirPath1 = "/user/com/dir1";
boolean result1 = EgovFileTool.getExistDirectory(targetDirPath1);

String baseDirPath2 = "/user/com/dir2";
String targetDirPath2 = "dir22";
int matchCnt = 1;
ArrayList result2 = EgovFileTool.getExistDirectory(baseDirPath2, targetDirPath2, matchCnt);

String targetDirPath3 = "/user/com/dir3";
String fromDate3 = "20090101";
String toDate3 = "20090131";
boolean result3 = EgovFileTool.getExistDirectory(targetDirPath3, fromDate3, toDate3);

String targetDirPath4 = "/user/com/dir4";
String ownerName4 = "com";
boolean result4 = EgovFileTool.getExistDirectory(targetDirPath4, ownerName4);
```

## 참고자료

N/A
77 changes: 77 additions & 0 deletions common-component/elementary-technology/id-number-validation.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,80 @@ menu:
weight: 12
parent: "formatter-util"
---

## 개요

주어진 주민등록번호, 법인번호, 사업자등록번호, 외국인등록번호의 유효성을 체크하여 `true`, `false`를 반환한다.

## 설명

입력에 주민등록번호, 법인번호, 사업자등록번호, 외국인등록번호를 입력받는다. 각 번호마다 하이픈(`-`)이 포함된 구분 입력과, 하이픈이 배제된 하나의 입력 등 두 가지 방식을 지원한다.

### 관련 소스

| 유형 | 대상 소스 | 설명 |
| --- | --- | --- |
| Service | `egovframework.com.utl.fcc.service.EgovNumberCheckUtil.java` | 번호 유효성 처리 관련 유틸리티 |
| Controller | `egovframework.com.utl.fcc.web.EgovNumberCheckUtilController.java` | 테스트용 Controller |
| JSP | `/WEB-INF/jsp/egovframework/cmm/utl/EgovNumberCheck.jsp` | 테스트 페이지 |

### 메소드

| 결과값 | 메소드 | 설명 | 내용 |
| --- | --- | --- | --- |
| `boolean` | `checkJuminNumber(String jumin1, String jumin2)` | 주민등록번호 유효성체크 | 주민등록번호 앞, 뒤 문자열을 입력받아 유효성 체크 |
| `boolean` | `checkJuminNumber(String jumin)` | 주민등록번호 유효성체크 | 주민등록번호(`-` 제외) 문자열을 입력받아 유효성 체크 |
| `boolean` | `checkBubinNumber(String bubin1, String bubin2)` | 법인번호 유효성체크 | 법인번호 앞, 뒤 문자열을 입력받아 유효성 체크 |
| `boolean` | `checkBubinNumber(String bubin)` | 법인번호 유효성체크 | 법인번호(`-` 제외) 문자열을 입력받아 유효성 체크 |
| `boolean` | `checkCompNumber(String c1, String c2, String c3)` | 사업자번호 유효성체크 | 사업자번호 앞, 중간, 뒤 문자열을 입력받아 유효성 체크 |
| `boolean` | `checkCompNumber(String comp)` | 사업자번호 유효성체크 | 사업자번호(`-` 제외) 문자열을 입력받아 유효성 체크 |
| `boolean` | `checkforeignNumber(String for1, String for2)` | 외국인번호 유효성체크 | 외국인등록번호 앞, 뒤 문자열을 입력받아 유효성 체크 |
| `boolean` | `checkforeignNumber(String foreign)` | 외국인번호 유효성체크 | 외국인등록번호(`-` 제외) 문자열을 입력받아 유효성 체크 |

- **Input**: 해당하는 입력란의 `String` 형태의 번호
- **Output**: `boolean` (유효 여부)

## 사용방법

다음은 번호의 종류에 따라 유효성을 검증하는 예제 코드이다.

```java
import egovframework.com.utl.fcc.service.EgovNumberCheckUtil;

// ...

// 1. 주민등록번호 체크
String jumin1 = "831231";
String jumin2 = "265948";
String jumin = "831231265948";

boolean isJuminValid1 = EgovNumberCheckUtil.checkJuminNumber(jumin1, jumin2);
boolean isJuminValid2 = EgovNumberCheckUtil.checkJuminNumber(jumin);

// 2. 법인번호 체크
String bubin1 = "134153";
String bubin2 = "4433453";
String bubin = "1341534433453";

boolean isBubinValid1 = EgovNumberCheckUtil.checkBubinNumber(bubin1, bubin2);
boolean isBubinValid2 = EgovNumberCheckUtil.checkBubinNumber(bubin);

// 3. 사업자등록번호 체크
String comp1 = "324";
String comp2 = "12";
String comp3 = "43222";
String comp = "3241243222";

boolean isCompValid1 = EgovNumberCheckUtil.checkCompNumber(comp1, comp2, comp3);
boolean isCompValid2 = EgovNumberCheckUtil.checkCompNumber(comp);

// 4. 외국인등록번호 체크
String foreign1 = "831231";
String foreign2 = "576545";
String foreign = "831231576545";

boolean isForeignValid1 = EgovNumberCheckUtil.checkforeignNumber(foreign1, foreign2);
boolean isForeignValid2 = EgovNumberCheckUtil.checkforeignNumber(foreign);

// ...
```
181 changes: 181 additions & 0 deletions common-component/elementary-technology/proxy-service.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,184 @@ menu:
weight: 37
parent: "system"
---

## 개요

**프록시서비스**는 네트워크 연결에 대한 프록시 설정을 동적으로 관리하고, 연결에 대한 기본 서비스(telnet, ftp, jdbc 연결)에 대한 로깅을 기록할 수 있는 네트워크 서비스 기능을 제공한다.

## 설명

**프록시서비스**는 네트워크 연결에 대한 프록시 설정 정보의 등록, 수정, 삭제, 조회, 목록조회의 기능 및 프록시 로그생성, 로그조회의 기능을 수반한다.

1. 프록시설정목록조회: 프록시설정 정보를 최근 등록 순서대로 조회하고, 그 결과를 화면에 반영한다.
2. 프록시설정등록: 프록시설정 정보를 등록하고, 등록한 결과를 조회한다.
3. 프록시설정수정: 기 등록된 프록시설정 정보를 수정한다.
4. 프록시설정삭제: 기 등록된 프록시설정 정보를 삭제한다.
5. 프록시설정상세조회: 프록시설정 목록에서 선택한 프록시설정 상세정보를 보여준다.
6. 프록시로그생성: 프록시설정을 통해 접속한 클라이언트의 접속 로그를 생성한다.
7. 프록시로그조회: 프록시설정을 통해 접속한 클라이언트의 접속 로그를 확인한다.

### 관련소스

| 유형 | 대상소스명 | 비고 |
| --- | --- | --- |
| Controller | egovframework.com.utl.sys.pxy.web.EgovProxySvcController.java | 정보관리 컨트롤러 |
| Service | egovframework.com.utl.sys.pxy.service.EgovProxySvcService.java | 정보관리 인터페이스 |
| ServiceImpl | egovframework.com.utl.sys.pxy.service.impl.EgovProxySvcServiceImpl.java | 정보관리 서비스 구현체 |
| DAO | egovframework.com.utl.sys.pxy.service.impl.ProxySvcDAO.java | 정보관리 DAO |
| Model | egovframework.com.utl.sys.pxy.service.ProxySvc.java | 정보관리 모델 |
| Model | egovframework.com.utl.sys.pxy.service.ProxyLog.java | 로그관리 모델 |
| VO | egovframework.com.utl.sys.pxy.service.ProxySvcVO.java | 정보관리 VO |
| VO | egovframework.com.utl.sys.pxy.service.ProxyLogVO.java | 로그관리 VO |
| JSP | /WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxyLogList.jsp | 로그조회 화면 |
| JSP | /WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcList.jsp | 목록조회 화면 |
| JSP | /WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcDetail.jsp | 상세조회 화면 |
| JSP | /WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcRegist.jsp | 등록 화면 |
| JSP | /WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcUpdt.jsp | 수정 화면 |
| Query XML | resources/.../EgovProxySvc_SQL_altibase.xml | Altibase용 Query XML |
| Query XML | resources/.../EgovProxySvc_SQL_cubrid.xml | Cubrid용 Query XML |
| Query XML | resources/.../EgovProxySvc_SQL_maria.xml | MariaDB용 Query XML |
| Query XML | resources/.../EgovProxySvc_SQL_mysql.xml | MySQL용 Query XML |
| Query XML | resources/.../EgovProxySvc_SQL_oracle.xml | Oracle용 Query XML |
| Query XML | resources/.../EgovProxySvc_SQL_postgres.xml | PostgreSQL용 Query XML |
| Query XML | resources/.../EgovProxySvc_SQL_tibero.xml | Tibero용 Query XML |
| Query XML | resources/.../EgovProxySvc_SQL_goldilocks.xml | Goldilocks용 Query XML |
| Validator Rule | resources/egovframework/validator/validator-rules.xml | Validator Rule XML |
| Validator XML | resources/.../validator/com/utl/sys/pxy/EgovProxySvc.xml | Validator XML |
| Message prop | resources/.../message/com/utl/sys/pxy/message_en.properties | 영문 Message |
| Message prop | resources/.../message/com/utl/sys/pxy/message_ko.properties | 한글 Message |
| Idgen XML | resources/.../spring/com/idgn/context-idgn-ProxySvc.xml | Idgen XML |

### 클래스 다이어그램

![클래스 다이어그램](images/proxy-service-class-diagram.png)

### 관련테이블

| 테이블명 | 테이블명(영문) | 비고 |
| --- | --- | --- |
| 프록시정보 | COMTNPROXYINFO | 네트워크 연결에 대한 프록시 설정을 관리한다. |
| 프록시로그정보 | COMTNPROXYLOGINFO | 프록시연결에 대한 로그를 관리한다. |

### ID Generation 관련 DDL 및 DML

ID Generation Service를 활용하기 위해서 Sequence 저장테이블인 COMTECOPSEQ에 `PROXYSVC_ID`, `PROXYLOG_ID` 항목을 추가해야 한다.

```sql
CREATE TABLE COMTECOPSEQ (
table_name varchar(16) NOT NULL,
next_id DECIMAL(30) NOT NULL,
PRIMARY KEY (table_name)
);

INSERT INTO COMTECOPSEQ VALUES ('PROXYSVC_ID','0');
INSERT INTO COMTECOPSEQ VALUES ('PROXYLOG_ID','0');
```

### ID Generation 환경설정 (context-idgn-ProxySvc.xml)

```xml
<!-- 프록시서비스 ID -->
<bean name="egovProxySvcIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
<property name="dataSource" ref="egov.dataSource" />
<property name="strategy" ref="ProxySvcIdStrategy" />
<property name="blockSize" value="10" />
<property name="table" value="COMTECOPSEQ" />
<property name="tableName" value="PROXYSVC_ID" />
</bean>
<bean name="ProxySvcIdStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="PXY_" />
<property name="cipers" value="16" />
<property name="fillChar" value="0" />
</bean>

<!-- 프록시Log ID -->
<bean name="egovProxyLogIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
<property name="dataSource" ref="egov.dataSource" />
<property name="strategy" ref="ProxyLogIdStrategy" />
<property name="blockSize" value="10" />
<property name="table" value="COMTECOPSEQ" />
<property name="tableName" value="PROXYLOG_ID" />
</bean>
<bean name="ProxyLogIdStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="PLG_" />
<property name="cipers" value="16" />
<property name="fillChar" value="0" />
</bean>
```

## 참고자료

### 관련화면 및 수행메뉴얼

#### 프록시설정 목록조회

| Action | URL | Controller method | QueryID |
| --- | --- | --- | --- |
| 조회 | /utl/sys/pxy/selectProxySvcList.do | selectProxySvcList | proxySvcDAO.selectProxySvcList |
| - | - | - | proxySvcDAO.selectProxySvcListTotCnt |

프록시설정 목록은 페이지당 10건씩 조회되며 페이징은 10페이지씩 이루어진다. 검색조건은 프록시명에 대해서 수행된다.

![프록시설정 목록조회](images/proxy-service-list.png)

- **조회**: 기 등록된 프록시설정 목록을 조회한다.
- **등록**: 프록시설정정보를 등록하기 위해서는 **등록 버튼**을 선택하여 **프록시설정 등록** 화면으로 이동한다.
- **상세조회**: 프록시설정의 상세정보를 조회하기 위해 **프록시ID**를 선택하여 **프록시설정 상세조회** 화면으로 이동한다.

#### 프록시설정 등록

| Action | URL | Controller method | QueryID |
| --- | --- | --- | --- |
| 저장 | /utl/sys/pxy/addProxySvc.do | insertProxySvc | proxySvcDAO.insertSynchrnServer |
| 목록 | /utl/sys/pxy/selectProxySvcList.do | selectProxySvcList | proxySvcDAO.selectProxySvcList |

프록시설정 속성정보를 입력한 뒤 등록한다.

![프록시설정 등록](images/proxy-service-insert.png)

- **저장**: 신규 프록시설정정보를 등록하기 위해서는 프록시설정정보 속성을 입력한 뒤 하단의 **저장 버튼**을 통해서 프록시설정정보를 등록한다. **프록시ID**는 등록시 자동으로 부여된다.
- **목록**: 프록시설정 목록조회 화면으로 이동한다.

#### 프록시설정 수정

| Action | URL | Controller method | QueryID |
| --- | --- | --- | --- |
| 저장 | /utl/sys/pxy/updtProxySvc.do | updateProxySvc | proxySvcDAO.updateProxySvc |
| 삭제 | /utl/sys/pxy/removeProxySvc.do | deleteProxySvc | proxySvcDAO.deleteProxySvc |

프록시설정 속성정보를 변경한 후 저장한다.
**서비스상태**정보는 **정상**일 경우 프록시서비스가 클라이언트 접속에 대한 모니터링 로그기록 동작을 수행하고, **중지**일 경우 그 동작을 멈춘다.

![프록시설정 수정](images/proxy-service-update.png)

- **저장**: 프록시설정정보를 수정하기 위해서는 프록시설정정보 속성을 변경한 뒤 하단의 **저장 버튼**을 통해서 프록시설정정보를 수정한다.
- **삭제**: 기 등록된 프록시설정정보를 삭제하기 위해서는 하단의 **삭제 버튼**을 통해서 프록시설정정보를 삭제한다.
- **목록**: 프록시설정정보 목록조회 화면으로 이동한다.

#### 프록시설정 상세조회

| Action | URL | Controller method | QueryID |
| --- | --- | --- | --- |
| 조회 | /utl/sys/pxy/getProxySvc.do | selectProxySvc | proxySvcDAO.selectProxySvc |

프록시설정 목록에서 선택한 프록시설정 상세정보를 보여준다.

![프록시설정 상세조회](images/proxy-service-detail.png)

- **수정**: 프록시설정정보를 수정하기 위해서는 하단의 **수정 버튼**을 선택한 뒤 프록시설정 수정 화면으로 이동한다.
- **삭제**: 기 등록된 프록시설정정보를 삭제하기 위해서는 하단의 **삭제 버튼**을 통해서 프록시설정정보를 삭제한다.
- **목록**: 프록시설정 목록조회 화면으로 이동한다.

#### 프록시로그 조회

| Action | URL | Controller method | QueryID |
| --- | --- | --- | --- |
| 조회 | /utl/sys/pxy/selectProxyLogList.do | selectProxyLogList | proxySvcDAO.selectProxyLogList |
| - | - | - | proxySvcDAO.selectProxyLogListTotCnt |

클라이언트는 프록시서비스의 ip, port 접속하면 해당 로그가 생성되고, 그 로그를 조회할 수 있다.

![프록시로그 조회](images/proxy-service-log-list.png)

- **조회**: 기 등록된 프록시로그 목록을 조회한다.
Loading
Loading