반응형
- 오늘은 일단 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에 했다가 용량을 이것, 저것 많이 차지할 것 같아 아예 따로 시도를 해보려고 한다.
반응형
'Project > 소경관' 카테고리의 다른 글
[소경관] : 프로젝트에 적용하기 위해 JPA Builder, Entity 사용 공부 중 (0) | 2022.04.09 |
---|---|
[소경관] : 프로젝트 패키지 구조 고민 및 Entity와 DTO의 분리 (0) | 2022.04.08 |
[소경관] : 로컬 데이터베이스 설정 및 프론트 마저 진행하기 (0) | 2022.04.04 |
[소경관] : 프론트 뼈대 잡기와 Jenkins 재도전 하기 (0) | 2022.04.02 |
[소경관] : Jenkins 맛 보고 후퇴.. & BootStrap Spring Boot thymeleaf에 적용하기 (0) | 2022.04.01 |
댓글