바이브 코딩, 혼자 하기 어려웠다면 같이 해요! 🚀

대구 바이브 코딩 연습 모임 멤버 모집

요즘 Cursor, Claude, ChatGPT, Gemini 같은 AI 도구를 활용해서 개발하는 ‘바이브 코딩(Vibe Coding)’ 이 빠르게 확산되고 있습니다.

저도 관련 책을 보면서 혼자 공부하고 있는데, 혼자 하다 보니 꾸준히 하기 어렵고 서로 만든 결과물을 공유하면 더 재미있고 오래 할 수 있겠다는 생각이 들었습니다.

그래서 당근에서 바이브 코딩 연습 모임을 만들었습니다.

reboot.dev님이 바이브코딩,AI 활용 개발 스터디 모임에 초대했어요💌
https://daangn.com/kr/share/community/ref/invite-group/bbASqGJxXTB



이런 분들에게 추천합니다.

✅ AI를 활용해서 개발을 시작해보고 싶은 분

✅ Cursor나 Claude를 설치하고 조금씩 사용해 본 분

✅ 혼자 공부하면 자꾸 미루게 되는 분

✅ 꾸준히 프로젝트를 만들어보고 싶은 분

✅ 다른 사람들이 어떤 방식으로 AI를 활용하는지 궁금한 분



이런 분들에게는 맞지 않습니다.

이번 모임은 ‘스터디’ 에 가깝습니다.

강의처럼 처음부터 끝까지 알려드리는 형태는 아닙니다.

다음 정도는 준비되어 있으면 좋습니다.

* 노트북이 있다.
* Cursor, Claude 등 기본 도구 설치 완료
* 기본적인 사용법 정도는 알고 있다.
* 스스로 검색하며 개발을 진행할 수 있다.

코드를 완벽하게 이해하지 못해도 괜찮지만,

AI와 함께 프로젝트를 만들어보려는 의지는 있었으면 합니다.



모임은 이렇게 진행합니다.

각자 만들고 싶은 프로젝트를 하나 정해서 개발합니다.

예를 들면

* 랜딩페이지 만들기
* 메모 앱
* 할 일 관리 앱
* 가계부
* 간단한 게임
* 크롤링 프로그램
* 업무 자동화
* 블로그 자동화
* AI 챗봇

등 자유롭게 진행하면 됩니다.

모임 시간에는

* 각자 개발
* 막히는 부분 서로 이야기하기
* 새로운 AI 활용법 공유하기
* 마지막 10~20분 정도 진행 상황 발표

정도로 생각하고 있습니다.



모임 정보

📍 장소

투썸플레이스 스타디움몰점

🕑 시간

토요일 또는 일요일 오후 2시 ~ 5시

(멤버 의견에 따라 일부 변경될 수 있습니다.)

👥 모집 대상

20세 ~ 39세

노트북은 반드시 지참해 주세요.



앞으로 이런 것도 함께 해보고 싶습니다.

모임이 활성화되면

* 해커톤
* 미니 프로젝트 발표회
* 포트폴리오 제작
* Git/GitHub 함께 사용하기
* MCP 활용하기
* AI 에이전트 만들기
* Supabase 연동
* React / Next.js 프로젝트
* 업무 자동화 프로젝트

등도 함께 진행해 보고 싶습니다.



제가 만들고 싶은 분위기

실력이 뛰어난 사람들만 모이는 모임이 아니라,

꾸준히 만드는 사람들이 모이는 모임이 되었으면 좋겠습니다.

“오늘도 하나 만들었다.”

“이번 주에도 포기하지 않았다.”

이런 경험이 쌓이면 몇 달 뒤에는 생각보다 큰 차이가 생긴다고 믿습니다.

혼자 공부하다 지쳤다면 같이 만들어봐요. 😊



신청 방법

현재 당근 모임에서 모집 중입니다.

관심 있으신 분은 “바이브 코딩” 을 검색해서 가입 신청해 주세요.
https://daangn.com/kr/share/community/ref/invite-group/bbASqGJxXTB

혹시 궁금한 점이 있다면 댓글로 남겨주시면 답변드리겠습니다.

함께 꾸준히 만들고 성장하는 모임이 되었으면 좋겠습니다!

최초 작성일 : 2026.06.12


TDD, DDD, SDD, 스크럼이 뭐예요?

개발을 처음 공부하다 보면 TDD, DDD, SDD, 스크럼(Scrum) 같은 용어를 자주 만나게 됩니다.

처음에는 어려운 영어 약어처럼 보이지만, 사실은 "어떻게 개발할 것인가?" 에 대한 다양한 방법론일 뿐입니다.

