spring framework를 계속 사용하다 보니 회의감에 느껴 기존에 미니 프로젝트로 시작하려고 했던

spring boot, security, jpa, mysql(mariadb)를 사용한 웹 개발 프로젝트를 시작하려고 한다.

프로젝트를 시작하기에 앞서, 기본 셋팅을 해보자.

먼저 tool은 sts 4.2.0

java는 open jdk1.8이다.

이번 페이지에서는 security를 제외하고 jpa까지만 진행할 것이다.

자, sts를 실행시킨 후 spring starter project로 프로젝트를 생성해보자.

spring starter project 생성 화면-1

- name : 프로젝트명

- Type : Gradle -> 필자는 3.x버전 선택

- Packaging : 프로젝트 빌드 타입 -> 필자는 jar로 선택

- Java Version : 8

나머지는 선호하는 형식으로 넣어준 후 Next>

boot 버전 및 의존 설정

- Spring Boot Version : spring boot 버전 선택 -> 필자는 2.1.5로 선택하였다.

- Frequently Used : 최근 사용했던 dependencies를 표출해준다.

- Available : 사용할 dependencies 선택

              -> SQL에서 Spring Data JPA 선택

              -> Web에서 Spring Web Starter 선택

Finish를 선택하여 프로젝트 생성을 끝낸다.

다음으로 mariadb와 연결하기 위해 gradle 의존 설정 및 application.properties 설정을 해야한다.

먼저 gradle에 의존을 추가하기 위해 build.gradle을 열어보자.

<build.gradle>

build.gradle

pom.xml에 추가하는 것과 거의 동일하다.

dependencies에 아래의 내용을 추가해주자.

compile group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.4.1'  
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.16'

maridb 관련 의존 추가

<application.properties 경로 : src/main/resources/>

application.properties에 datasource 및 jpa 기본 설정 추가

(mariadb 서버 만드는 방법은 추후에 필요하면 게시하도록 하겠다.)

기존 mybatis설정하는 것 처럼 url, driverClassName, username, password를 추가해주고

jpa.hibernate.ddl-auto=create를 추가해 준다.(jpa및 datasource관련 설정은 추후에 추가적으로 설명하겠다.)

기본 설정이 끝났다.

이제 class들을 만들어 보자.

먼저, 패키지와 클래스 구성은 다음과 같이 해보았다.

패키지 및 클래스구성

패키지를 구성하는 과정에서, 한가지 문제점이 있었는데 springboot시 자동 생성되는 application.java이

배치되어 있는 패키지(com.example.demo)를 base-package로 잡고, 나머지 패키지를 생성해야 MVC관련

어노테이션들이 인식이 되었다. @componentScan을 사용하여 base package를 변경하려고 시도했으나,

인식이 되지 않았다. (혹시 방법 알고 있으신 분들으 댓글 부탁 바랍니다.)

<Application.java (BootSecurityJpa1Application.java) 소스코드>

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BootSecurityJpa1Application {

    public static void main(String[] args) {
        SpringApplication.run(BootSecurityJpa1Application.class, args);
    }

}

-> 기본으로 생성되는 클래스로 현 페이지에서는 아무런 작업을 하지 않았다.

<MainController.java 소스코드>

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.demo.service.UserService;
import com.example.demo.vo.User;

@Controller    // This means that this class is a Controller
public class MainController {

    @Autowired
    private UserService userService;

    @GetMapping(path="/add") // Map ONLY GET Requests
    public @ResponseBody String addNewUser (@RequestParam String name
            , @RequestParam String email) {
        // @ResponseBody means the returned String is the response, not a view name
        // @RequestParam means it is a parameter from the GET or POST request

        User n = new User();
        n.setName(name);
        n.setEmail(email);
        userService.userInsert(n);
        return "Saved";
    }

    @GetMapping(path="/all")
    public @ResponseBody Iterable<User> getAllUsers() {
        // This returns a JSON or XML with the users
        return userService.userSelect();
    }
}

-> MainController.java의 소스코드 일부는 spring boot 공식사이트에서 발췌한 부분으로
쿼리를 수행하는 userService 객체를 주입받기 위해 @Autowired를 사용했다.
또한 /add는 사용자를 추가하기위함이고, /all은 추가한 사용자를 확인하기 위한 url이다.

<UserRepository.java 소스코드>

package com.example.demo.repository;

import org.springframework.data.repository.CrudRepository;
import com.example.demo.vo.User;


// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
// CRUD refers Create, Read, Update, Delete

public interface UserRepository extends CrudRepository<User, Integer> {

}

->하나의 테이블이라고 생각하면 이해가 쉬울 것 같다. CrudRepository 인터페이스를 상속받으며
제네릭 타입중 첫번째는 테이블의 컬럼이 매핑되어있는 클래스(User.java)를 넣고, 두번째는 User테이블의 기본키 타입을 넣는다.

<UserService.java>

package com.example.demo.service;

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

import com.example.demo.repository.UserRepository;
import com.example.demo.vo.User;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public void userInsert(User user) {
        userRepository.save(user);
    }

    public Iterable<User> userSelect() {
        return userRepository.findAll();
    }
}

-> UserService.java는 데이터를 컨트롤러에서 받아 받은 데이터로 쿼리를 수행하여 나온 결과를 다시
컨트롤러에 전달해주는 역할을 한다.
UserRepository 객체를 주입받으며, sava()는 Insert쿼리를 수행하고,
findAll()은 select쿼리를 수행한다.

<User.java 소스코드>

package com.example.demo.vo;

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

@Entity // This tells Hibernate to make a table out of this class
public class User {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    private String name;

    private String email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }


}

-> User.java는 하나의 테이블을 의미하며 @Entity 어노테이션을 사용하여 테이블임을 명시하고,
테이블에 해당하는 컬럼들을 변수로 지정하여 Getter, Setter를 구현한다.
또한 @Id 어노테이션을 사용하여 기본키임을 id변수에 명시를 하며, @GeneratedValue(strategy=GenerationType.AUTO)
어노테이션을 사용하여 기본키값을 자동으로 증가하도록 설정하였다.'

 

자 이제, 제대로 동작하는지 확인해보자. 

로컬환경에서 실행하기 위해서는 Run As에서 Spring Boot App를 클릭하자.

(기존 spring 프로젝트 수행시 tomcat에 추가할 필요가 없다.)

 

<수행 시 화면>

Spring Boot App 수행 화면

위와 같이 콘솔에 해당 내용들이 출력되었다면, Spring Boot App가 정상적으로 수행된 것이다.

자 이제, 웹 브라우저 또는 HTTP를 호출할 수 있는 tool을 사용하여 사용자를 추가하여 보자.

http://127.0.0.1:8080/add?name=javaboja&email=javaboja@javaboja.com -> 호출!!

사용자 추가

Saved가 출력되었다면, 쿼리가 제대로 수행된 것이다.

이제, 추가된 사용자를 출력하여 보자.

http://127.0.0.1:8080/all -> 호출!!

사용자 조회

추가된 사용자가 제대로 출력되는 것을 확인할 수 있다.

Spring Boot, JPA, Mysql 기본 셋팅이 끝났다.

+ Recent posts