컨테이너 혁명, 개발을 바꾸다

 

🔍 Docker 개념 요약

Docker는 애플리케이션을 컨테이너라는 단위로 패키징, 배포, 실행할 수 있게 해주는 오픈소스 플랫폼입니다.

컨테이너는 "가벼운 가상 머신"처럼 동작하며, 코드와 그 실행 환경(라이브러리, 설정 등)을 하나로 묶어 이식성을 높여줍니다.

🔧 비유로 이해해보자:

개발 환경을 일일이 맞추는 게 번거롭다고요?
Docker는 마치 완성된 도시락처럼, “딱 그 상태로 어딜 가도 똑같이 먹을 수 있는” 앱을 만들어줍니다. 🍱

 

✅ Docker를 사용하는 이유

이유설명
이식성 (Portability) OS나 하드웨어에 상관없이 어디서든 동일하게 실행 가능
일관성 (Consistency) "내 컴에선 되는데?" 현상 방지
빠른 배포 (Rapid Deployment) 빌드 → 실행 → 종료까지 몇 초면 끝
경량화 (Lightweight) VM보다 훨씬 가벼움 (수 MB 수준도 가능)
마이크로서비스와 찰떡궁합 각각의 서비스들을 개별 컨테이너로 관리 가능

 

🛠 Docker 설치 방법 (Ubuntu 기준)

 

https://get.docker.com/ 

일단 요사이트를 참조하세요

 

# Usage
# ==============================================================================
#
# To install the latest stable versions of Docker CLI, Docker Engine, and their
# dependencies:
#
# 1. download the script
#
#   $ curl -fsSL https://get.docker.com -o install-docker.sh
#
# 2. verify the script's content
#
#   $ cat install-docker.sh
#
# 3. run the script with --dry-run to verify the steps it executes
#
#   $ sh install-docker.sh --dry-run
#
# 4. run the script either as root, or using sudo to perform the installation.
#
#   $ sudo sh install-docker.sh

요 부분 쉘에다 복사해다 붙이고 실행

# Command-line options
# ==============================================================================
#
# --version 
# Use the --version option to install a specific version, for example:
#
#   $ sudo sh install-docker.sh --version 23.0
#
# --channel <stable|test>
#
# Use the --channel option to install from an alternative installation channel.
# The following example installs the latest versions from the "test" channel,
# which includes pre-releases (alpha, beta, rc):
#
#   $ sudo sh install-docker.sh --channel test
#
# Alternatively, use the script at https://test.docker.com, which uses the test
# channel as default.
#
# --mirror <aliyun|azurechinacloud>
#
# Use the --mirror option to install from a mirror supported by this script.
# Available mirrors are "Aliyun" (https://mirrors.aliyun.com/docker-ce), and
# "AzureChinaCloud" (https://mirror.azure.cn/docker-ce), for example:
#
#   $ sudo sh install-docker.sh --mirror AzureChinaCloud</aliyun|azurechinacloud></stable|test>

그리고 다시 요부분도 실행

아래는 챗 지피티의 설명이에요

 

🔽 1. 기존 설치 제거 (이미 있는 경우)

sudo apt-get remove docker docker-engine docker.io containerd runc

 

⬇️ 2. 필수 패키지 설치

sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release
 

🔑 3. Docker 공식 GPG 키 추가

 
sudo mkdir -p /etc/apt/keyrings
 
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

 

📌 \ (역슬래시)의 의미

**리눅스/유닉스 셸에서는 역슬래시 \를 줄 끝에 붙이면, "이 줄과 다음 줄은 하나의 명령이다"**라고 알려주는 거야.

 

✅ 주의할 점

  • \ 뒤에 공백이 있으면 안 돼!
     
    echo \           ← 이런 식이면 안 됨 ❌
  • 다음 줄과 붙어 있는 것처럼 작동

 

📦 4. 리포지토리 추가

echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 

 

📦 리눅스에서 리포지토리(Repository)란?

리포지토리는 **소프트웨어 패키지들이 저장되어 있는 서버(또는 저장소)**를 말해요.
리눅스에서 프로그램을 설치할 때 apt install 같은 명령을 쓰면, 이 명령은 결국 리포지토리에서 해당 소프트웨어를 다운로드해와서 설치하는 거예요.

 

⚙️ 5. Docker 설치

sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
 

✅ 6. 설치 확인

sudo docker --version

 

---> 저도 아래처럼 사용해보지는 못했어요 함께 알아가 봅시다 고마워요

🚀 Docker 기본 사용 예시