오늘은 비개발자나 초보자도 이해할 수 있도록 카페 주문 앱을 만든다는 예시로 설명해보겠습니다.


개발 방법론이 필요한 이유

예를 들어 카페 주문 앱을 만든다고 가정해 봅시다.

기능은 간단합니다.

  • 메뉴 조회
  • 장바구니
  • 주문하기
  • 결제하기

아무 계획 없이 개발하면 이런 문제가 생깁니다.

  • 기능이 계속 꼬임
  • 버그가 많아짐
  • 개발자마다 코드 스타일이 다름
  • 유지보수가 어려움

그래서 등장한 것이 개발 방법론입니다.

쉽게 말하면

"효율적으로 개발하기 위한 규칙과 방법"

이라고 생각하면 됩니다.


1. TDD (Test Driven Development)

테스트 주도 개발

TDD는

"코드를 만들기 전에 테스트를 먼저 작성하는 방식"

입니다.

보통은

기능 개발 → 테스트

순서로 진행하지만

TDD는

테스트 작성 → 기능 개발

순서로 진행합니다.


카페 주문 앱 예시

주문 금액 계산 기능을 만든다고 가정해 봅시다.

1단계

먼저 테스트 작성

아메리카노 2잔

가격 = 4000원

결과가 4000원이 나와야 함

2단계

테스트 실행

당연히 실패합니다.

아직 기능을 만들지 않았기 때문입니다.


3단계

기능 구현

function totalPrice(count){
    return count * 2000;
}

4단계

테스트 재실행

성공


장점

  • 버그 감소
  • 리팩토링이 쉬움
  • 코드 품질 향상

단점

  • 개발 속도가 느려질 수 있음
  • 테스트 작성 시간이 추가됨

2. DDD (Domain Driven Design)

도메인 주도 설계

DDD는

"비즈니스 자체를 중심으로 설계하는 방법"

입니다.

여기서 도메인이란

업무 영역을 의미합니다.

예를 들면

  • 쇼핑몰
  • 병원
  • 은행
  • 카페

모두 도메인입니다.


카페 주문 앱 예시

초보자가 만들면

Menu
Order
User

정도만 생각할 수 있습니다.

하지만 DDD에서는

카페 운영 자체를 분석합니다.


카페에는 무엇이 있는가?

  • 메뉴
  • 주문
  • 결제
  • 쿠폰
  • 회원
  • 포인트

이 개념들을 중심으로 설계합니다.

Order
 ├─ 주문상품
 ├─ 결제정보
 └─ 주문상태

Member
 ├─ 포인트
 └─ 쿠폰

처럼 실제 업무 구조를 코드에 반영합니다.


장점

  • 복잡한 서비스에 적합
  • 유지보수가 쉬움
  • 비즈니스 이해도가 높아짐

단점

  • 학습 난이도가 높음
  • 작은 프로젝트에는 과할 수 있음

3. SDD (Specification Driven Development)

명세 주도 개발

SDD는

"기능 명세서를 기준으로 개발하는 방식"

입니다.

쉽게 말하면

개발 전에

"무엇을 만들 것인가"

를 아주 자세히 문서로 작성합니다.


카페 주문 앱 예시

주문 기능 명세

사용자는 메뉴를 선택할 수 있다.

사용자는 수량을 선택할 수 있다.

주문 버튼을 누르면 결제 페이지로 이동한다.

결제가 완료되면 주문번호가 생성된다.

이 문서를 기준으로 개발합니다.


장점

  • 요구사항이 명확함
  • 협업이 쉬움
  • 개발 방향이 흔들리지 않음

단점

  • 문서 작성 비용 발생
  • 요구사항 변경 시 수정 필요

4. 스크럼 (Scrum)

애자일 개발 방법론의 대표 주자

스크럼은

"작게 만들고 빠르게 개선하는 개발 방식"

입니다.


전통적인 방식

6개월 개발

↓

한 번에 출시

문제가 있으면 수정하기 어렵습니다.


스크럼 방식

2주 개발

↓

배포

↓

피드백

↓

개선

반복합니다.


카페 주문 앱 예시

1주차

메뉴 조회


2주차

장바구니


3주차

주문 기능


4주차

결제 기능


이렇게 작은 단위로 나누어 개발합니다.


스크럼 주요 역할

Product Owner

무엇을 만들지 결정


Scrum Master

팀이 잘 일하도록 지원


Developer

실제 개발 수행


장점

  • 빠른 피드백
  • 요구사항 변경 대응 쉬움
  • 실제 사용자 의견 반영 가능

단점

  • 일정 관리가 중요
  • 팀원 간 소통이 많아야 함

쉽게 비유하면?

개발 방법론을 집 짓기에 비유해보겠습니다.

