학습일지

[스나이퍼팩토리] 한컴AI아카데미(26.05.08)

cd-record 2026. 5. 8. 17:56

 

리눅스 환경구축 

1. 버추얼 박스

https://www.virtualbox.org/

 

Oracle VirtualBox

Powerful open source virtualization For personal and enterprise use VirtualBox is a general-purpose full virtualization software for x86_64 hardware (with version 7.1 additionally for macOS/Arm and with version 7.2 also for Windows/Arm), targeted at laptop

www.virtualbox.org

 

2. 리눅스 설치(ubuntu-22.04.5-live-server-amd64.iso)

https://ubuntu.com/download/server

 

Get Ubuntu Server | Download | Ubuntu

Get Ubuntu Server one of three ways; by using Multipass on your desktop, using MAAS to provision machines in your data centre, or installing it directly on a server.

ubuntu.com

 

3. 리눅스 기본 명령어

pwd #현재경로

ls -l #디렉토리 목록

sudo shutdown now #지금 종료

ip a #ip 확인

mkdir flask #flask라는 디렉토리 생성
#(rwxrwxr-x): 리눅스 권한 체계(소유자/그룹은 읽기·쓰기·실행 가능, 나머지는 읽기·실행만 가능)

 

4. 원격 접속 및 시스템 업데이트

sudo apt install openssh-server #원격 접속(SSH)기능을 설치

sudo systemctl start/enable ssh #SSH를 지금 실행하고, 부팅 시 자동 실행되게 설정

sudo apt update / upgrade #설치 가능한 패키지 목록을 갱신하고, 실제 프로그램들을 최신 버전으로 업데이트합니다.

 

5. 파이썬 가상환경 및 Flask 설치

sudo apt install python3.12 #3.12 버전 파이썬 설치

sudo apt install python3.12-venv #파이썬 3.12용 가상환경 도구를 설치

python3.12 -m venv venv312 #파이썬3.12 가상머신 만들기

source venv312/bin/activate #가상환경 안으로 들어가기

pip install flask / mysql-connector-python #웹 서버 프레임워크인 Flask와 mySQL 연결도구를 설치

 

6. MariaDB(데이터베이스) 설치 및 보안 설정

sudo apt install mariadb-server #MariaDB 데이터베이스를 설치

sudo mysql_secure_installation #DB의 초기 보안 설정(루트 비번 설정, 익명 유저 삭제 등)을 진행

 

7. 추가 패키지 설치

# 공통 속성 패키지 설치
sudo apt install software-properties-common -y #저장소 관리 도구를 설치

# deadsnakes PPA 추가
sudo add-apt-repository ppa:deadsnakes/ppa -y # 최신 파이썬 버전들이 모여있는 외부 저장소를 시스템에 추가

 

8. 외부 접속 허용

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf # DB 설정 파일 열기
# bind-adress = 0.0.0.0 으로 변경
# '내부(127.0.0.1)만 보지말고, 모든 IP(0.0.0.0)에서 오는 접속을 받으라는 뜻'

sudo systemctl restart mariadb # 변경된 설정을 적용하기 위해 DB 재시작

 

9. 데이터베이스 사용 및 설정

mysql -u root -p # mysql db 접속
sudo mysql # mysql db접속

use mysql # mysql 데이터베이스 연결

create database hancom_db; # hancom_db 데이터베이스 생성
create user 'hancom'@'%' from ~

 

Remote - SSH: Editing Configuration Files

 

*Remote - SSH 확장 프로그램을 사용하면 SSH 서버가 설치된 모든 원격 시스템을 개발 환경으로 활용

 

**사용법: VScode에서 SSH 원격 접속하기 | RemoteSSH 사용 방법 검색 후 찾아보기

 

MariaDB

 MariaDB는 MySQL을 포크한 오픈소스 관계형 DBMS로, MySQL과 높은 호환성을 유지하면서도 Aria, ColumnStore, MyRocks 같은 스토리지 엔진을 추가해 기능을 확장

 

1. MariaDB와 MySQL의 역사적 관계

MariaDB는 MySQL의 '포크(Fork)' 버전. '포크'란 오픈소스 프로젝트의 소스 코드를 통째로 복사해 새로운 독립 프로젝트를 시작하는 것을 말합니다.

  • 배경: MySQL의 원조 개발자들이 오라클(Oracle)의 인수에 반발하여 오픈소스의 자유도를 유지하기 위해 탄생시켰습니다.
  • 호환성: 초기에는 MySQL의 명령어를 그대로 쓸 수 있는 '대체제' 역할을 했으나, 현재는 각자 독자적인 기능을 추가하며 발전 중입니다.

