728x90

내 PC에는 PHP 를 연습하기 위해서 Autoset10 (Apache + PHP + MariaDB)가 설치되어 있다.

이미 설치된 MariaDB 와 연동하여 데이터 추가되는 걸 테스트했다.

앞에서 설명한 MySQL 버전과 다른 부분만 추가로 적어둔다.

 

1. 의존성 추가(build.gradle)

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    //implementation 'mysql:mysql-connector-java'
    implementation 'org.mariadb.jdbc:mariadb-java-client'
 
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
 
    runtimeOnly ('org.springframework.boot:spring-boot-devtools')
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
 
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

2. application.properties 에 DB 정보 추가하기

# MariaDB Driver
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
 
# DB Source URL
#spring.datasource.url=jdbc:mariadb://192.168.1.20:3306/studydb?useSSL=false
spring.datasource.url=jdbc:mariadb://localhost:3306/studydb?serverTimezone=Asia/Seoul
<IP>:<Port/<DB> ==> localhost:3306/study_db
 
# DB username
spring.datasource.username=codefox
 
# DB password
spring.datasource.password=Autoset12#$
 
spring.jpa.show-sql=true 
 
# 테이블 스키마를 생성하지 않았을 경우 자동으로 테이블 생성
#spring.jpa.hibernate.ddl-auto=update
 
 

 

3. 테이블 스키마

