웹사이트 구성하는 방법

*mpa

-페이지가 여러개
-스마트폰 나오기 전에 많이 사용
-화면이 깜빡인 후에 로딩이 된다

/list
/detail
/write
/edit
위와 관련된 html을 서버가 준비 해뒀다가 클라이언트가 요청시 보내주는 게 mpa
->서버는 html페이지만 준비하고만 있으면 된다

mpa에 사용되는 언어: node js, pyhon, java, php, asp

*node.js가 무엇인가?

-웹서버 백엔드 구현을 하기 위해서 사용
-자바스크립트 영역이 서버쪽으로 확대되어 클라이언트와 서버 양쪽의 프로그램을 모두 개발이 가능해졌다.

백앤드 언어를 사용하는 이유:
-언어와 데이터베이스를 연동을 시켜논다
-서버에서 필요한 데이터를 데이터베이스에서 가져와 html형식에 맞게 바꿔준다

 

*spa

-페이지가 하나
-페이지를 이동하지 않고 안에있는 컨텐츠만 바뀌어 깜빡임이 없다
-클라이언트가 서버에게 페이지 요청을 하면 빈 html파일을 준다+js소스파일을 준다(버튼을 누르면 js파일에 있는 소스 파일이 실행이되어 컨테츠만 바꿔준다)




*api

-약속
-버튼을 누르면(행동) 어떠한 동작이 되게하는 약속(ex자판기, 컴퓨터 자판...)
-키보드 A누르면 A가 나오는 동작도 api
-어떤 행위를 원할 때 이 버튼을 누르면 서버가 내가 원하는 동작을 해주는 약속
-spa에선 거의 API를 사용한다


-spa는 백앤드와 프로트앤드 서버가 따로 있다
-유지보수 측면에서 편하다
-백앤드는 API만 존재한다
-프론트엔드 서버한테 html과 js코드를 받아온다 그래서 데이터를 백엔드에 요청함
-장점:서버는 API만 제공하고 서버는 다양한 어플리케이션으로 사용할 수 있다.(HTTP만 가능하면)




*코드정리


app.js

const express = require('express');
const mysql = require('mysql');
const app = express();
const port = 4000;

const cors = require('cors');
app.use(cors());


const conn = {
  host : 'localhost',  
  port : '3306',
  user : 'root',
  password : '----',
  database : 'my_schema'
};

let connection = mysql.createConnection(conn);
connection.connect(); // db접속


app.engine('html', require('ejs').renderFile);
app.set('view engine', 'ejs');


app.get('/', (req, res) => {
  res.render('index.html');
});

app.get('/list', (req, res) => {
  connection.query('SELECT * from board', function(error, results, fields) {
    if (error) throw error;
    console.log(results);
    res.render('list',{'data':results})
  });
 });

 app.get('/api/list', (req, res) => {
  connection.query('SELECT * from board', function(error, results, fields) {
    if (error) throw error;
    console.log(results);
    res.send(results)
  });
 });

app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

 
index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=\, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    블로그에 오신 걸 환영<br>
    <a href="/list">게시글 보기</a>
</body>
</html>

 
list.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <table>
        <tr>
            <td>id</td>
            <td>writer</td>
            <td>title</td>
        </tr>
        <% for (let i=0; i<data.length; i++) { %>
        <tr>
            <td><%=data[i]['id']%></td>
            <td><%=data[i]['writer']%></td>
            <td><%=data[i]['title']%></td>
        </tr>
        <% } %>
    </table>
</body>
</html>

 
index.html-frontend

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
       
    </div>
</body>
</html>

<script src="index.js"></script>

 
index.js-frontend

document.getElementById("app").innerHTML = '<a onclick="ShowList()">리스트로 이동</a>';

const ShowList = () => {
//api요청
fetch('http://localhost:4000/api/list')
  .then((response) => response.json())
  .then((data) => {
    console.log(data);
    document.getElementById("app").innerHTML = `
            <table>
                <tr>
                    <td>
                        id
                    </td>
                    <td>
                        writer
                    </td>
                    <td>
                        title
                    </td>
                </tr>
                <tr>
                    <td>
                        ${data[0]['id']}
                    </td>
                    <td>
                        ${data[0]['writer']}
                    </td>
                    <td>
                        ${data[0]['title']}
                    </td>
                </tr>
                <tr>
                    <td>
                        ${data[1]['id']}
                    </td>
                    <td>
                        ${data[1]['writer']}
                    </td>
                    <td>
                        ${data[1]['title']}
                    </td>
                </tr>
            </table>
            `;
  })
  .catch((error) => console.log("error:", error))

   
}


//</head> spa 쉽게 구형 ->react, vue....

*mysql 이 무엇인지? DB, 테이블, 컬럼


mysql을 알아보기 전 미리 알아야 하는 게 있다.

*데이터베이스(DB):특정 기업이나 조직 또는 개인이 필요에 의해 논리적으로 연관된 데이터를 모아 일정한 형태로 저장해 놓은 것
-->쉽게 말해 데이터(회원정보, 게시판 글 ,사진)들이 모여있는 곳을 데이터베이스(데베)라 부른다

