[한화시스템 BEYOND SW캠프 7기] #10. 사용자 관리 / VIEW / PROCEDURE

아로롱·2024년 5월 23일

BEYOND SW CAMP 7

목록 보기
10/30
post-thumbnail

👥 사용자 관리

  • 신규 사용자 생성
    CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'testpw;
  • 사용자 목록 조회
    SELECT user, host FROM mysql.user;
  • 특정 DB의 특정 테이블에 특정 권한 부여 (예시는 SELECT 권한 부여)
    GRANT SELECT ON board.author TO 'testuser'@'localhost';
  • 사용자 권한 회수
    REVOKE SELECT ON board.author FROM 'testuser'@'localhost';
  • 권한 변경사항 적용(설정 변경 확정)
    FLUSH PRIVILEGES;
  • 특정 사용자 권한 조회
    SHOW GRANTS FOR 'testuser'@'localhost';

⌨️ 실습

-- 사용자 목록 조회
select * from mysql.user;

-- 사용자 생성
-- localhost 를 % 로 변경 : 원격 포함한 anywhere 접속
create user 'test1'@'localhost' identified by '4321';

-- 사용자에게 권한 부여 (root 에서 test1 에게 권한 부여)
-- root 계정에서 부여. 당연함.
grant select on board.author to 'test1'@'localhost';

-- test1 로 로그인 후에 root 계정에 있던 author 테이블 조회해보기
select * from board.author;

-- 환경설정을 변경 후 확정
flush privileges;

-- 권한 조회
show grants for 'test1'@'localhost';

-- 사용자 권한 회수
revoke select on board.author from 'test1'@'localhost';

-- 사용자 삭제
drop user 'test1'@'localhost';

👊🏻 오류가 발생했었는데 root 계정에서 해야하는 부여를 test 계정에서 실행해서 발생한 오류였다.
당연한 문제였는데 막상 오류가 나니 침착하지 못했다..!


👓 VIEW

  • 가상의 테이블로서 실제 데이터를 저장하지 않는 데이터 베이스.

  • 실제 베이스를 참조하는 것으로, 테이블보다는 쿼리에 가까움.

    • 예) 필요한 컬럼인 name, age, role을 "보기 권한"만 부여하여 조회
  • 뷰 생성 기본 문법
    CREATE VIEW author_for_view AS SELECT 컬럼1, 컬럼2, ... FROM 테이블명;

  • 뷰를 통한 테이블 조회
    SELECT * FROM author_for_view;

  • JOIN 등의 복잡한 쿼리 결과를 view로 생성해두면, 이후에는 view를 간단한 쿼리로 호출.

  • view 를 활용해 필요한 컬럼만 선택하여 보여줄 수 있음.

⌨️ 실습

-- view 생성
create view author_for_marketing_team as select name, age, role from author;
-- view 조회
select * from author_for_marketing_team;
-- (test1 계정에)view 권한 부여
grant select on board.author_for_marketing_team to test1;
-- test1 계정에서 권한 확인
SELECT * FROM board.author_for_marketing_team;

-- view 수정(변경)
create or replace view author_for_marketing_team
as select name, email, age, role from author;
-- view 삭제
drop view author_for_marketing_team;

🗃️ 저장 프로시저 (Stored Procedure)

  • 데이터베이스에 저장되어 실행할 수 있는 하나 이상의 SQL 문의 집합.
    • SQL 문을 미리 컴파일하여 저장 => 여러번 재사용 가능하며, 서버의 부하를 줄이고 성능을 향상시킴.
    • 복잡한 조건문, 반복문 등 저장 프로시저는 절차적 프로그래밍 언어로서 사용.

⌨️ 실습

-- 등급 조회 >> IF문 활용
-- 글을 100개 이상 쓴 사용자는 고수입니다. 출력
-- 글을 10개 이상, 100개 미만 중수입니다.
-- 그 외 초보입니다.
DELIMITER //
CREATE PROCEDURE 등급조회(in emailInput varchar(255))
BEGIN
    declare authorID int;
    declare count int;
    select id into authorId from author where email = emailInput;
    select count(*) into count from post where author_id = authorId;
    IF count >= 100 then
        select '고수입니다.';
    ELSEIF count >= 10 and count < 100 then
        select '중수입니다.';
    ELSE
        select '초보입니다.';
    END IF;
