기본 콘텐츠로 건너뛰기

생성형 AI의 혁신적 기능! "자연어 질의어로 SQL문을 생성한다고?” (팁)[16-Claude AI 로 블로깅하고 책쓰기]

 생성형 AI의 혁신적 기능! "자연어 질의어로 SQL문을 생성한다고?”

Claude AI나 ChatGPT, Gemini와 같은 생성형 AI가 DB 스키마 정보만으로 자연어 질의와 SQL문을 생성할 수 있다는 것은 매우 흥미롭고 놀라운 기능입니다. 이로 인해 사용자들은 다음과 같은 이점을 얻을 수 있습니다.

1. 사용 편의성 향상

  • 사용자가 SQL 문법을 숙지하지 않아도 자연어로 DB에 질의할 수 있습니다.
  • 예를 들어, "지난 한 달간 가장 많이 팔린 제품 Top 5를 보여줘"라고 묻는 것만으로 AI가 자동으로 해당 SQL문을 생성해 줍니다.

2. 개발 속도 향상

  • 개발자들이 일일이 SQL문을 작성할 필요 없이 자연어 질의만으로 원하는 데이터를 추출할 수 있어 개발 속도가 빨라집니다.
  •  복잡한 JOIN이나 서브쿼리가 필요한 경우에도 AI가 자동으로 처리해 줍니다.

3. 비즈니스 인사이트 발굴

  • 비개발자들도 쉽게 데이터를 탐색하고 분석할 수 있게 되어, 새로운 비즈니스 인사이트를 얻을 수 있습니다.
  • 예컨대 마케터가 "신규 고객 유치율이 가장 높은 마케팅 채널 3개를 알려줘"라고 묻는 것만으로 고객 유치에 효과적인 채널을 파악할 수 있습니다.

이처럼 생성형 AI의 DB 스키마 기반 자연어 질의 및 SQL문 생성 기능은 기업의 데이터 활용을 혁신할 수 있는 엄청난 잠재력을 갖고 있습니다. 개발, 마케팅, 영업, 기획 등 다양한 분야에서 이 기술을 활용한다면 업무 효율성과 의사결정 속도를 크게 높일 수 있을 것입니다. 앞으로 많은 기업들이 이 놀라운 AI 기능을 경쟁적으로 도입하고 활용 사례를 만들어갈 것으로 기대됩니다.

Claude 를 활용한 DB 스키마 정보 이용 예시


샘플 DB 스키마는 엔트로픽 사이트에서 게시된 [1]전형적인 DB 스키마 (Customers, Products, Orders, Orders_Items, Reviews) 를 이용하였습니다.

이 DB 스키마 웹 사이트 전체를 텍스트 복사한 후 이를 구글 Docs에 붙여 넣기 합니다. 이 구글 Docs에 저장된 내용을 PDF 파일로 내보기 한 후 이 PDF 파일을 Claude 에게 (또는 ChatGPT도 가능) 업로드한 후 ‘자연어 10개와 이에 맞는 SQL문을 표로 만들어줘’  라고 명령하면 됩니다. 간단하지요.

(** 이 ERD 그림은 Claude 에게 ‘업로드한 DB 스키마에 해당하는 ERD를 그리는 파이선 코드를 생성 해줘’  한 후 Claude 가 생성한 파이선 코드를 복사하여 ChatGPT에서 실행한 결과입니다. **)

이렇게 하면 Claude는 이 스키마 정보를 바탕으로 다음과 같은 일을 할 수 있습니다:

1. 자연어 질의 이해

  • 사용자의 자연어 질의에 등장하는 키워드를 DB 스키마의 테이블/컬럼명과 매칭합니다.
  • 질의에 사용된 집계함수(SUM, AVG 등), 조건(최근 1년간, Top 10 등)을 파악합니다.

2. SQL문 생성

  • 파악된 테이블/컬럼, 집계함수, 조건을 조합하여 올바른 문법의 SQL문을 자동 생성합니다.
  • 필요한 경우 테이블 간 JOIN이나 서브쿼리도 사용합니다.

3. 데이터 타입 고려

  • 컬럼의 데이터 타입(INT, VARCHAR, DATE 등)을 고려하여 적절한 연산과 비교를 수행합니다.
  •  필요 시 문자열은 따옴표로 감싸고, 날짜는 데이터베이스에 맞는 포맷을 사용합니다.