*DBMS(data base management service):데이터베이스 관리 프로그램

특징
-통합된 데이터(공용)
-저장된 데이터
-운영 데이터(업무 목적으로)
-공용데이터(한 사람 한 업무를 위해 사용x)

엑셀과 다른 점
-엑셀은 같이 수정이 안됨=동시에 작업이 안된다
-엑셀은 사이즈의 한계가 있다.

DBMS의 장점
-중복 최소화
-공용
-일관성
-무결성
-보안
-표준화
-전체 데이터 요구 조정

종류
*관계형 데이터베이스-(ex:myspl)
데이터 항목 간에 사전 정의된 관계가 있을 때 데이터 항목들의 모음을 가리킨다. 이 항목들은 열과 행으로 이루어진 "테이블 집합"으로 구성됨. 

*즉 mysql이란?

mysql은 데이터를 저장하고 관리하는데 널리 사용되는 오픈 소스 관계형 데이터베이스 관리시스템이다.

*비관계형 데이터베이스-(ex.mongo db)
유연한 스키마를 갖추고 있는데 데이터 볼륨, 짧은 지연 시간과 "유연한 데이터 모델":이 필요한 애플리케이션에 최적화 되어 있다.

관계형 데이터베이스의 특징
-2차원 테이블로 표현(가로x세로=테이블)
-데이터 무결성
-SQL사용
-한번에 레코드 처리가 아닌 집합을 처리함
 

사진 출처:https://velog.velcdn.com/images/gyrud02/post/e138ba01-198c-4390-848a-419a94e23537/Table.png



*테이블

-실질적으로 자료가 저장되는 곳
-행과 컬럼으로 구성
-특정한 목적과 성격에 의해 생성되는 집합체(ex.고객테이블, 주문테이블)
-사용자의 접근이 가능한 모든 데이터 보유

*행=레코드=튜플

일련의 관련 자료를 나타낸다

*컬럼=항목

해당하는 데이터들의 속성=구조를 나타낸다


*필드
정보의 한 조각으로, 처리의 최소 단위가 되는 것

기본키/외부키(private key/foreign key)
-기본키:유일하게 번호값 구분할 수 있게 주는 값
-외부키:테이블의 연결을 시켜주는 키(참조하는 테이블의 기본키)

*SQL:데이터베이스와 대화하기 위해 디자인된 언어
-관계형 데이터베이스에서 데이터 조작과 데이터 정의를 하기 위해 사용하는 언어
-입력 조회 수정 삭제 하기 위해서  SQL사용
-데이터베이스 쿼리는 데이터베이스에서 데이터를 추출하여 읽을 수있는 형식으로 형식을 지정함.
-쿼리는 데이터베이스에 필요한 언어, 즉 일반적으로 해당 언어 SQL.

특징
-쉽다
-절차적인게 아닌 선억적 언어
-DBMS 종류 얽매이지 않고 사용 가능

작업종류
-데이터 조회
-테이블 행 삽입 갱신 및 삭제
-객체 생성, 변경 및 삭제
-엑세스 제어
-무결성 보장

*select, insert, delete, update 쿼리문에 대해서 이해해보기

-select-데이터 조회
select 컬럼명 from 테이블명

-insert-새 행 입력(ex.새로운 고객 정보를 집어 넣을 때)
insert into 테이블명(칼럼명1,칼럼명2) values(값1,값2)

-delete-행 제거(ex.데이터 지울 때)
delete from 테이블명

-update-기존 행 변경(ex.기존 사원의 주소가 바뀌었을 때)
update 테이블명 set칼럼명=변경할 값

*where 조건문이 무엇인지

-where 조건
oerder by 컬럼명 asc or desc

-selct column1 from table where 조건문 order by column2 asc or desc;
-column1 대신 *을 넣으면 컬럼 전체
--------------------------------------------------------------------------------------------------------------------------------------------

*테이블 생성 - 랭크를 저장하기 위해 테이블 생성 ( rank 테이블)
https://pinetreeday.tistory.com/145

 

DB MySQL WorkBench Tool을 이용한 Table 생성하는 방법

DB MySQL WorkBench Tool을 이용한 간단한 SQL문 작성 -> Mysql WorkBench를 실행 후 왼쪽 상단의 SCHEMA 항목에서 마우스 오른쪽 클릭 후 Create Schema... 을 선택합니다. -> Schma를 생성하게 되면 Name을 설정할 수

pinetreeday.tistory.com

위의 블로그 참고하여 테이블 생성(결과물은 제일 밑에 있다)
 

*파이썬에서 mysql 모듈을 설치하고 연결진행& 파이썬에서 가지고 온 데이터 내용을 테이블에 insert를 해본다.

pymysql 모듈을 설치해주고 가져온다

import pymysql

 
mysql과 연결 시켜주고(연결에 필요한 데이터를 넣어준)
conn은 데이터베이스에 연결할 때 사용되는 객체

# MySQL 연결 설정
conn = pymysql.connect(host="localhost", user="root", password="-----", db="rs", charset="utf8")

 
커서 객체를 생성해준다
cursor: 데이터베이스에서 데이터를 쿼리하고 조작하게 도와주는 것

