-- DB 접속
mysql -u root -p
mariadb -u root -p
-- 데이터베이스 확인
SHOW DATABASES;
-- 데이터베이스 생성
create database DB명;
-- 계정 조회
use mysql;
select host, user, password from user;
-- 계정 생성
-- create user '계정'@'접속위치' identified by '패스워드';
-- 내부 접속만 허용
create user '계정'@localhost identified by '비밀번호';
-- 외부 접속 허용
create user '계정'@'%' identified by '비밀번호';
-- 권한 생성
grant select on '스키마'.* to `계정`@`localhost` identified by '비밀번호';
grant select on '스키마'.* to `계정`@`%` identified by '비밀번호';
-- 모든 권한 부여
grant all privileges on 'DB명.테이블' to '계정'@'접속위치';
-- grant all privileges on testDB.* to 'sa'@'%';
-- 수정사항 반영 (권한 적용)
flush privileges;
-- 사용자 계정 삭제 '사용자'@'접속위치'
DROP USER '계정아이디'@'접속위치';
-- 예) DROP USER 'testUser'@'%';
권한을 생성할 때 '스키마.select' 을하면 select 권한만 주게 되고,
코드 처럼 '스키마.*' 을 입력하게 되면 모든 권한을 주게 된다.( * 특정권한만 주길 권장 )
스키마.테이블의 경우 특정 테이블에 대한 권한만 부여하게 되고,
스키마.* 를 입력 할 경우 해당 스키마의 모든 테이블에 대한 권한을 부여
@뒤에는 '호스트주소(IP)'가 오게 된다. 예)~~~@'127.0.0.1' identified by '비밀번호';
@'localhost'는 로컬 사용자 이고,
@'%' 외부 접근을 모두 허용해주는 것이다.
따라서, 특정 대역만 열어 주려면 @'192.168.0.1' 이런식으로 권한을 부여해주면 된다.
DAO(Data Access Object)는 데이터베이스의 data에 접근하기 위한 객체입니다. DataBase에 접근하기 위한 로직&비즈니스 로직을 분리하기 위해 사용합니다.
프로젝트의 서비스 모델과 실제 데이터베이스를 연결하는 역할을 하며, JPA에서는 DB에 데이터를 CRUD하는 Repository 객체들이 DAO라고 볼 수 있다.
DTO
DTO(Data Transfer Object)는 계층 간 데이터 교환을 하기 위해 사용하는 객체로 DTO는 로직을 가지지 않는 순수한 데이터 객체(getter / setter 만 가진 클래스)입니다.
<유저가 입력한 데이터를 DB에 넣는 과정 예> - 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송합니다. - 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어 넣습니다.
Entity와 DTO를 분리하는 이유
Entity의 값이 변하면 Repository 클래스의 Entity Manager의 flush가 호출될 때 DB에 값이 반영되고, 이는 다른 로직들에도 영향을 미친다. 때문에 View와 통신하면서 필연적으로 데이터의 변경이 많은 DTO 클래스를 분리해 주어야 한다.
또한, 도메인 설계가 잘 되었다 해도 getter만을 이용해서 원하는 데이터를 표시하기 어려운 경우가 발생할 수 있는데, 이 경우에 Entity와 DTO가 분리되어 있지 않다면 Entity 안에 Presentation을 위한 필드나 로직이 추가되게 되어 객체 설계를 망가뜨리게 된다. 때문에 이런 경우에는 분리한 DTO에 Presentation 로직 정도를 추가해서 사용하고, Entity에는 추가하지 않아서 도메인 모델링을 깨뜨리지 않도록 한다.
VO
VO(Value Object) 값 Object로서 값을 위해 쓰입니다. read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가집니다. DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있습니다.
DTO와 VO와의 차이
VO(Value Object)도 DTO와 동일한 개념인데 차이점이 있다면 DTO는 데이터를 계층간 교환(Transfer)하는데 의미가 있고, VO는 읽기만 가능한 read-only 속성을 가진 객체로서 데이터 그 자체에 의미를 두고 있다는 점이다.