[이전 글]

2021/01/11 - [IT/spring] - [투표사이트만들기] MySQL Workbench - 4

 

[투표사이트만들기] MySQL Workbench - 4

[이전 글] 2021/01/11 - [IT/spring] - [투표사이트만들기] Eclipse에서 Thymeleaf 설치하기 - 3 [투표사이트만들기] Eclipse에서 Thymeleaf 설치하기 - 3 [이전 글] 2021/01/12 - [IT/spring] - [투표사이트만들..

song-yujin.tistory.com


5. Spring boot + Thymeleaf + JPA + MySQL 개발


개발 환경 설정까지 다 끝났으니 이제 한번 간단하게 실습? 해보려고 한다.

JPA는 goddaehee.tistory.com/209 블로그 참고하면 좋을 것 같다ㅎㅎ (블로그님 감사합니당)

 

천천히 따라오기만 하면 쉽.. 다..

 

 

개발해볼 것은!!! 목표는!!!

  • voteDB에서  sysadmin 테이블에 관리자 아이디와 관리자 카테고리 전체를 조회하여 화면에 나오도록 할 것 

 

[결과 화면]

 


 

 

 

이제 시작..!🙌

 

 

이전에 이미 생성한 VotingHomePage 프로젝트를 보면 application.properites를 볼 수 있다. 

 

 

 

 

.properites 보다 .yml 쓰는 걸 추천한다고 선배한테 들어서 바꿀 것이다.

 

 

 

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/voteDB?serverTimezone=UTC
    username: yujin
    password: 1234
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  thymeleaf:
    prefix: classpath:templates/
    suffix: .html
    cache: false

그리고 이렇게 설정을 해준다.  3번째 줄에서 voteDB는 데이터베이스 이름이다. 알맞게 변경해줘야 함!

username과 password도 ..! 

소스코드는 접은 글로 사진 아래에 같이 첨부했다.

 

 

그리고 아까 build.gradle에서 타임리프 의존성도 따로 추가했으니 Pass!

 

 

 

 

 

 

controller, dao, dto, service 패키지를 순서대로 일단 만들어준다. 

 

 

 

  • dao.UserRepository (class)

package com.example.demo.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.example.demo.dto.UserDTO;

@Repository
public interface UserRepository extends JpaRepository<UserDTO, Integer>{ 

}

 

그리고 dao에서 UserRepository 인터페이스를 만들어준다.

 

[코드 설명]

코드를 보면 위에 @Repository를 붙인다.

Repository는 JPA와 같은 ORM을 사용하게 되면 객체 단위로 테이블을 관리한다. (DAO 역할을 대신함)

 

extends JpaRepository<UserDTO, Integer> => JPA 인터페이스를 확장을 해야 그 안에 메서드를 사용할 수 있다.  

안에 <UserDTO, Integer>는 사용할 DTO와 그 테이블의 PK 데이터 타입을 작성한다. 

 

 

 

 

 

 

  • service.UserService (interface)

package com.example.demo.service;

import java.util.List;
import com.example.demo.dto.UserDTO;

public interface UserService {

  List<UserDTO> getAllUser();
}

 

  • service.UserServiceImpl (class)

package com.example.demo.service;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.dao.UserRepository;
import com.example.demo.dto.UserDTO;

@Service
public class UserServiceImpl implements UserService{

  @Autowired  //자동 연결 
  private UserRepository userRepository;
  
  
  @Override
  public List<UserDTO> getAllUser() {
    
    return userRepository.findAll();

  }

}

 

[코드 설명]

DB로부터 UserDTO를 list로 가져오기 위한 메소드를 작성한다. 

(인터페이스랑 인터페이스 구현 객체 같이 올림)

 

 

 

 

 

  • dto.UserDTO (class)

package com.example.demo.dto;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;

@Entity
@Table(name = "sysadmin")
@Data
public class UserDTO {

  @Id
  @Column(name = "ADMIN_SEQ")
  private int adminSeq;

  @Column(name = "ADMIN_CATG")
  private String adminCatg;

  @Column(name = "ADMIN_ID")
  private String adminID;

  @Column(name = "ADMMIN_PW")
  private String adminPW;

}

 

[코드 설명]

가져올 sysadmin 테이블의 정보를 작성해준다. 

12줄은 테이블 이름, 16줄 @Id는 adminSeq 이 이 테이블의 PK라는 것을 의미한다. 

 

 

 

 

 

  • controller.MainController(class)

package com.example.demo.controller;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
import com.example.demo.dto.UserDTO;
import com.example.demo.service.UserService;

@Controller
public class MainController {

  @Autowired
  private UserService userService;

  @GetMapping(value = "/")
  public ModelAndView main() {

    ModelAndView mv = new ModelAndView();
    List<UserDTO> userList = userService.getAllUser();
    mv.addObject("userList", userList);
    mv.setViewName("index");
    return mv;
  }

}

 

[코드 설명]

ModelAndView는 Model 인터페이스를 구현한 클래스로 객체 데이터를 뷰로 넘기는 데 사용을 한다. 

 

 

 

 

 

 

  • templates.index(html)

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>테스트</h1>
	<tr th:each="sysadmin : ${userList}">
		<td th:text="'id : ' + ${sysadmin.adminID}"></td>
		<td th:text="'admin catg : ' + ${sysadmin.adminCatg}"></td>
		<p/>
	</tr>
</body>
</html>

 

알맞게 작성해주면 끝이다.

 

 

 

 

 

실행은 프로젝트에서 우클릭해서 Run As > Spring Boot App을 해주면 된다.

 

그러면 앞에 있는 [결과 화면]이 나온다!

[이전 글]

 

2021/01/11 - [IT/spring] - [투표사이트만들기] Eclipse에서 Thymeleaf 설치하기 - 3

 

[투표사이트만들기] Eclipse에서 Thymeleaf 설치하기 - 3

[이전 글] 2021/01/12 - [IT/spring] - [투표사이트만들기] Eclipse에 Lombok 설치하기 - 2 [투표사이트만들기] Eclipse에 Lombok 설치하기 - 2 [이전 글] 2021/01/11 - [IT/spring] - [투표사이트만들기] Eclipse..

song-yujin.tistory.com


 

MySQL 부분은 이전에 올렸던 글이 있다. 그것을 보고 참고하면 된다.

 

그런데 여기서는 이클립스에서 mysql 쿼리를 작성하고 실행시키지 않고 mysql workbench에서 실행할 예정이다. 그래도 초기 설정은 아래 글에 있으니 꼭 참고해야 될 것 

 

2020/10/09 - [IT/JAVA] - macOS mysql 설치 & eclipse java 연동

 

macOS mysql 설치 & eclipse java 연동

macOS 에서 oracle를 사용하려면 복잡하지만 MySQL은 간단하다고 한다. 그래서 MySQL을 설치하고 사용할 것! macOS 용 패키지 관리자 Homebrew를 이용하여 설치할 것이다. Homebrew를 이용하면 설정 과정이

song-yujin.tistory.com


 

4. MySQL Workbench 사용


 

workbench에서 eer diagram을 만들어준다. (본인이 설계한 디비를 기반으로!)

 

 

 

 

다 완성했으면 상단에 Database > Forward Engineer.. 를 눌러서 진행해주면 알아서 테이블을 만들어준다!!!

 

 

 

이런식으로 쭉 가서... 

 

입력해주고....

 

테이블의 제약조건이 이상할 경우에는 에러가 난다. 

 

 

 

다 완성을 하면 Home으로 돌아가서 MySQL Connections 옆에 + 버튼을 눌러서 새로 만들어준다.

 

 

 

 

 

그리고 이렇게 알맞게 작성해주면 된다! 

 

끄으으으읕~!@!~!~!~!~!❤

 

 

 

 

 

 

macOS 에서 oracle를 사용하려면 복잡하지만 MySQL은 간단하다고 한다. 

그래서 MySQL을 설치하고 사용할 것!

 

macOS 용 패키지 관리자 Homebrew를 이용하여 설치할 것이다.

Homebrew를 이용하면 설정 과정이 단순화되며, 환경변수 설정이 필요없고 관리가 용이하다고 한다. 

 

 


1. MySQL 설치 

 

1. 먼저 터미널을 열어서 brew update 명령어를 이용해서 최신 버전으로 업데이트하고 

  brew install mysql 명령어를 이용하여 최신버전 설치한다.

(아무것도 뜨지 않고 커서만 깜빡여도 인내심을 가지고 기다릴 것.. 단지 느린 것 뿐..)

사실 처음에 brew update 명령어 입력을 했는데 error 표시도 없이 커서만 깜빡이고 있어서 놀랬다.. 왤케 느린거니..!!

그래서 ctrl + C 를 눌러서 취소하고 그냥 brew install mysql 입력해줬더니 또 깜빡깜빡..ㅇㅅㅇ

몇 분 기다리니까 알아서 실행해주었다.ㅎㅎㅎㅎ

 

 

 

 

2. brew list 명령어를 입력하여 설치 목록에 mysql이 있는지 확인하기

 

 

 

 

3. mysql.server start 명령어를 입력하여 MySQL 서버 실행

 

 

 

 

4.이제 mysql_secure_installation 명령어로 MySQL 설정을할 것이다.

"Press y|Y for Yes, any other key for No:"

비밀번호 설정에 대한 것이다.

 

Yes - 복잡한 비밀번호 설정

No - 쉬운 비밀번호 설정

 

선택하고 앞으로 사용할  root 계정의 비밀번호를 입력한다.

 

 

 

 

5. 이어서 나오는 설정을 해준다.

순서대로 

 

1. "사용자 설정"

Yes - 접속하는 경우 "mysql -u root"처럼 -u 옵션 필요

No - 접속하는 경우 "mysql"처럼 -u 옵션 불필요

 

2. "다른 IP에서 root 아이디로 원격접속 설정"

Yes - 원격접속 불가능

No - 원격접속 가능

 

3. "test 데이터베이스 설정"

Yes - Test 데이터베이스 제거

No - Test 데이터베이스 유지

 

3. "변경한 권한을 테이블에 적용하는 설정"

Yes - 적용

No - 적용 X

(무조건 Yes로 하라고 한다!)

 

 

이렇게 다 설정해주면 마지막에 "All done!" 이 화면에 딱! 나온다. (유휴)

 

 

 

6. 이제 mysql -u root -p 명령어 이용해서 비밀번호 입력하고 로그인 한다. 

(mysql> 표시를 확인할 수 있다. root 계정으로 로그인)

로그아웃 명령어는 exit 이나 quit

MySQL 서버 종료 명령어는 mysql.server stop

 

 

 

 

2. user 생성과 권한 부여 & 일반 계정으로 접속 

1. mysql -u root -p 명령어를 이용하여 root 계정으로 접속한다.

그리고 user를 생성하는 명령어를 작성한다.

예를 들어,

아이디 : yujinEE  비밀번호 : 1234 로 하고 싶다면 

create user 'yujinEE'@'%' identified by '1234';

'%' 는 모든 원격지에서 접속 권한 허용
접근 허용하고 싶지 않으면 localhost로 변경

 

예) '199.198.%' 로 하면 IP 주소가 199.198.X.X 로 시작되는 모든 IP에서 원격 접속을 허용한다는 의미

 

 

 

