'setting'에 해당되는 글 2건

  1. [maven] Profile로 설정파일 나누기 (1)
  2. spring boot + spring-data-jpa 설정

[maven] Profile로 설정파일 나누기

개요

로컬에서 상용되는 데이터베이스에 붙는 일은 거의 없을 것이다. 로컬에서는 테스트용 데이터베이스에 연결되고, 실서버에서는 리얼 데이터베이스에 연결하면서 소스는 수정되지 않길 원한다. 그래서 설정파일로 빼고, 예전에는 수동으로 분기해주는 코드를 만들었는데, 이제는 메이븐에서 profile을 사용하면 간단하게 해결된다.
profile은 로컬과 리얼의 설정파일 뿐만 아니라 dependency도 분기할 수 있게 해준다.
예제에서는 설정파일만 나눠보자.

예제

먼저 메이븐 프로젝트를 생성하고, src/main 밑에 resource-local과 resource-real 폴더를 생성하자.

다음 pom.xml 을 아래와 같이 수정해준다.



pom.xml

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.tistory.jekalmin</groupId>
  <artifactId>profile-test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <profiles>
    <profile>
        <id>local</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <environment>local</environment>
        </properties>
    </profile>
    <profile>
        <id>real</id>
        <properties>
            <environment>real</environment>
        </properties>
    </profile>

  </profiles>

  <build>
    <resources>
        <resource>
            <directory>src/main/resource-${environment}</directory>
        </resource>
    </resources>
  </build>
</project>

수정한 후에,

프로젝트 우클릭 -> Maven -> Update Project를 실행하자.
실행하고 나면 resource-local이 소스폴더로 추가될 것이다.

이제 resource-local과 resource-real에 같은 파일명을 사용하더라도, 파일 안에서 다른 설정이 가능하다.
예를 들어 war로 리얼 설정을 담아서 만들고 싶다면,

mvn -Preal clean package

이렇게 사용하면 된다.

ps : 이유는 잘 모르겠으나 clean을 안하면 자꾸 local 설정 파일이 포함됐다. 나중에 원인을 알게되면 수정해야겠다.

spring boot + spring-data-jpa 설정

개요

이전 글인 (http://jekalmin.tistory.com/entry/springdatajpa-%EA%B8%B0%EB%B3%B8-%EC%98%88%EC%A0%9C) 에서 봤듯이 spring-data-jpa 를 설정하려면 xml에 상당히 많은 설정이 필요한 것을 볼 수 있다. 이런 많은 설정들이 spring boot를 사용하면서 기본으로 많이 제공해준다. 예제를 보면서 얼마나 간편해졌는지 확인해보자.

예제

먼저 eclipse를 쓰고 있다면 STS(Spring Tool Suite) 플러그인을 설치하자. 설치하고 나면 New > Project > Spring Starter Project 로 프로젝트를 생성하자.

생성할 때 스타일을 사용할 것인지 선택할 수 있다. 예제에서는 JPA와 Web만 선택하겠다.

먼저 hsqldb 라이브러리를 추가하자.

<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
</dependency>

자, 이제 설정 준비가 끝났다. 클래스를 작성해보자.


Member.java

package com.tistory.jekalmin.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Member {

    @Id
    @GeneratedValue
    private int memberSeq;
    private String name;
    private int age;

    /**
     * 다른 생성자를 만들었다면 기본 생성자를 따로 만들어 주는 것을 잊지말자.
     */
    public Member(){}

    public Member(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public int getMemberSeq() {
        return memberSeq;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Member [memberSeq=" + memberSeq + ", name=" + name + ", age="
                + age + "]";
    }

}


MemberRepository.java

package com.tistory.jekalmin.repository;

import org.springframework.data.repository.CrudRepository;

import com.tistory.jekalmin.domain.Member;

public interface MemberRepository extends CrudRepository<Member, Integer>{

}


MemberController.java

package com.tistory.jekalmin.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.tistory.jekalmin.domain.Member;
import com.tistory.jekalmin.repository.MemberRepository;

@Controller
public class MemberController {

    @Resource
    private MemberRepository repository;

    @RequestMapping(value="/member/join")
    public void join(Member member){
        System.out.println( repository.save(member) );
    }

}


save 하고나서 저장된 객체를 리턴해주기 때문에 바로 print 찍어보았다.

http://localhost:8080/member/join?name=min&age=26 요청을 해본 결과는 다음과 같았다.

Member [memberSeq=1, name=min, age=26]

결론

이전의 어마어마한 세팅들이 다 어디갔나 싶을 정도로 boot에서는 기본 설정이 많이 내장되어 있는 것 같다. boot를 이용해서 만들면 설정은 hsqldb 라이브러리 추가하는 것이 전부였고, entity와 repository를 만들어서 바로 사용하니 된다.

설정을 변경할 필요가 있다면 지원하는 어노테이션을 검색해 봐야 겠지만, 기본 설정하나는 정말 쉬워진 것 같다.