티스토리 뷰

반응형

의료 부분의 데이터는 구하기 힘들다

데이터 분산 - Spark

웹 크롤링, 데이터베이스, 웹 프로그래밍

 

크롤링 예시

쇼핑몰 데이터 크롤링, 이미지 크롤링, 네이버 주식 데이터 크롤링 등

 

클래스의 개념

cpu , ram, sdd(hdd) - 컴퓨터의 구조

1. 변수선언 : 메모리를 사용한다. 메모리에 데이터를 할당 및 저장공간 구별을 위해 식별자를 넣는다

2. 데이터 타입 : 메모리를 효율적으로 사용한다 : int,float,bool,str,list,tuple,dict,set 등

3. 연산자 : cpu 사용 문법(ALU) : 산술, 비교, 논리, 할당, 멤머 등.4. 조건문, 반복문 : 컴퓨터가 자동으로 판단하게 해주고, 똑같은 코드를  반복하지 않게 효율을 높여준다.if,else,while,for,break, continue5. 함수 : 반복되는 코드를 묶어서 코드 작성 실행(작성하는 사람과 실행하는 사람을 따로 가져갈 수 있는 장점)def, return, argument-parameter, docstring,스코프,람다.6. 클래스 : 여러개의 변수, 함수를 묶어서 코드를 작성하는 실행 문법코드의 규모가 커지면 변수선언, 함수들을 많이 사용한다. 그래서 코드 작성의 효율성을 높인다.

7. 입출력 : sdd(hdd)-보조기억장치를 사용하는 문법 : pickle

 

4,5,6이 코드를 효율적으로 사용하는 방법을 배운다.

이렇게 1~7을 배워야 다른 언어에도 적용 가능하다.

 

클래스란?

객체지향을 구현한 문법이다.

전체 문법 중에서 가장 어려운 데, 이 객체지향이라는 개념 때문이다.

객체지향의 사전적인 의미는 실제 세계를 모델링하여 개발하는 방법론

은닉화 등

 

하나의 프로그램을 여러 사람이 개발. 실제로 일을 해보면 1+1이 1.5만 되도 다행이고, 0.7,0.8이 되는 경우도 허다하다.

어떻게하면 여러 사람이 효율적으로 개발 할 수 있을까를 고민했다. -> 그 결과가 객체지향

 

객체지향을 협업을 용이하게 하기 위해서 개발되었다.

가장 객체지향적인 언어 : Java

 

함수의 사용법 : 함수 선언(코드 작성, 실행x) > 함수 호출(코드 실행)

클래스 사용법

클래스를 선언(코드 작성) > 객체를 생성(자원-메모리 사용)

> 메서드(.에 후에 붙는 함수, 클래스 안에 들어 있는 함수)를 호출(코드 실행)

 

클래스선언(설계도작성-제품을 사용할 수 있는 상태는 아니다)

객체 생성(제품생산-재료를 써서 제품 생산)

메서드 호출(제품 사용)

 

클래스 선언 방법

은행 계좌 class
Account(클래스 이름) balance-변수 하나, deposit()-입금, withdrw()-출금

클래스 식별자 : 가장 앞에 대문자 사용(PascalCase), UpperCamelCase(O) : 함수,변수는 snake_case

파이썬에서 PEP8에서 파이썬 스타일 가이드가 있다. 

잘 쓴 표현과 잘못된 방법을 알려준다.

 

https://peps.python.org/pep-0008/

 

회사에서는 안 지키면 코드 업로드가 안 된다.

class Account: 
    balance = 10000  #변수 생성
    def deposit(self, amount): #함수 생성 
        self.balance += amount #함수의 동작
        
    def withdraw(self, amount): #함수 생성2
        self.balance -= amount #함수의 동작 2

 

amount금액 만큼 더해주고, 뺀다.

self의 의미는 객체 자신을 의미한다.

만약 self.bal +=2000이라는 코드를 실행하면, acc1 객체를 생성했을 때 할당된 해당 메소드의 객체는 acc1이기 때문에,

acc1.bal라는 뜻과 일맥상통한다.

 

 다른 언어에서는 this라는 용어로 사용.

 

 

설계도를 만들었다. 그렇게 해서 객체(object)를 생성한다.

#객체 생성 : 메모리르 사용한다.
acc1 = Account()
acc2 = Account()

만약 함수를 보고 싶으면 dir로 보면 된다. string 같은 경우도 객체의 함수를 전부 조회할 수 있다(upper,lower 등)

#dir() : 객체에 들어 있는 변수(함수)를 출력한다
dir(acc1)[-3:]
>['balance', 'deposit', 'withdraw']

 

