Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

ssuperjun 님의 블로그

[과제 3-1] NHN Cloud 인스턴스에서 MySQL 설치 - apt 레포지터리 이용 본문

인턴

[과제 3-1] NHN Cloud 인스턴스에서 MySQL 설치 - apt 레포지터리 이용

ssuperjun 2026. 1. 6. 17:38

요구사항

  • NHN Cloud를 이용하여 환경 셋팅
  • MySQL 설치
    • apt 레포지터리를 이용하여 설치 (yum 아님)
  • 설치 후 테스트한 화면 캡쳐
    • user 생성, 권한 부여
    • db 생성, 테이블 생성
    • 데이터 입출력
    • mysql config 내용 확인

설치할 때 최대한 공식 문서를 참고


apt 레포지터리를 이용하여 설치

주의사항

Ubuntu 인스턴스는 yum 대신 apt를 써야 한다.

    ai에게 인스턴스 내에서 yum 설치가 안되는 이유를 물어봤더니, apt를 사용해야 함을 알게 됨

    dpkg 명령 전 wget으로 url을 가져와야 함도 알게 됨

설치 과정

1. 인스턴스 접속

ssh -i [다운로드한 키파일.pem] [사용자계정]@[플로팅IP]

 

2. 인스턴스 내에서 설치 명령어 실행

wget https://dev.mysql.com/get/mysql-apt-config_0.8.36-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.36-1_all.deb

설치 도중 MySQL Server & Cluster, 그리고 mysql-cluster-8.4-lts 선택

 

3. MySQL APT 레포지터리의 패키지 정보 업데이트

sudo apt-get update

 

4. MySQL 설치

sudo apt-get install mysql-server

설치 도중 비밀번호 입력 완료

 

5. MySQL 서버 상태 확인

systemctl status mysql

실행화면1

 

6. MySQL 접속

mysql -u root -p

이후, 설치 도중 설정했던 비밀번호 입력


user 생성, 권한 부여

1. user 생성 방법

CREATE USER '새사용자이름'@'호스트' IDENTIFIED BY '비밀번호';

*예시

//ex1) 내부 접근을 허용하는 사용자 추가
create user 'test'@'localhost' identified by '0000';

//ex2) 외부 접근을 허용하는 사용자 추가
create user 'test'@'%' identified by '0000';

//ex3) 특정 ip만 접근을 허용하는 사용자 추가
create user 'test'@'123.456.789.100' identified by '0000';

//ex4) 특정 ip 대역을 허용하는 사용자 추가
create user 'test'@'192.168.%' identified by '0000';

출처: https://jay-so.tistory.com/67

 

2. 사용자 목록 확인

SELECT user, host FROM mysql.user;

 

권한 종류: select, insert, update, delete, all privileges 등

3. 권한 부여 방법

GRANT 권한종류 ON 데이터베이스.`테이블` TO '사용자이름'@'호스트';

 

4. 권한 적용

FLUSH PRIVILEGES;

 

5. 권한 확인

SHOW GRANTS FOR 'myuser'@'localhost';

실행화면2

6. 사용자 접속 테스트

// mysql 외부에서 실행
mysql -u app_user -p -h <host> mydb

// 예시
mysql -u test_user -p -h localhost DB_TEST

실행화면3
실행화면4

*실행한 명령어

CREATE USER ‘test_user’@‘localhost’ IDENTIFIED BY ‘0000’;
CREATE USER ‘test_user’@‘%’ IDENTIFIED BY ‘0000’;
CREATE USER ‘test_admin_user’@‘%’ IDENTIFIED BY ‘0000’;

SELECT user, host FROM mysql.user;

GRANT SELECT, INSERT, UPDATE, DELETE ON DB_TEST.* TO ‘test_user’@‘localhost’;
GRANT SELECT ON DB_TEST.* TO ‘test_user’@‘%’;
GRANT ALL PRIVILEGES ON DB_TEST.* TO ‘test_admin_user’@‘%’;

FLUSH PRIVILEGES;

SHOW GRANTS FOR ‘test_user’@‘localhost’;
SHOW GRANTS FOR ‘test_user’@‘%’;
SHOW GRANTS FOR ‘test_admin_user’@‘%’;

mysql -u test_user -p -h % DB_TEST

 

*참고

// 사용자 삭제
DROP USER 'myuser'@'localhost';

// 권한 회수
REVOKE INSERT, UPDATE ON mydb.* FROM 'app_user'@'%';