# Hello World
컨테이너 실행
sudo docker run hello-world
 
# 컨테이너 목록 보기
sudo docker ps -a
 
# 중지된 컨테이너 삭제
sudo docker rm [컨테이너ID]
 
# 이미지 삭제
sudo docker rmi [이미지ID]

 

🔒 비root 사용자로 실행하려면?

sudo usermod -aG docker $USER

그 후 로그아웃하고 다시 로그인하면 sudo 없이 docker 명령 사용 가능!

✍️ 마무리

Docker는 개발자, DevOps, 데이터 사이언티스트, 심지어 AI 모델 개발자에게도 없어선 안 될 도구입니다.
“한 번 만들면, 어디서든 똑같이 실행되는 환경”, 이게 바로 Docker의 매력이죠!

웹 서버를 선택할 때 가장 많이 비교되는 두 가지, NginxApache. 각자의 강점과 차이점을 이해하면 프로젝트에 맞는 최적의 선택이 가능해요. 오늘은 이 둘의 비교, 설치 방법, 작동 원리까지 함께 알아보겠습니다.

운영체제는 리눅스환경이라고 생각하세요 

아마 데비안리눅스나 UBUNTU 환경이겠죠

🔍 1. Nginx vs Apache: 핵심 비교

항목                                                   Apache                                                      Nginx

 

출시년도 1995년 2004년
구조 프로세스 기반 (Process-based) 이벤트 기반 (Event-driven)
성능 적은 동시접속 처리에 유리 높은 동시접속 처리에 탁월
설정파일 .htaccess 지원 중앙 설정만 지원 (nginx.conf)
리버스 프록시 상대적으로 덜 발달 매우 강력
동적 컨텐츠 자체 처리(PHP 모듈) 외부 앱(FastCGI 등)과 연동
윈도우 지원 상대적으로 안정적 리눅스 환경에서 더 안정적

 

⚙️ 2. 설치 방법

✅ Ubuntu에서 Apache 설치

 
sudo apt update
sudo apt install apache2
 

서비스 시작/중지/확인:

 
sudo systemctl start apache2
 
sudo systemctl stop apache2
 
sudo systemctl restart apache2
 
sudo systemctl status apache2

 

브라우저에서 http://localhost 확인해보세요. "It works!" 메시지가 보이면 성공입니다.

 

✅ Ubuntu에서 Nginx 설치

sudo apt update sudo apt install nginx

 

서비스 시작/중지/확인:

 

sudo systemctl start nginx

 

sudo systemctl stop nginx

 

sudo systemctl restart nginx


sudo systemctl status nginx

 

브라우저에서 http://localhost에 접속하면 Nginx 환영 페이지가 보입니다.

 

✍️ 마무리

  • Nginx는 빠르고 가볍고, 리버스 프록시로도 아주 좋아요.
  • Apache는 설정이 유연하고 PHP와 친화적이에요.

👉 최신 트렌드는 Nginx로 정적 콘텐츠/프록시 처리하고, Apache는 백엔드 처리에 사용하거나, 둘을 혼합 구성하는 것도 많습니다.

 

🌐 Nginx vs Apache: 기본 웹 루트 경로 비교

항목NginxApache (Ubuntu 기준)
기본 문서 경로 /var/www/html /var/www/html
기본 설정 파일 /etc/nginx/sites-available/default /etc/apache2/sites-available/000-default.conf
메인 설정 파일 /etc/nginx/nginx.conf /etc/apache2/apache2.conf
서비스 재시작 sudo systemctl restart nginx sudo systemctl restart apache2

🔍 즉, 두 서버 모두 기본으로는 /var/www/html/index.html 파일을 보여줍니다.
이 파일을 수정하면, 브라우저에서 서버 IP로 접속했을 때 나오는 화면이 바뀝니다!

 

🛠 디렉토리 구조 & 설정 변경 요약

✅ 1. 웹 루트 디렉토리 변경하고 싶다면?

📌 Nginx:

sudo nano /etc/nginx/sites-available/default
 
nano 에디터에서 
 
root /var/www/html; # 이 줄을 원하는 경로로 수정

예: /home/ubuntu/my-site/public 등으로 변경 가능

 

📌 Apache:

sudo nano /etc/apache2/sites-available/000-default.conf


nano 에디터에서 

DocumentRoot /var/www/html

이 경로를 변경하면 기본 루트 경로가 바뀝니다.

✅ 2. 디렉토리 권한 설정

 
sudo chown -R $USER:$USER /var/www/html

 

혹은 

sudo chmod -R 777 /경로/디렉토리명