만약 객체 안에 있는 변수를 바꾸고 싶다면?

일단 메서드로 조회

acc1.balance, acc2.balance
(10000, 10000)

 

그 후에 acc2.balance=6000과 같은 방식으로 변수를 바꿔준다.

acc2.balance=6000
acc1.balance, acc2.balance
>(10000, 6000)

 

함수도 마찬가지로 수행할 수 있다.

# 메서드호출 : 코드실행 
acc1.deposit(2000) 
acc2.withdraw(3000) 
acc1.balance, acc2.balance
>(12000, 3000)

 

import를 이용해서 클래스를 가져와서 객체를 생성해서 사용한다.

 

생성자 메소드

메소드의 종류에는 3가지가 있다

instance : 가장 많이 사용(self가 있는 메소드, 객체를 생성해야 사용 가능) -95%이상

class 메소드: CLS 사용 

static 메소드 : self나 CLS가 들어가지 않는다

 

spcial method : __ 사용 : 특별한 기능을 하는 메소드

생성자 메서드 __init__() : 여러 개의 스페셜 메소드 중 하나. 객체가 생성될 때 실행되는 메소드

 

원래는 객체를 만든 다음에 실행

생성자 메서드는 실수를 줄이기 위해 사용한다.

class Account: 
    def deposit(self, amount): #함수 생성 
        self.balance += amount #함수의 동작
        
    def withdraw(self, amount): #함수 생성2
        self.balance -= amount #함수의 동작 2

 

변수인 balance를 빼버렸다.

객체의 생성까지는 가능하다. 하지만 함수 실행 시 에러가 난다.(변수가 없으므로)

acc =Account()

 

그래서 생성자 메소드를 넣는다.

def __init__(self, balance): 
        self.balance = balance #메소드에서 사용되는 변수의 초기값을 설정하거나 검사할 때 사용

 

그러면, 객체 선언 시에 값을 넣어주면, 변수가 생성된다.

acc =Account(10000) #10000이 balance로 들어간다.

 

 

이로 인해 dataframe에 대한 개념을 사용할 때 이해도가 올라갈 것이다.

import pandas as pd

pandas는 dataframe이라고 하는 클래스를 포함하고 있다.

 

pd.DataFrame(식별자를 대문자로 사용-파스칼 케이스-객체 생성 할때 사용되는 이름)

소문자면 함수를 호출하는 것

 

df에 객체를 할당해서, dir(df)를 해보면 변수를 전부 알 수 있다.

 

help(df.drop)

help는 docstring(함수설명글)을 출력한다.

 

__add__, __eq__ 등등의 연산자 관련 메서드와 __str__, __repr__의 데이터를 출력해주는 메서드 정도까지 알고 계시면 좋을것 같습니다.

 

클래스의 데이터 타입

 

클래스는 사용자 정의 데이터타입이다.

 

acc 객체가 있다고 하면 ,account 클래스로 만들어진 것이다.

acc 객체의 데이터 타입은? type()을 쓰면 된다.

acc 객체의 클래스 : Account

acc 객체의 데이터 타입 : Account

즉, 클래스는 데이터 타입이다.

이 Account를 만든 사람을 만든 사람은 우리기 때문에, 사용자 정의 데이터타입이다.

 

사고의 확장을 하면, 데이터 타입은 클래스와 똑같기 때문에, str, list 등도 다 클래스이다.

즉, 데이터타입(클래스)가 다르다는 의미는, 사용가능한 변수(함수)가 다르다는 의미이다.

data1 = 'python'
data2 = [1,3,2]
type(data1), type(data2)
이것도 dir로 볼 수 있다.

 

클래스를 이런 개념으로 설명하는 사람들이 많지 않다.

이 개념을 아는 상태에서 공부를 하면 더 빠르다.

 

아키텍처

시스템의 구성과 작동 원리, 구성 요소 간의 관계와 외부 환경과의 상호작용,

설계와 구현 지원 수준, 요구 사양 및 시스템 수명 주기 고려, 그리고 전반적인 최적화를 위한 목표 기술.

 

서버와 클라이언트의 아키텍처

클라이언트 : Request

브라우저를 사용하여 서버에 데이터를 요청하는 작업을 해야 한다.

 

서버 : Response

클라이언트의 브라우저에서 데이터를 요청하면 요청에 따라 데이터를 클라이언트로 전송해야 한다.

 

URL(Uniform Resource Loactor)

 

https://sikaro.tistory.com:80/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F

https://n.news.naver.com/mnews/article/001/0009847211?sid=105#da_727145

 