END
// DELIMITER ;
- WHERE 반복을 통해 post 대량 생성
-- 사용자가 입력한 반복 횟수에 따라 글이 도배되는데, title은 '안녕하세요'
DELIMITER //
CREATE PROCEDURE 글도배(in ab int)
BEGIN
    declare count int default 0;
    WHILE count < ab DO
        INSERT INTO post(title) values('안녕하세요');
        SET count = count + 1;
    END WHILE;
END
// DELIMITER ;

👊🏻 WHERE 실습에서는 꽤 헤맸다. 오류가 발생해 결국 강사님께 질문 드렸다.

  1. write 라는 변수를 이용했는데, 명령어 취급이 될 수 있어 급하게 변경했다.
  2. default > defalut 로 작성하는 오타 .. 발견하지 못했다🥲
  3. -- NULL > YES : 비어있어도 됨
    -- NULL > NO : 비어있으면 안됨!
    이.. 당연한 걸 헷갈려버렸다.. 정신 차리자❗️❗️❗️❗️
-- sql에서 문자열 합치는 concat('hello', 'world');
-- 글 상세조회 : input 값이 postId
-- title, contents, '홍길동' + '님'
DELIMITER //
CREATE PROCEDURE 상세조회(in postId int)
BEGIN
    declare authorName varchar(255);
    SELECT name into authorName from author
    where id = (select author_id from post where id = postId);
    set authorName = concat(authorName, '님');
    SELECT title, contents, authorName from post where id = postId;
END
// DELIMITER ;

👊🏻 위 코드는 수업 중 JOIN을 이용한 분들이 많으셔서 나도 시도해보았다 !

최종 코드

DELIMITER //
CREATE PROCEDURE 상세조회(in postId int)
BEGIN
    SELECT p.title, p.contents, concat(a.name, '님')
    FROM post p INNER JOIN author a
    ON p.author_id = i.id
    WHERE p.id = postID;
END
// DELIMITER ;

성공 !


⛽️MariaDB(mysql) DB 엔진

  • InnoDB

    • ACID 트랜잭션을 지원하는 엔진
  • MyISAM

    • 트랜잭션을 지원하지 않는 비트랜잭션 엔진
  • 엔진종류 조회

    • SHOW ENGINES;
  • DB 서버 구성

    • DB의 사용성에 문제가 생기지 않도록 하는 고가용성(=HA. 장애없는, 문제없는 DB) 확보를 위한 방안.
  • HA구성

  • 고가용성. 장애없는 지속가능한 서비스를 지칭하고, 서버의 다중화 구성을 의미.

  • MySQL 프록시 및 로드 밸런서

    • 사용자의 요청을 분산처리 하는 것이 로드 밸런서(부하분산)
    • 프록시는 사용자의 요청을 서버에 "대리"해서 전달하는것(리버스 프록시라고도 함)
      • 공유기에서 내 휴대폰 > 리버스 프록시
      • 내가 메일 전송, 메세지 전송 > 포워드 프록시

📌 today

실습이나 복습 중 발생하는 오류의 대부분은 오탈자, 경로 오류 등
내가 캐치할 수 있는 그런 당연한 것들에서부터 오는 오류였다.
하나 하나 찬찬히 뜯어보고도 모르겠어서 강사님께 질문 드렸는데,
단순한 것 때문임을 아는 순간.. 그런 질문을 했다는 나 자신도 부끄럽고
이런 질문으로 강사님의 시간을 빼앗아버렸다는 것도 너무 싫었다.
남을 위해서도 나를 위해서도 정신 바짝 차리자. 잘 하자❗️❗️❗️❗️❗️❗️

profile
Dilige, et fac quod vis

0개의 댓글