이론
Web
World Wide Web을 줄여서 WWW나 W3이라고도 부르고, Web 이라는 용어로 많이 불린다.
웹은 인터넷 상에서 텍스트나, 그림, 소리 등 멀티미디어 정보를 하이퍼텍스트(Hypertext) 방식으로 연결하여 제공한다.
Hypertext는 Hyperlink를 통해 한 문서에서 다른 문서로 이동할 수 있는 비선형적 텍스트 형태이다.
HTML 이라는 언어를 사용해서 웹문서를 작성할 수 있다. (hypertext markup language)
웹 서버와 웹 브라우저 간에 이러한 웹문서 데이터를 주고받기 위한 프로토콜이 HTTP이다. (hypertext transfer protocol)
웹 페이지는 HTML / CSS / JS 로 이루어진다.
HTML - 기본적인 틀
CSS - 디자인(스타일)
JS - 사용자와의 상호작용
웹의 역사
1세대: HTML로 작성된 정적인 웹사이트
2세대: 넷스케이프에서 JavaScript를 개발하여 동적 브라우저가 처음 생겼지만, HTML과 CSS가 주를 이룸
3세대: 동적 요소가 중요시되면서 JavaScript 위주로 코드가 작성되기 시작했다

정적 웹 페이지
서버에 저장된 파일이 그대로 전달되는 웹 페이지
url 주소 외에 아무것도 필요 없음
동적 웹 페이지
url 만으로는 들어갈 수 없는 웹 페이지
사용자의 상호작용으로 페이지가 변하고, 서버와 정보를 주고 받는다
Web 동작 원리
사용자가 페이지를 불러오고자 하면 클라이언트(주로 웹브라우저)가 서버에 요청을 보내고, 서버가 이 요청(request)에 대해 응답(response)한다.

Web Client
우리가 브라우저에 mjsec.com 이라고 입력하고 엔터를 누르면 웹 브라우저는 HTTP 메시지 형태로 서버에게 요청을 보낸다.
Web Server
웹 서버는 웹 페이지, 사이트 또는 앱을 저장하고 있는 프로그램이다.
클라이언트에서 요청이 오면 서버는 그 HTTP 메시지를 확인하고 이에 맞는 데이터를 처리해서 클라이언트에 다시 응답(response)한다.
예) nginx, apache 등
WAS(Web Application Server)
웹 애플리케이션을 실행시켜 필요한 기능을 수행하고 그 결과를 웹 서버에 전달하는 일종의 "미들웨어"
서버의 일을 돕는 조력자 라고 할 수 있다.
서버가 WAS에게 동적인 페이지 처리나 DB 조회 같은 업무를 요청하면 이를 수행하고 서버에게 전달함
예) apache tomcat 등

HTTP/HTTPS

HTTP가 요청을 보낼 때 HTTP Method 라는 것을 사용한다. POST, GET, PUT, DELETE, PATCH 등이 있다.
CRUD는 데이터베이스의 기본 4요소. 생성, 읽기, 갱신, 삭제를 의미한다.
HTTP에서는 post, get, put(patch), delete가 이에 대응되고,
SQL에서는 insert, select, update, delete 가 이에 대응된다.
HTTP의 단점
1. 보안 취약성 - 평문으로 데이터를 전송
2. 무결성 문제 - 데이터가 전송 중 변조될 수 있음
3. 신원 보증 부재 - 서버의 신원을 확인하는 기능이 없어서 제3자가 서버를 위장하여 클라이언트와 통신할 수 있음

