2026년 6월 15일 월요일

[웹개발 기초] API가 뭔가요? — 초보자도 이해되게, 진짜 쉽게 정리해봤습니다

안녕하세요!

오늘은 개발 공부를 시작하면 정말 빠르게 마주치는 단어, API에 대해 정리해보려고 합니다.

솔직히 저도 처음에 "API, API" 하길래 대충 알아듣는 척했어요. 근데 막상 뭔가 만들려고 하면 API 연결해야 하는 순간이 오고, 그때 모르면 진짜 막막해지더라고요.

이 글에서는 어려운 말 없이, 일상 비유 중심으로 API가 뭔지 한 번에 잡아드릴게요.



1. API가 뭔지, 진짜 쉽게 설명하면

APIApplication Programming Interface의 약자입니다. 이름만 보면 완전 거창한데, 핵심만 뽑으면 딱 이겁니다.

"서로 다른 프로그램이 대화할 수 있게 해주는 창구"

비유를 하나 들어볼게요.

식당에 가면 주방에 직접 들어가서 "저 오늘 파스타 먹을게요" 하고 만들 수 없잖아요. 대신 직원한테 주문을 하고, 직원이 주방에 전달하고, 완성된 음식을 받아오는 구조잖아요.

여기서:

  • 손님 = 내 앱(클라이언트)
  • 주방 = 서버 또는 다른 서비스
  • 직원 = API
  • 메뉴판 = API 문서 (어떻게 주문하면 되는지 정리해둔 것)

API는 딱 이 역할이에요. 내 앱이 다른 서비스한테 "이 데이터 줘" 또는 "이 기능 실행해줘" 하고 요청할 때, 그 중간에서 통로 역할을 하는 게 API입니다.



2. 실생활에서 API가 쓰이는 곳 — 사실 엄청 많아요

API가 낯설게 느껴지는 이유는 눈에 안 보여서예요. 근데 찾아보면 우리가 매일 쓰는 것들이 전부 API로 연결되어 있어요.

날씨 앱 폰에 있는 날씨 앱이 어떻게 실시간 날씨를 보여줄까요? 앱 자체가 기상 데이터를 수집하는 게 아니에요. 기상청 또는 기상 데이터 서비스의 API에 "서울 오늘 날씨 줘" 하고 요청해서 받아오는 거예요.

카카오/구글 로그인 "카카오로 로그인" 버튼 클릭하면 어떻게 내 카카오 계정으로 다른 앱에 로그인이 될까요? 그 앱이 카카오 API를 통해 "이 유저 카카오 계정 맞아요?" 하고 확인 요청을 보내는 구조입니다.

지도 서비스 앱 안에 지도가 뜨는 경우, 그 앱이 지도를 직접 만든 게 아니에요. 카카오맵, 구글맵 API를 가져다가 쓰는 거예요.

결제 기능 쇼핑몰에서 카드 결제할 때 PG사(결제 대행사) API를 연동해서 처리해요. 결제 시스템을 앱마다 직접 만들면 엄청난 작업인데, API 하나 연결하면 끝이에요.

바이브코딩으로 뭔가 만들 때 AI가 "API 연결해드릴까요?" 하는 순간, 이제 "아, 다른 서비스랑 연결 뚫는 거구나" 하고 바로 이해될 거예요.



3. API 요청, 어떻게 생겼냐면

API를 실제로 사용할 때 어떤 구조로 동작하는지 흐름을 한번 따라가 볼게요.

날씨 정보를 가져오는 상황을 예로 들면:

내 앱 → "서울 날씨 알려줘" → 날씨 API 서버
날씨 API 서버 → "서울 오늘 맑음, 28도" → 내 앱
내 앱 → 화면에 날씨 표시

이때 요청을 보내는 방식을 HTTP 메서드라고 하는데, 자주 쓰는 것만 보면:

메서드 하는 일 예시
GET 데이터 가져오기   날씨 정보, 게시물 목록 조회
POST 데이터 보내기 로그인, 글 작성, 주문
PUT / PATCH 데이터 수정 프로필 정보 변경
DELETE 데이터 삭제 계정 탈퇴, 글 삭제

바이브코딩 하다 보면 AI가 만들어준 코드 안에 GET, POST 같은 단어들이 보일 거예요. 이제 보이면 "아, 여기서 서버한테 뭔가 주고받는 거구나" 하고 바로 읽힙니다.



4. API 응답은 어떻게 생겼나요? — JSON 알면 다 읽혀요

API를 통해 데이터를 받으면 이런 형태로 옵니다:

{
  "city": "서울",
  "temperature": 28,
  "status": "맑음",
  "humidity": 60
}

이게 바로 JSON(JavaScript Object Notation) 이에요. 중괄호 안에 키:값 쌍으로 구성되어 있고, 사람도 읽기 쉽고 컴퓨터도 처리하기 쉬워서 API 통신에서 사실상 표준처럼 쓰입니다.

"city가 서울이고, 온도는 28도고, 날씨 상태는 맑음이에요" 이걸 그냥 문장으로 쓰는 게 아니라 저렇게 구조화해서 전달하는 거예요.

내 앱은 이 JSON을 받아서 화면에 "서울 / 28°C / 맑음" 이렇게 표시하는 거고요.



5. API Key가 뭔지도 알아두자

API를 쓰다 보면 꼭 나오는 게 API Key입니다.

API Key는 쉽게 말해 입장권 같은 거예요.

아무나 API를 무제한으로 쓰면 서버가 터지잖아요. 그래서 "우리 서비스 API 쓰고 싶으면 회원가입하고 키 발급받아서 요청할 때 같이 보내세요" 하는 방식이에요.

네이버 지도 API, 카카오 API, OpenAI API 같은 것들 전부 마찬가지예요. 가입 → 키 발급 → 요청마다 키 포함 → 서버가 "이 사람 등록된 사용자구나" 하고 처리해주는 구조.

그리고 이 API Key는 절대 공개된 곳에 올리면 안 돼요. 깃허브에 코드 올릴 때 Key가 그대로 노출되면 다른 사람이 내 명의로 API를 마구 쓸 수 있거든요. .env 파일에 따로 빼서 관리하는 게 기본이에요. (.env 파일 관리는 [이전 글 - 웹·앱 개발 용어 정리]에서 다뤘으니 참고하세요!)



6. REST API vs 그 외 — 이름이 여러 개인 이유

API 공부하다 보면 REST API, GraphQL, WebSocket 같은 용어들도 나와요. 

이건 "API를 어떤 방식으로 설계하느냐"에 따른 종류 차이예요.

지금 당장 전부 알 필요는 없는데, 가장 많이 쓰이는 REST API만 짚고 넘어갈게요.

REST API URL 주소 기반으로 요청을 구분하는 방식입니다.

GET  /api/posts        → 게시물 목록 가져오기
GET  /api/posts/1      → 1번 게시물 가져오기
POST /api/posts        → 새 게시물 작성
DELETE /api/posts/1    → 1번 게시물 삭제

"이 주소로 GET 보내면 이 데이터 줄게요, POST 보내면 저장해줄게요" 이런 규칙을 정해둔 게 REST API예요.

현재 대부분의 서비스 API가 이 방식이라서, REST API가 뭔지만 알면 API 연동 작업을 이해하는 데 크게 문제없어요.



7. 바이브코딩할 때 API 어떻게 활용하냐면

AI랑 같이 앱 만들 때 API를 활용하는 경우를 몇 가지 정리해볼게요.

외부 API 연동 날씨, 지도, 번역, 환율 같은 기능은 직접 만드는 게 아니라 이미 만들어진 외부 API를 연결하는 게 훨씬 빠르고 정확해요. AI한테 "OpenWeatherMap API 연결해서 날씨 보여주는 화면 만들어줘" 하면 뚝딱 만들어줍니다.

내 서버 API 만들기 내가 만드는 앱의 데이터를 주고받으려면 백엔드 서버에 API를 직접 만들어야 해요. AI한테 "FastAPI로 게시물 CRUD API 만들어줘" 하면 엔드포인트 전체를 만들어주거든요. 그 결과물을 이해하는 데 오늘 내용이 직접적으로 도움이 됩니다.

AI API 연동 ChatGPT, Claude 같은 AI 기능을 내 앱에 넣고 싶을 때도 API를 씁니다. OpenAI API, Anthropic API를 연결하면 내 앱 안에서 AI 대화 기능을 구현할 수 있어요.


[웹개발 기초] API가 뭔가요?
[웹개발 기초] API가 뭔가요?


API, 이제 겁내지 않아도 됩니다

처음엔 "API"라는 단어 자체가 무겁게 느껴질 수 있어요.

근데 결국 API는 "다른 서비스랑 대화하는 창구" 일 뿐이에요. 식당에서 직원한테 주문하는 것처럼, 정해진 방식으로 요청하면 정해진 형태로 응답이 오는 구조예요.

오늘 정리한 것만 기억해도 충분합니다:

  • API = 프로그램 간 대화 창구
  • 요청(Request)과 응답(Response)으로 동작
  • HTTP 메서드(GET/POST 등)로 요청 종류를 구분
  • JSON 형태로 데이터를 주고받음
  • API Key = 입장권, 절대 공개하면 안 됨
  • REST API = 가장 많이 쓰이는 API 설계 방식


