외부시스템 테스트
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
이범준 a979afe6fc fix : 오타 수정 1 year ago
.github/ISSUE_TEMPLATE Update issue templates 2 years ago
db refactor : 외부연계 테이블 변경 1 year ago
doc/conf doc : svn서버로 문서파일 이동(FIMSDoc) 2 years ago
src fix : 오타 수정 1 year ago
.gitignore feat: 이미지에디터 진행 - 미 변경시 skip 2 years ago
README.md refactor : 외부연계 테이블 변경 1 year ago
lombok.config fix: 생성자주입 annotation fix 2 years ago
pom.xml fix : egovIdgenService 설정 수정 1 year ago

README.md

VM options 추가

[이클립스]
설정을 안하면 Could not resolve placeholder 'spring.profiles.active' in value
"classpath:logback-${spring.profiles.active}.xml" 오류 발생

프로젝트 우클릭 > Run As > Run Configurations > Arguments 탭 
> VM arguments에 -Dspring.profiles.active=local -Dfile.encoding=UTF8 추가

[인텔리제이]
1) 톰캣 vm 설정
서버설정 > VM options에 -Dspring.profiles.active=local -Dfile.encoding=UTF8 추가
2) 전역 vm 설정
Actions열기 > Edit Custom VM Options... 선택 > -Dfile.encoding=UTF8 추가

Slf4j 사용시 log cannot be resolved 에러 처리

[이클립스 설정]

1. 이클립스의 Maven Dependencies 에서 lombok-1.18.8.jar 파일을 찾는다.

2. lombok-1.18.8.jar 파일을 우클릭 -> run as -> java application -> 프로세스 진행

3. lombok jar 파일이 실행되며 install 창이 표시된다.

4. specify location -> 이클립스 위치의 eclipse.ini 를 선택 -> install/update 진행

5. install 이 정상적으로 실행 된다.

6. 이클립스로 돌아와 프로젝트를 clean -> restart 한다.

7. log 관련 에러가 사라진다.
* 에러가 사라지지 않을 경우 이클립스를 재실행한다.

메이븐 설정

1) settings.xml 파일 경로 설정
[이클립스]
window > preferences > maven > User Settings
    Global Settings, User Settings : settings.xml 파일 경로 입력

[인텔리제이]
file > settings > Build, Excecution, Deployment > Build Tools > Maven
	User settings file : settings.xml 파일 경로 입력
	
2) settings.xml 파일 교체
    로컬의 settins.xml을 프로젝트폴더/doc/conf/settings.xml 파일로 교체
    
3) 메이븐 버전 변경(내부망 https ssl 연결 불가 시)
    메이븐 3.8.1 미만 버전으로 교체한다.
[이클립스]
window > preferences > maven > installations
    add 클릭 > 메이븐 설치된 로컬 경로 지정

[인텔리제이]
file > settings > Build, Excecution, Deployment > Build Tools > Maven
    maven home path 항목 : 메이븐 설치된 로컬 경로 지정

commit message template

 --- COMMIT MESSAGE ---
 타입: 제목 - 50 자 이내로 요약

 본문 - 한 줄에 최대 72 글자까지만 입력 / 여러줄 입력시 '-' 로 구분

 꼬릿말은 아래에 작성: ex) #123 / closed: #123
 closed, fixed, resolved 예약어와 이슈번호를 함께 사용시 해당 이슈 자동 종료

 --- COMMIT MESSAGE END ---

 <타입> 리스트
    feat : 기능(새로운 기능)
    fix : 버그 수정
    chore : 기타 변경 사항(빌드 혹은 패키지 매지저 등)
    style : 비즈니스 로직에 영향을 주지 않는 변경 사항(코드 형식 등)
    refactor : 리팩토링
    test : 테스트(테스트 코드: 비즈니스 로직 변경 없음)
    docs : 문서
    build : 빌드 관련 파일 수정
    ci : CI 관련 설정
 -----------------------
    제목 첫 글자를 대문자로
    제목은 명령문으로
    제목 끝에 마침표(.) 금지
    제목과 본문을 한 줄 띄워 분리하기
    본문은 "어떻게" 보다 "무엇을", "왜"를 설명한다.
    본문에 여러줄의 메시지를 작성할 땐 "-"로 구분
 -----------------------
    작성 예
 --------------------------------------
    feat: 관심지역 알림 ON/OFF 기능 추가

    - 시군구의 알림을 각각 ON/OFF 할 수 있도록 기능을 추가함
    - opnion0055: 구분 코드

    이슈트래커 #123  - fix 타입 메세지등은 closed #123 등
 ---------------------------------------
 
 
 1) 위 내용을 'gitmessage.txt'로 저장
 2) git config --global commit.template {path}/gitmessage.txt
 3) git config --list 명령으로 commit.template={path}/gitmessage.txt 확인
 