Q. SELECT * FROM user; 명령어가 MariaDB에서 실행되지 않는 이유?

 

① 데이터베이스 컨텍스트(Context)의 부재

사용자 정보는 일반 데이터베이스가 아닌 시스템 관리용 mysql 데이터베이스에 저장됩니다.

  • MySQL & MariaDB 공통: 접속 직후에 명령어를 치면 "어느 DB에서 찾을지" 지정되지 않아 에러가 발생합니다.
  • 해결책: USE mysql; 명령을 먼저 실행하거나 FROM mysql.user처럼 전체 경로를 명시해야 합니다.

② MariaDB의 구조적 진화: Table vs View

MariaDB는 보안과 유연성을 위해 사용자 권한 정보를 저장하는 방식(Storage Engine)을 MySQL과 다르게 설계했습니다.

항목 MySQL (전통적 구조) MariaDB (현대적 구조)
실제 저장 테이블 mysql.user mysql.global_priv
조회용 객체 user (진짜 테이블) user (가상 뷰, View)
특징 각 컬럼(Host, User, Password)에 데이터가 물리적으로 저장됨 모든 권한 정보를 JSON 형태 등으로 global_priv에 몰아넣고, 기존 사용자를 위해 user라는 **가상 보기(View)**만 제공함

 

os.getnev

파이썬에서 환경 변수(Environment Variable)의 값을 가져올 때 사용하는 함수

 

1단계: 라이브러리 설치

터미널(가상환경 활성화 상태)에서 아래 명령어를 입력합니다.

pip install python-dotenv

 

2단계: .env 파일 생성

프로젝트 최상위 폴더(Flask의 app.py가 있는 곳)에 .env 파일을 만들고 내용을 작성합니다. (주의: = 앞뒤에 공백이 없어야 합니다.)

# .env 파일 내용
FLASK_SECRET_KEY=my_very_secret_string_123
TOUR_API_KEY=ABC123XYZ
DB_URL=sqlite:///my_database.db

 

3단계: 파이썬 코드에서 불러오기

load_dotenv()라는 함수를 먼저 호출해줘야 os.getenv가 .env 파일을 인식합니다.

import os
from dotenv import load_dotenv

# 1. .env 파일의 내용을 환경 변수로 불러오기
load_dotenv() 

# 2. os.getenv를 사용하여 가져오기
secret_key = os.getenv('FLASK_SECRET_KEY')
api_key = os.getenv('TOUR_API_KEY')

print(f"불러온 키: {api_key}")

 

Q. 사용하는 이유?

1. 보안 (Security)

소스 코드에 API 키나 DB 비밀번호를 직접 쓰는 것을 하드코딩(Hard-coding)이라고 합니다.

  • 위험성: 만약 코드를 GitHub 같은 공개 저장소에 올리면, 전 세계 누구나 내 서비스의 DB에 접속하거나 내 API 키를 도용해 요금을 발생시킬 수 있습니다.
  • 해결: .env 파일은 '비밀 금고' 역할을 합니다. 코드는 공유하되, 실제 비밀번호가 담긴 .env 파일은 .gitignore를 통해 업로드에서 제외함으로써 열쇠를 안전하게 보관하는 것입니다.

2. 환경 분리 (Environment Separation)

개발을 하다 보면 내 컴퓨터(로컬)에서 작업할 때와 실제 서버(배포)에 올렸을 때의 설정이 달라야 하는 경우가 많습니다.

  • 로컬 환경: 테스트용 가벼운 데이터베이스(sqlite3) 사용, 디버그 모드 ON.
  • 배포 환경: 실제 운영용 데이터베이스(MariaDB), 디버그 모드 OFF.
  • 이점: 소스 코드를 한 줄도 수정하지 않고, 각 환경에 놓인 .env 파일 내용만 다르게 설정하면 프로그램이 알아서 상황에 맞게 동작합니다.

3. 협업과 유지보수 (Collaboration)

여러 명의 개발자가 함께 작업할 때, 각자의 컴퓨터 환경(폴더 경로, 포트 번호 등)은 제각각입니다.

  • 상황: A 개발자는 DB 포트를 3306으로 쓰고, B 개발자는 3307로 쓴다면 코드를 매번 바꿔야 할까요?
  • 해결: 코드에는 os.getenv('DB_PORT')라고만 적어두고, 각자 자신의 .env 파일에 원하는 포트를 적으면 됩니다. 공통된 코드 형식을 유지하면서 개인화된 설정을 지원할 수 있습니다.

 

 

 

 

 

 

 

——————————————————————————

본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 (B-log) 리뷰로 작성 되었습니다.