2. 권한 부여는 특정 데이터베이스에만 권한을 줄 수도 있고, 특정 권한만 줄 수도 있지만

일단 나는 모든 데이터베이스의 모든 테이블에 대한 권한 부여를 할 것이다.

grant all privileges on *.* to 'yujinEE'@'%';

이렇게 작성해주고 변경한 권한을 즉시 반영시켜주는 명령어도 마지막으로 작성해준다.

FLUSH PRIVILEGES;

 

 

 

 

3. 생성과 권한 부여를 했으니 yujinEE 계정으로 접속을 해볼 것이다.

mysql -u yujinEE -p

 

 

 

 

4. yujinDB를 생성할 것이다. 

 

 

 

3. eclipse에 MySQL 연결

1. 일단

https://dev.mysql.com/downloads/file/?id=476197

에서 connector/J 다운받는다. 

(mysql-connector-java-5.1.46.tar.gz 버전)

mysql-connector-java-5.1.46-bin.jar 저것을 사용할 것임!!

 

 

 

 

2. 이클립스 하단에 "Data Source Explorer"가 보이지 않으면 

Window > Show View > Data Source Explorer 선택하면 하단에 나온다.

아니 근데 난 왜 없어..?

Other 눌러서 찾아봤는데도 없잔슴?!

 