-R : Recursive (재귀적 → 디렉토리 내부 전체 적용) 대문자로 써야한대요 

777 : 소유자, 그룹, 기타 사용자 모두에게 읽기(r), 쓰기(w), 실행(x) 권한 부여

웹 루트 디렉토리를 본인 계정이 수정 가능하도록 변경

💡 안전한 권한 설정 예시

  • 웹 디렉토리:→ **웹서버 전용 사용자(www-data)**에게 소유권을 주고, 다른 사용자들은 실행/읽기만 가능하게
     
     
  • sudo chown -R www-data:www-data /var/www/html
  • 혹은
  • sudo chmod -R 755 /var/www/html
  • → **웹서버 전용 사용자(www-data)**에게 소유권을 주고, 다른 사용자들은 실행/읽기만 가능하게

✅ 3. 설정 적용 (재시작)

sudo systemctl restart nginx 
 
# 또는
 
sudo systemctl restart apache2

 

✅ 4. 방화벽 열기 (필요 시)

sudo ufw allow 'Nginx Full'
 
# 또는
 
sudo ufw allow 'Apache Full'

📌 숫자 타입 (Numeric Types)

 

INT 정수 (4바이트)
TINYINT 작은 정수 (1바이트)
SMALLINT 작은 정수 (2바이트)
MEDIUMINT 중간 크기 정수 (3바이트)
BIGINT 큰 정수 (8바이트)
DECIMAL(M, D) 고정 소수점 숫자
FLOAT 부동 소수점 숫자 (4바이트)
DOUBLE 더 정밀한 부동 소수점 숫자 (8바이트)

 

📌 문자열 타입 (String Types)

 

CHAR(N) 고정 길이 문자열
VARCHAR(N) 가변 길이 문자열
TEXT 가변 길이 텍스트 데이터
TINYTEXT 작은 텍스트 (최대 255자)
MEDIUMTEXT 중간 크기 텍스트 (최대 16MB)
LONGTEXT 큰 텍스트 (최대 4GB)
BLOB 이진 데이터 저장
ENUM 선택된 값 중 하나 (ex. '남', '여')
SET 여러 값 선택 가능

 

📌 날짜 및 시간 타입 (Date & Time Types)

 

DATE 날짜 (YYYY-MM-DD)
DATETIME 날짜 및 시간 (YYYY-MM-DD HH:MM:SS)
TIMESTAMP UNIX 타임스탬프 (1970년 이후)
TIME 시간 (HH:MM:SS)
YEAR 연도 (YYYY)

 

함수설명

CURDATE() 현재 날짜 (형식: 'YYYY-MM-DD')
CURRENT_DATE CURDATE()의 또 다른 이름
NOW() 현재 날짜와 시간 ('YYYY-MM-DD HH:MM:SS')
CURRENT_TIMESTAMP NOW()과 동일

 

📌 JSON 타입

 

JSON JSON 형식의 데이터 저장

 

MySQL에서 데이터 타입을 선택할 때, 저장 공간과 성능을 고려하는 것이 중요합니다!

sudo mysql_secure_installation

요걸로 비밀번호랑 기타 설정하는거에요

1.우선 

비밀번호 입력창이 나오면 엔터 혹은 비밀번호 입력합니다 

 

저는 root 사용자가 auth_socket 방식으로 되어 있어서 다시 비밀번호 설정할 때 비밀번호를 안 물어봅니다

설정은 다음과 같이 확인합니다

 

mysql> select user, host,plugin from mysql.user where user = 'root' ;
+------+-----------+-------------+
| user | host      | plugin      |
+------+-----------+-------------+
| root | localhost | auth_socket |
+------+-----------+-------------+
1 row in set (0.01 sec)

 

만약 plugin이 auth_socket으로 설정되어 있다면, 현재 OS 인증 방식이 활성화된 상태입니다.

sudo mysql 로 접속하면 됨

 

OS 인증 방식과 비밀번호 인증 방식의 차이점

  • OS 인증 방식(auth_socket)
    → sudo mysql  로 접속하며, 비밀번호 없이 인증됨.
  • 비밀번호 인증 방식(mysql_native_password)
    → mysql -u root -p 로 접속하며, 비밀번호 입력 필요.

비밀번호 인증 방식으로 변경 (선택 사항)

비밀번호를 사용해 로그인할 수 있도록 변경하려면 다음 명령어를 입력하세요:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '새로운비밀번호'; FLUSH PRIVILEGES;

 

이후에는 아래 명령어로 로그인할 수 있습니다:

mysql -u root -p

 

