▶ 뭉충닷컴
 
mungchung.com login
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -PHP
   -JavaScript
   -HTML
   -Java/JSP
   -Database
   -Crystal Report
   -Visual Basic
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda

개발하다보면 로컬/개발/운영의 환경설정 값들이 다른 경우있다.

대표적인 예가 DB 접속이다. 로컬/개발에서는 개발DB를 이용하고 운영서버에서는 운영DB를 이용한다.

 

초기 프로젝트 구축시에 이 부분에 대한 구조를 제대로 결정하지 않으면

소스배포시 많은 부분 수작업이 들어가게 되고, 잠깐 방심하는사이에 운영서버인데 개발서버의 환경설정을 적용하는 경우가 생기기도 한다.

 

이를 방지하기 위해서 maven의 profile를 이용하면 된다.

앞에서 예제로 만들어봤던 SampleSessionLogin 프로젝트에 각기 다른 환경설정을 적용해보겠다.

(SampleSessionLogin 프로젝트는 단순히 세션을이용한 로그인을 공부하기 위해서 만든 예제인데 여기저기 자꾸 덧붙여서 쓰고 있다 -_-)

 

현재의 프로젝트 환경설정관련 파일들 모습이다.

심플하게 resources 디렉토리에 sql, log, db연결정보들 모두 다 들어있다.

이것들을 이제 분리해보자.

01.png

 

 

 

 

1. pom.xml 파일 수정

pom.xml 파일에 로컬(local), 개발(dev), 운영(release) 이 3개의 profile를 추가한다.

resources 부분도 추가한다.

 

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mungchung</groupId>
    <artifactId>sample</artifactId>
    <name>SampleSessionLogin</name>
    <packaging>war</packaging>
    <version>1.0.0-BUILD-SNAPSHOT</version>
    <properties>
        <java-version>1.6</java-version>
        <org.springframework-version>3.0.6.RELEASE</org.springframework-version>
        <org.aspectj-version>1.6.9</org.aspectj-version>
        <org.slf4j-version>1.5.10</org.slf4j-version>
    </properties>
    <dependencies>
       ... 생략
    </dependencies>
    <build>
         ... 생략
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource>
                <directory>src/main/resources-${env}</directory>
            </resource>
        </resources>
    </build>
    <profiles>
        <!-- Local server -->
        <profile>
            <id>local</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <env>local</env>
            </properties>
        </profile>
        <!-- Development server -->
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
        </profile>
        <!-- real server -->
        <profile>
            <id>release</id>
            <properties>
                <env>release</env>
            </properties>
        </profile>
    </profiles>
</project>

pom 파일 보면 profile의 값을 가지고 resource-{profile env} 의 디렉토리를 컴파일 해주는것을 알수 있다.

이제 로컬/개발/운영 환경설정 파일을 저장할 디렉토리를 생성한다.

 

2. 배포대상별 환경 디렉토리 생성

src/main 디렉토리로 이동 한 후에 아래 디렉토리를 생성한다.

src/main/resources-local

src/main/resources-dev

src/main/resources-release

  

그리고 DB 환경설정이 들어있는 src/main/resources/properties/jdbc.properties 정보를

각각 위에서 만든 디렉토리로 복사하고

src/main/resources/ 디렉토리에선 properties 디렉토리 삭제한다.

 

이렇게하는 이유는 위의 pom파일 잘 살펴보면 알겠지만

src/main/resources의 공통적인 환경파일들은 그대로 컴파일해서 이용하고

배포대상별로 다르게 가져가야할 환경 파일은 각각 디렉토리에 넣기 위함이다.

 

아래와 같은 디렉토리 구조로 만들면 된다.

 

02.png

 

 

각 properties 디렉토리의 jdbc 연결 부분은 아래와 같이 수정했다.

1) src/main/resources-local/properties

# MySql 
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=11111

 

2) src/main/resources-dev/properties

# MySql 
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://dev.mungchung.com:3306/test
jdbc.username=root
jdbc.password=1234

 

3) src/main/resources-release/properties

 # MySql 
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://real.mungchung.com:3306/test
jdbc.username=root
jdbc.password=2234

 

 

3. 프로젝트 소스의 빌드 path 수정

기존 src/main/resources/properties 디렉토리를 다른 디렉토리로 옮겼기 때문에

이 상태로 프로젝트이용하면 properties 파일들이 컴파일되지 않아서 오류난다.

그래서 빌드 path에 src/main/resources-local 을 넣어줘야한다.

 

1) 프로젝트 선택후 마우스 오른쪽 버튼 눌러서 Properties를 선택한다.

2) Java Build Path 항목으로 이동후에 Source 탭을 클릭하고선 Add Folder 누른다.

     03.png

3) src/main/resources-local 디렉토리를 선택한다.

     04.png

4) 순서 변경해준다. resources 아래에 resources-local에 위치하도록 한다.

      05.png

5) 설정 완료된 모습은 아래와 같다.

     06.png

 

이렇게 설정했으면 이제 로컬 개발시에 환경설정 부분은 끝났다.