4. 검증 및 정제

  •  생성된 SQL문이 문법적으로 올바르고 실행 가능한지 검증합니다.
  •   보안상 위험할 수 있는 내용(SQL Injection 등)은 제거합니다.

자연어 질의 20개와 해당 SQL문 예시

Claude Prompt:‘자연어 20개와 이에 맞는 SQL문을 표로 만들어줘’

Claude 답변:

자연어 질의

SQL문

평균 주문금액이 $100 이상인 고객의 이메일 주소를 가져와줘

SELECT email<br>FROM Customers<br>WHERE customer_id IN (<br>  SELECT customer_id<br>  FROM Orders<br>  GROUP BY customer_id<br>  HAVING AVG(total_amount) >= 100<br>);

재고가 가장 적은 제품 카테고리 TOP 3를 보여줘

SELECT category<br>FROM Products<br>GROUP BY category<br>ORDER BY SUM(stock_quantity) ASC<br>LIMIT 3;

직원 급여에서 부서별 최고/최저 급여액을 보여줘

SELECT department,<br>  MAX(salary) AS max_salary,<br>  MIN(salary) AS min_salary<br>FROM Employees<br>GROUP BY department;

작년 동월 대비 매출 증가율이 가장 높은 달은 언제야?

WITH monthly_sales AS (<br>  SELECT DATE_FORMAT(order_date, '%Y-%m') AS month,<br>    SUM(total_amount) AS sales<br>  FROM Orders<br>  GROUP BY DATE_FORMAT(order_date, '%Y-%m')<br>)<br>SELECT month, sales,<br>  LAG(sales) OVER (ORDER BY month) AS prev_sales,<br>  sales / LAG(sales) OVER (ORDER BY month) - 1 AS growth<br>FROM monthly_sales<br>ORDER BY growth DESC<br>LIMIT 1;

신규 가입 고객 비율이 제일 높은 도시 TOP 5는?

SELECT city, <br>  COUNT(CASE WHEN YEAR(NOW()) = YEAR(first_order_date) THEN customer_id END) / COUNT(*) AS new_customer_ratio<br>FROM (<br>  SELECT c.city, c.customer_id, MIN(o.order_date) AS first_order_date<br>  FROM Customers c<br>  JOIN Orders o ON c.customer_id = o.customer_id<br>  GROUP BY c.city, c.customer_id<br>) AS t<br>GROUP BY city<br>ORDER BY new_customer_ratio DESC<br>LIMIT 5;

주문건수가 가장 많은 요일 순위

SELECT DAYNAME(order_date) AS day_of_week, COUNT(*) AS order_count<br>FROM Orders<br>GROUP BY DAYNAME(order_date)<br>ORDER BY order_count DESC;

3월 주문 중 아직 미배송된 주문금액 합계는?

SELECT SUM(total_amount) AS undelivered_total<br>FROM Orders<br>WHERE status != 'Delivered'<br>  AND YEAR(order_date) = YEAR(CURDATE())<br>  AND MONTH(order_date) = 3;

카테고리별로 재고 부족 제품 리스트(재고<10개)를 보여줘

SELECT p.product_name, p.category, p.stock_quantity <br>FROM Products p<br>WHERE p.stock_quantity < 10<br>ORDER BY p.category, p.stock_quantity;

가입 후 아무것도 주문하지 않은 휴면 고객은 몇명이지?

SELECT COUNT(*) AS dormant_customers<br>FROM Customers c<br>LEFT JOIN Orders o ON c.customer_id = o.customer_id<br>WHERE o.order_id IS NULL;

제품별 평균 리뷰 점수와 리뷰 개수를 보여줘

SELECT p.product_name, <br>  AVG(r.rating) AS avg_rating,<br>  COUNT(r.review_id) AS review_count<br>FROM Products p<br>LEFT JOIN Reviews r ON p.product_id = r.product_id<br>GROUP BY p.product_id, p.product_name;

자연어 질의문

SQL문

2022년에 주문한 고객의 이름, 이메일, 주문일자, 총 주문금액을 조회하세요

SELECT c.first_name, c.last_name, c.email, o.order_date, o.total_amount<br>FROM Customers c<br>JOIN Orders o ON c.customer_id = o.customer_id<br>WHERE o.order_date BETWEEN '2022-01-01' AND '2022-12-31';