2. 두번째 - 개발환경이면 그냥 엔터해도 돼요

"Remove anonymous users?" (익명 사용자를 제거하시겠습니까?)

  • **Yes(y/Y)**를 선택하면 익명 사용자 계정이 삭제됩니다.
    • 운영 환경에서는 보안을 위해 익명 사용자를 제거하는 것이 일반적입니다.
  • **No(아무 다른 키)**를 선택하면 익명 사용자가 그대로 유지됩니다.
    • 만약 테스트 목적으로 계속 사용할 경우 유지할 수도 있습니다.

추천: 운영 환경이라면 Yes(Y)를 선택하여 익명 사용자를 제거하는 것이 더 안전합니다. 하지만 개발 및 테스트 환경이라면 유지해도 문제가 없습니다. 😊

 

3. MySQL의 root 계정이 원격에서 로그인할 수 있도록 허용할지 물어요 저는 NO

  • 기본적으로 root 계정은 localhost에서만 로그인 가능하도록 제한됩니다.
  • 이는 네트워크를 통해 공격자가 root 계정의 비밀번호를 추측하여 로그인하는 것을 방지하기 위함입니다.
  • 만약 원격(root) 로그인을 허용하면, 인터넷이나 외부 네트워크에서 root 계정으로 접속할 수 있게 됩니다.
  • 원격 접근을 차단하면 보안이 강화되며, 일반적으로 운영 환경에서는 차단하는 것이 추천됩니다.

✅ 추천:

  • Yes(y/Y)를 입력하면 root 계정이 오직 localhost에서만 로그인할 수 있도록 설정됩니다. (더 안전함)
  • No(아무 다른 키)를 입력하면 root 계정이 원격에서 접속할 수 있습니다. (보안 위험 증가)

운영 환경이라면 보안을 위해 Yes(Y)를 입력하는 것이 좋고, 만약 원격으로 root 접근이 꼭 필요하다면 No를 선택할 수도 있습니다.

 

4. MySQL의 'test' 데이터베이스를 삭제할지 - 저는 그냥 엔터

  • 기본적으로 MySQL에는 test라는 데이터베이스가 존재합니다.
  • 이 데이터베이스는 테스트 용도로 만들어졌으며, 누구나 접근할 수 있습니다.
  • 하지만 **운영 환경(production environment)**에서는 보안상의 이유로 제거하는 것이 권장됩니다.

5. 권한(privilege) 테이블을 새로 고쳐(reload) 변경 사항을 즉시 적용할 것인지

    저는 YES

 

✅ 추천:

  • **Yes(y/Y)**를 입력하면 권한 테이블이 다시 로드되어 모든 변경 사항이 즉시 적용됩니다.
    → 일반적으로 Yes(Y)를 선택하는 것이 좋습니다!
  • **No(아무 다른 키)**를 입력하면 지금까지 변경한 내용이 즉시 반영되지 않고, MySQL을 다시 시작해야 적용됩니다.

운영 환경이라면 바로 적용하는 것이 편리하므로 Yes(Y)를 입력하는 것이 좋습니다!

이 부분은 프롬프트 엔지니어링이란 무엇인가 더욱 깊이 알아보고 

이 기술을 배우려면 어떻게 해야 하는 지 알아보려고 해요

 

프롬프트 엔지니어링은 요즘 LLM을 제대로 활용하기 위해 꼭 알아야 할 기술이 되었죠.

단순히 “프롬프트 잘 쓰는 법”을 넘어서, 요즘은 하나의 응용 개발 분야로 발전하고 있어요.

 

🔎 1단계: 개념과 기법 익히기 

📘 추천 학습 자료 (영어네요 배울 수 있는 사이트 알아봐야겠어요)

📚 익혀야 할 주요 기법

  • Few-shot / Zero-shot prompting (바로물어보기 / 예제를주고 물어보기)
  • Chain-of-thought (CoT) prompting (단계별로 답하도록 구성하기)
  • Role prompting (예: “너는 now senior developer야”)
  • Reflexion / ReAct prompting (스스로 다시 물어보고 답변하도록 하기 , 정확도가 중요할 경우 사용)
  • Instruction tuning vs. in-context learning (인공지능을 더 답변 잘하도록 학습시키는 방법이에요)

 

⚒️ 2단계: 실습 중심으로 익히기 — "말로 배우지 말고, 만들어 보자!"