열공하세요! 🙌


2026년 6월 10일 수요일

[웹개발 기초] 프레임워크란 무엇인가? — 라이브러리랑 뭐가 다른지, 왜 쓰는지 초보자도 이해되게 정리해봤습니다

 안녕하세요!

오늘은 개발 공부 시작하면 거의 첫 주에 마주치는 단어, 프레임워크(Framework) 에 대해 정리해보려고 합니다.

솔직히 이거 처음 들었을 때 저도 그냥 "뭔가 큰 도구 같은 거겠지" 하고 넘어갔어요. 근데 막상 공부하다 보면 React도 프레임워크, Django도 프레임워크, Flutter도 프레임워크... 다 프레임워크라고 부르는데 왜 이렇게 종류가 많은지, 뭘 골라야 하는지 혼란이 오더라고요.

거기다 "프레임워크랑 라이브러리가 다른 거 아니에요?" 하는 질문까지 나오면서 더 미궁에 빠지는 경험 다들 한 번씩 하셨을 거예요.

이 글에서는 그 혼란을 한 번에 정리해드리려고 합니다. 어려운 말 없이, 실제로 쓰이는 맥락 중심으로 풀어볼게요.

[웹개발 기초] 프레임워크란 무엇인가?
[웹개발 기초] 프레임워크란 무엇인가?



1. 프레임워크가 뭔지, 진짜 쉽게 설명하면

프레임워크(Framework) 를 직역하면 "틀" 또는 "뼈대" 입니다.

개발에서의 프레임워크는 쉽게 말하면 이렇습니다.

"앱이나 웹을 만들 때 필요한 기본 구조와 규칙을 미리 갖춰놓은 개발 도구 세트"

비유를 하나 들어볼게요.

집을 짓는다고 생각해봅시다.

맨땅에서 처음부터 집을 지으려면 어떻게 해야 할까요? 설계도 만들고, 기둥 세우고, 벽 올리고, 배선하고, 배관하고... 전문 지식이 없으면 어디서 시작해야 할지조차 막막하잖아요.

근데 조립식 주택 키트가 있으면 어떨까요? 기둥이랑 벽이랑 지붕이 이미 규격에 맞게 준비되어 있고, "여기에 이거 끼우고, 저기에 저거 연결하세요" 하는 설명서까지 있는 거예요.

기본 구조는 다 갖춰져 있으니까, 나는 내 집에 맞는 내부 인테리어만 신경 쓰면 됩니다.

그 조립식 주택 키트가 프레임워크입니다.

개발도 똑같아요. 프레임워크가 없으면 로그인 기능, 화면 라우팅, 데이터 처리 같은 것들을 전부 처음부터 만들어야 해요. 프레임워크를 쓰면 이미 그 기반이 다 갖춰져 있고, 나는 내 서비스에 맞는 기능만 채워 넣으면 됩니다.



2. 그럼 라이브러리는 뭐가 다른 거예요?

프레임워크 얘기 나오면 항상 같이 나오는 질문이 있어요.

"라이브러리(Library)랑 프레임워크가 다른 건가요?"

결론부터 말하면 다릅니다. 그런데 딱 한 가지 핵심 차이가 있어요.

프레임워크는 내가 프레임워크 안에서 코드를 짜고, 라이브러리는 내 코드 안에서 라이브러리를 가져다 씁니다.

이게 무슨 말인지 좀 더 풀어볼게요.

라이브러리는 내가 필요할 때 꺼내 쓰는 도구예요. 요리할 때 칼이 필요하면 칼 집에서 꺼내 쓰고, 다시 넣는 것처럼요. 내가 주도권을 가지고 있어요. 쓰고 싶을 때 쓰고, 안 쓰고 싶으면 안 쓰면 됩니다.

프레임워크는 반대예요. 프레임워크가 전체 흐름을 잡고, 내가 그 흐름 안에 코드를 끼워 넣는 방식이에요. "여기에 로그인 로직 작성하세요", "여기에 화면 컴포넌트 넣으세요" 하는 자리가 이미 정해져 있고, 나는 거기에 맞게 코드를 작성합니다.

이걸 개발 용어로 IoC (Inversion of Control, 제어의 역전) 라고 부르는데요. 지금 당장 이 용어 외울 필요는 없고, "프레임워크가 흐름을 주도한다"는 감각만 잡으면 됩니다.

실제 예시로 비교해볼게요:

구분예시특징
라이브러리axios, lodash, moment.js내가 필요한 기능만 골라서 씀
프레임워크React, Vue, Django, Flutter전체 구조와 규칙이 정해져 있음

사실 React를 라이브러리로 부르는 사람도 있고 프레임워크로 부르는 사람도 있어요. 공식적으로는 React 자체는 라이브러리인데, 주변 생태계(라우터, 상태관리 등)까지 합치면 프레임워크처럼 동작하거든요. 이런 경계가 애매한 경우도 있다는 거 참고로 알아두면 됩니다.



3. 프레임워크를 왜 쓰냐고요? — 쓰는 이유가 분명합니다

"그냥 처음부터 직접 만들면 안 되나요?" 하는 분들도 있어요. 이론적으론 가능한데, 실무에선 거의 안 그렇습니다. 이유가 있어요.

첫째, 속도가 압도적으로 빠릅니다. 자주 쓰이는 기능들이 이미 구현되어 있어요. 회원가입, 로그인, 페이지 이동, 데이터 요청 같은 것들을 처음부터 짤 필요가 없어요.

둘째, 구조가 일관됩니다. 혼자 짤 땐 괜찮은데, 팀으로 일할 때 각자 다른 방식으로 짜면 코드가 뒤죽박죽이 돼요. 프레임워크를 쓰면 "이 프레임워크 방식대로 짜자" 하는 공통 규칙이 생겨서 협업이 훨씬 쉬워집니다.

셋째, 보안과 안정성이 검증되어 있어요. 오랫동안 많은 개발자들이 써오면서 버그도 고쳐지고, 보안 취약점도 패치돼왔어요. 내가 처음부터 짜면 내가 모르는 보안 구멍이 생길 수 있는데, 프레임워크는 그런 부분이 어느 정도 검증이 된 상태예요.

넷째, 커뮤니티와 문서가 풍부합니다. 막히면 검색하면 나와요. 한국어 자료도 많고, 유튜브 강의도 넘쳐요. 처음 짜는 코드에서 막히면 구글에 물어보면 되는데, 직접 만든 도구는 구글에 물어볼 수가 없잖아요.



4. 프레임워크 종류 — 영역별로 뭐가 있는지 정리

프레임워크는 용도에 따라 완전히 다른 종류가 있어요. 크게 프론트엔드, 백엔드, 앱 개발 세 영역으로 나눠서 보면 됩니다.

프론트엔드 프레임워크 (화면 만드는 쪽)

React — 현재 웹 프론트엔드에서 가장 많이 쓰이는 라이브러리(또는 프레임워크)예요. Facebook이 만들었고, 컴포넌트 단위로 화면을 조립하는 방식입니다. 취업 시장에서 수요가 가장 높아요.

Next.js — React 기반으로 만들어진 프레임워크예요. React만으론 부족한 서버사이드 렌더링, SEO 최적화, 파일 기반 라우팅 같은 기능들을 추가로 제공합니다. 요즘 웹 개발에서 React + Next.js 조합이 많이 쓰입니다.

Vue.js — React보다 진입장벽이 낮다고 알려진 프론트엔드 프레임워크예요. 국내 중소기업이나 스타트업에서 많이 볼 수 있어요.

Svelte — 비교적 최근에 주목받고 있는 프레임워크입니다. 빌드 시점에 코드를 컴파일해버려서 속도가 빠른 게 특징이에요.

백엔드 프레임워크 (서버 만드는 쪽)

Django (Python) — Python 기반 백엔드 프레임워크 중 가장 규모가 크고 기능이 많아요. 관리자 페이지, 인증 시스템, ORM이 기본으로 내장되어 있어서 빠르게 서비스를 만들 수 있어요.

FastAPI (Python) — Django보다 가볍고 빠른 Python 백엔드 프레임워크예요. API 서버 만들 때 많이 쓰이고, 자동 문서화 기능이 있어서 개발 효율이 좋습니다.

Express.js (Node.js) — JavaScript로 백엔드를 만들 수 있는 가벼운 프레임워크예요. 프론트엔드에서 JavaScript를 쓰던 사람이 백엔드까지 JS로 연장해서 쓸 수 있다는 게 장점입니다.

Spring (Java) — 대기업이나 금융권에서 많이 쓰이는 Java 기반 백엔드 프레임워크예요. 규모가 크고 안정적이지만 학습 곡선이 높은 편이에요.

앱 개발 프레임워크 (모바일 앱 만드는 쪽)

Flutter — Google이 만든 크로스플랫폼 프레임워크예요. 코드 하나로 iOS, Android, 웹, 데스크탑 앱을 동시에 만들 수 있어서 소규모 팀이나 개인 개발자한테 인기가 많습니다. 이 블로그에서 자주 다루는 그거 맞아요.