cursor = conn.cursor()

 
전글에서 크롤링한 데이터를 가져와 data리스트에 넣어준다.

data = requests.get('https://sports.news.naver.com/wfootball/index')
soup = BeautifulSoup(data.text, 'html.parser')

soccer_rank = soup.select('#_team_rank_epl > table > tbody > tr')

# 데이터를 담을 리스트 초기화
data = []

for tr in soccer_rank:
    span = tr.select_one("td > div > div.info > span")

    if span:
        print(span.text)
        data.append(span.text)

    else:
        print("Span not found")

 
앞에서 배운 insert쿼리문으로 데이터베이스에 data의 자료들을 넣어준다.

# 데이터 삽입 쿼리
insert_query ="""
INSERT INTO  rs.rs
(name) 
VALUES 
(%s)"""

# 데이터 삽입
cursor.executemany(insert_query, data)
conn.commit()

 
마무리로 커서와 conn을 종료시켜준다

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

 
전체

import requests
import pymysql
from bs4 import BeautifulSoup

# MySQL 연결 설정
conn = pymysql.connect(host="localhost", user="root", password="----", db="rs", charset="utf8")

#MySQL 데이터베이스 연결 객체 conn을 사용하여 커서 객체를 생성하는 코드입니다.
#커서는 SQL 쿼리를 실행하고 결과를 가져오는 데 사용되는 객체입니다. 커서를 사용하여 데이터베이스에서 데이터를 쿼리하고 조작할 수 있습니다.

cursor = conn.cursor()
data = requests.get('https://sports.news.naver.com/wfootball/index')
soup = BeautifulSoup(data.text, 'html.parser')

soccer_rank = soup.select('#_team_rank_epl > table > tbody > tr')

# 데이터를 담을 리스트 초기화
data = []

for tr in soccer_rank:
    span = tr.select_one("td > div > div.info > span")

    if span:
        print(span.text)
        data.append(span.text)

    else:
        print("Span not found")

        # _team_rank_epl > table > tbody > tr:nth-child(2) > td:nth-child(2) > div > div.info > span

# 데이터 삽입 쿼리
insert_query ="""
INSERT INTO  rs.rs
(name) 
VALUES 
(%s)"""

# 데이터 삽입
cursor.executemany(insert_query, data)
conn.commit()

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

 

 
결과





3주차 과제

기술과제
호스팅이 무엇인지 ?
AWS 회원가입, EC2서비스 프리티어(1년공짜) 인스턴스 생성해보기 (OS아무거나, Ubuntu 추천)
SSH가 무엇인지 ?
SSH가지고 생성한 EC2서비스 연결까지 해보기

코드과제
BeautifulSoup4 모듈 (HTML DOM접근을 도와주는 모듈)
requests모듈을 이용을해서 html을 가져온다음
BS모듈에가 html을 준다
내가 원하는 부분을 선택해서 원하는데이터 불러와서 print했을때 잘 찍혀나오게끔 해보기
->>https://eatitstory.tistory.com/m/7 다른 글에 작성

기술과제

*호스팅이 무엇인지?


호스팅이란?
-데이터를 모아두고 있는 서버의 전체 혹은 일부를 이용할 수 있도록 임대해 주는 서비스
-서버를 관리하기위해서는 24시간 내내 안정적으로 전기를 공급,빠르고 안정적인 인터넷 회선을 사용,안전한 보안 시스템이 필요
->개인이 서버를 관리하기보다 전문 업체의 호스팅 서비스를 사용하는 것이 일반적

{웹사이트:집
도메인:집 주소
ip:위도 경도 좌표
서버: 집이 위치한 동네
호스팅: 집 임대 서비스}

호스팅 종류

웹호스팅
-여러 고객이 하나의 서버를 함께 사용하는 형태
-하나의 서버를 나누어 쓰기 때문에 저렴하게 이용
-호스팅 업체의 통합 관리를 받기 편함
-사용할 수 있는 하드웨어가 제한적

서버 호스팅
-단독 서버를 사용하는 형태
-넓은 하드웨어 공간을 사용할 수 있음
-서버 운영/관리에 대한 직접적인 권한을 가질 수 있음
-빠른 데이터 전송 속도
-혼자 사용하니 높은 비용
-대기업이나 대형 포탈  같이 많은 데이터를 사용하는 기업들이 사용하기 좋음

클라우드 서버
-서버 호스팅을 가상화한 것으로, 가상 서버를 단독으로 사용할 수 있는 형태
-고객이 필요할 때마다 서버 자원을 늘리거나 축소하여 유연하게 서버 이용 가능
-서버 자원을 사용하고 나서 사용한 만큼 비용 지불
-하나의 가상 서버에 문제가 생기면 연결된 다른 가상 서버에도 문제가 생길 수 있다

*가상서버:물리서버(컴퓨터 자체)와 다른 컴퓨터 내부의 소프트웨어 서버이며 하나의 물리서버를 나누어 여러개 가상 서버로 사용한다

*AWS 회원가입, EC2서비스 프리티어(1년공짜) 인스턴스 생성해보기 (OS아무거나, Ubuntu 추천)

