이 블로그는 2023년 9월, M2 macbook pro 13인치 환경을 기준으로 작성되었습니다.

개요

안녕하세요! 숙명여자대학교 빅데이터 서포터즈 2기 송유빈입니다.
2023년 11월 8일부터 10일까지 대전에서 열린 "산학 협력 EXPO"에 빅데이터 혁신융합대학이 참여했는데요,
각 학교마다 하나의 프로그램을 개발하는 이 엑스포에서 저희 숙명여자대학교 빅데이터 서포터즈는 음악 추천 프로그램을 개발했습니다.

음악 추천 프로그램 화면음악 추천 프로그램 내용

이 링크 에서 확인해보실 수 있어요!

본인의 현재 감정을 바탕으로 행복/차분/센치에 따른 수치를 입력하면, 그에 어울리는 가사를 가진 음악을 추천해주고, 화면에서 바로 들어볼 수도 있는 간단한 프로그램입니다.


저희 프로그램의 개발 로직은 다음과 같았어요.

저희는 웹에서 데이터베이스를 사용하는 것 뿐만 아니라, 가사 분석을 진행할 때도 데이터베이스 내의 데이터를 사용해야 하기 때문에 데이터베이스를 배포해서 프로젝트를 진행했습니다.
이 과정에서 RDS가 아닌, EC2 컴퓨터에 mysql를 설치해서 진행한 이유는

  1. RDS는 비싸니까...ㅎㅎ
  2. 데이터의 용량이 크지 않아서 (이미지, 음성 파일은 url형태로 저장했기 때문에)

다음과 같아요!

혹시라도 이 블로그를 참고하실 다른 분들이 있으시다면, 본인이 진행하는 프로젝트에 가장 적합한 방법으로 진행하면 좋을 것 같아요.

아무튼 서론이 길었는데! 이번 블로그에서는
mysql로 구축한 데이터베이스를 EC2 컴퓨터에 업로드하여 외부에서도 쉽게 접근할 수 있도록 하는 방법
에 대해 이야기해보려고 합니다.


개발

준비물: AWS 계정, mysql Workbench

1. EC2 인스턴스 생성하기

AWS 가입은 이미 완료한 상태라고 가정하고, EC2 인스턴스를 생성해보겠습니다.

제가 크롬을 좀 더럽게 써서 창이 더러워요.. 허허 못본척 해주시면 감사하겠습니다
아 그리고 위치는 본인의 현재 위치에 가까운 곳으로 하는게 가장 좋아요!
EC2 > 인스턴스 > 인스턴스 시작에 들어가서 이름, 유형 등을 선택하고, 인스턴스를 생성해줍니다. 이 과정은 저보다 다른 분들이 엄~청 자세하게 설명해주셨기 때문에, 저는 간략하게 넘어갈게요!

딱 1개만 주의해주시면 됩니다!

프리티어로 생성할 수 있는 인스턴스 조건인지 확인하기

AWS 과금은 정말 어마어마하고 무서운 세계이기 때문에, 꼼꼼하게 짚고 넘어가서 나쁠 게 없더라고요 ㅎㅎ (경험담)

key 페어 생성 및 파일 이동


인스턴스 생성 과정이 정상적으로 진행되면 마지막에 이런 창이 뜰거예요. 여기서 key 페어 생성을 누르면 파일을 저장할 수 있습니다. 저는 .pem 확장자의 파일을 저장했어요.

그리고 저장된 파일을 ssh 폴더로 이동해주면 됩니다!
터미널에서 진행해도 되는데 귀찮아서 그냥 Finder에서 이동했어요.
chmod 설정은 곧 나옵니다 :)

인바운드 규칙 형성

사실 인스턴스 생성 과정에서도 가능했던 것 같은데, 제가 생성 과정에서 깜빡해서... 다시 인스턴스를 생성하는 불상사는

일어나지 않았습니다! 규칙 수정이 가능하거든요

저는 mysql을 사용하기 때문에 mysql 포트인 3306 포트를 열어주었어요.

2. 서버 연결

EC2를 생성했다면 제 local 환경과 EC2를 본격적으로 연결할 차례입니다. 제 로컬환경에 있는 DB를 EC2에 업로드해야 하니까요.

지금부터는 Terminal을 켭니다.
저는 iTerm2를 사용해요. 둘 다 상관 없습니다

먼저, 본인이 키 페어 파일을 저장한 위치로 이동합니다. 그래야 이 뒤의 과정이 모두 원활하게 진행됩니다!

보안 설정

아까 생성한 키 페어 pem 파일 기억나시죠? 이 파일은 민감한 파일이니까 chmod 명령어를 통해 권한을 지정해 주어야 합니다.

chmod 400 (keyname).pem