React Native — React 문법으로 iOS, Android 앱을 만드는 프레임워크예요. 이미 React를 쓸 줄 아는 웹 개발자가 앱까지 확장할 때 많이 선택합니다.



5. 그래서 뭘 배워야 하냐고요? — 선택 기준 정리

여기까지 읽으면 또 다른 고민이 생기죠.

"이렇게 많으면 대체 뭘 먼저 배워야 해요?"

정답은 없지만, 선택 기준을 잡는 방법은 있어요.

목표가 취업이라면 — 시장 수요가 높은 걸 선택하는 게 유리합니다. 웹이면 React, 백엔드면 Node.js나 Python(FastAPI/Django), 앱이면 Flutter나 React Native 중에서 골라보세요.

목표가 빠르게 뭔가 만드는 거라면 — 진입장벽이 낮고 튜토리얼이 많은 걸 선택하세요. Flutter나 Next.js는 한국어 자료도 많고 커뮤니티가 활발해요.

바이브코딩으로 AI랑 같이 만들 거라면 — 사실 어떤 프레임워크든 AI가 잘 알고 있어요. 단, 내가 결과물을 이해하고 수정하려면 기초 개념은 잡혀 있어야 합니다. 그래서 오늘처럼 개념을 먼저 잡는 게 맞아요.

가장 중요한 건 하나를 골라서 끝까지 써보는 것이에요. 이것저것 조금씩 건드리다 보면 어느 것도 제대로 안 남는 경험, 저도 해봤습니다.




프레임워크, 외울 게 아니라 쓰면서 익히는 겁니다

처음엔 이름도 낯설고 종류도 너무 많아서 막막하게 느껴질 수 있어요.

근데 솔직히 지금 당장 다 알 필요 없어요. "아, 개발할 때 이런 도구들이 있고, 역할별로 나뉜다" 는 전체 그림만 잡아두면 됩니다.

오늘 정리한 내용만 기억해도:

  • 프레임워크가 왜 존재하는지, 어떤 역할인지 
  • 라이브러리랑 뭐가 다른지 
  • 프론트엔드 / 백엔드 / 앱 영역별로 어떤 프레임워크가 있는지 
  • 내 상황에 맞게 선택하는 기준 

이 정도면 충분해요.

열공하세요! 🙌

2026년 6월 9일 화요일

[웹개발 기초] 웹·앱 개발할 때 나오는 용어들, 역할이랑 관계까지 한 번에 정리해봤습니다

 안녕하세요!

오늘은 웹이나 앱 개발을 공부하다 보면 쏟아지는 용어들 정리해보려고 합니다.

처음에 개발 공부 시작하면 진짜 이게 제일 힘들어요. 개념 하나 찾으면 모르는 단어가 또 나오고, 그거 찾으면 또 모르는 게 나오는 그 무한루프... 저도 처음엔 그냥 "일단 외워야지" 했다가 다 날아가는 경험을 했습니다.

그래서 이번엔 단순히 단어 뜻만 나열하는 게 아니라, 각 용어들이 서로 어떤 관계인지, 실제 개발 흐름에서 어디에 위치하는지를 중심으로 정리해봤어요.

이 글 하나로 전체 그림이 잡혔으면 합니다.


[웹개발 기초] 웹·앱 개발할 때 나오는 용어
[웹개발 기초] 웹·앱 개발할 때 나오는 용어



1. 일단 전체 구조부터 보고 들어가자

용어들을 하나씩 보기 전에, 전체 그림을 먼저 머릿속에 잡아두는 게 훨씬 이해가 빠릅니다.

웹·앱 개발은 크게 이런 흐름으로 이루어져 있어요:


[사용자]

↕ 화면 보고 클릭

[프론트엔드 / 클라이언트]

↕ API 요청 / 응답 (HTTP, JSON)

[백엔드 / 서버]

↕ 데이터 읽기 / 쓰기

[데이터베이스]


이 4개 레이어가 웹·앱의 핵심 구조입니다. 모든 용어들은 결국 이 4가지 중 하나에 속하거나, 이 사이를 연결하는 역할을 해요.

이 그림 기억해두고 아래 내용 읽으면 훨씬 잘 들어옵니다.



2. 프론트엔드 영역 — 사용자가 직접 보는 부분

프론트엔드(Frontend) 는 사용자가 실제로 눈으로 보고 손으로 조작하는 화면을 만드는 영역입니다.

앱을 켰을 때 보이는 버튼, 텍스트, 이미지, 레이아웃 — 이 모든 게 프론트엔드 영역이에요.

여기서 자주 나오는 용어들을 정리해볼게요.

HTML — 웹 페이지의 뼈대를 잡는 언어입니다. "여기에 제목, 여기에 버튼, 여기에 이미지" 같은 구조를 잡아줘요.

CSS — HTML로 잡은 뼈대를 꾸미는 언어입니다. 색상, 폰트, 배치, 크기 같은 시각적인 부분을 담당해요.

JavaScript (JS) — 웹 페이지에 동작을 넣어주는 언어입니다. 버튼 클릭하면 뭔가 일어나고, 데이터 불러와서 화면에 표시하고, 애니메이션 넣는 것들이 전부 JS의 역할이에요.

React / Vue / Next.js — JavaScript를 더 편하게 쓸 수 있도록 도와주는 프레임워크/라이브러리입니다. 혼자 처음부터 다 짜는 것보다 훨씬 빠르고 구조적으로 만들 수 있어요. 요즘 프론트엔드 개발에서 React는 거의 기본처럼 쓰입니다.

Flutter — 구글이 만든 크로스플랫폼 프레임워크예요. 코드 하나로 iOS, Android, 웹 앱을 동시에 만들 수 있어서 초보자한테도 인기가 많습니다. 이 블로그에서도 자주 다루는 그거 맞아요.

UI (User Interface) — 사용자가 직접 조작하는 화면 요소 전체를 말합니다. 버튼, 입력창, 메뉴 같은 것들이에요.

UX (User Experience) — UI를 사용하면서 느끼는 경험을 말해요. "이 앱 쓰기 편하다 / 불편하다"가 UX의 영역입니다. 기능이 다 있어도 흐름이 어색하면 UX가 나쁜 거예요.

컴포넌트(Component) — 화면을 구성하는 재사용 가능한 조각입니다. 예를 들어 버튼 하나, 카드 하나, 헤더 하나가 컴포넌트예요. React나 Flutter 모두 이 컴포넌트 단위로 화면을 조립합니다.

렌더링(Rendering) — 데이터나 코드를 실제 화면에 그려내는 과정이에요. "렌더링이 느리다" 하면 화면이 늦게 표시된다는 뜻입니다.



3. 백엔드 영역 — 눈에 안 보이지만 핵심인 부분

백엔드(Backend) 는 사용자 눈에는 보이지 않지만, 실제 로직이 돌아가는 서버 쪽 영역입니다.

로그인 처리, 데이터 저장, 결제 연동, 이메일 발송 같은 것들이 다 백엔드에서 일어나요.

서버(Server) — 요청을 받아서 처리하고 응답을 돌려주는 컴퓨터(또는 프로그램)입니다. 항상 켜져 있어야 하고, 여러 사람의 요청을 동시에 처리할 수 있어야 해요.

Node.js — JavaScript로 서버를 만들 수 있게 해주는 환경입니다. 프론트엔드에서 JS를 쓰던 사람이 백엔드도 JS로 짤 수 있어서 진입장벽이 낮은 편이에요.

Python (Django / FastAPI / Flask) — 백엔드 개발에 많이 쓰이는 언어예요. 문법이 읽기 쉽고 AI/ML 연동이 강해서 요즘 더 주목받고 있어요.

REST API — 클라이언트와 서버가 데이터를 주고받는 방식 중 가장 널리 쓰이는 규칙입니다. "이 주소로 GET 요청 보내면 데이터 줄게요, 이 주소로 POST 보내면 저장해줄게요" 같은 약속이에요.

엔드포인트(Endpoint) — API에서 특정 기능을 수행하는 URL 주소를 말해요. 예를 들면 /api/users는 유저 목록을 가져오는 엔드포인트, /api/login은 로그인 처리하는 엔드포인트 이런 식이에요.

인증(Authentication) — "이 사람이 누구인지" 확인하는 과정입니다. 로그인이 여기에 해당해요.

인가(Authorization) — "이 사람이 이걸 할 권한이 있는지" 확인하는 과정이에요. 로그인은 됐는데 관리자 페이지에 접근할 수 있는지 체크하는 게 인가입니다. 인증이랑 인가, 이름이 비슷해서 많이 헷갈리는데 완전히 다른 개념이에요.

JWT (JSON Web Token) — 로그인 후 발급되는 토큰의 한 종류입니다. 이 토큰을 요청마다 같이 보내면 서버가 "아, 로그인된 사람이구나" 하고 인식해요. 세션 방식보다 서버 부담이 적어서 요즘 많이 쓰입니다.

미들웨어(Middleware) — 요청이 서버에 도착하고 실제 처리되기 전에 중간에서 먼가를 해주는 코드예요. 로그 남기기, 인증 토큰 검사, 요청 데이터 가공 같은 것들이 미들웨어로 처리됩니다. 경비원 같은 역할이에요 — 들어오기 전에 신분 확인하고 통과시키는.