가장 많이 팔린 상위 5개 제품의 이름, 카테고리, 판매수량을 조회하세요

SELECT p.product_name, p.category, SUM(oi.quantity) AS total_quantity<br>FROM Products p<br>JOIN Order_Items oi ON p.product_id = oi.product_id<br>GROUP BY p.product_id<br>ORDER BY total_quantity DESC<br>LIMIT 5;

평균 평점이 4점 이상인 제품의 이름, 평균 평점, 리뷰 개수를 조회하세요

SELECT p.product_name, AVG(r.rating) AS avg_rating, COUNT(r.review_id) AS review_count<br>FROM Products p<br>JOIN Reviews r ON p.product_id = r.product_id<br>GROUP BY p.product_id<br>HAVING AVG(r.rating) >= 4;

주문 상태가 "Shipped"인 주문의 주문번호, 고객명, 주문일자, 총 주문금액을 조회하세요

SELECT o.order_id, c.first_name, c.last_name, o.order_date, o.total_amount<br>FROM Orders o<br>JOIN Customers c ON o.customer_id = c.customer_id<br>WHERE o.status = 'Shipped';

2023년 상반기(1월6월) 매출 총액과 하반기(7월12월) 매출 총액을 각각 조회하세요

SELECT<br> SUM(CASE WHEN order_date BETWEEN '2023-01-01' AND '2023-06-30' THEN total_amount ELSE 0 END) AS first_half_revenue,<br> SUM(CASE WHEN order_date BETWEEN '2023-07-01' AND '2023-12-31' THEN total_amount ELSE 0 END) AS second_half_revenue<br>FROM Orders<br>WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';

"Electronics" 카테고리에 속하는 제품들의 평균 가격을 조회하세요

SELECT AVG(price) AS avg_price<br>FROM Products<br>WHERE category = 'Electronics';

2023년 1분기(1월~3월) 주문에서 구매한 제품의 이름, 수량, 총 판매금액을 조회하세요

SELECT p.product_name, SUM(oi.quantity) AS total_quantity, SUM(oi.quantity * oi.price) AS total_sales<br>FROM Products p<br>JOIN Order_Items oi ON p.product_id = oi.product_id<br>JOIN Orders o ON oi.order_id = o.order_id<br>WHERE o.order_date BETWEEN '2023-01-01' AND '2023-03-31'<br>GROUP BY p.product_id;

고객별 총 주문금액이 1000달러 이상인 고객의 ID, 이름, 총 주문금액을 조회하세요

SELECT c.customer_id, c.first_name, c.last_name, SUM(o.total_amount) AS total_order_amount<br>FROM Customers c<br>JOIN Orders o ON c.customer_id = o.customer_id<br>GROUP BY c.customer_id<br>HAVING SUM(o.total_amount) >= 1000;

"New York"에 거주하는 고객 중 2023년에 주문한 고객의 이름, 이메일, 주문일자를 조회하세요

SELECT c.first_name, c.last_name, c.email, o.order_date<br>FROM Customers c<br>JOIN Orders o ON c.customer_id = o.customer_id<br>WHERE c.city = 'New York' AND o.order_date BETWEEN '2023-01-01' AND '2023-12-31';

재고 수량이 10개 미만인 제품의 이름, 카테고리, 가격, 재고수량을 조회하세요

SELECT product_name, category, price, stock_quantity<br>FROM Products<br>WHERE stock_quantity < 10;

결론

Claude와 같은 생성형 AI가 DB 스키마 정보로부터 자연어 질의의 의도를 파악하고 그에 맞는 SQL문을 자동 생성할 수 있게 되면, 기업들은 개발 리소스를 크게 절약하면서도 데이터 활용도를 높일 수 있습니다.

비개발자들도 복잡한 쿼리를 직접 작성할 필요 없이 마치 동료에게 묻듯이 자연어로 데이터를 조회하고 분석할 수 있게 됩니다. 이는 데이터 민주화를 앞당기고, 보다 많은 구성원들이 데이터 기반의 의사결정을 내릴 수 있도록 도울 것입니다.

이 과정은 RAG(Retrieval-Augmented Generation)의 한 부분이 될 수 있습니다. RAG는 방대한 외부 지식을 활용하여 언어 모델의 생성 능력을 높이는 기술입니다. 질의에 필요한 정보를 외부 데이터베이스, 문서 등에서 찾아 언어 모델에 제공함으로써 보다 정확하고 풍부한 답변을 생성할 수 있게 됩니다.

