스프링부트 PostgreSQL JPA 연동

 

JPA를 써야겠다는 생각은 많이 하지만,

이거 과연 MyBatis보다 편할까... 라는 고민은 계속 하게 된다.

Oracle 쓰다가 MySQL쓰고

MySQL쓰다가 PostgreSQL쓰고

이런 일이 빈번할까...

모르겠다.

그래도 사용하는 방법은 알고있어야 나중에라도 쓸 수 있으니!

Spring Boot에서 JPA로 PostgreSQL을 사용해보자

 

pom.xml에 추가한 dependency는 아래와 같다. 

 

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
	        <groupId>org.projectlombok</groupId>
	        <artifactId>lombok</artifactId>
	        <scope>provided</scope>
	    </dependency>

 

lombok의 경우 이클립스, sts 사용하려면 설치가 필요하다.

설치방법은 나중에 별도로 글을 쓰던가 해야겠다.

인터넷에서 찾아보고 설치해봐도 되고,

롬복을 사용하지 않고

getter, setter를 직접 만들어줘도 된다.

JSP대신 타임리프도 사용한다.

 

간략하게 회원정보를 처리하는 예제를 만들어 볼 것이다.

 

DTO를 만든다.

package com.soledot.postgre_ex1.member;

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

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
@Table(name = "member")
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int mb_seq;
    
    private String mb_id;
    private String mb_name;
    private String mb_nickname;
    private String mb_email;
    
}

롬복을 사용하지 않을 경우 @Getter, @Setter을 지우고 직접 get, set method를 만들면 된다.

 

Service interface를 만든다.

package com.soledot.postgre_ex1.member;

import java.util.List;
import java.util.Map;

import org.springframework.ui.ModelMap;

public interface MemberSvc {

	List<Member> list();
	
	void in( Map<String, Object> param, ModelMap model );

}

list method는 회원목록을

in은 회원정보를 저장하는 역할이다.

 

Service 구현 파일을 만든다.

package com.soledot.postgre_ex1.member;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.ModelMap;

@Service
public class MemberSvcImpl implements MemberSvc{
	
    @Autowired
    private MemberRepository repository;

    @Override
    public List<Member> list() {

        List<Member> cities = (List<Member>) repository.findAll();

        return cities;
    }

	@Override
	public void in( Map<String, Object> param, ModelMap model ) {
		Member mb = new Member();
		mb.setMb_id( param.get( "mb_id" )+"" );
		mb.setMb_email( param.get( "mb_email" )+"" );
		mb.setMb_nickname( param.get( "mb_nickname" )+"" );
		
		
		repository.save(mb);
	}
    
}

굳이 Member에 parameter를 일일이 넣어주고 있다.

Controller에서 @RequestBody로 Member를 가져와서 넣는다면 더 편리하게 작성은 가능할 것이다.

 

Repository 파일을 만든다.

package com.soledot.postgre_ex1.member;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MemberRepository extends CrudRepository<Member, Long> {

}

 

Controller 파일을 만든다.

package com.soledot.postgre_ex1.member;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/member/")
public class MemberCtrl {

    @Autowired
    private MemberSvc memberSvc;

    @GetMapping("memberlist")
    public String memberList(@RequestParam Map<String, Object> param, ModelMap model) {
        List<Member> memberList = (List<Member>) memberSvc.list();
        model.put( "memberList", memberList );
        
        return "memberlist";
    }
    
    @RequestMapping("memberin")
    public String in( @RequestParam Map<String, Object> param, ModelMap model ) {
        memberSvc.in( param, model );
        return "redirect:/member/memberlist";
    }
}

local에서 프로젝트 실행시

localhost:8080/member/memberlist는 회원목록을

localhost:8080/member/memberin은 회원정보 저장을 처리할 것이다.

 

뷰처리 파일도 만들어 줘야한다.

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>회원리스트</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    
    <body>
        <h2>List of member</h2>

        <table>
            <tr>
                <th>Id</th>
                <th>Name</th>
                <th>nickname</th>
                <th>email</th>
            </tr>
            
            <tr th:each="member : ${memberList}">
                <td th:text="${member.mb_id}">Id</td>
                <td th:text="${member.mb_name}">Name</td>
                <td th:text="${member.mb_nickname}">nickname</td>
                <td th:text="${member.mb_email}">email</td>
            </tr>
        </table>

    </body>
</html>

 

application.properties 파일에 DB접속 정보도 추가해줘야 한다.

spring.datasource.url=jdbc:postgresql://192.168.0.1:5432/testdb
spring.datasource.username=test
spring.datasource.password=1234
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

코드는 다 작성되었다.

이제 스프링부트 프로젝트를 실행시키고

브라우저로 접속하면 된다.

 

아~ 당연히 PostgreSQL이 준비되어 있고 테이블도 만들어 두는 것이...

CREATE TABLE member(
   mb_seq SERIAL PRIMARY KEY,
   mb_cpseq INT,
   mb_id VARCHAR(50) UNIQUE,
   mb_name VARCHAR(50) unique,
   mb_email VARCHAR(100)
)

친절하게 테이블 생성 쿼리까지...

 

브라우저에서 접속해서 테스트 해보거나

Postman을 이용해서 테스트 해보면 된다.

 

모두 잘 되길 기원하면서...

 

공유하기:

스프링부트 카테고리 글 :

0 Comments

Comment