// 비밀번호 변경
ALTER USER 'app_user'@'%' IDENTIFIED BY '1234';

DB, 테이블 생성

1. DB 생성

// DB 생성
CREATE DATABASE db_name;

// DB 있으면 생성 안 하기
CREATE DATABASE IF NOT EXISTS db_name;

// 옵션 포함
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

// DB 목록 확인
SHOW DATABASES;

// DB 사용
USE db_name;

실행화면5
실행화면6

 

2. 테이블 생성 예시

CREATE TABLE 테이블이름 (
    id INT PRIMARY KEY,
    col1 VARCHAR(255) NOT NULL,
    col2 VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
// 테이블 종류 확인
SHOW TABLES;

// 테이블 구조 확인
DESCRIBE 테이블이름;

 

3. 데이터 삽입 및 조회

// 데이터 삽입
INSERT INTO 테이블이름 VALUES (col1값, col2값);

// 데이터 조회
SELECT * FROM 테이블이름;

실행화면7

*실행에 사용한 명령어

    프로그래머스(코딩 연습 사이트) 내 sql 예제 테이블 활용

    데이터 insert 시 단순 정리 위해 ai 활용

CREATE TABLE EMPLOYEES(
	EMP_NO VARCHAR(255) PRIMARY KEY,
	EMP_NAME VARCHAR(100) NOT NULL,
	DEPT_ID VARCHAR(100) NOT NULL,
	POSITION VARCHAR(100) NOT NULL,
	EMAIL VARCHAR(255) NOT NULL,
	COMP_TEL VARCHAR(50) NOT NULL,
	HIRE_DATE DATE NOT NULL,
	SAL INT NOT NULL
);

INSERT INTO EMPLOYEES VALUES
('2019003', '한동희', 'D0005', '팀장', 'donghee_han@grep.com', '031-8000-1122', '2019-03-01', 57000000),
('2020032', '한명지', 'D0005', '팀원', 'mungji_han@grep.com', '031-8000-1123', '2020-03-01', 52000000),
('2022003', '김보라', 'D0005', '팀원', 'bora_kim@grep.com', '031-8000-1126', '2022-03-01', 47000000),
('2018005', '이재정', 'D0006', '팀장', 'jaejung_lee@grep.com', '031-8000-1127', '2018-03-01', 60000000),
('2019032', '윤성희', 'D0006', '팀원', 'sunghee_yoon@grep.com', '031-8000-1128', '2019-03-01', 57000000),
('2020009', '송영섭', 'D0006', '팀원', 'yungseop_song@grep.com', '031-8000-1130', '2020-03-01', 51000000),
('2021006', '이성주', 'D0006', '팀원', 'sungju_lee@grep.com', '031-8000-1131', '2021-03-01', 49000000),
('2018004', '이주리', 'D0007', '팀장', 'joori_lee@grep.com', '031-8000-1132', '2018-03-01', 61000000),
('2020012', '김사랑', 'D0007', '팀원', 'sarang_kim@grep.com', '031-8000-1133', '2020-03-01', 54000000),
('2021018', '김히라', 'D0007', '팀원', 'heera_kim@grep.com', '031-8000-1136', '2021-03-01', 49000000);

멘토님 피드백 반영

26.1.13(화) 추가

결론: VARCHAR 사이즈를 255로 할지, 100으로 할지 고민해서 정했는데, 이런 고민 자체가 무의미했다!

 

VARCHAR와 CHAR의 차이점

CHAR: 고정 길이 문자형

    CHAR(10)으로 선언하면, 입력값이 4글자여도 10글자에 맞춰서 저장됨

    고정 길이라 읽고 쓰는 속도가 상대적으로 빠름

VARCHAR: 가변 길이 문자형

    입력된 문자열 길이만큼 저장하며, 공백을 채우지 않음

    길이가 유동적이라 CHAR보다 읽고 쓰는 속도가 느림 -> 문자열 길이 정보를 별도로 저장해야 하며, 문자열 앞에 1바이트 또는 2바이트의 길이 정보가 포함됨. 데이터를 읽거나 쓸 때, 실제 크기를 파악하거나 기록하는 연산이 필요하다.


mysql config 내용 확인

MySQL 내부에서 현재 적용 중인 설정값 확인

SHOW VARIABLES;

// 특정 설정값만 확인
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'sql_mode';

실행화면8

*config 수정은 mysql 외부에서 mysqld.cnf 파일에서 수정 가능