4. 데이터베이스 영역 — 데이터가 실제로 쌓이는 곳

데이터베이스(Database, DB) 는 데이터를 저장하고 꺼내오는 창고입니다.

회원 정보, 게시물, 주문 내역, 채팅 기록 — 앱에서 생성되는 모든 데이터가 데이터베이스에 저장돼요.

데이터베이스는 크게 두 가지 종류로 나뉩니다.

관계형 데이터베이스 (RDB / SQL) — 표(Table) 형태로 데이터를 저장합니다. 엑셀 시트처럼 행과 열로 데이터를 관리해요. MySQL, PostgreSQL, SQLite가 대표적이에요. 데이터 구조가 명확하고 관계를 정의할 수 있어서 복잡한 데이터 처리에 강합니다.

비관계형 데이터베이스 (NoSQL) — 표 형태가 아닌 유연한 구조로 저장합니다. JSON처럼 생긴 문서(Document) 형태로 저장하는 MongoDB가 대표적이에요. 데이터 구조가 자주 바뀌거나 대용량 처리가 필요할 때 유리합니다.

CRUD — 데이터베이스에서 하는 작업 4가지를 묶어서 부르는 말이에요.

  • Create — 데이터 생성
  • Read — 데이터 조회
  • Update — 데이터 수정
  • Delete — 데이터 삭제

앱 기능 대부분이 결국 이 CRUD 중 하나입니다. "게시물 작성" = Create, "피드 보기" = Read, "댓글 수정" = Update, "계정 탈퇴" = Delete 이런 식으로요.

ORM (Object-Relational Mapping) — 데이터베이스를 직접 SQL 언어로 다루지 않고, 내가 쓰는 언어(Python, JS 등)의 코드로 다룰 수 있게 해주는 도구입니다. 예를 들어 Python의 SQLAlchemy, Django ORM 같은 게 있어요. SQL 몰라도 어느 정도 DB를 다룰 수 있게 해줘서 초보자한테 편리하게 느껴질 수 있는데, 복잡한 쿼리는 결국 SQL 알아야 합니다.

스키마(Schema) — 데이터베이스의 구조 설계도예요. "회원 테이블에는 id, 이름, 이메일, 비밀번호 컬럼이 있고, 게시물 테이블에는 id, 제목, 내용, 작성자id가 있다" 같은 걸 정의한 게 스키마입니다.



5. 연결고리 영역 — API와 그 주변 개념들

프론트엔드와 백엔드를 이어주는 영역에서 자주 나오는 용어들도 따로 정리해볼게요.

API (Application Programming Interface) — 서버가 클라이언트한테 열어둔 창구입니다. "이 주소로 요청하면 이 데이터 줄게요" 라는 약속이에요. 이미 이전 글에서 다뤘으니 익숙하죠?

JSON — API로 데이터를 주고받을 때 가장 많이 쓰이는 형식입니다. 키:값 쌍으로 이루어진 텍스트 형태예요. 사람도 읽기 편하고 거의 모든 언어에서 파싱할 수 있어서 사실상 표준이 됐습니다.

fetch / axios — 프론트엔드에서 API 요청을 보낼 때 쓰는 도구입니다. fetch는 브라우저 내장 기능이고, axios는 더 편하게 쓸 수 있게 만들어진 라이브러리예요. 바이브코딩으로 AI가 만들어준 코드에 이게 보이면 "아, 여기서 서버한테 뭔가 요청하고 있구나" 하고 읽으면 됩니다.

CORS (Cross-Origin Resource Sharing) — 다른 도메인 간에 API 요청을 허용하는 설정입니다. 프론트엔드 서버 주소랑 백엔드 서버 주소가 다를 때, 기본적으로는 보안상 요청이 막혀요. 백엔드에서 "이 주소는 허용할게요" 하고 열어줘야 하는데, 이게 CORS 설정이에요. 초보자가 API 연결하다가 가장 많이 만나는 에러 중 하나입니다.

환경변수 (.env) — API 키나 데이터베이스 비밀번호 같은 민감한 정보를 코드 안에 직접 쓰지 않고 별도 파일에 분리해서 관리하는 방식이에요. .env 파일 만들고 거기다 쓰는 게 보통입니다. 이 파일은 절대 깃허브에 올리면 안 돼요.

배포(Deploy) — 내 컴퓨터에서 개발한 코드를 실제 서버에 올려서 다른 사람도 접근할 수 있게 만드는 과정입니다. "배포했다" = "이제 실제로 쓸 수 있다"는 뜻이에요. Vercel, Netlify, AWS, Firebase 같은 서비스들이 배포 플랫폼입니다.

버전 관리 / Git — 코드 변경 이력을 추적하고 관리하는 도구예요. "어제 코드로 돌아가고 싶다", "여러 사람이 같은 코드를 동시에 수정하고 싶다" 같은 상황에서 필수입니다. GitHub는 Git으로 관리하는 코드를 온라인에 올려두는 플랫폼이에요.



6. 전체 관계 한눈에 정리

여기까지 나온 용어들을 전체 흐름에 배치하면 이렇게 됩니다.


[사용자]

   ↕ 화면 조작
   
[프론트엔드]
HTML / CSS / JavaScript
React / Flutter / Vue
UI, UX, 컴포넌트, 렌더링
   ↕ fetch / axios로 API 요청 (JSON 형식)
   ↕ HTTP 메서드 (GET / POST / PUT / DELETE)
   ↕ CORS 설정으로 허용 여부 체크

[백엔드 / 서버]
Node.js / Python / Java
REST API / 엔드포인트
인증(Authentication) / 인가(Authorization)
JWT 토큰 / 미들웨어
   ↕ ORM 또는 SQL 쿼리

[데이터베이스]
MySQL / PostgreSQL (관계형)
MongoDB (비관계형)
CRUD / 스키마

그리고 전체를 감싸는 것들:

  • Git / GitHub — 코드 버전 관리
  • .env / 환경변수 — 민감한 정보 분리 관리
  • 배포 플랫폼 — 실제 서비스 가동

이 구조가 눈에 들어오기 시작하면, AI가 뭔가 만들어줬을 때 "이 코드는 프론트엔드 부분이고, 이 부분은 API 연결이고, 여기가 백엔드 로직이구나" 하고 위치 파악이 됩니다.




용어가 많아 보여도 결국 다 연결되어 있어요

처음 볼 땐 용어가 너무 많아서 막막하게 느껴질 수 있어요. 근데 솔직히 이걸 다 처음부터 외울 필요는 없습니다.

"이런 게 있구나, 이 위치에 있구나" 하고 전체 그림을 먼저 잡아두고, 실제로 뭔가 만들면서 하나씩 부딪히는 게 훨씬 빠릅니다.

오늘 정리한 내용 기준으로:

  • 프론트엔드 / 백엔드 / 데이터베이스 역할 구분 
  • API와 JSON이 이 사이를 어떻게 연결하는지 
  • CRUD, JWT, CORS, ORM 같은 실무 용어 맥락 
  • 전체 흐름에서 각 용어의 위치 

이 정도만 잡아도 개발 공부할 때 훨씬 덜 헤맵니다.

열공하세요! 🙌

2026년 6월 8일 월요일

[웹개발 기초] 클라이언트-서버란 무엇인가? — 앱이 데이터를 주고받는 구조, 초보자도 이해되게 정리해봤습니다

 안녕하세요!

오늘은 웹이나 앱 개발을 처음 시작하거나, 바이브코딩으로 뭔가 만들어보려는 분들이 꼭 한 번은 마주치게 되는 개념인 클라이언트-서버 구조에 대해 정리해보려고 합니다.

솔직히 말하면 저도 처음엔 그냥 "어딘가에서 데이터 가져오는 거 아닌가?" 수준으로 넘어갔어요. 근데 막상 앱을 만들다 보면 이 개념이 흐릿하면 계속 막히는 순간이 오더라고요.

"API가 뭔지 모르겠어요", "요청이 왜 안 가는지 모르겠어요" 같은 질문들, 사실 다 여기서 출발합니다.

이 글에서는 어려운 말 없이, 실제 앱이 어떻게 데이터를 주고받는지를 중심으로 풀어볼게요.


[웹개발 기초] 클라이언트-서버란 무엇인가?
[웹개발 기초] 클라이언트-서버란 무엇인가?



1. 클라이언트와 서버, 대체 뭐가 뭔지부터 잡고 가자

가장 먼저 용어 정리부터 해봅시다.

클라이언트(Client) 는 쉽게 말해서 "나" 입니다. 제가 지금 쓰고 있는 스마트폰, 노트북, 거기서 열려 있는 앱이나 브라우저가 클라이언트예요. "뭔가를 요청하는 쪽"이라고 기억하면 됩니다.

서버(Server)"그 요청을 받아서 처리해주는 쪽" 입니다. 어딘가에 있는 컴퓨터인데, 항상 켜져 있고 요청이 오면 응답을 돌려줍니다.

비유를 하나 들어볼게요.

