스트럿츠2 struts.xml 파일을 로직별로 서비스별로 나누기 


안녕하세요.
고코더 입니다.


이번 시간에는 struts.xml를 알아보고 이를 inlcude 해서 파일을 나누고
namespace 를 사용하는 방법을 알아보려고 합니다. 
이 파일은 스트럿츠에서 가장 중요한 역할을 합니다 (다 중요하다고 하네요)
좀 더 자세히 공부하고 싶다면 기존 강의를 참고하고 넘어오세요


 1. struts.xml 란?


시작부터 계속 수정하고 있는 이 파일을 간단하게 알아보려고 합니다.
- 스트럿츠2에 환경설정 파일은 struts.xml 입니다. 
- 웹 애플리케이션내의 처리 흐름을 설정 합니다. 
- 요청 이전 을 처리하는 process
- 요청 이후를 처리하는 interceptor 
- 통상 WEB-INF에 위치 하지만 배포등을 위해 src 폴더에 위치하는게 실무에서는 거의 정석입니다.

sturts.xml 태그  
* struts : struts.xml 의 시작 태그. package, include, bean, constant 가 포함되어 있습니다.
* package : 논리적인 그룹핑 단위 입니다. 상속이 가능하고 하위 패키지에 오버라이드 될 수 도 있습니다.
* name : 고유 키이며 맵핑 값을 나타냅니다. 
* namespace : 접근 되는 고유에 패스를 분리 할 수 있습니다. 서비스 별로 접근 경로를 분리할 수 있습니다. 


 2. struts.xml 생성 


파일 new에서 XML FILE을 선택하고 next를 클릭 합니다.

그리고 파일명과 패키지는 이렇게 생성합니다.
폴더 : Struts2Gocoder/src/map 
파일명 : struts2_test.xml

새로 개발된 파일명은 이렇게 코딩 합니다. namespace를 test로 하였습니다.
이는 이제 접근 경로 URI 앞에 test가 덧붙혀 집니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
<struts>
     <package name="struts2_test" namespace="test"  extends="struts-default">
           <action name="hello" class="hello.HelloAction">
                <result name="success" >/WEB-INF/hello.jsp</result>
           </action>
           <action name="view" class="test.TestAction" method="getView">
                <result name="success" >/WEB-INF/test/view.jsp</result>
           </action>      
     </package>
</struts>
namespace를 활용해 URI를 분리 할 수 있습니다.


 3. src/struts.xml 파일 수정


기존 스트럿츠 xml 파일은 아래처럼 변경 됩니다. 
전부 새로 만들어진 설정파일로 이동하고
include file 태그래 해당 XML을 가르킵니다. 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
<struts>
     <package name="Struts2Gocoder" extends="struts-default">          
     </package>
    
     <include file="map/struts2_test.xml" />
               
</struts>
참조될 xml은 해당 파일 위치에서 부터 찾습니다. src 폴더 아래이므로 xml로 시작합니다. 



결과 화면 


이전에 만든 소스를 그대로 나타납니다. 하지만 URI 중간에 /test가 생겼습니다.
네임스페이스 영향 떄문입니다. 서비스 별로 xml을 달리하여서 개발하는게 유지보수에 유리합니다.
게시판, 로그인, 가입 등 서비스가 다른 것들은 XML 파일을 전부 구분합니다.


마무리


하나의 XML로 관리하는 것 보다. 나누는 것이 유리 합니다.

댓글을 달아 주세요


require() 파일 참조하기 / include


안녕하세요.
고코더 입니다.


오늘은 외부 참조 파일을 만들어 공통으로 쓰는 방법을 실습해보려고 합니다. 
인스턴스를 참조 하도록 도와주는 require() 함수를 이용해
반복으로 선언하는 코드들을 낭비하지 않도록 만들 수 있습니다.

지난 시간에 간단한 mysql을 연결하여
기본예제를 만들어 보았습니다.
-> Node.js - Mysql 연결 기본예제