방법론 집 짓기 비유
TDD 먼저 검사 기준을 만든 후 집을 짓는다
DDD 집보다 가족의 생활 방식을 먼저 분석한다
SDD 설계도를 매우 상세하게 작성한 후 짓는다
스크럼 방 하나씩 만들고 가족 의견을 반영한다

실제 현업에서는?

현업에서는 하나만 사용하는 경우가 거의 없습니다.

예를 들어

DDD로 설계

↓

스크럼으로 개발 진행

↓

TDD로 테스트 작성

처럼 여러 방법론을 함께 사용하는 경우가 많습니다.

특히 최근에는

  • 애자일
  • 스크럼
  • TDD

조합이 가장 흔하게 사용됩니다.


마무리

처음에는 TDD, DDD, SDD, 스크럼 같은 용어가 어렵게 느껴질 수 있습니다.

하지만 핵심은 간단합니다.

  • TDD : 테스트를 먼저 작성한다.
  • DDD : 비즈니스를 중심으로 설계한다.
  • SDD : 명세서를 기준으로 개발한다.
  • 스크럼 : 작은 단위로 빠르게 개발하고 개선한다.

개발 경험이 많아질수록 "어떤 방법론이 가장 좋은가?" 보다

"현재 프로젝트에 어떤 방법론이 적합한가?"

를 판단하는 능력이 더 중요해집니다.

방법론은 정답이 아니라 도구입니다.

상황에 맞게 선택하고 조합해서 사용하는 것이 가장 좋은 개발 방법입니다.

최초 작성일 : 2026.06.11


들어가며

Cursor에서 MCP(Model Context Protocol)를 사용하다 보면 Smithery를 통해 다양한 MCP 서버를 추가하게 됩니다.

그런데 처음 사용하는 분들이 가장 많이 헷갈리는 부분이 있습니다.

"Smithery Toolbox에 MCP를 추가했는데 API Key는 어디에 입력하는 거지?"

"GitHub, Supabase, Notion 같은 MCP는 인증이 필요한데 어떻게 동작하는 걸까?"

이번 글에서는 Cursor와 Smithery Toolbox의 구조를 살펴보고, MCP별 인증 정보(API Key, Access Token)가 실제로 어떻게 관리되는지 알아보겠습니다.


Smithery Toolbox란?

Smithery Toolbox는 여러 MCP 서버를 하나로 묶어서 관리할 수 있는 MCP 허브 역할을 합니다.

구조는 다음과 같습니다.

Cursor
  ↓
Smithery Toolbox
  ↓
Context7
Supabase
Github
Notion
Naver Search
기타 MCP

Cursor 입장에서는 MCP 서버가 여러 개가 아니라 Toolbox 하나만 연결된 것처럼 보입니다.

그래서 Cursor MCP 목록에는 아래처럼 표시됩니다.

toolbox

하지만 실제로는 Toolbox 내부에 여러 MCP가 연결되어 있는 상태입니다.


인증 정보는 누가 관리할까?

많은 분들이 Smithery가 API Key를 대신 관리한다고 생각합니다.

하지만 실제로는 조금 다릅니다.

Smithery는 API Key를 직접 사용하는 것이 아니라, 각 MCP가 요구하는 인증 정보를 전달하는 역할을 합니다.

예를 들어 GitHub MCP는 다음과 같은 토큰이 필요할 수 있습니다.

GITHUB_PAT

Supabase MCP는 다음과 같은 토큰이 필요할 수 있습니다.

SUPABASE_ACCESS_TOKEN

Notion MCP는 다음과 같은 API Key가 필요할 수 있습니다.

NOTION_API_KEY

이러한 값들은 MCP가 실제로 동작할 때 전달됩니다.


방법 1. Smithery에서 직접 설정하기

일부 MCP는 Smithery에서 추가할 때 설정 화면이 나타납니다.

예를 들어 GitHub MCP를 추가하면 다음과 같은 항목이 보일 수 있습니다.

GITHUB_PAT

여기에 토큰을 입력하면 Smithery가 MCP 실행 시 해당 값을 전달합니다.

사용자는 Cursor에서 별도로 토큰을 관리할 필요가 없습니다.


방법 2. Cursor mcp.json에서 설정하기

MCP에 따라 Smithery 설정 화면이 제공되지 않는 경우도 있습니다.

이럴 때는 Cursor의 MCP 설정 파일에서 직접 환경 변수를 전달할 수 있습니다.

예시:

{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": [
        "-y",
        "@supabase/mcp-server-supabase"
      ],
      "env": {
        "SUPABASE_ACCESS_TOKEN": "YOUR_TOKEN"
      }
    }
  }
}

이 방식은 토큰이 사용자 PC에만 저장되기 때문에 보안 측면에서도 장점이 있습니다.


