환경 : Windows7 + JDK1.8 + SVN + apache-tomcat-8.0.36(maven-plugin-2.1) + apache-maven-3.3.9 + jenkins-2.23


Tomcat 다운로드 : http://apache.org

Tomcat Maven plugin : http://tomcat.apache.org/maven-plugin-2.1/

Maven 다운로드  : https://maven.apache.org/

Jenkins 다운로드 : http://mirrors.jenkins-ci.org


Plugin 설치 : 

This plugin provides an advanced integration for Maven 2/3 projects.

This plugin add features related to Maven jobs info. Adds columns configurable in views (version, dependencies, modules, ...) and extract information from Maven jobs (update name and description from POM, ...) 


apache-maven-3.3.9 :

수동 build시(클래스패스 설정 필요) 

-> C:\apache-maven-3.3.9\bin\mvn.cmd -X -f pom_bart.xml tomcat:redeploy



-------------------------------------- 프로젝트 추가 환경설정


Step1. Tomcat 설정 : 


1) tomcat-users.xml


<role rolename="manager-script"/>

<user username="admin" password="admin" roles="manager-script"/>



2) pom.xml -  pom_bart.xml



             

tomcat에 배포하기 위해서는 tomcat-maven 플러그인을 설정해주어야 한다. 


url은 tomcat manager의 URL을 적어주면 되는데, tomcat에서는 URL뒤에 /text를 꼭 넣어주어야 한다. 

path는 웹 애플리케이션의 컨텍스트 패스가 되며, username과 password는 tomcat manager와 동일하게 작성해주면 된다.


         <build>

<finalName>boot</finalName>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-war-plugin</artifactId>

<version>2.1.1</version>

<configuration>

<warSourceDirectory>src/main/webapp</warSourceDirectory>

<webXml>src/main/webapp/WEB-INF/web.xml</webXml>

</configuration>

</plugin>


<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>tomcat-maven-plugin</artifactId>

<version>1.1</version>

<configuration>

<url>http://127.0.0.1/manager/text</url>

<path>/</path>

<charset>UTF-8</charset>

<mode>war</mode>

<username>admin</username>

<password>admin</password>

</configuration>

</plugin>

</plugins>

</build>


Step2. Jenkins 설정










참조 - http://livebitblock.blogspot.kr

[SSL]인증서 생성

Programing 2016.09.02 10:34 Posted by 애플자라

1.키 스토어 생성


"%JAVA_HOME%\bin\keytool" -genkey -alias 알리아스명 -keypass 패스워드 -storepass 패스워드 -keyalg RSA -sigalg SHA1withRSA -keystore %USERPROFILE%\도메인명.jks -dname "CN=도메인명, OU=OrgUnit, O=알리아스명, C=KR"


2.CSR(Certificate Signing Reuest) 파일 생성


"%JAVA_HOME%\bin\keytool" -certreq -keyalg RSA -alias 알리아스명 -sigalg SHA1withRSA -file %USERPROFILE%\도메인명.certreq.csr -keystore %USERPROFILE%\도메인명.jks



3.인증서 발급받기

https://buy.wosign.com/free 에 방문하여 인증서를 발급 받을 수 있다.


이메일계정 / 패스워드


4.발급받은 인증서 적용


4.1. 루트 인증서 추가하기


"%JAVA_HOME%\bin\keytool" -import -alias root -trustcacerts -file %USERPROFILE%\root.crt -keystore %USERPROFILE%\도메인명.jks


이 인증서를 신뢰합니까? Y

4.2. 1_cross_Intermediate 인증서 추가하기


"%JAVA_HOME%\bin\keytool" -import -alias corss -trustcacerts -file %USERPROFILE%\1_cross_Intermediate.crt -keystore %USERPROFILE%\도메인명.jks


4.3. 2_issuer_Intermediate.crt 추가 


"%JAVA_HOME%\bin\keytool" -import -alias issure -trustcacerts -file %USERPROFILE%\2_issuer_Intermediate.crt -keystore %USERPROFILE%\도메인명.jks


4.4. 싸이트인증서 추가하기


"%JAVA_HOME%\bin\keytool" -import -alias 알리아스명 -trustcacerts -file %USERPROFILE%\3_user_도메인명.crt -keystore %USERPROFILE%\도메인명.jks


인증서회신이 추가되었습니다.



4.5. 인증서 확인


"%JAVA_HOME%\bin\keytool" -list -v -keystore %USERPROFILE%\도메인명.jks



5. 톰캣 설정


5.1. conf/server.xml 수정


<Connector port="80" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="443" />