chmod는 차례로 사용자(나)/나의 그룹/전체 에 대한 권한을 얘기하고, 4: 읽기, 2: 쓰기, 1: 실행의 권한이 주어집니다. 400은 나에게 읽기 권한만 존재한다는 뜻이죠... 500은 내가 읽기/실행 할 수 있고 640은 나는 읽기/쓰기 할 수 있고 내 그룹은 읽을 수 있고... 이런 식이에요

그래서 제가 생성한 music_recommend.pem 파일을 저만 읽을 수 있는 파일로 권한 설정합니다.

이거 진행할 때 파일이 없다 이런 에러가 뜨시면 본인이 파일 저장/이동한 위치로 이동하셔서 명령어 실행해주시면 돼요!

서버 연결

그러면 이제 서버 연결을 위한 모든 준비가 끝났습니다.

ssh -i (keyname).pem ubuntu@(server주소)

본인 키 페어파일과, 생성한 인스턴스의 서버 주소를 입력하면 EC2 서버로 바로 연결돼요.

이런 화면이 뜨면 정상적으로 연결되었다는 뜻입니다!
지금 Terminal 상에서 EC2 컴퓨터에 접속이 되었다는 뜻이에요.
ubuntu@ip- 가 뜨는 한, 여러분은 지금 집에서 손가락 까딱해서 아마존의 슈퍼컴퓨터에 접속했다는 뜻입니다!
세상 좋죠?

3. mysql 설치

그럼 저희가 EC2 컴퓨터에서 하고자 하는 일 = mysql DB 업로드이기 때문에, mysql을 EC2 상에서 설치해줍니다.

sudo apt install mysql-server

설치가 완료되면 다음과 같이 입력해보세요.

mysql

이건 바로 mysql 실행 명령어입니다. 이걸 입력해서
mysql> 이 뜨면 정상적으로 설치된 거예요!

사용자 권한 부여

이제 다음과 같이 입력해주시면 되는데요,

코드를 설명해드리자면 'user'라는 이름을 가진 유저를 생성한다는 의미입니다. '%'는 모든 ip에서 접속 가능하다는 뜻이에요.
'%'는 접속 제한 범위가 없다는 자유로움이 있지만 그만큼 보안적으로는 위험하니, 보안 상으로 민감한 프로젝트를 진행하시는 분들은 ip를 설정해주시는 게 좋겠죠?
그리고 비밀번호까지 설정해줍니다.


이렇게 뜨면 완료 됐다는 거예요! 에러가 있으면
Query OK, 0 rows affected 라는 문구가 안나올 거예요.

4. Workbench 연결 (선택)

사실 저는 db구축을 python으로 했는데, workbench를 연결해두면 데이터가 저장되는 과정도 바로바로 볼 수 있고, 나중에도 데이터를 손쉽게 확인할 수 있어서 workbench를 연결했어요. 편한 개발을 위해 추천합니다! 다만, workbench 말고도 datagrip 등의 IDE를 통해서도 확인 가능하고(저는 datagrip을 더 좋아해요), 없이도 개발이 가능은 하니 여기서부터는 optional한 부분이라고 생각해주시면 돼요!!

workbench 연결은 아주 간단합니다. 앞의 과정이 모두 성공적으로 진행됐다는 전제 하에 말이죠.

connection method는 TCP/IP로 선택해줍니다.
Hostname에 ip주소 입력하고, 포트 입력하고, 내가 설정한 username과 알맞는 password 입력하기만 하면...

짠!

워크벤치 연결 완료!


워크벤치를 이용하면 이렇게 간단하게 결과를 볼 수 있어요!!

+) mysql-python 연결 코드

import pymysql

db = pymysql.connect(host='(ip주소)', user='(username)', db='(dbname)', password='(pwd)', charset='utf8', client_flag=pymysql.constants.CLIENT.MULTI_STATEMENTS)  # 연결
curs = db.cursor()  # query 실행하는 곳

curs.execute("SELECT * FROM music;")   # music table의 모든 행을 SELECT하는 쿼리
response = curs.fetchall()  # 실행 -> 결과를 return
print(response)   # 결과 출력

+) mysql-php 연결 코드

$con=mysqli_connect("(ip주소)", "(username)", "(pwd)", "(dbname)");

마무리...

가사 분석 말고도 음악 파형 분석이나, BPM 분석 등 음악 관련해서 정말 다양한 분석을 할 수 있더라고요!
저희는 음악에 문외한이라 파형/BPM은 엄두가 나질 않아서...ㅎㅎ 가사로 분석을 진행했지만, 다른 방법으로 진행해봐도 재밌을 것 같은 프로그램입니다. 오히려 더 나은 추천 알고리즘이 될 수도 있을 것 같다고 생각되기도 하구요!

궁금한 점이나 더 나은 방법이 있다고 생각하시면 언제든 댓글로 말씀해주세요!🤗

숙명여자대학교 빅데이터 서포터즈 2기 송유빈이었습니다!

2개의 댓글

comment-user-thumbnail
2025년 11월 19일

잘 보고 갑니다~

1개의 답글