식당에 가면 손님이 직원한테 주문을 하죠. 직원이 주방에 전달하고, 주방에서 음식을 만들어서 가져다주는 구조잖아요.

여기서:

  • 손님 = 클라이언트
  • 직원 + 주방 = 서버
  • 주문서 = 요청(Request)
  • 나온 음식 = 응답(Response)

앱도 똑같습니다. 인스타그램 피드를 새로 고침하면, 내 폰(클라이언트)이 서버한테 "최신 게시물 줘" 하고 요청을 보내고, 서버가 게시물 목록을 돌려보내주는 거예요.

그 데이터를 받아서 화면에 뿌리는 게 클라이언트 역할입니다.



2. 요청과 응답, 이게 HTTP입니다 — 웹의 언어

클라이언트와 서버가 데이터를 주고받을 때 사용하는 약속된 방식이 있어요. 그게 바로 HTTP(HyperText Transfer Protocol) 입니다.

이름은 복잡해 보이는데, 그냥 "웹에서 데이터 주고받는 방법에 대한 규칙"이라고 이해하면 됩니다.

HTTP 요청에는 몇 가지 방식(Method)이 있어요. 자주 나오는 것만 보면:

메서드하는 일예시
GET데이터 가져오기게시물 목록 불러오기
POST데이터 보내기(생성)로그인, 글 작성
PUT / PATCH데이터 수정하기프로필 정보 변경
DELETE데이터 삭제하기계정 삭제

바이브코딩하다 보면 AI가 만들어준 코드 안에 GET, POST 이런 단어들이 보일 거예요. 이제 보이면 "아, 여기서 서버한테 데이터 요청하거나 전송하는 거구나" 하고 바로 읽힐 겁니다.

그리고 서버가 응답을 돌려줄 때는 상태 코드(Status Code) 도 같이 보냅니다.

자주 만나게 되는 것들만 정리하면:

  • 200 → 성공, 잘 됐어요
  • 201 → 생성 성공 (POST 요청 후 자주 나와요)
  • 400 → 요청이 잘못됐어요 (내 쪽 문제)
  • 401 → 인증 필요 (로그인 안 된 상태)
  • 403 → 권한 없음 (로그인은 됐는데 접근 불가)
  • 404 → 없는 주소 요청 (잘못된 URL)
  • 500 → 서버 에러 (서버 쪽 문제)

개발하다가 콘솔에 404 뜨면 "내가 주소를 잘못 쳤구나", 500이 뜨면 "서버 쪽에서 뭔가 터졌구나" 이렇게 빠르게 원인 파악을 할 수 있어요.



3. API가 뭔지 드디어 제대로 이해해봅시다

클라이언트-서버 얘기를 하다 보면 반드시 나오는 단어가 API입니다.

API(Application Programming Interface) 는 한 마디로 "서버가 클라이언트한테 열어둔 창구" 예요.

서버 안에는 엄청난 양의 데이터가 있는데, 아무나 막 접근하게 둘 수는 없잖아요. 그래서 "이 주소로 요청하면 이 데이터 줄게요" 하고 정해진 방식으로만 열어둔 통로가 API입니다.

예를 들어 날씨 앱을 만든다고 하면:

  • 내 앱(클라이언트)이 기상청 서버 API에 "서울 오늘 날씨 줘" 하고 요청을 보내고
  • 서버가 JSON 형태로 날씨 데이터를 응답으로 돌려주고
  • 내 앱이 그 데이터를 받아서 화면에 표시하는 구조예요.
클라이언트 (내 앱)
↓ 요청 (GET /weather?city=seoul)
서버 (기상청 API) ↓ 응답 ({"city": "서울", "temp": 28, "status": "맑음"}) 클라이언트 (화면에 표시)

이 데이터를 주고받을 때 가장 많이 쓰이는 형식이 JSON(JavaScript Object Notation) 인데요.

생긴 게 이렇게 생겼어요:

{

  "name": "tia",
  "city": "서울",
  "temperature": 28
}

중괄호 안에 키:값 쌍으로 구성되어 있어요. 사람도 읽기 편하고, 컴퓨터도 파싱하기 편한 형식이라서 요즘 API 통신에서는 사실상 표준처럼 쓰입니다.

바이브코딩으로 AI가 코드를 만들어줄 때, fetch() 라든가 axios.get() 이런 코드가 보이면 "아, 여기서 API 요청 날리는 거구나" 하고 이해하면 됩니다.



4. 실제 흐름으로 한 번 더 짚어보기 — 로그인을 예로 들면

이론만 보면 흐릿하니까, 로그인 과정을 예로 들어서 전체 흐름을 한 번 따라가 볼게요.

① 사용자가 아이디/비밀번호 입력 후 로그인 버튼 클릭 → 클라이언트(앱 또는 브라우저)가 서버로 POST 요청을 보냅니다. 요청 안에는 이메일이랑 비밀번호가 담겨 있어요.

② 서버가 요청을 받고 데이터베이스 확인 → "이 아이디 있나? 비밀번호 맞나?" 검증합니다.

③ 맞으면 서버가 토큰(Token)을 응답으로 돌려줌 → 토큰은 "이 사람 인증됐어요"라는 증명서 같은 거예요. 로그인 후 다른 요청을 보낼 때 이 토큰을 같이 보내면 "로그인된 사람이구나" 하고 서버가 인식합니다.

④ 클라이언트가 토큰을 저장하고 메인 화면으로 이동 → 이제부터 요청마다 토큰을 같이 보내면서 인증된 사용자로서 서비스를 이용합니다.


[사용자 입력] 이메일 + 비밀번호

[클라이언트] POST /api/login

[서버] 검증 → 성공 시 토큰 생성

[클라이언트] 토큰 저장 → 메인 화면 이동

이후 모든 요청에 토큰 포함 → 서버가 인증 확인


이 흐름이 머릿속에 그려지면, 코드를 볼 때 "아 지금 어느 단계구나" 하고 위치 파악이 훨씬 쉬워져요.



5. 프론트엔드와 백엔드, 이제 진짜 구분이 됩니다

여기까지 왔으면 이제 자연스럽게 연결되는 개념이 있어요.

프론트엔드(Frontend) 는 클라이언트 쪽 개발입니다. 사용자가 실제로 보고 사용하는 화면을 만드는 영역이에요. HTML, CSS, JavaScript, Flutter, React Native 같은 것들이 여기 해당합니다.

백엔드(Backend) 는 서버 쪽 개발입니다. 요청을 받아서 데이터베이스를 조회하고, 처리하고, 응답을 돌려주는 로직을 담당해요. Python, Node.js, Java, Go 같은 언어들이 주로 쓰입니다.

그리고 둘을 이어주는 게 API예요.


[사용자] ↔ [프론트엔드 / 클라이언트] ↔ API ↔ [백엔드 / 서버] ↔ [데이터베이스]


바이브코딩으로 뭔가 만들 때, AI한테 "로그인 기능 만들어줘" 하고 시키면 프론트엔드 코드랑 백엔드 코드를 구분해서 알려주거나, API 연결 코드를 같이 짜줄 때가 많아요.

이 구조가 머릿속에 잡혀 있으면 AI가 뭘 만들어줬는지 훨씬 빠르게 파악할 수 있습니다.




클라이언트-서버 구조, 처음엔 막막하지만 보이기 시작하면 재밌어요

개발 공부를 하다 보면 유독 이 개념이 흐릿한 채로 넘어가는 경우가 많아요. 그냥 "코드 복붙하면 됐으니까" 하고 지나치다가, 어느 순간 에러가 터지면 이유를 몰라서 멍해지는 경험을 하게 됩니다.

오늘 정리한 내용만 잡아도:

  • 클라이언트(요청하는 쪽)와 서버(응답하는 쪽)의 역할 구분
  • HTTP 메서드(GET/POST 등)와 상태 코드(200/404/500)
  • API가 뭔지, JSON이 뭔지
  • 로그인 흐름처럼 실제 요청-응답 사이클
  • 프론트엔드와 백엔드의 차이

이 정도는 완성이에요.

열공하세요! 🙌

2026년 6월 2일 화요일

[웹개발 기초] CSS란 무엇인가? — HTML이랑 뭐가 다른지, 왜 쓰는지 초보자도 이해되게 정리해봤습니다

 

안녕하세요!

오늘은 웹개발을 처음 시작하거나, 요즘 유행하는 바이브코딩으로 뭔가 만들어보려는 분들이 꼭 마주치게 되는 단어, CSS에 대해 정리해보려고 합니다.

솔직히 말하면 저도 처음엔 HTML이랑 CSS가 뭔 차이인지 제대로 몰랐어요. 그냥 "둘 다 쓰면 되는 거 아닌가?" 싶었는데… 막상 직접 써보니까 역할이 완전히 다르더라고요.

이 글에서는 그 차이랑 개념을 최대한 쉽게, 실제로 어떻게 쓰이는지 위주로 정리해봤으니 끝까지 읽어보세요!

[웹개발 기초] CSS란 무엇인가? — HTML이랑 뭐가 다른지, 왜 쓰는지
[웹개발 기초] CSS란 무엇인가?
— HTML이랑 뭐가 다른지, 왜 쓰는지



 1. CSS가 뭔지, 진짜 쉽게 설명하면