<Connector 

sslProtocol="TLS" clientAuth="false" 

keyAlias="알리아스명"

keystorePass="패스워드"

keystoreFile="conf/도메인명.jks" 

secure="true" scheme="https" maxThreads="150" 

SSLEnabled="true"  port="443"/>


5.2. web.xml 수정

<security-constraint>


<web-resource-collection>

<web-resource-name>Secured</web-resource-name>

<url-pattern>/*</url-pattern>

</web-resource-collection>



<user-data-constraint>

<transport-guarantee>CONFIDENTIAL</transport-guarantee>

</user-data-constraint>


</security-constraint>


출처 - kildongp


1. Tortoise SVN 설치
다운로드 URL : http://tortoisesvn.net/downloads.html

 

2. AnkhSVN 설치

 

가칭 MSVN 이라고 하는데 가장 많이 쓰이는 프로그램은 AnkhSVN 이다

사이트 주소는 다음과 같다. http://ankhsvn.open.collab.net/

 

3. Visual Studio를 실행

 

 

도구 > 옵션 > 소스제어 > 플러그 인 선택
현재 소스 제어 플러그 인 을
AnkhSVN - Subversion Sopport for Visual Studio로 선택 > 확인

 

================================================================

 

Software Version Control을 위해 연구실에서 사용중인 Svn을 Visual Studio와 함께 사용하기 위하여 다음과 같이 플러그인을 설치/설정하여 사용해야 한다.

1) 아래의 링크에 들어가 Plug-in 최신버젼을 받는다.
https://www.visualsvn.com/visualsvn/download/

2) 모든 기능을 사용하기 위해서는 tortoisesvn도 설치되어 있어야 한다 같이 설치한다.
(Visual Studio가 켜있다면 끈 상태로 설치를 진행해야 큰 문제없이 진행할 수 있다.)
http://www.visualsvn.com/visualsvn/download/tortoisesvn/ 

3) Subversion URL 설정하기
  (1) VisualSVN>Get Solution from Subversion 을 클릭한다
  (2) URL과 이름 다운받고자하는 위치를 지정한다.
  (3) OK를 누르면 자동으로 Check Out이 진행된다.

4) SVN 사용하기
  (1) Check Out하여 사용하다보면 노란색으로 수정되어 Commit될 부분이 표시된다
  (2) Commit을 원하는 폴더or파일을 우클릭 Commit하게 되면 Commit할 수있다
  (3) Update및 Log보기도 위와 같은 방법으로 폴더 파일별로 우클릭후 사용하면된다.
  % 전체 Solution별로 Commit및 Update가 가능하므로 그대로 사용하면 전체 프로젝트를 관리할 수 있다.

 

출처 : http://mainia.tistory.com/678

출처 : http://egloos.zum.com/likekururu/v/571182

[HTML5] 적용시 개선되는 기능

Programing 2016.06.08 10:32 Posted by 애플자라

1.     멀티미디어 기능

è  기존의 웹 페이지는 웹 페이지 소스로 동영상이나 음악을 재생할 수 없었다(플래시 플러그인 사용)

è  HTML5는 플러그인 도움 없이 스스로 음악과 동영상을 재생할 수 있다(멀티미디어를 지원하지 않는 IE8이전 브라우저 제외)

 

2.     그래픽 기능

è  HTML 태그를 사용해 2차원 벡터 그래픽 구현

è  자바스크립트 캔버스를 사용해 2차원 래스터 그래픽 구현

è  CSS3을 사용해 3차원 그래픽 구현

 

3.     시맨틱 웹

è  시맨틱 태그를 사용해 검색엔진 같은 프로그램이 정보의 의미를 분석하고, 자료를 검색 및 처리하여 제공하는 지능형 웹

 

4.     CSS3 스타일시트

è  CSS3 스타일 시트 지원, 3차원 변환, 애니메이션 효과 적용가능

 

5.     웹의 성능 극대화 및 통합

è  웹 브라우저를 사용하여 간단한 워드작업이나 게임을 즐길 수 있음

è  웹 페이지자체가 하나의 응용 프로그램

è  현재 모든 스마트폰에서 HTML5 표준을 완전하게 사용할 수 있는 것은 아님

è  스마트폰의 기본 프로그래밍 언어 + HTML5를 함께 사용해 응용 프로그램을 만드는 방법 : 하이브리드 응용 프로그램

MyBatis란?

Programing 2016.05.09 10:01 Posted by 애플자라

MyBatis란?
MyBatis 는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. MyBatis 는 JDBC 코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거한다. MyBatis 는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정하고 매핑하기 위해 XML 과 애노테이션을 사용할 수 있다.

[출처] myBatis 개념|작성자 yunyoejin


[Util]ANSI <-> UTF-8 변환(Encode, Decode)

Programing 2015.09.17 10:43 Posted by 애플자라

 

utf-8.exe

 

[개발자]초심 개념알기!!

Programing 2015.09.08 11:42 Posted by 애플자라

Windows/Linux 둘다적용

 

0. JDK설치(1.5이상)
1. Oracle설치(운영DB기준, 10g이상) - 테이블스페이스,테이블셋팅,계정부여,권한부여
2. Apache설치(2.0이상, C:/app/Apache2.x) - 웹서버개념,rotalog설정(CustomLog,ErrorLog 일자별 적재),포트확인, DocumentRoot
3. Resin/Tomcat설치(C:/app/Resin4.x, C:/app/Tomcat7) - WAS개념,포트확인,java heap 메모리셋팅
4. 아파치,Resin/Tomcat 연동(Port 80) - 포트확인,연동포트(Listen포트)


위 내용이 다 끝나면
1. Apache vhost를 이용해서 100포트로 (ex, D:/Project/homepage_dev)로 두개 올리기
2. subversion Windows설치 후 소스관리(Commit,Update,synchronize), 권한설정

 

위 내용이 다 끝나면 - editplus쓰지 않고 shell로만 사용
1. Linux(CentOS7.0) 설치 - Centos 버전 및 커널 버전 확인하기
2. yum설치 or rpm설치 알기
3. Apache, Tomcat, Resin, Mysql(5.0이상),Oracle(11g설치),subversion,FTP(서버),SSH,오픈SSL 설치 - 계정부여,그룹부여,권한부여,telnet접속막기
4. 파일질라,알FTP, FTP툴 안쓰고 ftp get put 사용해보기(아스키,바이너리 개념)
5. wget 사용해보기

 

version=1,0,0,4

웹페이지에서 클라이언트 컴퓨터의 몇 가지 정보를 구하는 ActiveX 컨트롤입니다.

기능:맥어드레스, 컴퓨터 이름, 워크그룹, 아이피 주소, 드라이브 리스트, CPUVendor, CPUID, HDDID, 윈도우 버전, WSH(Windows Scripting Host) 버전, 파일 버전 등…

Method
—————————————————————-
function GetDriveLetter(): string;
function GetDiskVolume(const cDisk: string): string;
function FileExists(const FileName: string): WordBool;
function DirectoryExists(const path: string): WordBool;
function GetWindowsDirectory(): string;
function GetSystemDirectory(): string;
function GetBootDirectory(): string;
function GetTempDirectory(): string;
function GetProgramFilesDirectory(): string;
function GetFileSize(const FileName: string): Integer;
function GetWSHVersion(): string;
function GetFileVersion(const FileName: string): string;
procedure About();
function GetWindowsVersion(): string;

 

Property
—————————————————————-
property CPUID: string;
property CPUVendor: string;
property CPUType: string;
property CPUFamily: string;
property CPUModel: string;
property CPUStepping: string;
property MacAddress: string;
property ComputerName: string;
property WorkGroup: string;
property ActiveMacAddress: string;
property IP: string;
property HDDID: string;

Event
—————————————————————-
procedure OnLoaded;

데모 페이지:
http://isulnara.com/myAPP/iSysInfoX/demo.html

다운로드:
http://isulnara.com/myAPP/iSysInfoX/iSysInfo.CAB

주의사항:
-MacAddress 및 CPUID는 사용자에 의해 수정될 수 있으며, 고유하지 않을 수 있습니다.
–HDDID는 부트 볼륨의 고유한 ID로 디스크 포맷시 변경됩니다.
-단독으로 사용하는 것보다는 다른 정보와 함께 사용하시기 바랍니다.
-비스타는 지원하지 않습니다.

사용 권한:
OBJECT 코드에서 아래 코드를 삭제하지 않고, 이 컨트롤 자체를 판매하지 않는 이상 상용 프로그램/웹사이트에서 사용을 허용합니다.
< param name=”copyright” value=”http://isulnara.com”>
또한 이 컨트롤의 사용으로 발생하는 모든 문제는 사용자에게 있습니다.

버전 정보
[1,0,0,4]
+HDDID 추가

[1,0,0,3]
+classid 변경 -> 8DAA3668-D06F-48BC-9DC2-3626B5B57DEF

 

출처 - http://isulnara.com/wp/archives/101

고맙습니다~ 덕분에 잘해결 됬습니다.

[WEB]div 중앙에 나열하기

Programing 2014.12.01 14:02 Posted by 애플자라

<style>
#sitebar {text-align:center;}
#sitebar span {display:inline;}
</style>
<div id="sitebar">
  <span>ABOUT</span>
  <span>BLOG</span>
  <span>GUESTBOOK</span>
</div>

이렇게 하셔도 됩니다. ^^; span 대신에 li 넣으셔도 되고 이런 식으로 레이어를 가운데에 가로로 정렬할 수가 있습니다.

<style>
#sitebar {text-align:center;}
#sitebar li {display:inline;margin:0;padding:0;}
</style>
<div id="sitebar">
<ul>
<li>ABOUT</li>
<li>BLOG</li>
<li>GUESTBOOK</li>
</ul>
</div>

 

출처 - http://defle.nayana.com/board/view.php?bbs_code=clip&bd_num=846

 

TAG Center, div, html, li, 중앙
<form method=post action="?">
<input type=button value="행추가" onclick="add_row();">
<input type=button value="열추가" onclick="add_col();">
<input type=button value="행삭제" onclick="del_row();">
<input type=button value="열삭제" onclick="del_col();">
<table id='stock_table' border=1>
    <thead id='stock_thead'>
        <tr>
            <td>
                <input type=text name=opty size=4>
                <input type=text name=optx size=4>
            </td>
            <td>
                <input type=text name='optx_subj[]' size=10>
            </td>
        </tr>
    </thead>
    <tbody id='stock_tbody'>
        <tr>
            <td><input type=text name='opty_subj[]' size=10></td>
            <td><input type=text name='opt[0][]' size=10></td>
        </tr>
    </tbody>
</table>
 
<input type=submit>
</form>
 
<span id=msg></span>
 
<script>
var stock_table = document.getElementById('stock_table');
var stock_thead = document.getElementById('stock_thead');
var stock_tbody = document.getElementById('stock_tbody');
var stock_tr = null;
var stock_td = null;
var stock_x = 0;
var stock_y = 0;
var msg = document.getElementById('msg');
 
function add_row()
{
    // 행 제목 추가
    stock_tr = document.createElement('tr');
    stock_tbody.appendChild(stock_tr);
    stock_td = document.createElement('td');
    stock_tr.appendChild(stock_td);
    add_input('opty_subj[]');
    stock_y++;
 
    // 열의 갯수에 따라 추가된 행의 열 추가
    var stock_thead_td = stock_thead.getElementsByTagName('td');
    for (i=0; i<stock_thead_td.length-1; i++)
    {
        stock_td = document.createElement('td');
        stock_tr.appendChild(stock_td);
        add_input('opt['+stock_y+'][]');
    }
}
 
function add_col()
{
    // 열 제목 추가
    var stock_thead_tr = stock_thead.getElementsByTagName('tr');
    stock_td = document.createElement('td');
    stock_thead_tr[0].appendChild(stock_td);
    add_input('optx_subj[]');
 
    var stock_tbody_tr = stock_tbody.getElementsByTagName('tr');
    for (i=0; i<stock_tbody_tr.length; i++) {
        stock_td = document.createElement('td');
        stock_tbody_tr[i].appendChild(stock_td);
        add_input('opt['+i+'][]');
    }
}
 
function add_input(name)
{
    var inp = document.createElement('input');
    inp.setAttribute('type', 'text');
    inp.setAttribute('size', '10');
    inp.setAttribute('name', name);
    stock_td.appendChild(inp);
}
 
function del_row()
{
    var stock_tbody_tr = stock_tbody.getElementsByTagName('tr');
    if (stock_tbody_tr.length > 1) {
        stock_tbody.deleteRow(stock_tbody_tr.length-1);
        stock_y--;
    }
}
 
function del_col()
{
    var stock_thead_tr = stock_thead.getElementsByTagName('tr');
    var stock_thead_td = stock_thead.getElementsByTagName('td');
    if (stock_thead_td.length > 2) {
        stock_thead_tr[0].deleteCell(stock_thead_td.length-1);
 
        var stock_tbody_tr = stock_tbody.getElementsByTagName('tr');
        for (i=0; i<stock_tbody_tr.length; i++) {
            var tr_td = stock_tbody_tr[i].getElementsByTagName('td');
            stock_tbody_tr[i].deleteCell(tr_td.length-1);
        }
    }
}
</script>

 

 

Noname1.html

 

출처 - http://defle.nayana.com/board/view.php?bbs_code=clip&bd_num=783