방법 3. Toolbox에 환경 변수 전달하기

Toolbox 자체에도 환경 변수를 설정할 수 있습니다.

예시:

{
  "mcpServers": {
    "toolbox": {
      "command": "uvx",
      "args": [
        "mcp-toolbox@latest",
        "stdio"
      ],
      "env": {
        "FIGMA_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

이 경우 Toolbox가 해당 값을 내부 MCP에게 전달하게 됩니다.


실제 사용 예시

예를 들어 Smithery Toolbox 안에 다음 MCP들이 있다고 가정해 보겠습니다.

Toolbox
├─ Context7
├─ Github
├─ Supabase
└─ Naver Search

이 중 GitHub MCP가 인증을 요구한다면:

Case 1

Smithery 설정 화면 제공

Smithery
↓
Github MCP 추가
↓
GITHUB_PAT 입력
↓
완료

Case 2

설정 화면 미제공

Cursor
↓
mcp.json 수정
↓
env 설정
↓
Toolbox가 전달

현재 Toolbox에 어떤 MCP가 연결되어 있는지 확인하는 방법

Cursor 채팅창에서 다음과 같이 질문할 수 있습니다.

What tools do you have available?

또는

List all MCP tools.

정상적으로 연결되어 있다면 다음과 같은 도구 목록이 표시됩니다.

toolbox__github_search
toolbox__supabase_query
toolbox__context7_docs
toolbox__naver_search

이 이름들이 보인다면 Toolbox 내부 MCP가 정상적으로 로딩된 상태입니다.


Toolbox 방식과 직접 MCP 등록 방식 비교

구분 Toolbox 방식 직접 등록 방식
MCP 표시 toolbox 하나 각각 표시
관리 편의성 높음 보통
장애 확인 어려움 쉬움
API Key 관리 다소 복잡 단순
대규모 MCP 운영 유리 불리

개인적인 추천

MCP를 2~3개 정도만 사용할 계획이라면 직접 등록하는 방식을 추천합니다.

예를 들어:

{
  "mcpServers": {
    "context7": {},
    "supabase": {},
    "github": {}
  }
}

이렇게 사용하면 어떤 MCP가 문제인지 바로 확인할 수 있고 API Key 관리도 편합니다.

반대로 MCP를 10개 이상 사용하거나 자주 추가·삭제하는 경우라면 Smithery Toolbox를 사용하는 것이 훨씬 편리합니다.


마무리

Cursor에서 Smithery Toolbox를 사용할 때 API Key는 Toolbox가 자동으로 만들어주는 것이 아닙니다.

핵심은 다음과 같습니다.

  • Toolbox는 MCP들을 묶어주는 허브 역할
  • 인증 정보는 각 MCP가 개별적으로 요구
  • Smithery 설정 화면 또는 mcp.json의 env를 통해 전달
  • MCP가 적다면 직접 등록이 관리하기 편함
  • MCP가 많다면 Toolbox가 효율적

처음 MCP를 사용할 때는 Toolbox 구조를 이해하는 것만으로도 문제 해결 속도가 크게 빨라집니다.

특히 Cursor에서 "연결은 됐는데 동작하지 않는다"는 문제가 발생한다면 가장 먼저 API Key 설정 여부를 확인해보는 것을 추천합니다.

 

최초 작성일 : 2026.06.11

공부 목적 : AI 개발 공부

참고 도서 : 요즘 바이브 코딩 커서 AI 30가지 프로그램 만들기


유용한 업무 프로그램 만들기

  • 유투브 자막 추출 후 맞춤법 검사하는 프로그램
  • 가계부 대시보드

MCP

  • 리더보드가 있는 카드 뒤집기 게임
  • 카드 뒤집기 게임 보안
  • 나만의 블로그 
  • 나만의 커뮤니티 게시판 만들기

 

커서+MCP

  • Firecrawl MCP로 데이터 수집하고 웹페이지 만들기
  • Figma MCP로 유투브 섬네일 만들기
  • Naver Search MCP로 인기 블로그 분석해 블로그글 생성
  • Sequential Thinking MCP로 테트리스 게임 만들기
  • 카카오맵 MCP로 점심 메뉴 추천 앱 만들기[실패]

 

유용한 업무 프로그램 만들기

유투브 자막 추출 후 맞춤법 검사하는 프로그램

[과정]

WEBSHARE  :  회원가입 후 프록시 서버 설정

youtube-transcript-api : 자막 추출

GPT API 맞춤법 검사 및 내용 요약

[설계]

파이썬으로 코드작성

[결과]

output폴더에 정해진 형식으로 md파일 저장 확인.

YouTube 자막 저리 결과 - 비디오ID, 원본URL, 처리일시

1. 추출 원문

2. 맞춤법 검사결과

3. 내용 요약

 

가계부 대시보드

[과정]

데이터 수집(Google Sheets)

-> 서비스계정 인증 Google api

-> 데이터 정제

-> 캐시로드(DataFrame) 

-> (필요에 따라 사용자 필터링) 표,차트 시각화

[설계]

python 기반

Streamlit - 브라우저 대시보드(사이드바 필터, 본문 차트 구성)

Google sheets API - 가계부 데이터

Pandas - DataFrame 변환,필터,집계

Plotly - 시각화(막대, 파이 차트)

JSON - 서비스 계정 키(google spreadsheet)

 

DAO 패턴(Data Access Object Pattern)  - 데이터베이스의 데이터에 접근하기 위한 비즈니스 로직과 데이터베이스 연동 로직을 분리하는 구조적 디자인 패턴

서비스 계정 JSON으로 Google API 인증

[결과]

streamlit run app.py 명령어로 대시보드 실행

 


MCP

리더보드가 있는 카드 뒤집기 게임

[과정]

리더보드 구현을 위해 Supabase MCP를 cursor에 추가

Supabase(웹 기반 데이터베이스 운영 서비스)를 이용해서 사용자들의 게임기록 저장.

저장된 데이터를 불러와 리더보드 구현

[설계]

Sequential Thinking MCP이요 개발도구 선택 및 순차적 계획

Canvas API + JavaScript로 만들고.

Vite로 개발/빌드

Supabase REST API로 점수 저장,리더보드 조회

 

[결과]

supabase table editor에서 데이터 저장 확인

카드 뒤집기 게임 보안 문제 개선

[과정]

supabase 접근 키가  코드에 노출되어 있는 문제를 해결하기 위해서 

배포 전에 환경변수(.env)로 분리함.

Vercel 환경변수 등록

Build command 설정

[결과]

vercel 배포 후 확인화면

나만의 블로그 

[설계]

Next.js + 마크다운 기반 정적블로그

서버 없이 GitHub Pages등에 배포할 수 있도록 설계

 

Next.js, React, TypeScript, Tailwing CSS 사용

콘텐츠관리(년월기반) - content/blog/YYYY/MM*.md

주요 페이지는 Home, About, Blog

Categories, Tags로도 글 검색 가능

 

[결과]

나만의 커뮤니티 게시판 만들기

[설계]

Reddit 스타일 커뮤니티 게시판

Next.js(app router), supabase(인증,db,storage)로 구성

React, TypeScript, Tailwind CSS

 

기능

- 회원가입, 로그인, 로그아웃

- 글쓰기, 수정, 삭제, 검색

- 댓글 작성, 삭제

- 프로필

 

구축

Next.js 프로젝트 생성

-> supabase 연동

-> DB 스키마

-> 인증

-> 게시글, 댓글

-> 회원가입,프로필

 

[결과]

회원가입 화면
커뮤니티 홈화면
게시글, 댓글 화면


커서+MCP

Firecrawl MCP로 데이터 수집하고 이용

[요약]

firecrawl MCP(텍스트, 이미지 크롤링)으로 데이터를 수집한 결과를 이용 프레젠테이션, 콘텐츠 제작 등에 유용하게 사용할 수 있음

 

Figma MCP로 유투브 섬네일 만들기

[요약]

Figma 데스크톱 앱 설치

-> Figma에서 cursor TalkToFigma MCP Plugin 설정하고 Channel 이름 복사

-> cursor에 TalkToFigma MCP 설정값 추가

-> cursor 프롬프트에 복사한 Channel 이름과 함께 요청

Naver Search MCP로 인기 블로그 분석해 블로그글 생성

[요약]

Naver Search API 신청

-> cursor에서 Naver Search MCP 설정값 추가

-> 특정 키워드를 이용해서 최신 블로그글 10개의 키워드, 요약

-> 그 중 5개의 블로그글의 핵심 키워드와 요약을 이용 새로운 블로그글 만들기

-> unsplash API 사용을 위한 Access key 생성

-> cursor에 unsplash MCP 설정값 추가

-> unsplash로 사용할 이미지 찾기

Sequential Thinking MCP로 테트리스 게임 만들기

[요약]

Canvas API + JavaScript

 

 

최초 작성일 : 2026.06.08

공부 목적 : AI 개발 공부

참고 도서 : 요즘 바이브 코딩 커서 AI 30가지 프로그램 만들기


실습내용

  • 데이터베이스
    • 메모 앱에 회원가입, 로그인, 로그아웃, 메모저장 기능 구현
  • 크롤링(파이썬)
    • 1년치 금 시세 크롤링해서 통계처리 후 시각화 하기
    • 해외 주식 크롤링 프로그램 구현
  • 디버그, 바이브 코딩 - GUI
    • QR코드 생성기
    • PDF 편집기 - 페이지 추출, 병합
  • API
    • 랜덤이미지 API로 가상 사진전 사이트 구현
    • 한국거래소 주식 데이터 API로 대시보드 구현
    • 경남 의령 식당 정보 사이트 구현
  • 유용한 업무 프로그램 만들기
    • 메일발송 자동화 프로그램
    • ChatGPT API로 PDF요약 프로그램
    • 블로그글 작성 프로그램
    • 고객리뷰 분석 후 보고서 생성 프로그램

데이터베이스

메모 앱에 회원가입, 로그인, 로그아웃, 메모저장 기능 구현

데이터베이스 확인 - npm run db:studio

 


크롤링(파이썬)

1년치 금 시세 크롤링해서 통계처리 후 시각화 하기


해외 주식 크롤링 프로그램 구현


디버그, 바이브 코딩 - GUI

QR코드 생성기

코드 생성기 화면

 

내 블로그 QR


PDF 편집기 - 페이지 추출, 병합

build해서 만든 app
pdf 추출화면
pdf 병합 화면


API

랜덤이미지 API로 가상 사진전 사이트 구현


한국거래소 주식 데이터 API로 대시보드 구현


경남 의령 식당 정보 사이트 구현

 인증키의 문제라고 하는데 인증키는 정확하게 입력했고, 승인에 몇시간 걸리는 것이 문제인가 해서 기다렸다 다시 시도 했지만 결국 고치지 못했다. 24시간을 기다려야하는 건가 싶어 내일 다시 시도해보려고 한다.


유용한 업무 프로그램 만들기

메일발송 자동화 프로그램


ChatGPT API로 PDF요약 프로그램

결과 확인


블로그글 작성 프로그램

 


고객리뷰 분석 후 보고서 생성 프로그램

마크다운 파일로 결과를 생성. dillinger에서 확인할 수 있음.

 

 

 

최초 작성일 : 2026.06.08

공부 목적 : AI 개발 공부

키워드 : Pandas


정리

Pandas는 파이썬에서 데이터를 쉽고 빠르게 조작, 분석, 정제할 수 있도록 도와주는 오픈 소스 데이터 분석 라이브러리입니다.

엑셀 표처럼 해오가 열로 이루어진 구조화된 데이터를 처리하는 데 특화되어 있으며, 데이터 과학 및 머신러닝 분야에서 필수적으로 사용됩니다.

크롤링/스크레이핑과 함께 쓰면 엄청난 시너지를 냅니다. BeautifulSoup이나 Selenium으로 웹사이트에서 수집한 대량의 텍스트 데이터를 Pandas 데이터프레임에 집어넣으면, 단 몇 줄의 코드로 깔끔한 엑셀 파일(.xlsx)이나 CSV 파일로 저장할 수 있습니다.

 


Pandas의 2가지 핵심 자료구조

  • Series(시리즈)
    • 1차원 배열 형태의 자료구조
    • 하나의 열에 해당하며, 인덱스와 데이터 값이 일대일 대응
  • DataFrame(데이터 프레임)
    • 2차원 표 형태의 자료구조
    • 여러 개의 시리즈가 모여서 행과 열을 이루는 엑셀 시트와 같은형태

주요 기능과 장점

  • 다양한 파일 호환성
    • CSV, Excel, SQL 데이터베이스, JSON, HTML 등 다양한 포맷의 데이터를  쉽게 읽고 쓸 수 있음
  • 결측치(Missing Data)처리
    • 데이터 수집 과정에서 빠진 값(NaN)을 쉽게 찾고, 채우거나 지울 수 있음
  • 데이터 필터링 및 병합
    • SQL 쿼리처럼 특정 조건에 맞는 데이터만 뽑아내거나(Filtering), 여러 테이블을 하나로 합치는 작업(Join/Merge)이 매우 간단
  • 시계열 데이터 지원
    • 날짜와 시간 기반의 데이터를 다루는 강력한 기능을 제공하여 주가 데이터 분석 등에 유용
  • 통계 및 연산
    • 평균, 총합, 표준편차 등 기본적인 통계치 계산과 데이터 그룹화(GroupBy) 연산을 한줄의 코드로 실행합니다

코드 예시

설치

pip install pandas

불러오기

import pandas as pd

CSV 파일 읽기

예를 들어 아래와 같은 CSV 파일이 있다고 가정해봅시다.

name,age,city
Alice,30,Seoul
Bob,25,Busan
Charlie,35,Daegu

파일 읽기

import pandas as pd

df = pd.read_csv("users.csv")

print(df)

결과

      name  age    city
0    Alice   30   Seoul
1      Bob   25   Busan
2  Charlie   35   Daegu

특정 컬럼 조회

이름만 조회

print(df["name"])

결과

0      Alice
1        Bob
2    Charlie

조건 검색

30세 이상 조회

result = df[df["age"] >= 30]

print(result)

결과

      name  age    city
0    Alice   30   Seoul
2  Charlie   35   Daegu

새로운 컬럼 추가

나이 1년 증가

df["next_age"] = df["age"] + 1

print(df)

결과

      name  age    city  next_age
0    Alice   30   Seoul        31
1      Bob   25   Busan        26
2  Charlie   35   Daegu        36

평균 계산

평균 나이 구하기

avg_age = df["age"].mean()

print(avg_age)

결과

30.0

그룹별 집계

지역별 평균 나이

result = df.groupby("city")["age"].mean()

print(result)

결과

Busan    25.0
Daegu    35.0
Seoul    30.0

데이터 정렬

나이순 내림차순 정렬

result = df.sort_values(
    by="age",
    ascending=False
)

print(result)

결과

      name  age
2  Charlie   35
0    Alice   30
1      Bob   25

엑셀 파일 저장

df.to_excel(
    "result.xlsx",
    index=False
)

실행하면 엑셀 파일이 생성됩니다.


실무에서 많이 사용하는 기능

데이터 읽기

pd.read_csv()
pd.read_excel()
pd.read_json()

데이터 확인

df.head()
df.info()
df.describe()

데이터 가공

df.groupby()
df.sort_values()
df.drop_duplicates()

파일 저장

df.to_csv()
df.to_excel()

 

 

최초 작성일 : 2026.06.08

공부 목적 : AI 개발 공부

키워드 : crawling, scraping


정리

  • 크롤링(Crawling) : 웹페이지를 찾아다니는 과정
  • 스크레이핑(Scraping) : 웹페이지에서 필요한 데이터를 추출하는 과정

즉, 크롤링은 "찾기", 스크레이핑은 "가져오기"라고 생각하면 이해하기 쉽습니다.

 

Python 코드 예시

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")

title = soup.find("h2").text
price = soup.find("span").text

 


크롤링(Crawling)이란?

크롤링은 인터넷을 돌아다니며 웹페이지를 수집하는 작업입니다.

대표적인 예로 검색엔진이 있습니다.

동작 과정

  1. 특정 웹사이트 방문
  2. 페이지 내 링크 수집
  3. 새로운 페이지 이동
  4. 반복 수행

예를 들어 검색엔진은

A 페이지
 ├─ B 페이지
 ├─ C 페이지
 └─ D 페이지

와 같이 링크를 따라 이동하면서 수많은 페이지를 수집합니다.

이 과정을 수행하는 프로그램을 크롤러(Crawler) 또는 봇(Bot) 이라고 부릅니다.

크롤링 및 웹 요청(Web Request) 라이브러리

웹 서버에 데이터를 요청하고 HTML 소스코드를 가져오는 역할을 합니다. 
  • Requests
    • HTTP 요청을 보내는 가장 직관적이고 표준적인 라이브러리입니다.
    • API 호출이나 정적 웹 페이지의 HTML을 가져올 때 주로 씁니다. 
  • Scrapy
    • 대규모 웹 크롤링을 위해 설계된 강력한 오픈소스 프레임워크입니다.
    • 비동기 방식으로 작동하여 속도가 매우 빠르고 데이터 저장까지 일괄 처리합니다. 
  • aiohttp
    • 비동기(Asyncio) 기반의 HTTP 클라이언트 라이브러리입니다.
    • 수많은 웹 페이지를 동시에 빠르게 요청해야 할 때 성능이 뛰어납니다.
 

스크레이핑(Scraping)이란?

스크레이핑은 웹페이지 안에서 원하는 정보를 추출하는 작업입니다.

예를 들어 쇼핑몰 상품 정보를 수집한다고 가정해보겠습니다.

수집 대상

  • 상품명
  • 가격
  • 평점
  • 리뷰 수

웹페이지 전체가 필요한 것이 아니라 특정 데이터만 추출하는 것이 목적입니다.

예시

<h2>무선 마우스</h2>
<span>29,900원</span>

결과

상품명 : 무선 마우스
가격 : 29,900원

이 과정이 스크레이핑입니다.

 

스크레이핑 및 데이터 파싱(Parsing) 라이브러리

가져온 HTML 소스코드에서 원하는 텍스트나 이미지를 추출하는 역할을 합니다.
  • BeautifulSoup
    • 초보자도 쓰기 쉬운 가장 대표적인 HTML 파싱 라이브러리입니다.
    • HTML 구조를 분석하여 태그, 속성, 텍스트를 직관적으로 찾아냅니다. 
  • lxml
    • C언어 기반으로 만들어져 속도가 매우 빠른 HTML/XML 파서입니다.
    • BeautifulSoup의 내부 파서로 지정해 쓰거나, XPath 문법으로 데이터를 추출할 때 씁니다.

동적 웹 페이지(JavaScript) 대응 라이브러리

로그인이 필요하거나, 스크롤을 내려야 데이터가 나오는 '동적 웹 사이트'는 위 라이브러리만으로 수집이 어렵습니다. 이때 브라우저를 직접 원격 제어하는 도구를 씁니다.
  • Selenium
    • 실제 브라우저(Chrome 등)를 띄워 사람처럼 클릭, 키보드 입력, 스크롤을 수행합니다.
    • 거의 모든 보안 및 동적 페이지를 뚫을 수 있지만, 브라우저를 켜야 하므로 속도가 느립니다. 
  • Playwright
    • Microsoft에서 개발한 최신 브라우저 자동화 라이브러리입니다.
    • Selenium보다 실행 속도가 빠르고, 비동기 처리를 기본 지원하여 최근 사용량이 급증하고 있습니다. 

실제로는 함께 사용된다

대부분의 프로그램은

1단계 : 크롤링

사이트 방문
↓
상품 페이지 찾기
↓
상품 링크 수집

2단계 : 스크레이핑

상품 페이지 접속
↓
상품명 추출
↓
가격 추출
↓
리뷰 수 추출

순서로 동작합니다.

 

'코딩 > 바이브 코딩(Vibe Coding)' 카테고리의 다른 글

커서 AI 실전기록 02  (0) 2026.06.08
Pandas란?  (0) 2026.06.08
ORM이란? SQL을 몰라도 DB를 다룰 수 있을까?  (0) 2026.06.08
커서 AI 실전기록 01  (1) 2026.06.07
React는 무엇인가?  (0) 2026.06.07

최초 작성일 : 2026.06.08

공부 목적 : AI 개발 공부

키워드 : ORM, SQL, JPA


ORM이란?

ORM(Object Relational Mapping)은 객체(Object)와 데이터베이스 테이블(Relation)을 연결해주는 기술입니다.

쉽게 말해, SQL을 직접 작성하지 않고도 프로그래밍 언어의 객체를 통해 데이터베이스를 다룰 수 있게 해줍니다.

예를 들어 사용자를 조회한다고 가정해보겠습니다.

SQL 방식

SELECT * FROM users WHERE id = 1;

ORM 방식

user = User.get(id=1)
print(user.name)

ORM이 내부적으로 SQL을 생성하여 실행해 줍니다.


ORM을 사용하는 이유

1. 개발 속도가 빨라진다

데이터를 추가할 때도 객체처럼 사용할 수 있습니다.

user = User(
    name="Alice",
    age=30
)
user.save()

복잡한 SQL을 매번 작성할 필요가 없습니다.

2. 코드 가독성이 좋아진다

데이터를 객체처럼 다룰 수 있습니다.

user.name
user.age

SQL보다 직관적이라 유지보수가 쉬워집니다.

3. 데이터베이스 변경이 편리하다

MySQL, PostgreSQL, SQLite 등 DB가 변경되더라도 ORM이 차이를 일부 흡수해 줍니다.


대표적인 ORM

Python

  • Django ORM
  • SQLAlchemy

Java

  • JPA
  • Hibernate

Node.js

  • Prisma
  • TypeORM
  • Sequelize

최근 AI를 활용한 바이브 코딩에서도 Prisma가 자주 사용됩니다.


ORM의 단점

1. 성능 최적화가 어려울 수 있다

ORM이 생성한 SQL이 항상 최적은 아닙니다.

특히 대량 데이터 조회 시 성능 문제가 발생할 수 있습니다.

2. 복잡한 쿼리는 불편하다

JOIN이 많거나 통계성 집계가 필요한 경우에는 SQL을 직접 작성하는 것이 더 편할 수 있습니다.

3. SQL 지식은 여전히 필요하다

ORM을 사용하더라도

  • SELECT
  • JOIN
  • GROUP BY
  • INDEX

등 기본 SQL은 반드시 알아야 합니다.


실무에서는 어떻게 사용할까?

대부분의 프로젝트는 다음과 같은 방식을 사용합니다.

  • 일반 CRUD → ORM 사용
  • 복잡한 조회 및 성능 최적화 → SQL 직접 작성

즉, ORM과 SQL은 경쟁 관계가 아니라 서로 보완 관계입니다.

 

 

+ Recent posts