http:// - Protocol (프로토콜은 통신 규약. +s는 보안 향상)

  • https를 쓰면 암호화와 복호화가 되어서 스니핑으로 가로 채도 의미가 없게 된다. 

 

sikaro - Sub Domain 

tistory.com - Primary Domain

  • 도메인은 IP 주소하고 매핑이 된다.
  • IP(인터넷 프로토콜) 주소는 인터넷을 가장 빠른 경로로 요청할 수 있게 도와준다. 
  • 도메인을 IP 주소로 바꿔준다.

:80 - Port

  • IP로는 서버 컴퓨터까지는 찾아들어갈 수 있는데 어떤 프로그램을 실행할 지,접근할지는 인식 불가
  • 그걸 구별해주는 게 port 802,443,27017,3306(데이터 베이스의 경우)
  • app 접속할 때 사용하는 식별자
  • 쥬피터 노트북 서버 프로그램 8888
  • 8080은 큰 의미를 가지는 포트는 아니다. 테스트 할 때의 임시 포트
  • 내가 설정할 수는 있는데, 주로 권고하는 포트가 있다.

/manage/ - Path

  • pc에 파일 시스템처럼, 서버에도 디렉토리가 있다.
  • 그래서 마찬가지로 서버 컴퓨터의 디렉토리

--여기까지가 어떤 서버의 파일에 접근하는 방법--? 앞 부분

 

? 뒷부분은 데이터를 의미한다.

 

read.nhn - Page ( File )

html, png,pdf

 

mode=LSD - Query

  • 클라이언트 측에서 서버 쪽으로 데이터를 전송하는 것을 쿼리라고 한다.
  • mode라는 key 값의 value 값을 확인한다.
  • aid 데이터가 1이라고 하면, 1번 기사를 돌려준다.
  • aid를 조정해서 python에서 반복문으로 만들 수도 있다.
  • 1~100번까지 크롤링도 가능

 

#da_727145 - Fragment

웹 페이지는 document 기준인데, 너무 크다.

이미 열린 웹페이지의 특정 위치로 이동시켜 주는 것이 fragment이다.

크롤링 할 때는 사용하지 않는다.

브라우저 매크로 만들 수 있다.

 

 

HTTP Request 방법

Get : URL에 Query를 포함하고, Query(데이터) 노출, 전송 가능 데이터가 작다

Post : Body에 Query 포함. Query(데이터) 비노출, 전송 가능 데이터 많음

 

클라이언트(내 컴퓨터)에서 브라우저가 url 요청을 서버로 하는 게 리퀘스트

서버에서 was가 response를 해서 돌려준다.

 

get 방식과 post 방식의 차이는 쿼리가 url에 포함되어 있느냐 없느냐에 따라 갈린다.

url 패킷이 전송될 때 body가 있다. 그 body에 쿼리가 포함되어 있는게 post 타입이다.

url 길이도 제한이 되어 있다. 3~5천자 정도

 

그런데 post 방식은 body에 포함하므로, 조금 더 많은 정보를 담을 수 있다.

보안의 경우 민감한 정보 같은 경우가 get 방식의 url의 정보에 포함될 수 있어서, post 방식을 사용한다.

python 크롤링 같은 경우는 가독성을 중점으로 더 좋은 코드를 사용한다.

 

HTTP Status Code

클라이언트가 데이터를 주고 받은 결과 정보

  • 2xx - Success(성공)
  • 3xx - Redirect(이미 받아온 데이터를 가지고 화면에 보여준다, 즉, 서버 쪽에 부하가 생기지 않는다.)
  • 4xx - Request Error(대표적으로 404 에러. url에 해당하는 페이지가 없다)
  • 5xx - Server Error

크롤링에서는 200번대가 잘 뜨는 게 중요하다.

원하는 데이터가 안 나올 때도 있는데, 그러면 url을 살펴봐야 한다.

 

https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C

http 상태 코드 참조

 

쿠키, 세션, 캐시

쿠키 : 클라이언트의 브라우저에 저장하는 문자열 데이터이다.(브라우저에서의 아이디,비밀번호 정보 등 ssd에 저장)

사용 - 로그인 정보, 내가 보았던 상품의 정보, 팝업 다시보지 않기 정보 등

 

세션 : 클라이언트의 브라우저와 서버의 연결 정보

요청과 responce에 대한 연결 정보를 저장하는 것을 세션이라고 한다.

첫 번째 서버와 연결 정보를 저장하면 세션 1

두 번쨰 서버와 연결 정보를 저장하면 세션 2가 된다.

사용 - 자동 로그인

 

캐시

클라이언트, 서버의 메모리(RAM)에 저장하는 데이터이다.

메모리에 데이터를 저장하면 데이터 입출력이 빠르다.