✏️ 실습 아이디어

  • 나만의 LLM 챗봇 만들기 (LangChain + Streamlit + OpenAI API)
  • ChatGPT 플러그인 or Assistant API 사용해서 개인 비서 만들어보기
  • PDF 문서 요약기 만들면서 Refine Prompt, Question Generation 테스트해보기
  • 친구한테 "너한테 딱 맞는 GPT 챗봇 만들어줬어" 하고 선물해보기 😉

그다음엔 이걸 변경해가면서 "조금씩 개선된 출력"을 확인하며 실험해보는 게 핵심이에요.

RAGAS 도 알아야 해요 

그건 따로 설명해볼께요

 

🚀 3단계: 프롬프트 + 외부 데이터 + 자동화 → "AI 앱 개발자로 한 발 더"

여기서 중요한 건:

  • 프롬프트 혼자선 한계가 있음 → LangChain, LlamaIndex, RAG 기법 등과 연계해서 “프롬프트 + 시스템”을 구성하는 쪽으로 확장해야 해요.
  • 이 단계에서 프롬프트 엔지니어링은 단순 문장 조합이 아니라, LLM의 동작 제어를 위한 인터페이스 설계가 됩니다.

실전 프로젝트 예시

  • 🧠 “문서 검색 기반 질문 응답 시스템” (RAG)
  • 📝 “업무 회의 요약 및 액션 아이템 추출기”
  • 🤖 “자동화된 고객 응대 챗봇 (역할 기반 프롬프트 + memory)”

 

📌 마무리 정리  

목표                                            방법

 

기초 익히기 추천 강의, OpenAI cookbook
실전 감 잡기 간단한 앱 만들며 실험 (LangChain 등 활용)
실전 경험 쌓기 다양한 프로젝트로 확장 (자동화, 데이터 연동 등)
잘하는 법 실행 → 수정 → 비교 → 반복의 루프 돌리기

 

 

RAG 를 구현할 도구들이에요 

오늘은 개념만 잡고 넘어가 볼께요 

 

생성형 AI, 특히 GPT 같은 대형 언어 모델(LLM)이 주목받으면서 "이걸 어떻게 실무에 써먹을까?"에 대한 고민이 많아졌죠.

이런 고민을 해결해주는 두 강력한 툴이 바로 LangChainLlamaIndex입니다.

이 둘은 목적은 비슷하지만, 접근 방식이 살짝 달라요. 같이 살펴볼까요?

 

1. LangChain이란? 🔗

LangChain은 언어 모델을 어플리케이션처럼 다루게 해주는 프레임워크예요.

쉽게 말해, GPT 같은 모델을 단순한 챗봇 이상으로 활용하려면, 다음과 같은 것들이 필요하겠죠:

  • 외부 데이터 검색 (예: DB, 파일, 웹 등)
  • 여러 단계로 질문 처리
  • 도구 사용 (계산기, 검색기 등)

LangChain은 이 모든 걸 모듈화해서 쉽게 붙이고 확장할 수 있게 도와줘요. 예를 들면:

  • 🧱 Chains: 여러 개의 프롬프트를 연결해서 복잡한 흐름 구성
  • 🧠 Memory: 대화를 기억하고 문맥 유지
  • 🧰 Tools: 검색, 계산, 코드 실행 등의 외부 도구 호출
  • 📞 Agents: 상황에 따라 어떤 도구를 쓸지 스스로 판단하는 LLM

👉 요약하자면: LangChain은 GPT를 중심으로 기능을 조합해서 '지능형 앱'을 만드는 도구세트입니다.

 

2. LlamaIndex란? 📚

LlamaIndex(이전 이름: GPT Index)는 LLM이 외부 데이터를 쉽게 활용할 수 있도록 연결해주는 도구예요.

GPT는 훈련된 범위 밖의 데이터에 대해선 잘 모를 수 있죠. 그래서 이런 질문을 하게 됩니다:

"내 회사 문서 PDF들로 GPT한테 답하게 할 수 없을까?"

이럴 때 등장하는 게 LlamaIndex!

  • 📂 다양한 데이터 소스에서 정보 수집 (문서, DB, API 등)
  • 🧩 데이터를 LLM이 이해하기 쉬운 방식으로 가공 (예: 임베딩, 청크화)
  • 🔍 질문이 들어오면 관련 정보를 찾아 GPT에게 전달

👉 요약하자면: LlamaIndex는 외부 지식을 LLM이 잘 활용하게 만드는 정보 중개자입니다.

 

3. 둘의 차이점은? 🤔

구분                                            LangChain                                          LlamaIndex

 