CSSCascading Style Sheets의 약자입니다. 이름만 보면 뭔가 엄청 어려워 보이는데, 핵심만 이야기하면 이렇습니다.

"HTML로 만들어진 요소들을 어떻게 보여줄지 꾸며주는 언어"

예를 들어볼게요.

HTML은 웹페이지를 구성하는 뼈대입니다. 집으로 비유하면, 방이 몇 개고 어디에 있는지 구조를 잡아주는 게 HTML이에요.

그런데 집 구조만 있으면 어떤가요? 벽도 없고, 바닥도 시멘트 그대로고, 조명도 없는 상태잖아요.

그걸 색칠하고, 꾸미고, 배치까지 이쁘게 해주는 게 바로 CSS입니다.

즉, 정리하면:

  • HTML → "여기에 제목 있고, 여기에 버튼 있고, 여기에 글 있어요"를 정의
  • CSS → "그 제목은 빨간색 글씨에 크기는 24px, 버튼은 파란 배경에 둥근 모서리"를 정의

실제로 HTML만으로 만든 페이지를 보면 90년대 웹사이트처럼 텍스트 나열이 전부입니다. 거기에 CSS를 입히는 순간 완전히 다른 페이지가 되는 거예요.

바이브코딩 하시는 분들도 AI가 코드를 뚝딱 만들어줄 때, 그 코드 안에 CSS가 같이 들어있는 걸 보셨을 거예요. 그게 바로 모양을 잡아주는 부분입니다.



2. CSS는 어떻게 생겼나요? — 문법 구조 살펴보기

CSS 코드를 처음 보면 이런 생김새입니다:

h1 {
  color: red;
  font-size: 32px;
  text-align: center;
}

겁먹을 필요 없어요. 뜯어보면 구조가 딱 3가지입니다.

선택자 (Selector)

어떤 HTML 요소에 적용할 건지 지정하는 부분입니다. 위 코드에서 h1이 선택자예요. h1 태그 전체에 이 스타일을 적용하겠다는 의미입니다.

  • h1 → h1 태그 전체 선택
  • .box → class 이름이 "box"인 요소 선택
  • #title → id가 "title"인 요소 선택

속성 (Property)

어떤 걸 바꿀 건지 지정합니다. color, font-size, text-align 같은 게 속성이에요.

값 (Value)

어떻게 바꿀 건지 지정합니다. red, 32px, center처럼 속성 뒤에 콜론(:) 쓰고 값을 적는 거예요.


CSS를 HTML에 연결하는 방법도 3가지가 있는데, 실무에서 가장 많이 쓰이는 건 별도 파일로 분리하는 방식입니다.

<!-- HTML 파일 안에 이렇게 연결 -->
<link rel="stylesheet" href="style.css">

style.css 파일 따로 만들고, HTML에서 불러오는 방식이에요. 프로젝트 규모가 커질수록 이렇게 분리하는 게 훨씬 관리하기 편합니다.



3. 자주 쓰는 CSS 속성 TOP 10 — 이것만 알아도 기본은 됩니다

진짜 자주 쓰이는 속성만 골라봤어요. 외우려고 하지 말고, "이런 게 있구나" 정도로 읽어보세요.

1. color — 글자 색상

p {
  color: blue;        /* 색상 이름으로 */
  color: #FF5733;     /* 헥스 코드로 */
  color: rgb(255, 87, 51); /* RGB 값으로 */
}

글자 색을 바꿀 때 씁니다.


2. background-color — 배경 색상

div {
  background-color: #f0f0f0;
}

요소의 배경 색상을 지정합니다.


3. font-size — 글자 크기

h1 {
  font-size: 32px;
}
p {
  font-size: 1rem;  /* rem 단위는 반응형에서 많이 씁니다 */
}


4. font-weight — 글자 두께

strong {
  font-weight: bold;    /* 또는 숫자 700 */
}
span {
  font-weight: 400;     /* 기본 두께 */
}


5. margin — 요소 바깥쪽 여백

div {
  margin: 20px;           /* 상하좌우 모두 20px */
  margin: 10px 20px;      /* 상하 10px, 좌우 20px */
  margin-top: 30px;       /* 위쪽만 30px */
}


6. padding — 요소 안쪽 여백

div {
  padding: 16px;
}

margin은 바깥, padding은 안쪽 여백이에요. 이 두 개 헷갈리는 분들 많은데, 박스 밖에 공간 = margin / 박스 안에 공간 = padding 으로 기억하면 됩니다.


7. width / height — 가로세로 크기

img {
  width: 100%;      /* 부모 요소 기준 100% */
  height: auto;     /* 비율 자동 유지 */
}

div {
  width: 300px;
  height: 200px;
}


8. border — 테두리

input {
  border: 1px solid #cccccc;
  border-radius: 8px;   /* 모서리 둥글게 */
}


9. display — 요소 배치 방식

div {
  display: flex;      /* Flexbox 레이아웃 */
  display: block;     /* 블록 요소 */
  display: none;      /* 화면에서 숨기기 */
}

이 중에서 display: flex는 요소들을 가로/세로로 나란히 배치할 때 정말 많이 씁니다.


10. position — 요소 위치 지정

div {
  position: relative;
}

.tooltip {
  position: absolute;
  top: 10px;
  right: 10px;
}



4. CSS Box Model — 이걸 모르면 레이아웃이 계속 이상해집니다

CSS를 쓰다 보면 "분명히 크기를 맞췄는데 왜 삐져나오지?" 하는 상황이 생겨요.

그게 바로 Box Model을 몰라서 생기는 문제입니다.

CSS에서 모든 HTML 요소는 사각형 박스로 인식됩니다. 그 박스는 4가지 층으로 이루어져 있어요.

┌─────────────────────────────────┐ ← margin 
│  ┌───────────────────────────┐      │  (바깥 여백)
│  │                                 border (테두리)      │      │
│  │  ┌─────────────────────┐      │      │
│  │  │                      padding (안쪽 여백) │      │      │
│  │  │  ┌───────────────┐      │      │      │
│  │  │  │            content           │      │      │      │
│  │  │  │          (실제 내용)         │      │      │      │
│  │  │  └───────────────┘      │      │      │
│  │  └─────────────────────┘      │      │
│  └───────────────────────────┘      │
└─────────────────────────────────┘

content → padding → border → margin 순서로 이해하면 됩니다.

그리고 초보자들이 많이 당하는 함정이 하나 있어요.

기본 CSS에서는 width: 300px을 설정하면 content 영역만 300px이 됩니다. 여기에 padding이랑 border까지 더해지면 실제로 화면에서 차지하는 공간은 300px보다 커지게 되는 거예요.

이걸 해결하는 게 바로:

* {
  box-sizing: border-box;
}

이 한 줄을 맨 위에 써두면 width 안에 padding과 border가 포함되어서 훨씬 직관적으로 작업할 수 있습니다. 거의 모든 CSS 프레임워크나 리셋 파일에 이 코드가 기본으로 들어가 있어요.



5. Flexbox — 레이아웃 잡을 때 가장 많이 쓰는 방식

CSS를 배우면 반드시 만나게 되는 게 Flexbox입니다.

예전에는 요소들을 가로로 나란히 놓거나, 화면 가운데 정렬하는 게 꽤 복잡했어요. 근데 Flexbox가 생기면서 이런 작업들이 엄청 쉬워졌습니다.

기본 사용법은 이렇습니다:

.container {
  display: flex;
  justify-content: center;   /* 가로 방향 정렬 */
  align-items: center;       /* 세로 방향 정렬 */
  gap: 16px;                 /* 요소 간 간격 */
}

예를 들어 버튼 3개를 가로로 나란히, 그리고 가운데 정렬하고 싶으면:

<div class="container">
  <button>버튼 1</button>
  <button>버튼 2</button>
  <button>버튼 3</button>
</div>
.container {
  display: flex;
  justify-content: center;
  gap: 10px;
}

이렇게만 해도 깔끔하게 가운데 정렬됩니다.

바이브코딩으로 AI가 만들어주는 코드에도 display: flex가 굉장히 자주 등장하는데, 이제 보이면 "아, 요소들 배치하려는 거구나" 하고 바로 읽힐 거예요.



CSS, 처음엔 어색하지만 금방 익숙해집니다

CSS는 처음엔 왜 이렇게 속성이 많은지, 어떤 걸 써야 할지 막막하게 느껴질 수 있어요.

근데 솔직히 실무에서 자주 쓰는 속성은 한정적이에요. 처음부터 전부 다 외우려고 하지 말고, 직접 뭔가 만들면서 "이걸 바꾸려면 뭘 쓰지?"를 찾아보는 방식으로 공부하는 게 훨씬 빠릅니다.

오늘 정리한 내용만 이해해도:

  • HTML이랑 CSS의 차이
  • CSS 문법 구조 (선택자, 속성, 값)
  • 자주 쓰는 속성들
  • Box Model 개념
  • Flexbox 기초

이 정도는 완성된 거예요.

열공하세요!