아래 블로그 글을 참고함
https://m.blog.naver.com/PostView.naver?blogId=jword_&logNo=222976128011&proxyReferer=

[AI스쿨] AWS EC2란? 우분투로 시작하기!

#AI스쿨 #AWSEC2 #AWSEC2우분투 AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성...

blog.naver.com

 



EC2란
-EC2서비스는 AWS에서 비용, 성능, 용량면에서 탄력적인 클라우드 컴퓨터를 제공하는 서비스라고 할 수 있다(가상머신-하드웨어인 컴퓨터의 기능을 소프트웨어로 동작할 수 있도록 구현)

 
인스턴스란
-클라우드 제공업체는 데이터 센터에서 하드웨어를 유지 관리하고 인스턴스라는 형태로 컴퓨팅 리소스에 대한 가상 액세스를 제공합니다->쉽게 말하면 클라우드에서 실행 되는 가상 서버

*ssh란 무엇인가?

ssh
-원격지에 있는 컴퓨터(ssh 서버=호스트)를 안전하게 제어하기 위한 프로토콜.
-ssh 클라이언트와 ssh 서버가 서로 상호작용한다.
-서버와 클라이언트간 암호화 방법을 통해서 연결되어 있기 때문에 보안이좋다.

ssh클라이언트
-윈도우 운영체제에는 ssh클라이언트가 설치되어 있지 않기에 putty라는 클라이언트를 설치해준다

ssh서버
-aws ec2 인스턴스 원격서버(가상서버)

보안!
-ssh는 보안적으로 안전한 채널을 아래 두개의 키를 사용하여 구성한 뒤 정보를 교환한다
-(private key / public key)

public key
-공개되어도 안전한 키다.
-메세지를 전송하기 전 암호화를 하게 된다
-암호화는 가능하지만 복호화(암호화의 반댓말) 는 불가능

private key
-외부 노출 하면 안되므로 본인 컴퓨터 내부에 저장하게 되어 있다
-복호화 가능

ssh의 인증과정
-다른 컴퓨터와 통신하기 위해서는 public key를 통신하고자 하는 컴퓨터에 복사하여 저장
-클라이언트 컴퓨터에서 접속 요청을할 때 응답을 하는 서버 컴퓨터에 복사되어 저장된 public key와 클라이언트 public key가 쌍을 이루는 private key와 비교를 하여 한쌍의 key인지 검사를 한다
-관계를 맺고 있는 key라는 것이 증명이 되면 컴퓨터 사이에 암호화된 채널이 형성이 되어 key를 활용해 메세지를 암호하하고 복호화하여 데이터를 주고 받을 수 있다.


*SSH가지고 생성한 EC2서비스 연결까지 해보기

아래 블로그 보고 참고함

https://velog.io/@heejung/AWS-EC2%EC%97%90-PuTTY%EB%A1%9C-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0

AWS EC2에 PuTTY로 접속하기

spring 기반의 새로운 프로젝트를 위해 aws ec2 인스턴스를 생성하였습니다. 윈도우 환경을 사용하고 있기 때문에 PuTTY를 사용하여 ec2 인스턴스에 접속하겠습니다. 기본값으로 두고 "Install"후 "Finish"

velog.io

 

 

'CS > Basic keyword' 카테고리의 다른 글

IT 기초 중요 키워드  (0) 2024.03.10

3주차 과제

-기술과제
호스팅이 무엇인지 ?
AWS 회원가입, EC2서비스 프리티어(1년공짜) 인스턴스 생성해보기 (OS아무거나, Ubuntu 추천)
SSH가 무엇인지 ?
SSH가지고 생성한 EC2서비스 연결까지 해보기
-->https://eatitstory.tistory.com/m/8 다른 글에 작성

-코드과제
BeautifulSoup4 모듈 (HTML DOM접근을 도와주는 모듈) 
requests모듈을 이용을해서 html을 가져온다음
BS모듈에가 html을 준다
내가 원하는 부분을 선택해서 원하는데이터 불러와서 print했을때 잘 찍혀나오게끔 해보기
 

*코드과제

(1)

import requests
from bs4 import BeautifulSoup

 
저번에 배운 requests 모듈과 같은 방식으로 패키지에서 다운 받아 이번에 사용하게 될 beautifulSoup모듈을 설치해준다.
설치 후 아래와 같이 모듈을 가져온다.
 
 

(2)

해외축구 : 네이버 스포츠 (naver.com)

해외축구 : 네이버 스포츠

스포츠의 시작과 끝!

sports.news.naver.com

 
네이버 해외축구 사이트의 html을 가져온 후 data변수에 집어 넣어준다.
BeautifulSoup함수(BeautifulSoup(html 문자열, parsing 방법))를 활용하여 data를 파싱해준다.
(파싱이란 파이썬이 html을 알아듣기 편하게 바꿔주는 방식)
 

data = requests.get('https://sports.news.naver.com/wfootball/index')
soup = BeautifulSoup(data.text, 'html.parser')

 

(3)