DB 스키마와 데이터를 지식 소스로 활용한다면, 사용자의 질의에 대해 실제 DB에서 데이터를 검색하고 이를 바탕으로 SQL문과 답변을 생성하는 RAG 시스템을 구현할 수 있을 것입니다. 이는 단순히 SQL문을 생성하는 것을 넘어, 실제 DB 데이터와 연계된 보다 강력한 질의응답 시스템으로 발전할 수 있음을 시사합니다.

앞으로 AI 기술이 고도화되고 다양한 외부 지식과 결합되면서, 사용자의 복잡한 요구사항도 만족시킬 수 있는 종합적인 데이터 분석 및 질의응답 솔루션이 등장할 것으로 기대됩니다. 기업들은 RAG와 같은 첨단 AI 기술을 적극 도입하여 데이터 활용 경쟁력을 한층 더 높여나가야 할 것입니다.


댓글

이 블로그의 인기 게시물

[크롬북에서 설문지/퀴즈를 활용하여 풀스크린 모드로 학생평가 (시험) 하는 방법 소개]

[크롬북에서 설문지/퀴즈를 활용하여 풀스크린 모드로 학생평가 (시험) 하는 방법 소개]  # 크롬북   # 크롬기기관리   # 키오스크모드 여기서 풀스크린 모드란, 시험보는 동안에는 다른 앱이나 브라우저를 실행할 수 없고 오로지 시험문제(설문지) 화면만 풀스크린모드로 실행되게 하는 방법입니다. 즉, 학생들에게 배포된 크롬북을 시험보는 동안에만 시험보는 설문지를 풀스크린모드로 설정을 하고 시험 종료 후에는 원래의 상태로 복귀 시킬 수 있습니다. 크롬 기기(크롬북)에서는 키오스크 모드(풀스크린모드)를 설정하는 방법이 있습니다. (크롬 기기 관리 라이선스를 통해서 기기 설정을 해야 ) 1단계 - Google 설문지로 시험지 작성하기 (키오스크 앱으로 실행될 웹 페이지 준비 과정) 2단계 - 크롬 앱 빌더로 키오스크 앱 생성 및 테스트 하기 3단계 - 크롬 웹 스토어에 키오스크 앱을 등록 배포하기 위한 개발자 대시보드 가입 및 앱 올리기 4단계 - 크롬 기기 관리 콘솔에서 키오스크 앱 위한 설정 5단계 - 최종 단일 키오스크 앱 (예: ‘크롬북시험보기' 앱)을 실행할 등록된 기기들을 배정 https://support.google.com/chrome/a/answer/3273084?hl=ko 자세한 설명은 위 도움말에 언급되어 있으나, 2단계,3단계, 4단계는 생각보다 쉬운 작업은 아닙니다. (키오스크 앱을 빌드해야하고 빌드된 앱을 크롬 웹스토어 개발자 모드로 게시해야 하고, 크롬 기기 관리 콘솔에서 키오스크 앱 설정을 해야 하고 등등. 조금더 자세한 정보가 필요하시면  http://bit.ly/300Vtl2  (도서-"기업과 학교를 위한 크롬북 " 221p ~ 236p 를 참고하시면 됩니다) 참고 블로그 -  http://bit.ly/2ZZh8tP 참고 Google 설문지로 퀴즈 만들기 및 채점 -  http://bit.ly/301GkzS

[Claude 팁] 나의 블로그 글을 Claude 에게 학습 시켜 내 스타일의 블로그 글 생성하기