CREATE TABLE User (
  `uid` int(11) NOT NULL,
  `account` varchar(45) NOT NULL,
  `email` varchar(45) DEFAULT NULL,
  `phone_number` varchar(15) DEFAULT NULL COMMENT '전화번호',
  `created_at` datetime NOT NULL,
  `created_by` varchar(45) NOT NULL,
  `updated_at` datetime DEFAULT NULL,
  `updated_by` varchar(45) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
ALTER TABLE `user`
  ADD PRIMARY KEY (`uid`),
  ADD UNIQUE KEY `account` (`account`);
 
ALTER TABLE `user`
  MODIFY `uid` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
 
 
use mysql;
create user codefox@localhost;
grant all privileges on studydb.* to codefox@localhost identified by 'Autoset12#$';
flush privileges;
 

 

 

MariaDB 연결이 제대로 된 것인지 1차 확인하는 방법이다.

 

 

'Spring' 카테고리의 다른 글

Spring Boot JPA(Java Persistence API ) - MySQL  (0) 2021.10.23
[SpringBoot] Lombok  (0) 2021.10.22
MariaDB 10.6 설치  (0) 2021.10.21
IntelliJ IDEA 에서 Spring 프로젝트 생성  (0) 2021.10.20
Spring Tool Suite 4 기본 환경 설정  (0) 2020.11.09
블로그 이미지

Link2Me

,
728x90

JPA는 자바 객체와 DB 테이블 간의 매핑을 처리하는 ORM(Object Relational Mapping) 기술의 표준이다.

JPA를 이용하기 위해서는 maven(메이븐)을 이용하거나 gradle(그래들)을 이용하여 패키지를 관리한다.

 

1. 프로젝트 의존성 추가(build.gradle)

dependencies {
    implementation 'mysql:mysql-connector-java'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}

 

2. application.properties 에 DB 정보 추가하기

# MySQL 설정 
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 
 
# DB Source URL 
spring.datasource.url=jdbc:mysql://<IP>:<Port/<DB>?useSSL=false
<IP>:<Port/<DB> ==> localhost:3306/study_db
 
 
# DB username 
spring.datasource.username=<username> 
 
# DB password 
spring.datasource.password=<password> 
 
true 설정시 JPA 쿼리문을 볼 수 있다 
spring.jpa.show-sql=true 
 
# DDL(create, alter, drop) 정의시 DB의 고유 기능을 사용할 수 있다. 
spring.jpa.hibernate.ddl-auto=update 
 
# JPA의 구현체인 Hibernate가 동작하면서 발생한 SQL의 가독성을 높여준다. 
spring.jpa.properties.hibernate.format_sql=true
 

 

DB와 통신이 정상적으로 잘 되는지 먼저 확인을 해야 한다.

DB와 통신이 잘 되는데도 불구하고 에러가 발생해서 엄청 삽질을 했는데 결국 사소한 문제였다.

spring.datasource.password=<password> 패스워드 뒤에 공백이 추가되어 있는 줄 모르고 있었다.

 

3. 테이블 설계

   ㅇ DB 생성 : CREATE DATABASE studydb default CHARACTER SET UTF8;

 

   ㅇ 테이블 생성

       - 테이블을 직접 생성해주었는데, 테이블 생성하지 않고 자동으로 추가되는 것도 확인했다.

       - 테이블명을 User 로 첫글자를 대문자로 해서 생성후 테스트해보니, Spring Boot 에서 소문자 user 생성하더라.

CREATE TABLE `user` (
  `uid` int(11) NOT NULL,
  `account` varchar(45) NOT NULL,
  `email` varchar(45) DEFAULT NULL,
  `phone_number` varchar(15) DEFAULT NULL COMMENT '전화번호',
  `created_at` datetime NOT NULL,
  `created_by` varchar(45) NOT NULL,
  `updated_at` datetime DEFAULT NULL,
  `updated_by` varchar(45) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
ALTER TABLE `user`  ADD PRIMARY KEY (`uid`);
ALTER TABLE `user`  MODIFY `uid` int(11) NOT NULL AUTO_INCREMENT;
 

   ㅇ 사용자 권한 추가

MySQL 5.7 버전을 설치하고 테스트를 했더니, 패스워드 지정시 기본으로 영문 소문자, 대문자, 숫자, 특수문자를 포함해서 8자리 이상 입력해야 되더라.

// 비밀번호 정책 확인
show variables like 'validate_password%';

// DB 생성
create database studydb default character set utf8;

 

// 사용자 생성 및 권한 추가

use mysql;
create user codefox@localhost identified by 'Autoset12#$';
grant all privileges on studydb.* to codefox@localhost;
flush privileges;

use mysql;
create user codefox@'192.168.1.25' identified by 'Autoset12#$';
grant all privileges on studydb.* to codefox@'192.168.1.25';
flush privileges;

 

※ Virtual Box를 설치하여 CentOS 7 + MySQL 5.7 버전을 설치하고 192.168.1.X 동일 사설 네트워크 환경에서 테스트하기 위한 설정이다. 192.168.1.25 는 Windows 10 이 설치된 PC 의 IP주소이고 CentOS 7 서버의 IP주소는 192.168.1.20 이다.

 

4. Entity 클래스

package com.example.study.model.entity;
 
import lombok.*;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;
import java.time.LocalTime;
 
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class User {
    // DB의 테이블의 이름과 동일한 User 클래스 생성
 
    @Id  // @Id : Primary Key를 의미
    @GeneratedValue(strategy = GenerationType.IDENTITY) //MySQL의 AUTO_INCREMENT를 사용
    private Long idx;
    private String account;
    private String email;
    private String phoneNumber;
    private LocalDateTime createdAt;
    private String createdBy;
    private LocalDateTime updatedAt;
    private String updatedBy;
}
 

 

5. JPA Repository 생성

@Repository
- 따로 쿼리문 작성없이 생성, 조회, 업데이트, 삭제(CRUD)를 할 수 있게 기능을 제공해줌
- 제너릭 타입으로는 첫번째부터, <Entity, PrimaryKey의 타입>을 넣는다

 

package com.example.study.repository;
 
import com.example.study.model.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
 
@Repository
public interface UserRepository extends JpaRepository<User,Long> {
}
 

 

 

6. 테스트

테이블에 User 데이터가 잘 생성되는지 테스트하는 과정이다.

프로젝트 구조 확인

 

package com.example.study.repository;
 
import com.example.study.StudyApplicationTests;
import com.example.study.model.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
 
import java.time.LocalDateTime;
 
@SpringBootTest
public class UserReposityTest extends StudyApplicationTests {
 
    // Dependency Injection(DI)
    @Autowired
    private UserRepository userRepository;
 
    @Test
    public void create(){
        User user = new User();
        user.setAccount("test01");
        user.setEmail("jsk005@naver.com");
        user.setPhoneNumber("010-0001-0000");
        user.setCreatedAt(LocalDateTime.now());
        user.setCreatedBy("admin01");
 
        User newUser = userRepository.save(user);
        System.out.println("newUser :" + newUser);
    }
 
    public void read(){
 
    }
 
    public void update(){
 
    }
 
    public void delete(){
 
    }
}
 

 

3번을 눌러서 테스트하면 DB에 데이터가 저장되는지 여부를 확인할 수 있다.

 

 

 

MySQL 과 MariaDB 모두 테스트를 했고, User 데이터가 잘 생성되는걸 확인할 수 있다.

Run 정보를 확인해보면....

 

'Spring' 카테고리의 다른 글

Spring Boot JPA(Java Persistence API ) - MariaDB  (0) 2021.10.23
[SpringBoot] Lombok  (0) 2021.10.22
MariaDB 10.6 설치  (0) 2021.10.21
IntelliJ IDEA 에서 Spring 프로젝트 생성  (0) 2021.10.20
Spring Tool Suite 4 기본 환경 설정  (0) 2020.11.09
블로그 이미지

Link2Me

,

[SpringBoot] Lombok

Spring 2021. 10. 22. 08:58
728x90

Lombok이란 어노테이션 기반으로 코드를 자동완성 해주는 라이브러리이다. Lombok을 이용하면 Getter, Setter, Equlas, ToString 등과 다양한 방면의 코드를 자동완성 시킬 수 있다.

 

 

package com.example.study.model;
 
import lombok.AllArgsConstructor;
import lombok.Data;
 
// getter, setter 를 annotation 으로 생성시켜주는 라이브러리 : lombok
@Data
@AllArgsConstructor
public class SearchParam {
    private String account;
    private String email;
    private int page;
}
 

 

@Data 어노테이션을 활용하면 @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor를 자동완성 시켜준다.

 

@AllArgsConstructor는 모든 변수를 사용하는 생성자를 자동완성 시켜주는 어노테이션이다.

 

@NoArgsConstructor는 어떠한 변수도 사용하지 않는 기본 생성자를 자동완성 시켜주는 어노테이션이다.

 

@RequiredArgsConstructor는 특정 변수만을 활용하는 생성자를 자동완성 시켜주는 어노테이션이다. 생성자의 인자로 추가할 변수에 @NonNull 어노테이션을 붙여서 해당 변수를 생성자의 인자로 추가할 수 있다. 아니면 해당 변수를 final로 선언해도 의존성을 주입받을 수 있다.

 

@EqualsAndHashCode 어노테이션을 활용하면 클래스에 대한 equals 함수와 hashCode 함수를 자동으로 생성해준다.

https://mangkyu.tistory.com/78 에 어노테이션과 예제가 상세히 설명되어 있다.

 

Lombok 은 코틀린 data class 와 유사한 거 같다.

Android Studio 개발 툴과 IntelliJ IDEA 툴은 Jetbrains 에서 만든 툴이라 메뉴 사용법이 거의 동일하다.

 

IntelliJ IDEA 툴에서 아래 그림과 같이 확인해 보면 getter, setter, constructor 가 생성되어 있는 걸 확인할 수 있다.

 

 

@Getter @Setter 만 적용할 경우

 

 

 

블로그 이미지

Link2Me

,

MariaDB 10.6 설치

Spring 2021. 10. 21. 10:06
728x90

익숙하게 사용하기 위해서 Autoset10 을 설치하고 MariaDB를 구동하였으나 구동 자체가 안된다.

그래서 별도로 MariaDB 10.6을 다운로드 받아서 설치했다.

윈도우 기반에서 Spring boot 을 배우기 위해서 MariaDB 를 설치하는 것이다.

https://mariadb.org/ 사이트에 접속하여 파일을 다운로드한다.

 

 

 

 

 

 

여기까지 설정하고 나면 자동으로 MairaDB 데몬이 떠있다.

DB 생성 및 테이블 추가하는 것은 phpMyAdmin 을 이용하여 할 것이다.

윈도우10 기반으로 서버를 운용은 하지 않을 것이고, 단지 개발 연습용으로 활용할 것이기 때문에 익숙한 툴을 이용하여 DB 구조 설계 및 연습을 하면 된다.

 

'Spring' 카테고리의 다른 글

Spring Boot JPA(Java Persistence API ) - MySQL  (0) 2021.10.23
[SpringBoot] Lombok  (0) 2021.10.22
IntelliJ IDEA 에서 Spring 프로젝트 생성  (0) 2021.10.20
Spring Tool Suite 4 기본 환경 설정  (0) 2020.11.09
Spring Tool Suite 4 설치  (0) 2020.11.09
블로그 이미지

Link2Me

,
728x90

온라인 강의가 IDEA 로 되어 있어서 기본 개발 환경을 설정하는 방법을 적어둔다.

인텔리제이(IntelliJ IDEA)에서 스프링 프레임워크(Spring Framework) 프로젝트를 생성하는 과정이다.

 

 

 

Type 을 Maven 대신 Gradle 로 선택한다.

 

 

 

 

Settings -> Build, Execution, Deployment -> Annotation Processors

 

 

 

 

 

실행버튼을 누르면 컴파일 되고 Tomcat 이 8080포트로 구동되었다는 걸 확인할 수 있다.

 

이제 크롬 브라우저에서 확인해본다.

http://localhost:8080/api/getMethod/

 

 

GET Method

GET 메소드에 대한 처리를 알아보기 위한 코드 작성이다.

 

 

package com.example.study.model;
 
public class SearchParam {
    private String account;
    private String email;
    private int page;
 
    public String getAccount() {
        return account;
    }
 
    public void setAccount(String account) {
        this.account = account;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public int getPage() {
        return page;
    }
 
    public void setPage(int page) {
        this.page = page;
    }
}
 

 

 

package com.example.study.controller;
 
import com.example.study.model.SearchParam;
import org.springframework.web.bind.annotation.*;
 
@RestController
@RequestMapping("/api")  // localhost:8080/api
public class GetController {
 
    @RequestMapping(method = RequestMethod.GET, path="/getMethod"// localhost:8080/api/getMethod
    public String getRequest(){
        return "Hi, getMethod";
    }
 
    @GetMapping("/getParameter")  // http://localhost:8080/api/getParameter?id=abc&password=12345
    public String getParameter(@RequestParam String id, @RequestParam String password){
        System.out.println("id : " + id);
        System.out.println("pw : " + password);
 
        return id+password;
    }
 
    // http://localhost:8080/api/getMultiParameter?account=abc&email=jsk005@naver.com&page=2
    @GetMapping("/getMultiParameter")
    public SearchParam getMultiParameter(SearchParam searchParam){
        System.out.println(searchParam.getAccount());
        System.out.println(searchParam.getEmail());
        System.out.println(searchParam.getPage());
 
        return searchParam;
    }
}
 

 

POST

크롬브라우저 확장 프로그램 설치

https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm 를 설치한다.

 

 

package com.example.study.controller;
 
import com.example.study.model.SearchParam;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@RequestMapping("/api")
public class PostController {
 
    // http://localhost:8080/api/postMethod
    // 크롬 확장 프로그램을 설치하면 테스트할 수 있다.
    // https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm
    @PostMapping(value = "/postMethod")
    public SearchParam postMethod(@RequestBody SearchParam searchParam){
        return searchParam;
    }
}
 

 

 

전송 결과

'Spring' 카테고리의 다른 글

Spring Boot JPA(Java Persistence API ) - MySQL  (0) 2021.10.23
[SpringBoot] Lombok  (0) 2021.10.22
MariaDB 10.6 설치  (0) 2021.10.21
Spring Tool Suite 4 기본 환경 설정  (0) 2020.11.09
Spring Tool Suite 4 설치  (0) 2020.11.09
블로그 이미지

Link2Me

,
728x90

Spring Tool Suite 에서 기본 폰트 변경 및 크기 변경, UTF-8 인코딩모드 변경하는 방법이다.


신규 프로젝트를 생성한다.

name 은 기본 제공하는 demo 를 그대로 사용했고, Package 도 기본 제공하는 걸 그대로 사용했다.


Web 을 검색하여 Spring Web 과 Spring Reactive Web 두개를 설치한다.



폰트 크기 변경



인코딩 모드 변경






본인 PC에서 서버 구동하기 http://localhost:8080 이 기본 포트이다.



포트번호 변경





'Spring' 카테고리의 다른 글

Spring Boot JPA(Java Persistence API ) - MySQL  (0) 2021.10.23
[SpringBoot] Lombok  (0) 2021.10.22
MariaDB 10.6 설치  (0) 2021.10.21
IntelliJ IDEA 에서 Spring 프로젝트 생성  (0) 2021.10.20
Spring Tool Suite 4 설치  (0) 2020.11.09
블로그 이미지

Link2Me

,

Spring Tool Suite 4 설치

Spring 2020. 11. 9. 16:41
728x90

https://spring.io/tools 에서 파일을 다운로드 한다.



다운로드 받은 파일의 압축 해제 방법

커맨드 창에서 실행한다.

Open JDK를 설치하고, JAVA_HOME을 환경변수에 추가해 준 상태에서 가능하다.

알집으로 압축을 해제하면 절대 안된다.

java -jar filename





더블클릭하면 실행이 된다.


'Spring' 카테고리의 다른 글

Spring Boot JPA(Java Persistence API ) - MySQL  (0) 2021.10.23
[SpringBoot] Lombok  (0) 2021.10.22
MariaDB 10.6 설치  (0) 2021.10.21
IntelliJ IDEA 에서 Spring 프로젝트 생성  (0) 2021.10.20
Spring Tool Suite 4 기본 환경 설정  (0) 2020.11.09
블로그 이미지

Link2Me

,