주식 뉴스 분석 프로젝트 <서버 구축><4>

프로젝트 개요 및 각 글들의 링크: https://namth.tistory.com/18

 

이번 글에서는 데이터베이스 설치에 대해서 쓰려고 한다.

설치할 데이터 베이스는 Mysql, MongoDB 두 개를 설치하려고 한다.

 

DB 버전

  • mysql: 8.0.30
  • mongo: 5.0.9

 


MySql

 

MySql 설치

 

패키지 매니저(apt)를 사용할 것이므로, 매니저를 업데이트해준다.

# 패키지 매니저 업데이트
sudo apt update

 

mysql 서버를 설치를 할 예정이므로, 'mysql-server'을 설치해준다.

특정 버전의 mysql 서버를 설치 시 아래의 명령어로 치면 된다.

 

# mysql-server 설치
sudo apt install mysql-server

# 특정 버전 mysql-server 설치
sudo apt install mysql-server=8.0.x

# 내가 서버에 설치한 mysql-server
sudo apt install mysql-server=8.0.30-0ubuntu0.20.04.2

 

MySql 인증정보 세팅

설치가 완료되었다면 이제 보안 세팅을 해야 한다. 

아래의 명령어를 입력한다.

 

# 보안 세팅
sudo mysql_secure_installation

 

명령어를 입력하면 여러 가지 질문들이 나온다.

 

입력이 필요한 내용

  1. 암호 검증 컴포넌트를 추가할 것인가?
    보안상 좋아 보이므로(y)
  2. 암호 강도는 얼마나 강하게 할 것인가?
    보안상 강한 게 좋으므로(strong, 2)
  3. 새로운 root 계정 암호를 입력

secure_installation.1

 

진행 중 세 번째 입력에서 오류가 발생했다.

찾아보니 권한이 꼬여서 생긴 문제로 검색해보면 많은 답변들이 있다.

 

secure_installation에서 나가는 방법은 'y/n' 입력을 물어보는 단계에서 'ctrl^c'을 눌러주면 된다.

 

해결책은 mysql에 들어가 직접 root 계정의 암호를 변경하는 것이다.

root 권한으로 mysql 서버에 접속 후 ALTER 명령어로 root 계정의 비밀번호를 변경한다.

 

# mysql 서버 접속
sudo mysql
# root 계정 암호 변경
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '암호';

 

 

 

비밀번호가 변경되었다면(Query Ok) 이제 다시 secure_installation을 실행해 남은 보안설정을 진행한다.

 

입력이 필요한 내용

  1. 방금 설정한 root 계정의 암호를 입력한다.
  2. root 계정의 암호를 변경하겠는가?
    방금 설정하였으므로(y)
  3. 익명 유저를 제거하겠는가?
    보안에 좋을 것이 없어 보여(y)
  4. root 계정으로 외부 접속이 불가능하게 할 것인가?
    보안상의 이유로 root 권한은 외부 접속이 안되도록 함(y)
  5. test 데이터베이스를 삭제하겠는가?
    필요 없어 보이므로 삭제(y)
  6. 권한 테이블을 reload 하겠는가?
    최신 상태로 업데이트하는 것이므로 (y)

secure_installation.2

 

 

 

MySql 테스트

설정이 완료되었으므로 이제 잘 동작하는지 테스트해봐야 한다.

 

설정한 root 계정으로 로그인을 할 것인데, 전과는 달리 root 권한으로 실행하지 않으므로, 유저와 암호를 추가했다.

 

# mysql 접속, root 계정
mysql -u root -p

 

아래 사진처럼 추가로 암호를 입력하면 접속이 되는 것을 확인할 수 있다.

 

 

 

MySql 유저 추가

보안설정(secure_installation)에서 root 계정으로는 외부 접근이 되지 않도록 설정했다.

외부에서 DB에 접근하여서 데이터를 쓰기 위해서는 새로운 계정이 필요하므로 계정을 생성했다.

 

외부에서 접근하는 계정의 권한은 특정 테이블을 읽고 쓰는 권한만 줄 것이다.

 

우선 유저를 생성한다.

유저는 외부에서 접근이 가능하게 설정한다.

 

# create user
create user '유저'@'%' IDENTIFIED BY '암호';

 

 

 

 그 후 특정 테이블에서만 읽고, 쓰기가 가능하게 권한을 부여한다.

 

# 권한 부여, grant
GRANT SELECT, INSERT ON 테이블 TO '유저'@'%';

 

 


 

MongoDB

 

MongoDB 설치

 

설치는 공식 문서를 참고했다.

https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/#install-mongodb-community-edition

 

패키지 매니저에 mongodb 퍼블릭 키를 추가한다.

'OK'가 나왔다면 제대로 추가가 된 것이고, 아니라면 공식 문서를 참고하면 된다.

# 버전 5.0.9를 사용중이므로 5.0.asc를 사용
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -

 

mongodb 버전 리스트 파일을 생성한다.

# 5.0.9 버전을 사용중이므로 6.0을 5.0으로 변경했다.
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

 

패키지 매니저를 업데이트한다.

# update
sudo apt-get update

 

패키지 매니저를 이용해 mongodb를 설치한다.

 

# 버전 지정없이
sudo apt-get install -y mongodb-org

# 버전 지정
sudo apt-get install -y mongodb-org=5.0.9 mongodb-org-database=5.0.9 mongodb-org-server=5.0.9 mongodb-mongosh=1.5.0 mongodb-org-mongos=5.0.9 mongodb-org-tools=5.0.9

 

MongoDB 설치확인

 

설치된 mongodb를 실행한다.

# mongodb 실행
sudo systemctl start mongod

# mongodb 상태확인
systemctl status mongod

 

 

접속 툴로 mongodb에 접속해본다.

# 인증 없이
mongosh

# 유저로 접속
mongosh -u 유저이름 -p 암호

 

 

MongoDB 유저 생성

Mysql과 마찬가지로 유저를 생성한다.

 

서버 내부에서 사용할 admin 유저와, 외부에서 접속하는 유저를 생성한다.

passwordPrompt의 경우 입력 문구가 나오며 직접 입력하면 된다.

# 일반 유저 생성
db.createUser(
  {
    user: "blogUser",
    pwd:  passwordPrompt(),
    roles: [ { role: "readWrite", db: "blogdb" }]
  }
)

# admin유저 생성
db.createUser(
  {
    user: "blogAdmin",
    pwd:  passwordPrompt(),
    roles: [ { role: 'root', db: 'admin' } ]
  }
)

 

 


 

EC2  인바운드 규칙 수정

mysql과 mongodb가 외부에서도 접근이 가능하도록 ec2 인스턴스의 인바운드 규칙을 수정해야 한다.

 

mysql의 기본 포트와 mongodb의 기본 포트를 인바운드 규칙에 추가하면 된다.

  • mysql: 3306
  • mongodb: 27017

 

aws console -> ec2 서비스 -> 수정할 인스턴스(인스턴스 ID) -> 보안 -> 보안 그룹 -> 인바운드 규칙 편집

 

1. 수정할 인스턴스(인스턴스 ID)

변경할 인스턴스 선택

2. 보안

보안 선택

 

 

3. 보안 그룹 선택

보안 그룹 선택

 

4. 인바운드 규칙 편집 선택

인바운드 규칙 편집 선택

 

5. 지정된 포트로 인바운드 규칙 편집

 

인바운드 규칙 편집

 

 


다음 글

그래프 출력용 웹서버 작성에 대한 글을 쓰려고 한다.

 

 

# 2022.09.30 수정