나의 블로그 글쓰기 스타일을 Claude AI에게 학습 시키는 방법  사실 이 방법은 프롬프트 엔지니어링 기법을 특별히 알고 있지 않아도, 생성형 AI를 사용할때 적용할 수 있는 방법입니다. 적용하고 보니 이러한 기법을 Few-shot learning이라고 하더라구요. 다음 방법을 적용하면 저의 이전 블로그에 게시된 내용 일부를 학습을 시킬 수 있습니다. 이로 인해 나만의 블로그 스타일을 Claude AI에게 학습을 시켜 그 결과, Claude AI가 생성한 초안은 마치 제가 직접 쓴 것처럼 자연스러웠고, 톤 앤 매너를 그대로 유지하는데 큰 도움이 되었습니다. Claude AI에게 과거 포스팅을 학습시키는 방법을 더 자세히 설명해 드리겠습니다. 먼저, 제 블로그에서 Claude AI에게 학습시키고 싶은 포스팅 3-5개를 선택합니다. 이때, 선택한 포스팅들은 제 글쓰기 스타일과 톤, 그리고 주제 면에서 일관성이 있어야 합니다. 예를 들어, 제가 선택한 포스팅은 다음과 같습니다. “Claude 3 Opus vs. ChatGPT 비교" “Claude로 논문 및 연구 보고서 분석[팁]" "생성형 AI, 윤리와 논리의 경계에서 길을 찾는 과정 소개" 선택한 포스팅 텍스트를 복사하여 한 곳에 모아 텍스트 파일 또는 워드 문서를 만듭니다. 이 파일을 Claude AI 프롬프트를 통해서 업로드 한 후  "Claude, 업로드한 텍스트는 내 과거 블로그 포스팅 3개입니다. 이를 분석하여 나의 글쓰기 스타일, 선호하는 단어와 표현, 그리고 주제 전개 방식을 학습해 주세요. 이를 바탕으로, '블로그 글쓰기에서 AI 활용의 미래'라는 주제로 800자 내외의 포스팅 초안을 작성해 보세요." 이렇게 프롬프트를 전달하면, Claude AI는 제공된 텍스트를 분석하여 제 글쓰기 스타일을 학습합니다. 그리고 그를 바탕으로 새로운 주제의 포스팅 초안을 생성할 수 있습니다.  Claude AI가 생성한 초안을 보면, 제가 선호...

구글 드라이브에서 내 파일이 갑자기 사라졌어요 [알아두면 쓸모 있는 구글 드라이브 팁]

  구글 드라이브에서 고아가 된(정리 되지 않은)  파일들에 대한 현상 및 복원 방법 및 공유 드라이브 활용 목차  배경 내 파일이나 폴더가 사라지고 (삭제된 것은 아님) 찾을 수 없는 현상 고아가 된 파일 (정리가 안된 파일) 을 찾아 내고 복원하는  방법 고아가 된 과정을 추적하는 방법 배경   구글 드라이브의 내 드라이브에서 협업을 위한 협업 폴더를 생성한 후 다른 팀원간들간에 공유하여 작업하는 동안 예기치 못하게 내가 생성한 파일들 또는 폴더가 갑자기 사라지는 현상이 발생 할 수 있습니다. 또한 이를 경험한 사용자들이 많이 있습니다.  내가 파일이나 폴더를 삭제하지 않았는데 불구하고 휴지통에도 없고, 내가 삭제한 기억도 없고, 이러한 현상이 발생할 경우에는 본 벡서서에서 설명하는 해당 폴더나 파일들이 ‘고아 (Orphaned)’ 가 된 상태가 되어있는게 분명합니다.  한글 도움말에는 ‘정리가 되지 않은 파일 (또는 분리가 된 파일)' 이라고 설명되어 있기도 합니다. 고아가 된 파일들은 어떠한 폴더에도 속하여 있지 않고, 내 휴지통에도 존재하지 않는 현상입니다. 그러나, 구글 드라이브에서는 용량을 계속 차지 않고 있는 상태입니다. 간혹 왜? 내가 삭제한 적이 없는데 파일이 없어졌거나 폴더가 보이질 않는 경우 당황하지 않고 이문서를 자세히 참조하면 해답을 찾을 수 있습니다.   내 파일이나 폴더가 사라지고 (삭제된 것은 아님) 찾을 수 없는 현상      1. 내 드라이브에서 Folder A를 생성하고 Folder A 안에 File A 를 생성 합니다. 나중에 File A를 삭제 하고, 그 이후에 Folder A 까지 삭제를 할 수 있습니다. 그후 휴지통에서 File A만 복원을 할 경우 삭제된 File A 를 복원하려고 하는데 File A가 존재하였던 상위 폴더 ‘Folder A’는 이미 삭제된 상태입니다. 이럴때 File A는 ...

[세계에서 가장 작은 PC Chromebit (ChromeOS) ] 개봉기