mysql 을 연결할때마다 소스상에 DB커넥션 정보를 페이지마다.  기록하면은 유지보수도 어려워지고 보안상에 문제도 있습니다. 이걸 특정 소스에 기록하고 불러와서 사용하도록 개발해보겠습니다.



 1. 데이터베이스 접속 정보 참조 파일 db_info.js


 1-1. 데이터베이스에 접속 정보를 관리할 소스를 생성하여 반복작업을 줄여보겠습니다.
host    :'localhost',
port : 3306,
user : 'root',
password : 'gocodermysql',
database:'nodedb'

 1-2. 프로젝트에 폴더를 하나 생성 합니다. New -> Directory 폴더명은 db 입니다.


 1-2. 그럼 이렇게 db라는 폴더가 프로젝트에 보이게 됩니다.


 1-3. 첫번째로 만들 소스는 db 접속 정보를 모아둘 페이지입니다.
소스명은 db_info.js 입니다. 


 1-4. 스스 안에 내용은 이렇게 코딩 합니다. 로컬, 실서버, 스테이징, 개발 서버에 정보를 따로 기록 합니다. 
저희는 학습이니 local만 사용하게 되겠죠.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
module.exports = (function () {
    return {
        local: {
            host: 'localhost',
            port: '3306',
            user: 'root',
            password: 'gocodermysql',
            database: 'nodedb'
        },
        real: {
            host: '',
            port: '',
            user: '',
            password: '',
            database: ''
        },
        staging: {
            host: '',
            port: '',
            user: '',
            password: '',
            database: ''
        },
        dev: {
            host: '',
            port: '',
            user: '',
            password: '',
            database: ''
        }
    }
})();

cs


 1-5. 소스설명
1번 라인 : 모듈로 사용할 수 있도록 만들어줍니다.
3번 라인 : 해당 변수안에 배열로 접속 정보를 저장합니다. 



 2. 데이터베이스 연결 참조파일 : db_conn.js


 2-1. 정보 정보를 모아두었다면 연결 관리를 할 소스를 생성합니다.
데이터베이스 연결을 참조파일 하나로 정리하는 역할을 할 소스를 만들어 보겠습니다.
db폴더에 db_conn.js를 생성 합니다. 


 2-2. 내용은 이렇게 코딩 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var mysql = require('mysql');
var config = require('./db_info').local;
 
module.exports = function () {
    return {
        init: function () {
            return mysql.createConnection({
                host: config.host,
                port: config.port,
                user: config.user,
                password: config.password,
                database: config.database
            })
        }
    }
};

cs

 2-3. 소스해석
1번 라인 : mysql 인스터스를 가져옵니다.
2번 라인 : db 접속 정보를 가져옵니다. 
7~12번라인 : mysql에 접속 합니다. 



 3. 사용 방법


 3-1. 이전에 만들었던 mysql 연결 기본예제에 소스를 비교해보겠습니다.
소스가 가벼워지고 가독성 좋아졌는지 확인해보세요.
왼쪽이 참조를 활용한 데이터베이스 연결 화면 
오른쪽이 이전에 만든 mysql.js 실습예제 화면 
왼쪽 3번라인 : 서버가 실행된 곳은 bin 폴더입니다. 상대참조로 폴더를 찾아야 합니다.



 3-2노드도 역시 다른 언어처럼
유지보수가 유리할 수 있도록 최대한 객체지향적으로 개발합니다.


마무리


require를 잘사용해야 완성도가 높아집니다.


아메리카노 한잔으로 배우는 Node.js Express 기본편



해당 내용은 제가 집필한 책에 일부를 발취한 내용입니다.
도움이 되셨으면 후원에 마음으로 제 책을 전국 온라인 서점에서 구매해보세요.





댓글을 달아 주세요

  • 감사 2019.07.31 23:03  댓글주소  수정/삭제  댓글쓰기

    노드 강의 중에
    학습자가 듣기 가장 쉽게 써주시네요
    재능있는 강의자십니다.
    업데이트도 빨라서
    하나 강의다보고 들어오면
    업데이트 되있고
    감동입니다. 수강료라도 드리고 싶어요.
    감사해요!