헌데, 혹시 만약 이렇게 설정해놓고선 서버 시작했을때 오류가 발생하거나 잘 안된다면 아래 방법들을 사용해본다.

(아래 방법들은 순서대로하는것이 아니라 이것저것 섞어서 해보면 되는 경우가 있다 -_-;; )

    - 이클립스의 [Project] - [Clean..]

    - 톰캣서버에서 SampleSessionLogin 웹모듈 삭제/추가 다시 해봄

    - 톰캣서버에서 웹모듈을 Clean 또는 Publish 해봄

    - SampleSessionLogin/target 디렉토리 및의 모든 파일 다 지워본다.

    - 톰캣서버에 Publishing 된 임시 파일들 지워본다. 이 위치는 사용자마다 다른데 내 경우는 아래였다.

       \workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\SampleSessionLogin

      SampleSessionLogin 디렉토리 지워보면 된다.

    

4. 운영 또는 개발에 배포하기

운영/개발에 배포할때는 maven 명령어를 통해서 배포하면된다.

운영(release)에 배포할때 예를 들자면

pom.xml이 있는 디렉토리 아래에서 도스창(리눅스 서버면 터미널)으로 이동후에 아래 명령어 친다.

mvn install -P release

 

만일 war로 배포하고자 한다면 아래와 같이 하면 된다.

mvn package -P release

 

이렇게 한 후에 target/classes/properties 디렉토리에서 jdbc.properties 파일 열어보면

운영으로 설정한 jdbc.url이 나타남을 알 수 있다.

(혹시 잘 안된다면 mvn clean을 해준후 위 명령어 다시 해본다.)

 07.png

     

 

 

 

 

 


댓글 '1'

남준호

2016.01.12 13:11:10
*.220.78.174

큰 도움이 되었습니다! 감사합니다^^

문서 첨부 제한 : 0Byte/ 2.00MB
파일 크기 제한 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 Spring 3.0 게시판 뭉충닷컴 2011-08-07 4479
25 Spring Controller의 메서드에 사용될수 있는 파라미터 종류 뭉충닷컴 2012-11-01 7142
24 Spring에서 requestURL 가져올때 URL을 /WEB-INF/views/.. 로 가져오는 이유 뭉충닷컴 2012-10-31 7174
23 Spring의 어노테이션 정보 읽기 뭉충닷컴 2012-10-29 5635
22 Spring MVC 기본 흐름 file 뭉충닷컴 2012-10-23 6656
21 custom taglib 만들때 spring bean 사용하기 뭉충닷컴 2012-08-29 8525
20 STS에서 한글에 String literal is not properly closed by a double-quote 오류가 날 경우 file 뭉충닷컴 2012-07-03 4141
19 Spring @Transactional 어노테이션을 이용한 트랜잭션 예제 file 뭉충닷컴 2012-06-04 8123
18 Spring @Transactional 사용시 rollback이 안될 경우 뭉충닷컴 2012-06-03 12776
17 한글때문에 xml 파싱시 오류날 경우 (URI$MalformedURIException 오류) file 뭉충닷컴 2012-06-02 5209
16 maven에 ojdbc14 추가하기 뭉충닷컴 2012-06-01 5288
15 HandlerInterceptor 간단한 사용 예제 file 뭉충닷컴 2012-03-08 7605
14 Spring Template Project 이용시 maven 빌드를 제대로 못할경우 file [1] 뭉충닷컴 2012-03-07 6006
13 Spring에서 Quartz 이용하기 (스케줄이용방법) file [1] 뭉충닷컴 2012-03-06 12904
12 Spring AOP (Aspect Oriented Programming) 뭉충닷컴 2012-03-05 2682
11 Spring의 HandlerMapping 종류및 사용방법 file 뭉충닷컴 2012-03-04 5660
» maven을 이용해 배포(Deploy) 대상에 따라서 환경설정(resources) 다르게 적용하기 file [1] 뭉충닷컴 2012-03-03 34746
9 일반 Spring 프로젝트를 Web 프로젝트로 변경하기 file 뭉충닷컴 2012-03-03 4311
8 URL과 Controller 간단하게 연결해주는 HandlerMapping 처리 방법 뭉충닷컴 2012-03-03 4497
7 Spring에서 Session을 이용한 로그인 처리 예제 file [12] 뭉충닷컴 2012-03-02 60257
6 뷰 컨트롤러에서 ModelAndView 개체를 직접 생성하는 방법 뭉충닷컴 2012-03-01 6914
5 Root Application Context와 Servlet Context file 뭉충닷컴 2012-02-29 10067
4 STS의 Spring Template Project를 이용한 간단한 Spring MVC 웹 프로젝트 file [15] 뭉충닷컴 2012-02-29 13583
3 스테레오타입 어노테이션을 이용한 자동 빈 등록 file 뭉충닷컴 2012-02-28 2685
2 Spring에서 Bean 등록 여러가지 방법 뭉충닷컴 2012-02-28 4409
1 component:context-scan으로 설정되어있는 Bean들 확인하는 방법 file 뭉충닷컴 2012-02-24 3005