ssuperjun 님의 블로그
[과제 3-1] NHN Cloud 인스턴스에서 MySQL 설치 - apt 레포지터리 이용 본문
요구사항
- 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

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';

6. 사용자 접속 테스트
// mysql 외부에서 실행
mysql -u app_user -p -h <host> mydb
// 예시
mysql -u test_user -p -h localhost DB_TEST


*실행한 명령어
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;


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 테이블이름;

*실행에 사용한 명령어
프로그래머스(코딩 연습 사이트) 내 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';

*config 수정은 mysql 외부에서 mysqld.cnf 파일에서 수정 가능
'인턴' 카테고리의 다른 글
| [과제 3-2] NHN Cloud 인스턴스에서 MySQL 설치 - 압축파일 이용 (0) | 2026.01.08 |
|---|---|
| [과제 4-1] MySQL 자동 설치 스크립트 생성 - apt 레포지터리 이용 (0) | 2026.01.07 |
| [과제 2] 사칙연산 계산기 만들기 (0) | 2026.01.06 |
| [과제 1] bash, vi 기본 커맨드 익히기 (1) | 2026.01.06 |
| NHN Cloud 콘솔에서 인스턴스 생성 (0) | 2026.01.06 |