본문 바로가기
Project/소경관

[소경관] : 다시 AWS EC2 Ubuntu에 MongoDB, MariaDB 세팅 후 연동 및 JPA 테이블 자동 생성 완성

by 오주현 2022. 4. 7.
반응형
  • 오늘은 일단 AWS EC2 Ubuntu MongoDB, MariaDB를 셋팅하고 JPA에 DTO를 생성해 자동 테이블 생성까지 마쳤다.
  • Server에 DB를 다시 만들어 볼까?
    • MariaDB와 MongoDB를 Server에 안 올릴 수는 없으니 미리 만들어 봤다.
    • 이미 충분한 테스트와 시도를 거쳤기 때문에 뚝딱 만들 수 있을 줄 알았다..
      • 익숙해도 색다른 오류가 터진다..
    • 이번에는 GUI의 도움을 받지 않고 전부 다 코드로 셋팅했다.

 

  • MariaDB 셋팅
sudo apt-gat update

$ sudo apt-get install software-properties-common
$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://mirror.yongbok.net/mariadb/repo/10.5/ubuntu focal main'

sudo apt install mariadb-server 
sudo apt install mariadb-client  

systemctl enable mariadb
  • MariaDB를 설치 받는다.
  • 나는 MongoDB가 20.4 버전으로 했는데 각자 맞춰보면 된다.
vi /etc/mysql/mariadb.conf.d/50-server.cnf
  • bind-address를 0.0.0.0으로 변경해 준다.
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload
firewall-cmd --list-all
  • MariaDB 포트는 3306을 사용한다.
  • 방화벽을 설정해주고 재시작한다.
  • 마지막으로 적용이 잘 되어있는지 체크해 본다.
mariadb
  • MariaDB에 접속한다.
show databases;
  • 데이터베이스를 조회한다.
status
  • 상태를 체크한다.
show variables like 'char%';
  • utf-8을 확인한다.
  • MariaDB에 대해 간단하게 알아둬야 할 게 있다.
    • 내부 접속 계정은 계정 뒤에 @localhost가 붙는다.
    • 외부 접속 계정은 계정 뒤에 @'%'가 붙는다.
  • 외부 접속 계정을 생성한다.
use mysql; 
select host, user, password from user;
create user 'MyUser'@'%' identified by '1234';
grant all privileges on User.* to 'MyUser'@'%';
flush privileges;
show grants for 'MyUser'@'%';
  • 사용자 생성은 mysql 데이터베이스에서 생성한다.
  • 사용자를 조회한다.
  • 계정 명과 암호를 설정한다.
  • User 데이터베이스에 MyUser 계정이 모든 권한을 받도록 한다.
  • 권한 부여를 적용한다.
  • 권한 부여를 조회한다.
service mysql restart
reboot
  • 재시작을 해준다.
  • MariaDB지만 링크가 걸려있어 mysql로도 작동한다.
  • 이 아래는 참고 사항이다.
update user set password=password('1234') where user='root';
flush privileges;
select host, user, password from user;
  • root를 활성화 할 수 있다.
grant all privileges on *.* to 'root'@'%' identified by '1234';

  • 외부접속을 허용한다.
# MariaDB Connection
spring.datasource.driverClassName=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://IP주소/데이터베이스명?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=MyUser
spring.datasource.password=1234
  • application.properties에 설정을 해주어 접속할 수 있다.
  • 이렇게 Gradle을 사용하는 Spring Boot에 MariaDB를 연동했다.

 

  • MongoDB 셋팅
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org
  • Ubuntu 20.4 버전을 설치했다.
vi /etc/mongod.conf
  • bind-address를 0.0.0.0으로 변경해 준다.
firewall-cmd --permanent --zone=public --add-port=27017/tcp
firewall-cmd --reload
firewall-cmd --list-all
  • MongoDB의 포트는 27017이다. 방화벽 설정을 해준다.
systemctl start mongod
sudo systemctl enable mongod
mongo
  • MongoDB를 실행한다.
use admin
  • root 계정 설정은 admin에서 할 수 있다.
db.createUser({
user:'root',
pwd:'1234',
roles:['root']
})
  • root 계정을 생성해 줬다.