ChromeOS 기기의 3종 세트 (Chromebook, Chromebox, Chromebit ) 입니다. 그동안 크롬OS 기반의 크롬북과 크롬박스 만 주로 사용하다가 최근에 Asus 에서 공개한 Chromebit 를 구입하여 개봉기를 올립니다.  이번 Chromebit의 구입 목적은 크롬북 및 크롬박스와 비교하여 가성비가 얼마나 더 좋을 지 비교하는 것도 있지만, 주요 목적은 Chrome Device Management Console 기기로 등록한 후 ChromeOS 키오스크 및 사인이지 용도로 손색이 없는지 여부를 검토하기 위함. Chromebit의 크기 (엄지손가락 크기 정도) 및 가격 (85달러)의 가성비를 갖고 사인이지나 키오스크 디바이스로 손색이 없을 것이라 생각함. 이번 개봉기 후에는 2차로 크롬OS 사인이지 및 키오스크 앱을 연동하한 사용기를 올릴 예정. 엄지 손가락 만한 크기의 ChromeOS 기기 - 2GB Ram, 16GB storage, WiFi 802.11ac, 블루투스 4.0, USB 2.0 포트 1개, HDMI 포트, 가격은 85달러 옵션으로 로지텍의 무선 키보드 (무선 동글+ 키보드+터치패드)를 25달러에 구입하여 크롬OS기기 1세트를 갖추게 되었다.  박스 구성품은 매우 심플 - 전원 코드, 모니터에 고정용 스티커, 크롬빗 본체, HDMI 확장 케이블 USB 1포트 단자에 로지텍 키보드 무선 동글을 삽입한 후 전원 코드 연결하고, 모니터 HDMI 포트에 꼽으면 바로 부팅됨 유투브 실행 화면 기존 Google Apps (G Suite) 계정으로 로그인 한 후, 지메일 및 드라이브의 문서 작성하는데 크게 부족함이 없는 성능을 보이는 것으로 확인 됨 로지텍 무선 키보드 연결시 한글/영문 토글은 'CONTROL+space' 키로 동작 한글 입력은 전혀 문제 없이 동작됨 ------------------------...

리눅스를 몰라도 Codex 로 VPS에 Hermes를 설치하고 쉽게 운영하는 방법

  초보자를 위한 AI 에이전트 서버 운영 가이드 리눅스를 몰라도 VPS에 Hermes를 설치하고 Codex로 운영하는 방법 이 글의 목표는 “리눅스 명령어를 잘 모르는 사람도” Hostinger VPS에 Hermes 에이전트를 설치하고, Codex를 이용해 SSH로 접속해 운영, 모니터링, 오류 해결까지 할 수 있게 만드는 것입니다. 목차 이 글은 누구를 위한 글인가 왜 Codex가 필요한가 준비물은 딱 세 가지 VPS에 SSH로 접속하는 방법 Codex에게 Hermes 설치를 맡기는 방법 Telegram 설정을 맡기는 방법 LLM 모델 설정 변경하기 상태 확인과 모니터링 오류가 났을 때 Codex로 해결하기 파일 공유 폴더 운영 보안과 운영 원칙 1. 이 글은 누구를 위한 글인가 VPS, SSH, Docker, Linux라는 단어가 낯선 분들도 많습니다. 하지만 AI 에이전트를 제대로 운영하려면 결국 “내 컴퓨터가 꺼져 있어도 계속 일하는 원격 작업자”가 필요합니다. 그 원격 작업자가 Hermes이고, 그 Hermes가 사는 집이 VPS입니다. 이 글은 서버 전문가를 위한 글이 아닙니다. 오히려 서버를 잘 모르는 분들이 Codex를 조력자로 삼아 원격 서버에 Hermes를 설치하고 운영하는 흐름을 이해하도록 돕는 글입니다. 핵심 메시지: 리눅스 명령어를 모두 외우지 않아도 됩니다. 중요한 것은 SSH 접속 정보와 Codex에게 정확히 요청하는 방법입니다. 2. 왜 Codex가 필요한가 VPS를 구매하면 보통 이런 정보를 받습니다. 서버 IP 주소 SSH 사용자 이름, 보통 root root 비밀번호 또는 SSH key 운영체제, 예를 들어 Ubuntu 24.04 문제는 그 다음입니다. 접속은 했는데 무엇을 입력해야 할지 모릅니다. Docker 설치, Hermes 설치, 환경변수 설정, Telegram bot token 등록, 로그 확인, 재시작 같은 작업이 모두 리눅스 명령어로 보이기 때문입니다. Codex가 필요한 이유는 여기에 있습니다. Code...