사이트 들어가서 f12 눌러서 개발자도구에서 빨간 동그라미 눌러 아스날에 커서 갔다대면 소스가 보인다.
copy sector로 소스를 복사한다.
 

 
tbody 아래에 tr들이 순위표에 있는 팀들의 소스가 있다.
 

(4)

soccer_rank = soup.select('#_team_rank_epl > table > tbody > tr')

 
우선 soccer_rank에 soup.select()란 함수를 사용하여 requests로 가져온 html 중 해외축구 순위표에 있는 데이터들이 담겨있는  tr class를 찾아온다.
 

(5)

for tr in soccer_rank:
    span = tr.select_one("td > div > div.info > span")

    if span:
        print(span.text)
    else:
        print("Span not found")

tr.select_one(select와 다르게 하나의 class를 찾는다)을 이용하여 다양한 데이터가 담겨있는 tr에서 순위표에 있는 팀들의 이름이 있는 span class 가져와 출력한다.
 

(6)

import requests
from bs4 import BeautifulSoup

data = requests.get('https://sports.news.naver.com/wfootball/index')
soup = BeautifulSoup(data.text, 'html.parser')

soccer_rank = soup.select('#_team_rank_epl > table > tbody > tr')

for tr in soccer_rank:
    span = tr.select_one("td > div > div.info > span")

    if span:
        print(span.text)
    else:
        print("Span not found")

        # _team_rank_epl > table > tbody > tr:nth-child(2) > td:nth-child(2) > div > div.info > span  ->>2위 리버풀 주소
        #각 팀별로 나눠지는 tr들까지만 select하고/ 각 tr에서 이름이 담겨있는 span class를 가져와 출력하기
출력화면

 

2주차 과제

- 파이썬 데이터형태 전부 파악하고 함수까지 끝내기-->다른 글에서 작성
https://eatitstory.tistory.com/3
https://eatitstory.tistory.com/4
https://eatitstory.tistory.com/5

 

파이썬-함수

*함수 반복되는 코드를 사용할 때가 있는데. 이를 좀 더 효율적으로 만들기 위해 사용된다. def 함수_이름(매개변수): 수행할_문장 ... return 리턴값 *키워드 매개변수,kwargs >>> print_kwargs(a=1) {'a': 1} >>

eatitstory.tistory.com

 

파이썬-제어문

*제어문 프로그램을 만드는 것도 집 짓기와 매우 비슷한 면이 있다. 나무, 돌, 시멘트와 같은 재료는 자료형이 되고 집의 뼈대를 이루는 철근은 제어문에 해당한다. 조건문 다음에 콜론(:)을 잊지

eatitstory.tistory.com

 

파이썬-자료형