HTTPS는 HTTP의 보안성을 강화하기 위해 나온 기술이다.
HTTP + SSL = HTTPS
SSL(Secure Sockets Layer)
클라이언트와 서버 사이에 주고받는 데이터를 암호화 해서 외부 공격자들이 내용을 볼 수 없게 한다
TLS(Transport Layer Security)는 SSL을 기반으로 개발된 프로토콜인데 SSL/TLS라고도 부른다.
SSL 인증서를 통해 사이트의 신뢰성을 증명한다.
API
API(Application Programming Interface), 개발자가 복잡한 내부 구조를 몰라도 기능을 사용할 수 있게 해준다.
Web API
인터넷 주소(URL)를 통해 데이터 요청/응답
REST(Representational State Transfer)
웹 API에서 가장 많이 쓰이는 규칙/원칙
- URL로 자원을 표현 (/students/1 -> 1번 학생 정보)
- HTTP 메서드 활용 (예. GET, POST, PUT, DELETE)
HTTP 메소드
GET - 데이터 조회
POST - 데이터 생성
PUT - 데이터 전체 수정
PATCH - 데이터 일부 수정
DELETE - 데이터 삭제
개방 범위를 기준으로 한 api의 분류
1. Private API
- 기업 내부에서만 사용
2. Public API
- Open APIs
- Commercial APIs
3. Patner APIs
- 특정 파트너에게만 제공
Open API의 특징
1. 공개된 문서가 있다
2. 보통 API 키 발급을 통해 사용한다
3. REST API, GraphQL, SOAP 같은 다양한 방식으로 제공된다
4. 사용량 제한이 있을 수 있다
API key는 공개하지 않도록 주의가 필요하다.
클라이언트가 요청을 보내면 API 서버가 요청을 처리해서 응답을 돌려준다.
실습
날씨 API 활용 / OpenWeather
Current weather and forecast - OpenWeatherMap
OpenWeather Weather forecasts, nowcasts and history in a fast and elegant way
openweathermap.org
회원가입 하면 마이페이지의 API keys 탭에서 무료로 API key를 발급 받을 수 있다.
api 탭에서 API doc 을 읽어보면 사용법을 알 수 있다.
import requests
API_KEY = "123456"
lat = 37.235
lon = 127.045
URL1 = f"http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API_KEY}&units=metric&lang=kr"
CITY = "Yongin-si"
URL2 = f"http://api.openweathermap.org/data/2.5/weather?q={CITY}&appid={API_KEY}&units=metric&lang=kr"
response = requests.get(URL2)
if response.status_code == 200:
data = response.json()
city_name = data['name']
weather_description = data['weather'][0]['description']
temperature = data['main']['temp']
feels_like = data['main']['feels_like']
humidity = data['main']['humidity']
wind_speed = data['wind']['speed']
print(f"Weather in {city_name}: {weather_description}")
print(f"Temperature: {temperature}°C")
print(f"Feels Like: {feels_like}°C")
print(f"Humidity: {humidity}%")
print(f"Wind Speed: {wind_speed} m/s")
# export as json
with open("weather_data.json", "w") as json_file:
import json
json.dump(data, json_file, indent=4)
else:
print("Error fetching data from the weather API.", response.status_code)
city, api_key와 함께 요청을 보내면 json 파일 응답이 돌아온다.
{
"coord": {
"lon": 127.1786,
"lat": 37.2406
},
"weather": [
{
"id": 800,
"main": "Clear",
"description": "\ub9d1\uc74c",
"icon": "01n"
}
],
"base": "stations",
"main": {
"temp": 19.15,
"feels_like": 19.13,
"temp_min": 19.15,
"temp_max": 21.27,
"pressure": 1018,
"humidity": 77,
"sea_level": 1018,
"grnd_level": 1002
},
"visibility": 10000,
"wind": {
"speed": 1.03,
"deg": 40
},
"clouds": {
"all": 0
},
"dt": 1758196967,
"sys": {
"type": 1,
"id": 5509,
"country": "KR",
"sunrise": 1758143733,
"sunset": 1758188142
},
"timezone": 32400,
"id": 1835553,
"name": "Yongin-si",
"cod": 200
}
json 파일은 파싱해서 쉽게 데이터를 사용할 수 있다.

위 파이썬 프로그램을 2025-09-25 01:00 GMT+9 에 돌린 결과 이렇게 나왔다.
바깥 온도가 섭씨 21도이고 체감온도는 22도, 습도는 98%로 매우 습한것으로 보인다.
오늘도 에어컨을 켜고 뽀송하게 자야겠다.
'MJSEC 활동 > 백엔드(2025-2학기)' 카테고리의 다른 글
| 백엔드 4주차 / 질문 목록 화면, 답변 등록 구현 (0) | 2025.11.06 |
|---|---|
| 백엔드 3주차 / ORM 이해, SQLAlchemy로 질문 목록 API 만들기 (0) | 2025.11.02 |
| 백엔드 2주차 / DB, Git (0) | 2025.10.26 |
댓글