핵심 기능 LLM 기반 워크플로우 구성 외부 데이터 연결 및 검색
대표 기능 체인, 에이전트, 메모리 등 문서 인덱싱, 검색, 쿼리
사용 목적 복잡한 애플리케이션 구성 LLM의 정보 활용 강화
함께 쓸 수 있나요? YES! 서로 궁합이 잘 맞아요.

 

4. 예시로 이해하기 🍰

  • LangChain: GPT에게 "이번 달 매출 데이터를 분석해줘"라고 요청하면, 필요한 데이터 불러오고, 계산기 돌리고, 요약까지 하게 만드는 AI 비서 설계도.
  • LlamaIndex: "내가 올려둔 PDF 보고 질문에 답해줘"라고 할 때, 그 PDF를 GPT가 잘 이해하도록 가공하고 전달하는 정보통 번역가.

 

마무리 ✨

LangChain과 LlamaIndex는 각각 AI 앱의 뼈대와 두뇌, 그리고 지식의 창고 관리인 역할을 합니다.

둘 다 따로도 쓸 수 있지만, 같이 쓰면 진짜 강력한 생성형 AI 파워툴이 돼요.

여러분의 GPT 앱, 단순한 챗봇에서 스마트한 AI 도우미로 한 단계 업그레이드해보세요!

'생성형AI프로그래밍' 카테고리의 다른 글