캐시 같은 경우는 서버에서 사용할 때 1일차 100%일 때 3일차에는 1%대로 줄어든다.

서버 컴퓨터에는 메모리,ssd가 있는데, 1일차에는 메모리, 3일차에는 ssd에 저장한다.

 

즉, 속도에 따라서 저장소의 데이터를 달리한다.

 

local storage - 클라이언트 pc의 저장소(ssd)가 로컬 스토리지다.

 

 

Web 언어와 프레임워크

프레임워크는 빈칸 채워넣기다.

코드를 처음부터 짜려고 하면 굉장히 많다.

어떤 목적을 가지고 코딩을 할 때 항상 사용되는 코드들이 있어서, 그걸 묶어서 프레임워크로 만들어준다.

그래서 자기가 사용하고 싶은 코드만 빈칸을 채워넣으면 된다.

 

프레임워크가 어려운 이유는 숨겨진 코드들이 어떻게 동작하는지 모르기 때문이다.

 

클라이언트(프론트엔트)

  • HTML
  • CSS - Bootstrap, Semantic UI, Materialize, Material Design Lite
  • Javascript - 리액트.js, 뷰.js, angular, j쿼리(이벤트 발생에서 사용)

화면에서 움직이는 게 좋다.-> 프론트엔트

 

 

서버(백엔드)

  • Python - Django, Flask, FastAPI
  • Java - Spring
  • Ruby - Rails
  • Scala - Play
  • Javascript - Express(node.js)

스프링 프레임워크를 많이 사용하는 이유 - 국가에서 사용하기 떄문.

네이버나 금융권 회사에서도 스프링으로 개발한다.

검은바탕에 흰글자 - 백엔드

 

다 합치면 풀스택이다.

 

작은 회사는 전체를 보는 일

큰 회사는 깊은 전문직

 

본인의 실력을 키우면 알아서 찾아온다.

 

Scraping과 크롤링

Scraping : 특정 데이터를 수집하는 작업이다.(크롤링보다 넓은 영역-외국에서 많이 사용)

크롤링 : 웹서비스의 여러 페이지를 이동하며 데이터를 수집하는 작업이다.

spider, web crawler, bot 등의 용어를 사용한다.

 

구글 봇이 웹을 돌아다니면서 데이터베이스에 정보를 저장한다.

구글 검색 서버가 필요한 웹페이지를 수집하게 해주는 방

 

인터넷

컴퓨터로 연결하여 TCP/IP 프로토콜을 이용하여 정보를 주고 받는 컴퓨터 네트워크를 뜻한다.

해저 케이블을 사용하여 전세계 컴퓨터에 접속할 수 있다.

무선 인터넷은 매체(media)를 주파수로 사용

 

메가라는 단위는 1초에 메가(10^6) 번만큼 0,1에 대한 판단을 한다는 의미이다.

 

2*10^8m/s(이론상의 패킷 속도. 빛의 속도보다 조금 느리다)

스타링크는 해저 케이블 없이 위성으로 데이터를 주고 받겠다고 하는 것이다.

중계기와 중계기 사이는 다 유선이다.

 

OSI 7 Layer

Open System Interconnection Reference Model을 뜻한다.

 

국제 표준화기구(OSI)에서 개발한 모델로 컴퓨터 네트워크 프로토콜 디자인통신을 계층으로 나누어서 설명한다.

Layer가 낮을수록 페이로드가 증가한다.

 

*페이로드 : 통신 프로토콜에서 데이터를 전송할 때, 페이로드는 실제로 전송되는 정보를 말합니다. 헤더(Header)와 트레일러(Trailer)와 같은 추가적인 정보와 메타데이터를 제외하고 전송되는 유용한 데이터 부분을 의미합니다. 이러한 페이로드는 메시지, 파일, 음악, 비디오, 이미지 등 다양한 형태의 데이터가 될 수 있습니다.

 

 

전체 요약

클라이언트 브라우저 (url) - 해당 정보 domain을 ip로, port, 쿼리 등

그래서 서버에 전송 그러면 was가 받아서, 데이터베이스(DBS)에서 데이터를 찾아서 was에 돌려주고,

html과 데이터를 합쳐서 다시 인터넷으로 쏘아 클라이언트로 responce

이 때 was에 전달하느냐 url에 그대로 전달하느냐에 따라 post, get으로 나뉜다.

 

responce의 status 코드로 알 수 있다.

html코드, json 파일 등으로 리턴

 

브라우저의 역할 2가지 

1.req -> rep 

2. 보여주는 역할

 

1번을 가능하게 만드는 것이, request라는 패키지이다.

반응형