github

http://xit.xit-git.com:3000/xit-java/fims.git

테스트 서버 기동 방법

1) git레포지터리 main 브랜치 반영시 젠킨스 자동 실행
2) 젠킨스 직접 실행(1단계 실패시)
    젠킨스 관리자 페이지 로그인 -> DEV-FIMS 빌드
3) 톰캣 직접 기동(2단계 실패시)
    원격접속
    -> 톰캣 디렉토리(/application/FIMS) 이동 
    -> ./stop.sh, ./deploy.sh, ./start.sh 순서로 실행

IDE plugin


1) 표기법 변경
[인텔리제이]
  CamelCase 플러그인 : kebab-case, SNAKE_CASE, PascalCase, camelCase, snake_case 또는 space case 간에 쉽게 전환 
  (Shift + Alt + U)
2) Git 관련
[인텔리제이]
  Git Commit Template : 템플릿을 이용해 commit 내역을 관리
3) mybatis관련
[인텔리제이]
  MyBatisX : mapper에서 xml을 편하게 이동
4) 메이븐 의존성 트리
[이클립스]
  별도 플러그인 없이 pom.xml 오픈 > dependency hierarchy 탭에서 확인
[인텔리제이]
  maven helper : pom.xml 오픈 > dependency Analyzer 탭에서 확인

브라우저 plugin

1) 폰트 확인
  WhatFont : 웹페이지 내 폰트 종류 확인 가능
2) 색상 확인
  ColorZilla : 웹페이지 내 색상코드 확인 가능

유틸 프로그램

1) 색상 확인
  picpick : 화면캡처프로그램. 스포이드 툴로 색상코드 확인 가능
2) git 클라이언트 프로그램
  소스트리 : 수정한 소스 중에서 줄 단위 커밋 가능

팝업 공통처리 : 등록 / 변경 / 삭제 팝업


1) 변수 정의
<c:set var="isUpdate" value="${!empty 조건값}"/> 
<c:set var="bizName" value="권한"/>
    
2) title include
<div class="popup">
    <div class="container-window1">
        <!-- popup title -->
        <%@include file="/WEB-INF/jsp/include/fims/title-biz-popup.jsp"%>
        
        <div class="container-window-btn1">
            <span colspan="4">
                <a href="#" class="btn btn-blue" id="btnRegist">등록</a>
                <a href="#" class="btn btn-blue" id="btnModify">변경</a>
                <a href="#" class="btn btn-red" id="btnRemove">삭제</a>
                <a href="#" class="btn btn-lightgray" onclick="window.close()">닫기</a>
            </span>
        </div>
        
        <!--팝업 버튼 -->
        <%@include file="/WEB-INF/jsp/include/fims/btns-biz-popup.jsp"%>

columns style

    {
        header: '롤 명',
        name: 'roleNm',
        width: 150,
        sortingType: 'desc',
        sortable: true,
        filter: 'select',
        renderer: {
            styles: {
                //fontWeight: 'bold',
                background: (props) => props.value === 'Y' ? 'cyan' : 'red'
            },
            attributes: {
                'data-type': 'default',
                title: (props) => `title: ${props.formattedValue}`
            },
            classNames: ['blue']
        }
    }

참조 - 필수

git 사용법 강좌
css flex / grid 강좌1
css flex / grid 강좌2
css flex / grid 강좌3

JSP에서 el태그(${})에 JSTL <c:out>을 사용해야 하는 이유

jsp에서 다양한 방식으로 서버사이드 데이터를 출력할 수 있다.
그 중 가장 많이 쓰는건 el태그인데 그 이유는 el태그 사용법이 ${}로 매우 간단하기때문이다.

el태그만 써도 화면에 값이 잘 출력되는데 왜 굳이 <c:out>를 사용할까?

결론: XSS 방어하기 위해!

<c:out>를 사용하면 escapeXml속성을 활용할 수 있다.
escapeXml를 true로 설정함으로써 가장 간단하게 XSS(링크)를 방어할 수 있다.
// 1.escapeXml = true 인 경우(디폴트)
<c:out value="<script type='text/javascript'>alert('테스트');</script>"/>