공공데이터포털 개요 ( https://www.data.go.kr )  (0) 2025.04.26
Hugging Face 와 Fine-tuning  (0) 2025.04.20
JSON 에 대해 알아보기  (1) 2025.04.20
AI 에이전트란 ?  (1) 2025.04.19
파인튜닝 개념  (0) 2025.04.19

🧠 프롬프트 엔지니어링이란?

**프롬프트 엔지니어링(Prompt Engineering)**은 AI 언어 모델에게 원하는 결과를 얻기 위해 입력(Prompt)을 전략적으로 설계하는 기술입니다.

쉽게 말해서,
👉 "AI야, 내가 원하는 걸 정확히 이해하게 하려면 어떻게 말해야 할까?"
이걸 연구하고 실습하는 분야죠.

 

📌 왜 중요한가?

  1. 코딩보다 쉬운 접근
    코딩 지식이 없어도 누구나 좋은 프롬프트만 있으면 뛰어난 결과를 얻을 수 있어요.
  2. 생성형 AI 활용의 핵심
    챗봇, 콘텐츠 생성, 데이터 요약, 번역 등에서 성능 차이를 만드는 건 ‘프롬프트의 질’입니다.
  3. 자동화와 업무 효율화
    프롬프트 하나 잘 짜면, 보고서 작성부터 이메일 자동화까지 AI가 대신해줄 수 있죠.

🔍 프로프트 엔지니어링의 핵심 개념

개념설명
역할 부여 (Role Assignment) 모델에게 "너는 전문가야"처럼 역할을 정해주면 결과가 더 전문적
Few-shot / Zero-shot 예시를 주거나 없이 시키는 방식. 적절한 예시는 퀄리티를 높임
Chain-of-Thought 중간 사고 과정을 유도하면, 더 정답에 가까운 결과를 얻을 수 있음
Temperature 출력의 무작위성 조절. 낮으면 정답 중심, 높으면 창의적 결과

📈 전망: 앞으로 더 중요해진다

✅ 단기

  • 챗GPT, Copilot 등 AI 툴 확산 → 좋은 프롬프트가 경쟁력
  • 기업에서도 "AI 잘 쓰는 사람" 수요 증가

✅ 중장기

  • 프롬프트 전문가(Prompt Specialist) 직업 탄생
  • AI UX 기획자로서의 역할 강화
  • 프롬프트 자동 생성 툴도 등장 (그래도 기본기는 필요!)

🛠️ 어떻게 배우면 좋을까?

  1. 프롬프트 실습 플랫폼 사용
  2. 노션이나 블로그로 실습 기록
    직접 실험하고 결과를 정리해보면 실력이 급상승합니다!
  3. 오픈 커뮤니티 참여
    Prompt 공유 커뮤니티(예: Reddit, X, 오픈채팅방 등)에서 인사이트 얻기
  4. LangChain, LlamaIndex 등 도구와 연계 학습
    고급 프롬프트를 실전 애플리케이션에 활용해보기

'프롬프트 엔지니어링' 카테고리의 다른 글

프롬프트 엔지니어링 심화학습  (0) 2025.04.22

👀 1. 사용자 조회

SELECT user, host, plugin  FROM mysql.user;
 

👉 현재 MySQL에 등록된 사용자 목록을 보여줍니다.

 

➕ 2. 사용자 추가 (CREATE USER)

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

 

예시:

CREATE USER 'alice'@'localhost' IDENTIFIED BY 'secure1234';

🔐 localhost: 로컬에서만 접속 가능
%: 모든 IP에서 접속 가능 (주의해서 사용!)

 

mysql 의 비밀번호 정책

1️⃣ 현재 비밀번호 정책 확인

MySQL은 validate_password 플러그인을 사용하여 비밀번호 강도를 체크합니다.

현재 설정된 정책을 확인하려면 다음을 실행하세요:

 

SHOW VARIABLES LIKE 'validate_password%';

 

이 명령어는 비밀번호 최소 길이, 필수 문자 종류 등을 보여줍니다.

2️⃣ 비밀번호 요구 조건

기본적으로 MySQL의 비밀번호 정책은 다음과 같은 기준을 요구할 수 있습니다:

  • 최소 길이 (validate_password_length)
  • 숫자 포함 (validate_password_number_count)
  • 소문자 포함 (validate_password_lowercase_count)
  • 대문자 포함 (validate_password_uppercase_count)
  • 특수 문자 포함 (validate_password_special_char_count)

예를 들어, 일반적인 강력한 비밀번호는 대소문자, 숫자, 특수 문자를 포함한 8자 이상이어야 합니다.

 

3️⃣ 비밀번호 정책 완화 (선택 사항)

비밀번호 정책이 너무 엄격할 경우 완화할 수 있습니다. 예를 들어 최소 길이를 변경하고 싶다면:

 

SET GLOBAL validate_password_length = 6;

SET GLOBAL validate_password_policy = LOW;

 

요런식으로 각 항목 변경 

 

4️⃣ 변경 사항 적용 후 사용자 생성

비밀번호 정책을 확인한 후, 기준을 충족하는 비밀번호를 설정하여 사용자 계정을 생성하면 정상적으로 처리될 것입니다.

 

🎯 3. 권한 부여 (GRANT)

GRANT ALL PRIVILEGES ON 데이터베이스명.* TO '사용자이름'@'호스트';

 

예시:

GRANT ALL PRIVILEGES ON mydb.* TO 'alice'@'localhost';

 

👉 mydb라는 DB에 대해 모든 권한 부여

 

필요한 권한만 주고 싶다면:

GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'alice'@'localhost';

 

변경 사항 적용하려면 꼭 실행:

FLUSH PRIVILEGES;

 

❌ 4. 사용자 삭제 (DROP USER)

DROP USER '사용자이름'@'호스트';

 

예시:

DROP USER 'alice'@'localhost';

 

🔧 기타 유용한 명령어

비밀번호 변경

ALTER USER 'alice'@'localhost' IDENTIFIED BY 'newpassword123';

사용자 권한 확인

SHOW GRANTS FOR 'alice'@'localhost';
 

✅ 실전 예시 한 방 정리

-- 사용자 생성
CREATE USER 'devuser'@'%' IDENTIFIED BY 'devpass';

-- 권한 부여 (모든 DB 권한)
GRANT ALL PRIVILEGES ON *.* TO 'devuser'@'%' WITH GRANT OPTION;

-- 변경사항 적용
FLUSH PRIVILEGES;

-- 사용자 권한 보기
SHOW GRANTS FOR 'devuser'@'%';

-- 사용자 삭제
DROP USER 'devuser'@'%';
 

'mysql' 카테고리의 다른 글

MySQL에서 사용할 수 있는 주요 데이터 타입  (1) 2025.04.22
MYSQL 비밀번호 설정과 ROOT 로그인 설정  (0) 2025.04.22
MySQL 기본 명령어 정리  (0) 2025.04.21
파이썬으로 mysql 연동 예제  (0) 2025.04.21
MYSQL 설치  (0) 2025.04.19

✅ 1. MySQL 접속

mysql -u 사용자이름 -p

→ 비밀번호 입력 후 접속

 

OS 인증 방식(auth_socket)
→ sudo mysql  로 접속하며, 비밀번호 없이 인증됨.

✅ 2. 데이터베이스 관련 명령어

명령어설명
SHOW DATABASES; 모든 데이터베이스 목록 보기
CREATE DATABASE db이름; 새 데이터베이스 생성
DROP DATABASE db이름; 데이터베이스 삭제 (주의!)
USE db이름; 사용할 데이터베이스 선택

✅ 3. 테이블 관련 명령어

명령어설명
SHOW TABLES; 현재 DB의 테이블 목록 보기
DESCRIBE 테이블명; 테이블 구조 확인 (컬럼, 타입 등)
DROP TABLE 테이블명; 테이블 삭제 (주의!)

📋 테이블 만드는 법 (CREATE TABLE)

CREATE TABLE users (
          id INT AUTO_INCREMENT PRIMARY KEY,
          username VARCHAR(50) NOT NULL,
          email VARCHAR(100),
          created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

💡 설명

컬럼명타입설명
id INT 자동 증가하는 기본키
username VARCHAR(50) 최대 50자, NULL 불가
email VARCHAR(100) 이메일 주소
created_at TIMESTAMP 기본값으로 현재 시간 저장

🧪 데이터 삽입 / 조회 예제

-- 데이터 삽입
INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com');

-- 데이터 조회
SELECT * FROM users;

-- 조건부 조회
SELECT * FROM users WHERE username = 'alice';

 

함수설명 : 날자를 함수로 입력할 때 다음처럼 사용하세요 대소문자 안가립니다

CURDATE() 현재 날짜 (형식: 'YYYY-MM-DD')
CURRENT_DATE CURDATE()의 또 다른 이름
NOW() 현재 날짜와 시간 ('YYYY-MM-DD HH:MM:SS')
CURRENT_TIMESTAMP NOW()과 동일

🛠️ ALTER TABLE 기본 구조

ALTER TABLE 테이블명 수정작업;
 

🔧 컬럼 추가 (ADD COLUMN)

ALTER TABLE users ADD COLUMN age INT;
 

👉 users 테이블에 age라는 정수형 컬럼을 추가

✏️ 컬럼 이름/타입 변경 (CHANGE COLUMN 또는 MODIFY COLUMN)

✅ 이름 + 타입 둘 다 바꾸기 (CHANGE)

ALTER TABLE users CHANGE COLUMN age user_age INT;
 

👉 age를 user_age로 이름 변경하면서, 타입도 변경 가능

⚠ CHANGE COLUMN은 기존 컬럼 이름새 컬럼 이름 모두 명시해야 함

✅ 타입만 바꾸기 (MODIFY)

ALTER TABLE users MODIFY COLUMN user_age VARCHAR(3);

👉 user_age 컬럼을 문자열로 변경 

 

❌ 컬럼 삭제 (DROP COLUMN)

ALTER TABLE users DROP COLUMN user_age;

👉 user_age 컬럼을 완전히 삭제 (되돌릴 수 없음!!)

 

🧱 기본키 또는 제약 조건 추가/삭제

기본키 추가

ALTER TABLE users ADD PRIMARY KEY (id);

UNIQUE 제약 조건 추가

ALTER TABLE users ADD UNIQUE (email);

NOT NULL 추가

ALTER TABLE users MODIFY COLUMN email VARCHAR(100) NOT NULL;

📋 전체 예제 모음

-- 1. 컬럼 추가
ALTER TABLE users ADD COLUMN phone VARCHAR(20);

-- 2. 컬럼 이름과 타입 변경
ALTER TABLE users CHANGE COLUMN phone contact_number VARCHAR(30);

-- 3. 타입만 변경
ALTER TABLE users MODIFY COLUMN contact_number TEXT;

-- 4. 컬럼 삭제
ALTER TABLE users DROP COLUMN contact_number;
 

🎯 마무리 팁

  • 세미콜론 ; 빼먹으면 명령이 끝나지 않음
  • NULL 허용 여부, DEFAULT 값 설정 → 나중에 에러 피하기 위해 중요
  • MySQL 워크벤치나 DBeaver 같이 시각적 도구도 병행하면 편리함

✅ 1. 라이브러리 설치

pip install mysql-connector-python

 

✅ 2. 파이썬 기본 코드 예제

import mysql.connector

# MySQL에 연결
conn = mysql.connector.connect(
    host="localhost",       # 또는 '127.0.0.1'
    user="your_username",   # 예: 'root'
    password="your_password",
    database="your_database"  # 연결할 DB 이름
)

# 커서 생성
cursor = conn.cursor()

# 예제 쿼리 실행
cursor.execute("SELECT * FROM your_table")

# 결과 가져오기
rows = cursor.fetchall()
for row in rows:
    print(row)

# 연결 종료
cursor.close()
conn.close()

🧠 참고 포인트

항목설명
host 로컬 개발 환경이면 localhost, 원격이면 IP 또는 도메인
user / password MySQL 계정 정보 입력
database 사용할 데이터베이스 이름
cursor.fetchall() 전체 행을 리스트로 가져옴 (fetchone()도 있음)

 

+ Recent posts