[파이썬 기초] VSCode로 파이썬 앱 개발 시작하기: 입문자용 환경 세팅부터 유튜브 다운로더 프로그램 만들기 (pip, uv, venv, yt-dlp 완벽 정리)

 안녕하세요! 오늘은 비전공자나 개발 초보자도 막힘없이 따라 할 수 있는 VSCode(Visual Studio Code) 기반의 파이썬(Python) 앱 개발 환경 세팅 가이드를 준비했습니다.

단순히 이론만 공부하는 것이 아니라, 내가 원하는 유튜브 영상을 자동으로 다운로드하고 MP3 음원 파일로 추출하는 실전 '유튜브 다운로더 프로그램'까지 함께 만들어볼 예정입니다.

개발 공부를 하면서 직접 겪은 시행착오와 각종 오류 메시지 해결 방법(Node.js, FFmpeg 설치 등)까지 아주 상세하게 기록해 두었으니, 이 글을 끝까지 보시면서 천천히 따라와 주세요!

[파이썬 기초] VSCode로 파이썬 앱 개발 시작하기: 입문자용 환경 세팅부터 유튜브 다운로더 프로그램 만들기 (pip, uv, venv, yt-dlp 완벽 정리)
[파이썬 기초] VSCode로 파이썬 앱 개발 시작하기:
입문자용 환경 세팅부터 유튜브 다운로더 프로그램 만들기
(pip, uv, venv, yt-dlp 완벽 정리)




1. 파이썬(Python) 설치 및 환경 변수(Path) 설정

가장 먼저 우리 컴퓨터가 파이썬 코드를 이해하고 실행할 수 있도록 파이썬 해석기를 설치해야 합니다.

1) 파이썬 다운로드 및 설치 단계

  1. 파이썬 공식 웹사이트(Python.org)에 접속합니다.

  2. 상단 메뉴에서 Downloads에 마우스를 올린 뒤, 본인의 운영체제(Windows 등)를 선택합니다.

  3. 노란색 다운로드 버튼을 클릭하여 설치 파일을 받습니다.

  4. 다운로드된 .exe 설치 파일을 실행합니다.

⚠️ [가장 중요] 설치 시 필수 체크 사항! 설치 창이 뜨면 가장 아래쪽에 있는 "Add python.exe to PATH" (또는 Add Python to environment variables) 체크박스에 반드시 체크를 해주셔야 합니다. 이 설정을 누락하면 나중에 터미널에서 파이썬 명령어를 전혀 인식하지 못해 심각한 문제가 생깁니다. 이후 과정은 모두 "예(Next)" 또는 **"Install Now"**를 눌러 기본값으로 설치를 완료합니다.


2) 정상 설치 확인하기

설치가 완료되었다면 컴퓨터의 터미널(명령 프롬프트 또는 PowerShell)을 열고 아래 명령어를 입력하여 버전이 정상적으로 출력되는지 확인합니다.

python --version 

Python 3.12.x와 같이 버전 숫자가 명확하게 나타난다면 파이썬이 내 컴퓨터에 안전하게 안착한 것입니다. 



2. VSCode 설치 및 파이썬 확장 프로그램 세팅

코드 작성을 편리하게 도와주는 최고의 코드 에디터인 VSCode(Visual Studio Code)를 활용해 보겠습니다.

1) Microsoft 공식 Python 확장 프로그램 설치

VSCode를 실행한 뒤, 파이썬 개발을 원활하게 하려면 전용 도구를 설치해야 합니다.

  1. VSCode 왼쪽 세로줄 메뉴에서 블록 모양 아이콘인 Extensions(확장 프로그램, 단축키: Ctrl + Shift + X)을 클릭합니다.

  2. 검색창에 "Python"을 입력합니다.

  3. Microsoft에서 공식 제공하는 Python 항목을 찾아 [Install(설치)] 버튼을 누릅니다.

💡 이 확장 프로그램이 왜 필요할까요? 코드 작성 시 오타를 잡아주는 린팅(Linting), 코드를 자동으로 완성해 주는 자동완성(IntelliSense), 그리고 코드의 오류를 추적해 주는 디버깅(Debugging) 기능을 제공하므로 초보자에게는 나침반 같은 필수 존재입니다.



3. 작업 폴더 생성 및 VSCode 터미널 진입 방법 (3가지 루트)

이제 내 컴퓨터 안에 파이썬 프로젝트를 진행할 전용 폴더를 하나 만들어야 합니다. 예시로 D:\init\파이썬폴더명 공간을 기준으로 설명해 드릴게요. 폴더를 만든 후 VSCode에서 터미널을 열고 진입하는 방법은 크게 3가지가 있습니다. 편한 방법을 선택해 보세요.

  • 방법 1: 왼쪽 폴더 리스트 활용

    • VSCode에서 해당 폴더를 연 상태(File -> Open Folder)라면, 왼쪽 폴더 리스트 빈 공간에 마우스 우클릭을 한 뒤 [Open in Integrated Terminal(통합 터미널에서 열기)]을 선택합니다.

  • 방법 2: 빈 화면 우클릭 및 경로 이동

    • VSCode 빈 화면에서 우클릭 후 터미널을 실행합니다. 그 후 직접 cd 파이썬폴더명 명령어를 입력해 해당 폴더 안으로 진입합니다.

  • 방법 3: 윈도우 탐색기 우클릭 활용

    • 내 컴퓨터 탐색기에서 생성한 파이썬 폴더 안으로 직접 들어갑니다. 빈 곳에 마우스 우클릭을 한 뒤 [가져오기/터미널에서 열기] 또는 [Code로 열기(Open with Code)]를 실행해 줍니다.



4. 파이썬 패키지 매니저 비교 및 가상환경(venv) 세팅

파이썬으로 앱을 개발할 때는 다른 사람들이 미리 만들어 둔 '라이브러리(패키지)'를 가져와서 사용하게 됩니다. 이때 패키지를 관리해 주는 도구를 패키지 매니저라고 합니다.

가장 대중적인 pip 방식과 최근 초보자들 사이에서 간단명료한 스타일로 각광받는 고성능 매니저 uv 방식을 비교 정리해 드릴게요.

1) 차세대 고성능 매니저: uv 사용법

uv는 Rust 언어로 작성되어 기존 매니저들을 압도하는 엄청난 속도를 자랑합니다. 통합 프로젝트 관리 기능이 우수하고 디스크 공간을 효율적으로 아껴줍니다.

  • 설치 명령어: pip install uv

  • 버전 체크: uv --version

  • 가상환경 생성: uv venv

  • 프로젝트 초기화: uv init

  • 패키지 설치 및 의존성 추가: uv add 패키지명 (실행 시 자동으로 pyproject.toml 파일과 uv.lock 파일이 업데이트되어 관리가 편리해집니다.)

  • 패키지 독립 설치: uv pip install 패키지명

  • 스크립트 바로 실행: uv run 파일명.py

2) 파이썬 기본 탑재 매니저: pip 사용법

별도의 설치 없이 파이썬을 깔면 자동으로 내장되어 있는 기본 매니저입니다.

  • 버전 체크: pip --version

  • pip 업그레이드 명령어: python -m pip install --upgrade pip

    *일부 PC나 강의 환경에 따라 그냥 `pip install --upgrade pip`로 실행하면 
    오류가 나는 경우가 있습니다. 그럴 때는 당황하지 말고
    앞에 `python -m`을 붙여서 실행하면 완벽하게 성공할 수 있습니다.*

💡 잠깐! 가상환경(venv)은 왜 필수로 만들어야 할까요?

가상환경은 프로젝트별로 방을 따로 나누는 독립된 환경 공간입니다. 우리가 만들 앱마다 필요한 서브 프로그램(라이브러리)의 버전이 다를 수 있습니다. 만약 가상환경을 쓰지 않고 컴퓨터 전체 공간에 설치해 버리면, 다른 프로그램을 만들 때 버전 충돌이 일어나 전체 코드가 망가질 수 있으므로 반드시 프로젝트 폴더마다 독립적인 가상환경을 만들어 주어야 합니다.

[기본 pip 방식] 가상환경 설정 및 활성화 명령어

내가 작업할 폴더 위치로 터미널 경로를 맞춘 뒤 아래 명령어를 차례로 입력합니다.

  • 가상환경 생성: python -m venv venv

  • 가상환경 활성화 (운영체제별 다름):

    • Windows (방법 1): venv\Scripts\activate

    • Windows (방법 2): .\.venv\Scripts\activate

    • macOS / Linux: source venv/bin/activate



5. [돌발 상황] 가상환경 위치를 잘못 잡았을 때 해결 방법

초보 시절에 가장 자주 하는 실수 중 하나가 터미널 경로를 엉뚱한 곳에 두고 가상환경(venv) 명령어를 입력하는 것입니다. 경로가 꼬였다면 과감하게 지우고 새로 만드는 것이 가장 깔끔합니다.

1) 잘못 생성된 venv 폴더 강제 삭제

터미널에서 아래 명령어를 입력해 잘못 만들어진 폴더를 삭제합니다 (경로는 예시입니다).

rm -r D:\init\venv

2) 올바른 파이썬 프로젝트 폴더로 이동 후 가상환경 재생성