*자료형 자료형이란 프로그래밍을 할 때 쓰이는 숫자, 문자열 등과 같이 자료 형태로 사용하는 모든 것을 뜻한다. 프로그램의 기본이자 핵심 단위가 바로 자료형이다. 1.숫자형 *정수 *실수(4.27e10

eatitstory.tistory.com

- HTTP에서 사용하는 메소드가 무엇이고 ? 어떤걸 의미하는지
- 파이썬 모듈이 무엇인지?
- 파이썬 모듈중에 requests모듈 설치해보기
- Reuqests모듈 사용을해서 네이버html내용을 print하기
 

* HTTP에서 사용하는 메소드가 무엇이고 ? 어떤걸 의미하는지

http는 요청(클라이언트)과 응답(서버)의 구조로 되어있다.
 
http 요청 프로토콜(규칙) 구조

사진출처:https://1.bp.blogspot.com/-GKCdB_2ASh0/X4qkvtlOE0I/AAAAAAAADxA/QrMC5X3GPgoKH5nT_HTbbVfyxJ9Yt5yCQCLcBGAsYHQ/s302/http_protocol_request.jpg


requsest line
>
headers
>
공백
>
body

사진출처:https://www.google.co.kr/url?sa=i&amp;url=https%3A%2F%2Fwww.cloud4y.ru%2Fen%2Fblog%2Fwhat-are-http-requests%2F&amp;psig=AOvVaw2DdsCQVy_EjoUdBEy-V4sR&amp;ust=1710753364123000&amp;source=images&amp;cd=vfe&amp;opi=89978449&amp;ved=0CBMQjRxqFwoTCIjajoX7-oQDFQAAAAAdAAAAABAE



requsest line
요청 타입 (공백) url (공백) http버전
 
#request 경우
header
-요청에 관련된 데이터

body
-메소드에 따라 바디쓸지 말지 결정(get vs post)
-요청 할때 필요한 데이터들

#response 경우
header
-응답 코드(200ok 404error....etc)

body
-html텍스트/브라우저 데이터들
-응답할 내용 없으면 없을 수도 있다

 

*HTTP 요청 메소드(9가지)

**GET 메서드는 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만 합니다.
HEAD 메서드는 GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함하지 않습니다.
**POST 메서드는 특정 리소스에 엔티티를 제출할 때 쓰입니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다.
*PUT 메서드는 목적 리소스 모든 현재 표시를 요청 payload로 바꿉니다
*PATCH 메서드는 리소스의 부분만을 수정하는 데 쓰입니다..
*DELETE 메서드는 특정 리소스를 삭제합니다.
CONNECT 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺습니다.
OPTIONS 메서드는 목적 리소스의 통신을 설정하는 데 쓰입니다.
TRACE 메서드는 목적 리소스의 경로를 따라 메시지 loop-back 테스트를 합니다.

제일 중요한 get,post

get은 요청url에 데이터(parameter)를 붙여서 전송->정보 요청
- 링크 클릭/입력 박스, 체크박스에 적은 데이터가 url뒤에 붙여서 보내짐(ex:네이버 검색어)
 - URL에 변수(데이터)를 포함시켜 요청한다.
 - 데이터를 Header(헤더)에 포함하여 전송한다. -주소창
 - URL에 데이터가 노출되어 보안에 취약하다. -노출되어도 상관 없는 경우 사용
 - 전송하는 길이에 제한이 있다.
 - 캐싱(한번 접근 후 또 요청할 시에 빠르게 접근하기위해 레지스터에 데이터를 저장시켜 놓는 것)할 수 있다.

post는 전송하면서 요청->정보 생성 요청
 - URL에 변수(데이터)를 노출하지않고 요청한다.
 - 데이터를 Body에 포함시켜 URL에 데이터가 노출되지 않아 기본 보안이 되어있다.
 - body에 데이터를 넣어서 보이지 않을 뿐 보안성이 좋은게 아니다  ->https 사용을 해야 보안이 된다.
 - 전송하는 길이에 제한이 없다.
 - 캐싱할 수 없다
 

*파이썬 모듈이 무엇인지?

파이썬 모듈이란?
모듈은 함수나 변수, 클래스를 모아놓은 파일이다. 프로그래밍을 할 때 굉장히 많은 모듈을 사용되는데 이미 만들어놓은 모듈이나 우리가 직접 만들 수 있는 모듈이 있다.


파이썬에서 특정 사이트의 정보를 읽어오기 위해서는 HTML 라이브러리가 필요하다. 그 중에서 requests 를 많이 사용하는데 requests 는 HTTP GET, POST, PUT, DELETE 등을 사용할 수 있다.
 

*파이썬 모듈중에 requests모듈 설치해보기

파이참 패키지에 requests 검색해서 설치
 

*Reuqests모듈 사용을해서 네이버html내용을 print하기

import requests
res = requests.get('http://naver.com')
print(res.text)

 
결과값


****피드백
개발자도구-네트워크-header/payload
파이썬request가 클라이언트 역활로 웹브라우저 역활(html가져오기)대신 할 수 있다.
웹브라우저-html을 화면에 보이게 해준다

*함수
반복되는 코드를 사용할 때가 있는데. 이를 좀 더 효율적으로 만들기 위해 사용된다.

def 함수_이름(매개변수):
    수행할_문장
    ...
    return 리턴값

*키워드 매개변수,kwargs
>>> print_kwargs(a=1)
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'}

*lambda
lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다. 보통 함수를 간결하게 만들 때 사용된다.

lambda 매개변수1, 매개변수2.... : 매개변수를 이용한 표현식

add = lambda a,b : a + b
result = add(3, 4)
print(result)

*input()
사용자 입력 값

*print()
출력 값

'Language > Python' 카테고리의 다른 글

연산자  (2) 2024.10.24
변수와 데이터형  (0) 2024.10.21
미리 만드는 쓸 만한 프로그램  (0) 2024.10.18
파이썬-제어문  (2) 2024.03.15
파이썬-자료형  (2) 2024.03.15

*제어문

프로그램을 만드는 것도 집 짓기와 매우 비슷한 면이 있다. 나무, 돌, 시멘트와 같은 재료는 자료형이 되고 집의 뼈대를 이루는 철근은 제어문에 해당한다. 

조건문 다음에 콜론(:)을 잊지 말자!

1.if(조건문)

#if -들여쓰기/조건문 :
money=True
if money:
    print("taxi")
else:
    print("walk")

비교연산자
x < y : x가 y보다 작다.
x > y : x가 y보다 크다.
x == y : x와 y가 같다.
x != y : x와 y가 같지 않다.
x >= y : x가 y보다 크거나 같다.
x <= y : x가 y보다 작거나 같다.

x or y : x와 y 둘 중 하나만 참이어도 참이다.
x and y : x와 y 모두 참이어야 참이다.
not x : x가 거짓이면 참이다.

in/not in
x in 리스트 /x not in 리스트
x in 튜플 /x not in 튜플
x in 문자열 /x not in 문자열

*pass 조건 넣지 않고 넘어가려면
pocket=['paper','money','cellphone']
if'money' in pocket:
    pass
else:
    print("walk")

*elif 다중 조건판단: 다양한 조건을 넣을 수 있다
pocket=['card','cellphone']
if'money' in pocket:
    print("taxi")
elif 'card':
    print("bus")
else:
    print("walk")

2.while(반복문)


#while
TreeHit=0
while TreeHit<10:
    TreeHit=TreeHit+1
    print("나무를 %d번 찍으셨습니다"%TreeHit)
    if TreeHit==10:
        print("나무가 넘어갑니다")

*break
while문 강제로 멈추게 하기
# coffee.py
coffee = 10
while True:
    money = int(input("돈을 넣어 주세요: "))
    if money == 300:
        print("커피를 줍니다.")
        coffee = coffee -1
    elif money > 300:
        print("거스름돈 %d를 주고 커피를 줍니다." % (money -300))
        coffee = coffee -1
    else:
        print("돈을 다시 돌려주고 커피를 주지 않습니다.")
        print("남은 커피의 양은 %d개 입니다." % coffee)
    if coffee == 0:
        print("커피가 다 떨어졌습니다. 판매를 중지 합니다.")
        break

*continue
while문 처음으로 돌아가기
a = 0
while a < 10:
    a = a + 1
    if a % 2 == 0: continue #a가 짝수라면 continue를 만나 while문의 맨 처음으로 돌아가게 된다.
    print(a) #홀수는 출력이 됨

3.for

for 변수 in 리스트(또는 튜플, 문자열):
    수행할_문장1
    수행할_문장2
    ...

# marks1.py
marks = [90, 25, 67, 45, 80]   # 학생들의 시험 점수 리스트

number = 0   # 학생에게 붙여 줄 번호
for mark in marks:   # 90, 25, 67, 45, 80을 순서대로 mark에 대입
    number = number +1 
    if mark >= 60: 
        print("%d번 학생은 합격입니다." % number)
    else: 
        print("%d번 학생은 불합격입니다." % number)

1번 학생은 합격입니다.
2번 학생은 불합격입니다.
3번 학생은 합격입니다.
4번 학생은 불합격입니다.
5번 학생은 합격입니다.

#range함수의 예시
add = 0 
for i in range(1, 11): 
    add = add + i 
    print(add)
#1부터 10까지 i에 차례로 대입한 뒤 add에 총합이 구해진다.

*리스트 컴프리헨션
리스트 안에 for 문을 포함하는 리스트 컴프리헨션(list comprehension)을 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다.
>>> a = [1,2,3,4]
>>> result = [num * 3 for num in a]
>>> print(result)
[3, 6, 9, 12]

'Language > Python' 카테고리의 다른 글

연산자  (2) 2024.10.24
변수와 데이터형  (0) 2024.10.21
미리 만드는 쓸 만한 프로그램  (0) 2024.10.18
파이썬-함수  (1) 2024.03.15
파이썬-자료형  (2) 2024.03.15

*자료형

자료형이란 프로그래밍을 할 때 쓰이는 숫자, 문자열 등과 같이 자료 형태로 사용하는 모든 것을 뜻한다. 프로그램의 기본이자 핵심 단위가 바로 자료형이다.

1.숫자형
*정수
*실수(4.27e10=4.27*10의10승)
*8진수(0o177=1*8의2승+7*8+7=127)
816진수(0xABC10*16의2승+11*16+12=2748)(A:10, B:11, C:12)


*숫자형 연산자
+-/*
**-제곱
%-나머지
//-몫
(a+=1)=(a=a+1)-복합연산자

2.문자열
*사용법: ""로'' 둘러 쌈
*문자열도 더하고 곱할 수 있다.
head="seo"
body="chan"
print((head+body)*2)
->seochanseochan

*문자 길이 사용: len()
*문자열 인덱싱: a[3]-"life"-->4번째인 e이다 /a[-2]는 뒤에서 2번째인 f가 나옴
*문자열 슬라이싱: a[0:3]은life가아닌 lif ([0],[1],[2])만 나와 [3]은 제외 됨=(0 <= a < 3)
*** 
a = "Pithon"
>>> a[1]
'i'
>>> a[1] = 'y'->>>오류
문자열의 요솟값은 바꿀 수 있는 값이 아니기 때문이다(그래서 문자열을 ‘변경 불 가능한(immutable) 자료형’이라고도 부른다).

*문자열 포매팅: %d=%1 / %s=%"문자"
"%10s" % "hi"
->'        hi'
*format함수 사용한 포매팅
#format으로 숫자 대입하기
print("I eat {0} apples".format(3))
나머지는 덜 중요하다 생각하여 그때 그때 다시 공부하기

3.리스트 

*사용법: 리스트를 만들 때는 위에서 보는 것과 같이 대괄호([])로 감싸 주고 각 요솟값은 쉼표(,)로 구분해 준다

*리스트 인덱싱
>>> a = [1, 2, ['a', 'b', ['Life', 'is']]]
>>> a[2][2][0]
'Life'

*리스트 슬라이싱
>>> a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
>>> a[2:5]
[3, ['a', 'b', 'c'], 4]
>>> a[3][:2]
['a', 'b']

*리스트 연산=문자열 연산이랑 비슷함
*리스트 요소 수정
del
>>> a = [1, 2, 3, 4, 5]
>>> del a[2:]
>>> a
[1, 2]
리스트 관련 함수-apppend/sort/reverse/insert/remove/pop/count/extend....이 함수도 차차 알아가기로

4.튜플
*리스트는 []/튜플은()
t1 = ()
t2 = (1,) # 1개의 요소를 가질때는 반드시 뒤에 콤마,를 붙여줘야한다.
t2= (1, 2, 3)
t4 = 1, 2, 3 # 괄호를 생략해도 사용할 수 있다

*리스트는 요솟값의 생성, 삭제, 수정이 가능하지만, 튜플은 요솟값을 바꿀 수 없다.
*튜플도 인덱싱, 슬라이싱, 더하기(요솟값이 바뀌는 게 아니다), 곱하기, 길이 구하기 다 가능(함수는 안됨)

5.딕셔너리(key:value)
*딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다.
*딕셔너리 추가 삭제

#딕셔너리 쌍 추가
a = {1: 'a'}
a[2] = {'b'} #a = {1:'a', 2:'b'} 값을 가지게 된다.
a['e'] = {'d'} #a = {1:'a', 2:'b', 'e':'d'} 를 추가하게 된다.
#앞서배운 인덱스가 딕셔너리에선 항상 정수만이 아닌 문자로도 들어 갈 수 있게 된다.


#딕셔너리 삭제하기
a = {1:'a', 2:'b', 'e':'d'}
del a[1] #1:'a'가 삭제되어 a = {2:'b', 'e':'d'}가 된다.
#del과 함께 a[key]값을 넣어주면 삭제가 이루어진다.

*딕셔너리 함수
key,value,item,clear,get, name in a(true or false)
a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
a.keys()
dict_keys(['name', 'phone', 'birth'])

6.집합 자료형
*set()의 괄호 안에 리스트를 입력하여 만들거나 다음과 같이 문자열을 입력하여 만들 수도 있다.
*특징:중복x 순서x
s2 = set("Hello")
s2
->{'e', 'H', 'l', 'o'}
*if. 집합에서 인덱싱을 사용하고 싶다면 list(), tuple()를 이용해서 변환 후 사용 해야한다.

s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
*교집합 구하기
s1 & s2 #{4,5,6}을 반환
s1.intersection(s2) #이런식으로도 {4,5,6} 교집합을 구할 수 있음

*합집합
s1 | s2 #{1,2,3,4,5,6,7,8,9}를 반환한다.
s1.union(s2) #{1,2,3,4,5,6,7,8,9}를 반환 할 수 있다.

*차집합
s1 - s2 #{1,2,3}을 반환
s1.difference(s2)# s1 - s2를 difference 함수로 표현할수있음
s2 - s1 #{7,8,9}를 반환 
s2.difference(s1)# s2 - s1를 difference 함수로 표현할수있음

*집합함수
#1개 값만 추가(.add)
s1 = set([1,2,3])
s1.add(4) #s1 = {1,2,3,4}로 4가 추가된다.

#여러 개 추가하기(.update)
s1 = set([1,2,3])
s1.update([4,5,6]) #s1 = {1,2,3,4,5,6}으로 추가됨

#특정 값 제거(remove)
s1 = set([1,2,3])
s1.remove(2) #s1 = {1,3}으로 2가 제거됨

-리스트, 튜플, 딕셔너리, 집합 특징 비교요약


7. 불 자료형
*불(bool) 자료형이란 참(True)과 거짓(False)을 나타내는 자료형이다.
*문자열, 리스트, 튜플, 딕셔너리 등의 값이 비어 있으면("", [], (), {}) 거짓이 되고 비어 있지 않으면 참이 된다.
>>> bool([1, 2, 3])
True
>>> bool([])
False
>>> bool(0)
False
>>> bool(3)
True

8.변수란?
변수=변수에 저장할 값
*다른 프로그래밍 언어인 C나 JAVA에서는 변수를 만들 때 자료형의 타입을 직접 지정해야 한다. 하지만 파이썬은 변수에 저장된 값을 스스로 판단하여 자료형의 타입을 지정하기 때문에 더 편리하다.
 
 
리스트/튜플/딕셔너리/세트 구분

- List

1. [ ]를 사용한다.

2. 추가,수정,삭제가 가능하다.(mutable하다.)

3. 순서가 있어서 인덱싱, 슬라이싱을 사용 할 수 있다.



- Tuple

1. ( )를 사용한다.

2. 추가,수정,삭제가 불가능하다.(immutable하다.)

3. 순서가 있어서 인덱싱, 슬라이싱을 사용 할 수 있다.



- Dictionary

1. { }를 사용하고, ':'를 통해 key와 value값을 정해준다.

2. 추가,수정,삭제가 가능하다

3. 순서가 중요하지 않다. 튜플 리스트와 달리 인덱싱으로 접근하지 않고 key로 접근을 해서 value의 값을 얻어낸다.



- Set

1. .set([ ])를 사용해서 집합을 만든다.

2. 함수로 추가, 제거가 가능하다.

3. 중복을 허용하지 않는다

4. 순서가 없기 때문에 인덱싱을 통해 값을 얻을 수 없다.

'Language > Python' 카테고리의 다른 글

연산자  (2) 2024.10.24
변수와 데이터형  (0) 2024.10.21
미리 만드는 쓸 만한 프로그램  (0) 2024.10.18
파이썬-함수  (1) 2024.03.15
파이썬-제어문  (2) 2024.03.15

+ Recent posts