use car
  • car라는 데이터베이스를 만들어 줬다.
  • 데이터베이스 안에 콜렉션이 있고 콜렉션 안에 도큐먼트가 있다고 보면 된다.
  • MongoDB의 database는 간단하게 use로 생성할 수 있다.
  • 다만, use car를 했다고 car가 생성된 것은 아니고 안에 1개 이상의 값을 넣어줘야 한다.
db.car.insert({
"name": "오주현",
"phoneNm": "010-0000-0000",
"carNm": "123가1234",
"addr2": "1동1005호"
})
  • 일단 car 데이터베이스에 car 콜렉션을 만들고 그 안에 위와 같은 내용의 도큐먼트를 넣어줬다.
  • db.car.insert 중에 car 부분이 콜렉션 명을 정한 부분이다.
    • 내가 생성한 데이터베이스명과 똑같아서 헷갈릴 수 있다.
  • 이제 이 테이블을 관리하는 User를 생성해야 한다.
db.createUser({user: "MyUser",
... pwd: "1234",
... roles: ["dbAdmin", "readWrite"]
... })
  • 유저 이름과 비번을 설정해주고 권한도 설정한다.
db.getUsers()
  • 유저가 정상적으로 만들어 졌는지 확인한다.
db.auth("MyUser", "1234")
  • 이렇게 확인도 가능하다.
  • 반환 값으로 1을 뱉으면 정상적으로 아이디와 비번이 입력된 것이다.
    • 0을 뱉으면 문제가 생겼으니 drop으로 User를 날려주고 다시 생성하자.
# MongoDB Connection
spring.data.mongodb.host=IP주소
spring.data.mongodb.port=27017
spring.data.mongodb.database=car
spring.data.mongodb.username=MyUser
spring.data.mongodb.password=1234
  • Spring Boot와 이렇게 연동을 할 수 있다.
  • JPA로 로그인 정보 생성하고 자동 테이블 생성하기
package project.SPM.dto;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;

@Entity
@Getter @Setter
@Table(name = "USER_INFO")
public class UserDTO {

    /**
     * USER TABLE
     * DB : MariaDB
     * 대상 : 사용자, 경비원
     */

    @Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "USER_NO", length = 10)
    private Long userNo;

    @Column(name = "USER_NAME", length = 20)
    private String userName;

    @Column(name = "USER_PN", length = 40)
    private String userPn;

    @Column(name = "USER_EMAIL", length = 200)
    private String userEmail;

    @Column(name = "USER_ID", length = 200)
    private String userId;

    @Column(name = "USER_PW", length = 50)
    private String userPw;

    @Column(name = "USER_ADDR", length = 200)
    private String userAddr;
}
  • 테이블 명을 설정하고 userNo에 pk값을 주었다.
  • 이 외 Column name과 크기 설정은 강의에서 강사님이 가능하면 이렇게 표시하는 게 좋은 것 같다.
    • 취향 차이인 것 같다는 뉘앙스..
  • 처럼 말해서 나도 일단 다 적어봤다. 이게 더 좋은 것 같다.
# TRUE = JPA 쿼리문 확인 가능
spring.jpa.show-sql=true
# DDL 정의시 DB의 고유 기능을 사용할 수 있다.
spring.jpa.hibernate.ddl-auto=create
spring.jpa.database=mysql
  • application.properties에는 위 처럼 적어줬다.
  • 주의 점으로는 create는 drop 후 create를 하므로 지금이야 괜찮지만 나중에는 update로 바꿔주거나 none설정으로 변경해 둬야 할 것 같다.

  • 테이블이 정상적으로 생겼고 pk값도 정상적으로 들어와 있다.
  • name 설정도 정상적으로 들어와 있다.
  • 이제 회원가입을 먼저 구현해 봐야겠다.
  • 아직 프론트가 완성되지 않았지만, 회원가입과 로그인 정도를 구현하면서 Email 관련 코딩도 완성시켜 패스워드 찾기도 도입하고 본격 메인 기능을 만들어야겠다.
  • 이번주 목표는 달성했다고 볼 수 있다.
  • Jenkins를 통한 CI/CD는 따로 EC2 Server를 하나 더 파서 진행해 볼 예정이다. 저번처럼 같은 Server에 했다가 용량을 이것, 저것 많이 차지할 것 같아 아예 따로 시도를 해보려고 한다.
반응형

댓글