cd D:\init\파이썬폴더명
uv venv

이렇게 차근차근 순서대로 이동 후 생성해 주면, 내가 지정한 파이썬 전용 작업 폴더 내부에 올바르고 깔끔하게 가상환경이 구축됩니다.



6. 실전! 유튜브 다운로더 프로그램 만들기

환경 세팅이 끝났으니 이제 진짜 작동하는 앱을 개발해 볼 차례입니다. 유튜브 다운로드 라이브러리 중 가장 강력하고 업데이트가 활발한 yt-dlp를 이용해 보겠습니다.

1 단계: 가상환경 활성화 상태에서 라이브러리 설치

터미널 앞에 가상환경 이름이 표시되어 있는지 확인한 후, 아래 명령어를 입력해 다운로더 핵심 라이브러리를 설치합니다. (uv 사용자 기준)

uv pip install yt-dlp

2 단계: downloader.py 파일 생성 및 코드 작성

VSCode에서 내가 작업 중인 폴더 안에 downloader.py라는 새 파일을 만들고 아래 코드를 그대로 복사해서 붙여넣은 뒤 저장(Ctrl + S)합니다.


import yt_dlp

def download_video(url) :
options = {
'format' : 'best', # 가장 좋은 화질 선택
'outtmpl' : '%(title)s.%(ext)s' , # 영상 제목을 파일명으로 설정 }
with yt_dlp.YoutubeDL(options) as ydl :
ydl.download([url]) url =
input("유튜브 URL을 입력하세요: ")
download_video(url)

3 단계: 프로그램 실행 및 결과 확인

터미널 창에 아래 명령어를 입력하여 프로그램을 가동합니다.

python downloader.py

실행하면 터미널 화면에 유튜브 URL을 입력하세요: 라는 안내 문구가 뜹니다. 

이때 다운로드하고 싶은 유튜브 영상 주소를 복사해서 터미널에 붙여넣고 엔터(Enter)를 누릅니다.

다운로드가 완료되면 VSCode 왼쪽 폴더 리스트에 방금 다운로드한 따끈따끈한 영상 파일(.mp4 등)이 들어온 것을 볼 수 있습니다!

당황하지 마세요! (음성 미출력 관련 팁)

VSCode 자체 내부 플레이어로 영상을 클릭해 재생하면 간혹 소리(음성)가 안 들려서 당황할 수 있습니다. 이것은 에디터 자체 내장 플레이어의 한계 때문입니다. 윈도우 탐색기로 해당 폴더에 들어가 곰플레이어, 윈도우 미디어 플레이어 등 일반 동영상 재생 프로그램으로 실행해 보시면 소리와 영상 모두 아주 정상적으로 출력되는 것을 확인할 수 있습니다.



7. [오류 해결] WARNING: No supported JavaScript runtime found 메시지 조치법

유튜브 영상을 다운로드하다 보면 터미널 창에 아래와 같은 길고 무시무시한 경고(WARNING) 메시지가 뜰 때가 있습니다.


WARNING: [youtube] No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing.


🧐 원인 분석

이 오류는 내 컴퓨터에 유튜브 자바스크립트 코드를 해석해 줄 Node.js 가 설치되어 있지 않아서 발생합니다. 이 상태로 그냥 두면 일부 유튜브 영상의 경우 화질 옵션이 누락되거나 추출 과정에서 튕기는 오류가 발생할 수 있습니다.

🛠️ 해결 방법: Node.js 설치하기

  1. Node.js 공식 사이트(https://nodejs.org)에 접속합니다.

  2. 왼쪽 버튼에 있는 안정적인 LTS 버전을 클릭하여 설치 프로그램을 다운로드한 뒤 실행합니다. (모두 Next를 눌러 설치 완료)

  3. 설치가 끝났다면 VSCode 터미널을 완전히 종료했다가 다시 새로 켜 줍니다. (매우 중요!)

  4. 새 터미널 창에서 아래 명령어를 입력해 정상 설치되었는지 검증합니다.

  5. node --version

  6. 터미널에 v20.x.x 같은 버전 숫자가 정상적으로 찍힌다면 경고 메시지 해결 완료입니다! 이제 다시 실행해 보면 경고 없이 깔끔하게 작동합니다.



8. 가상환경 경로 확인 꿀팁 및 최종 업그레이드 코드 (영상 vs MP3 음원 선택 기능)

1) 터미널 켤 때마다 체크해야 하는 필수 꿀팁

영상을 다운로드 받거나 코드를 수정할 때, 터미널 맨 앞에 붙어 있는 가상환경 접두사를 꼭 체크하는 습관을 가져야 합니다.

  • 터미널 맨 앞에 (python) 이라고 뜨는 경우 -> 내 프로젝트 전용 공간이 아닌 엉뚱한 기본 가상환경이 켜진 것이므로 비정상 상태입니다.

  • 터미널 맨 앞에 (py-youtube-D) 또는 (venv) 라고 정확한 폴더/환경 이름이 뜨는 경우 -> 정상 상태입니다.

  • 만약 다운로드 받을 폴더 위치나 경로가 변경되었다면 반드시 가상환경(venv) 상태를 다시 재확인하고, 필요시 라이브러리를 재설치해 주어야 꼬이지 않습니다.

2) 최종 완성본: 영상 또는 MP3 음원만 쏙 골라 다운로드하는 확장 코드

유튜브에서 영상 말고 배경음악이나 교양 오디오만 MP3 파일로 저장하고 싶을 때가 많죠? 기능을 업그레이드한 최종 코드를 공유합니다. 기존 downloader.py 내용을 싹 지우고 아래 코드를 덮어씌워 보세요.

import yt_dlp

def download_video(url):
    print("\n[안내] 고화질 영상 다운로드를 시작합니다...")
    options = {
        'format': 'best',
        'outtmpl': '%(title)s.%(ext)s',
    }
    with yt_dlp.YoutubeDL(options) as ydl:
        ydl.download([url])

def download_audio(url):
    print("\n[안내] MP3 음원 추출을 시작합니다...")
    options = {
        'format': 'bestaudio/best',
        'outtmpl': '%(title)s.%(ext)s',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',      # mp3 확장자로 지정
            'preferredquality': '192',    # 음질 192kbps 설정
        }],
    }
    with yt_dlp.YoutubeDL(options) as ydl:
        ydl.download([url])

# 프로그램 실행부
url = input("유튜브 URL을 입력하세요: ")
print("\n--- 모드 선택 ---")
print("1. 영상 다운로드 (.mp4)")
print("2. 음원 다운로드 (.mp3)")
choice = input("\n선택하세요 (1 또는 2 입력): ")

if choice == '1':
    download_video(url)
elif choice == '2':
    download_audio(url)
else:
    print("잘못된 입력이에요! 1번이나 2번을 입력해 주세요.")


🚨 필수 주의사항: 음원(MP3) 추출을 위해서는 FFmpeg이 필수입니다!

위 코드에서 2번(음원 다운로드) 기능을 온전하게 사용하려면 컴퓨터가 미디어 파일을 상호 변환할 수 있도록 돕는 FFmpeg이라는 프로그램이 설치되어 있어야 합니다. 이게 없으면 변환 단계에서 에러가 납니다.

Windows 사용자라면 터미널 창에 아래 명령어를 입력해 초간단 패키지 매니저(Chocolatey 등) 혹은 수동 설치를 통해 구성해 주어야 합니다.


# Chocolatey 매니저가 설치되어 있는 경우의 초간단 명령어
choco install ffmpeg

# 설치 완료 후 검증 명령어
ffmpeg -version

버전 정보가 정상적으로 노출된다면 이제 영상은 물론, 고음질의 MP3 파일까지 내 손으로 직접 만든 파이썬 프로그램을 통해 자유롭게 추출할 수 있게 됩니다!



9. 마치며 & 요약

오늘 공부한 내용을 요약해 보겠습니다.

단계핵심 작업 내용주의 사항 및 팁
1단계파이썬 설치설치 창에서 Add python.exe to PATH 무조건 체크하기
2단계VSCode 세팅Microsoft 공식 Python 확장 프로그램 설치로 자동완성 활성화
3단계가상환경 구축uv venv 또는 python -m venv venv로 독립된 방 만들기
4단계기능 구현yt-dlp 라이브러리로 유튜브 링크 분석 및 파일 저장
5단계트러블 슈팅JavaScript 경고 메시지는 Node.js 설치로 깔끔하게 해결!

처음에는 터미널 창에 영어 명령어들을 입력하는 게 어색하고 어렵게 느껴질 수 있지만, 직접 손으로 타이핑하고 에러 메시지를 하나씩 정복해 나가다 보면 나만의 멋진 앱 개발에 금방 익숙해질 것입니다.

열공하세요!






[웹개발 기초] API가 뭔가요? — 초보자도 이해되게, 진짜 쉽게 정리해봤습니다

안녕하세요! 오늘은 개발 공부를 시작하면 정말 빠르게 마주치는 단어, API 에 대해 정리해보려고 합니다. 솔직히 저도 처음에 "API, API" 하길래 대충 알아듣는 척했어요. 근데 막상 뭔가 만들려고 하면 API 연결해야 하는 순...