// 2.escapeXml = false 인 경우 == el태그와 동일
<c:out value="<script type='text/javascript'>alert('테스트');</script>" escapeXml="false"/>
  1. escapeXml = true의 경우, text 그대로 출력된다.
  2. escapeXml = false 인 경우나 el태그인 경우, alert창이 실행된다.

따라서 XSS 방어하기 위해서는 <c:out>을 사용하는 게 좋다.

윈도우 팝업 호출시 blockUI 적용

// 팝업호출하는 화면단 : ~Form.jsp
// tiles biz jsp단에서 var popup 선언되어 있음
$.blockUI({message: '' ,css: {width: '100%', height: '100%'}
    //모달창 외부 클릭시 닫기
    ,onOverlayClick: () => {
        $.unblockUI();
        popup?.self?.close();
    }
});
popup = CmmPopup.open(url, params, popOption, popTitle);

// 팝업창
// event에 아래 코드 추가
// tiles biz jsp단에서 var unblockUI = () => $.unblockUI() 선언되어 있음
$(window).on("unload", function (e) {
    window.opener?.unblockUI();
    window.opener?.callbackSearch();
    return null;
});

$("#btnClose").on('click', () => {
    window.close()
});

JSP include

1. 정적인 방식(static=directive)
- 동적인 방식보다 빠르다.
- 파라미터를 주고 받을 수 없다.
- 변수 공유
- 해당 jsp페이지가 컴파일될 때, 참조하는 파일(include)도 함께 컴파일 된다.
=> 두 파일의 코드가 합쳐진 상태로 컴파일 된다.

<%@ include file="파일경로/파일명"%>

2. 동적인 방식(dynamic)
- 정적인 방식보다 느리다.
- 파라미터(데이터)를 주고 받을 수 있다.
- 페이지가 request 될 때 , 포함할 jsp 페이지를 다시 request를 하는 과정을 가진다.

  2-1. 액션태그 사용
  - <jsp:param> 태그로 데이터 전송 가능

      <jsp:include page="파일경로/파일명">
          <jsp:param value="myValue" name="myKey"/>
      </jsp:include>    
    
      전달받은 쪽 - 전달받은 값 : <%= request.getParameter("myKey") %>
      <jsp:include> 액션 태그로 포함하는 페이지에서만 유효.
    
    
  2-2. 코어태그(JSTL) 사용
  - <c:param> 태그로 데이터 전송 가능

  <c:import url="파일경로/파일명" charEncoding="utf-8"/>
  <c:import url="파일경로/파일명"
     var="데이터를 저장할 변수명"
     scope="변수의 공유 범위"
     varReader="리소스의 내용을 Reader 객체로 읽어올 때 사용"
     charEncoding="읽어온 데이터의 캐릭터셋 지정">
    <c:param name='' value='${}'/>	 
  </c:import>

Mybatis select key 여러개


<selectKey keyColumn="aaaId,bbbId" keyProperty="aaaId,bbbId" 
           resultType="kr.xit.fims.biz.ec.CctvCrackdownDTO$ExtrlRegltCntc" order="BEFORE">
    SELECT LPAD(IFNULL(MAX(CAST(aaa_id AS UNSIGNED))+1, 1), 12, '0') AS aaaId
         , LPAD(IFNULL(MAX(CAST(bbb_id AS UNSIGNED))+1, 1), 20, '0') AS bbbId
    FROM tb_aaa
</selectKey>
        <!-- 
        주의사항 
        selectKey 여러개 가져올 때는 반드시, 
        콤마 한 다음 반드시 붙여줘야 한다(space가 있으면 오류 발생)
        
        keyColumn="fileLinkId,crdnId" keyProperty="fileLinkId,crdnId"
        -->  

상속 구조의 lombok builder 사용 -> @SuperBuilder 사용해야 한다


    @Data
    @NoArgsConstructor
    @AllArgsConstructor  // 반드시 필요
    @SuperBuilder
    public static class Parents {
        private String crdnId;
        private String vhrno;
    }

    @Data
    @EqualsAndHashCode(callSuper = true)
    @NoArgsConstructor
    @AllArgsConstructor
    @SuperBuilder
    public static class Child extends Parents {
        private String crdnId;
        private String vhrno;
    }

외부연계 참조 : 서버로그 경로 - /data/fims/logs

Rest API-dev: http://211.119.124.9:18090/swagger-ui/index.html
Rest API-prod: http://211.119.124.9:8090/swagger-ui/index.html
배치: http://211.119.124.9:28090/swagger-ui/index.html

documentation

부트스트랩 documentation : https://getbootstrap.kr/docs/
sneat documentation : https://demos.themeselection.com/sneat-bootstrap-html-admin-template/documentation/