방법은 

[Help] - [Install New Software..] - work with에 

눌러서 Database Development 선택하면 된다.

그리고 그 후에 restart 되니까 기다릴 것!!

 

이제 다시 확인해보면 있다!!

Window > Show View > Other... > Data Management > Data Source Explorer를 선택해준다.

 

 

 

 

3. Data Source Explorer 화면을 보면 Database Connections 가 보일 것이다.

우클릭하여 New를 선택한다.

그러면 아래 화면이 나오는데 MySQL를 선택하고 적당한(?)이름을 적어준다.

 

 

Next 버튼을 누르고 아래 화면 그대로 보면 JAR List에 어쩌구쩌쩌구.jar 이 보일 것이다.

선택해서 Remove JAR/Zip 버튼을 눌러 삭제하고 

Add JAR/Zip... 눌러서 아까 다운 받은 mysql-connector-java-5.1.46-bin.jar를 추가해준다.

 

그리고!!

알맞게 적어주고 Test Connection 눌러줬을 때 Ping Success!! 뜨면 성공한 것이다!!

 

 

4. java 프로젝트 만들어서 DB 연결 확인하기

 

먼저 해당 프로젝트에서 Build Path >Configure Build Path.. 눌러서

 

Libraries 탭에 들어가서 Add External JARs... 선택하여 mysql-connector-java-5.1.46-bin.jar 추가해준다.

그리고 코드 작성 후 실행해주면 된다!

 

 

성공~~~!!!!!!

이제 본격 원하는 작업을 해야겠다!

+ Recent posts