이런 이런경우 메세지에 있는 포트 번호를 이용하여 사용여부를 확인

Error: listen EADDRINUSE: address already in use ::: 3000

lsof -i:3000

위 코드를 터미널에 입력하면 아래와 같은 결과를 보여준다.

 

여기서 PID 번호를 이용해서 사용 중인 서버 종료시키기

kill 10287

 

1. 컴퓨터의 선사시대

1) 이론적인 컴퓨터의 역사

컴퓨터의 이론적 기원

사람은 다 죽는다. 소크라테스는 사람이다. 따라서 소크라테스는 죽는다. 와 같은 연역법

 

튜링머신(Turning Machine)

가장 단순하고 매력적인 이론적 모델. 가상적이고 논리적인 기계

튜링머시의 구성과 가정을 알게 되면 컴퓨터에 대해 전혀 알지 못하는 사람도 쉽게 그 동작 원리 및 표현 방식을 습득할 수 있다고 한다.

  • 튜링머신의 정기 문제(halting problem) : 처리를 마친 후 정지 할 것인지, 아니면 정지하지 않고 끝없이 동작하는 무한 루프에 빠질 것인지를 알 수 있는가 하는 문제
    • 컴퓨터라는 형식 체계에 의해 풀릴 수 없는 문제 영역이 어떤 것인지에 대해서 연구하고 증명하는 과정에 나온 문제.

처치의 가정(Chuerch's thesis)

  • 튜링머신보다 더 처리력이 우수한 컴퓨터 구조는 있을 수 없다.
  • 알고리즘에 의해 풀리는 문제들은 그것을 풀기위해 채택하는 컴퓨터 체계와는 무관하다(????)
    • 하나의 문제가 슈퍼컴퓨터에 의해 풀리게 되면 개인의 컴퓨터에서도 풀릴 수 있으며, 튜링 머신에서도 풀릴 수 있다는 의미

2) 기계식 컴퓨터의 역사

17세기:

  • 파스칼(Blasise Pascal)의 계산기(톱니바퀴를 이용해여 덧셈과 뺄셈 가능)
  • 라이프니츠(Gottfried W. Leibniz)의 계산기(파스칼계산기 계량- 사칙연산 수행)

19세기:

  • 찰스 배비지(Charles Babbage)
    • 미분기계(difference engine)개발 
    • 해석기관(analytic engine) 개발
      • 해석기관 은 섬유제조업자인 조제프-마리 자카르가 종이카드에 구멍을 뚫어 정보를 표현하는 것에 감명을 받아 설계됨
      • 입력/ 출력/ 처리/ 저장 장치를 포함

 

3)전자식 컴퓨터의 초기역사

20세기초 

  • 최초의 전자식 계산기 등장
    • 1939년 : 이진(binary) 체계의 디지털 컴퓨터 - 콘라트 추제(Konard Zuse)
    • 1943년 : 콜로서스(Colossus) - 암호를 해독하기위해 개발, 세계최초의 전자식 컴퓨터
    • 1939년 : ABC 컴퓨터(Atanasoff-Berry Computer) - 미분방정식을 풀수 있는 컴퓨터
    • 1944년 : Mark I 컴퓨터
    • ENIAC(Electronic Numerical Integrator And Computer) - 총의 탄도 거리 계산하기 위한 컴퓨터, 최초의 현대적 컴퓨터
    • UNIVAC I (UNIVersal Automatic Computer I) - 최초의 상업용 컴퓨터, 미국인구 조사에 사용(1951~)

2. 근대적 컴퓨터의 역사

컴퓨터의 변화

1세대(1940년대 후반~)

  • 진공관 기반 : ENIAC, UNIVAC I

2세대(1950년대 후반~)

  • 트랜지스터 기반
  • 진공관 컴퓨터보다 부피가 작고 가격도 저렴하며 신뢰성이 높음 -> 컴퓨터 사용이 확산됨

3세대(1960년대 후반~)

  • 집적회로(Integration Circuit: IC)

4세대(1970년대 중반~)

  • 고밀도 집적회로(Large Scale Integration: LSI)
  • 초고밀도 직접회로(Very Large Scale Integration: VLSI)

프로그래밍 언어 및 기술

1956년부터 트랜지스터가 컴퓨터 개발에 사용되고 컴퓨터의 사용이 확산되면서 부터 프로그래밍의 필요성이 대두되기 시작

 

1950년대

  • 어셈블리(Assembly) - 숫자가 아닌 기호에 의해 컴퓨터의 정보를 표현
  • 포트란(Fortran) - 사용자가 표현하고자 하는 문제 자체에 더 가까운 언어
    • 수식(Formular) 변환기(Translator)의 약자로 과학 계산용으로 주로 사용되는 언어
  • 리습(Lisp) - 기호 정보 ( symbolic information)를 처리하는 일에 대한 필요성에 의해 개발된 언어

 

1960년대

  • 구조적 프로그래밍 (structured programming)
  • 일괄처리 방식 (batch processing)
  • 운영체제 (operating system : OS)

 

1970 년대

  • C 언어

 

1980년대

  • 객체지향 언어(object-oriented language)

 

1990년대

  • 인텔 펜티엄 프로세서
  • 윈도우 95/98
  • 월드와이드웹(world wide web: www)
  • 자바(Java)

3. 현대의 컴퓨터

1)  슈퍼컴퓨터와 메인프레임 컴퓨터

  • 메인프레임 컴퓨터
    • 사용 용도 : 대규모 사업장에서 대량의 데이터 처리와 신뢰성 있는 전산작업 ( 은행, 항공사)
    • 사용 방법 : 터미널을 통해서 접속 
    • 작동 방식 
      • 시분할(time sharing) 방식
        • 컴퓨터 처리 능력을 짧은 시간 단위로 구분하고 이를 여러 사용자에게 조금씩 분할해 서비스하는 방식
        • 매 시점마다 하나의 터미널만을 서비스
        • 아주 짧은 시간 간격으로 터미널을 나누어서 서비스 
  • 슈퍼컴퓨터 혹은 고성능 컴퓨터(high performance computer, HPC)
    • 사용 용도
      • 복잡한 문제를 다루는 응용분야 ( 기상예측, 통신망 설계, 석유탐사)
      • 메인프레임 컴퓨터보다 처리 능력이 뛰어난 컴퓨터가 필요할때
    • 사용 방법
      • 최근에 클라우드 컴퓨팅(cloud computing) 방식으로 서비스 제공하여 원격으로 접속 가능
        • 아마존, 구글, 마이크로 소프트가 제공하고 있는 서비스

2 ) 임베디드 컴퓨터 혹은 내장형 컴퓨터

  • 사용용도 : 특수한 임무를 수행
    • 각종기기에 내장 : 연산, 처리, 전달하는 등의 업무
    • 심장의 박동수 확인
    • 건물의 온도나 습도 조절
    • 이외에 자동차, 냉장고, 텔레비전등에 사용
  • 특징: 프로그램이 칩 내부에 구워져 있어서 새로운 프로그램 탑재 불가.

' > 운영체제와 정보기술의 원리' 카테고리의 다른 글

6 장 CPU 스케줄링  (0) 2023.12.18
5 장 프로세스 관리  (0) 2023.12.13
4장 프로그램의 구조와 실행  (0) 2023.11.29
3 장 컴퓨터 시스템의 동작 원리  (0) 2023.11.25
2장 운영체제 개요  (1) 2023.11.25

Ch 02 데이터 베이스를 이용한 앱만들기

 

2.2 앱 실행하기: Blueprint의 이용

  1. CRUD- Create(데이터 작성) Read Update Delete
    1. Blueprint?
      1. 앱을 분할하기 위한 플라스크 기능 ⇒ 앱의 규모가 커져도 간결한 상태유지
      1. Blueprint 단위로 템플릿/정적 파일을 나눌 수 있다.
      1. Blueprint 인수 설명인수 테이블 (page 92)
      1. Blueprint 객체 생성예
        # Blueprint 객체 생성 예
        sample = Blueprint(
            __name__,
            "sample",  # Blueprint 앱 이름
            static_folder="static",  # Blueprint 앱의 static 파일용 폴더 디렉터리(폴더 위치) ex styl.css
            template_folder="templates",  # Blueprint 앱의 템플릿 파일 폴더 디렉터리, xx.html 과 연결하기 위함
            url_prefix="/sample",  # Blueprint앱의 모든 URL의 맨앞에 추가하여 다른 앱의 경로와 구별 하기 위한 경로
            subdomain="example",  # Blueprint를 서브 도매인으로 하는 경우에 지정
        )
        
        # Blueprint 객체 등록
        app.register_blueprint(sample, url_prefix="/sample", subdomain="example")
    1. CRUD 모듈 앱 작성 예( 90page)
      1. from apps.crud import views as crud_views
        1. 현재 만든 apps 라는 폴더에서 curd 폴더에 있는 views.py 라는 파일을 호출
    1. 엔드포인트 만들기
      1. apps/crud/view.py 를 작성하고 여기에 crud 앱의 엔드 포인트 만
        from flask import Blueprint,  render_template   ------------------------------------- Q 
        #  Blueprint로 crud 앱을 생성한다
        		crud =  Blueprint(
        		"crud",
        		template_folder="templates",
        		static_folder="static".
        )
        #  index 엔드포인트를 작성하고 index.html을     반환한다
        @crud.route("/") 
        def index():
        	return render_template("crud/index.html")

2.3 SQLAlchemy 설정하기

  1. SQLAlchemy? O/R or ORM (Object-Relational Mapping)
    1. SQLAlchemy 가 python 코드를 SQL로 변환
      1. SQL코드를 쓰지 않고도 Python을 이용하여서 데이터베이스 조작가능.
  1. 확장 기능 설치
    1. pip install flask-sqlalchemy
    1. pip install flask-migrate
  1. 사용법 코드 ⇒ p. 100

2.4 데이터 베이스 조작

  1. model.py 에 유저 모델을 정의 (p.102) 하고 마이그레이션 함으로써 DB에 유저테이블 작성 가능
    1. 모델을 사용하기 위해서 apps/crud/__init__.py
      1. models.py 선언 import apps.crud.models
  1. flask db 관련 명령어를 파워셀에 입력하여서 데이터베이스 초기화 및 마이그레션하기
    1. flask db init
      1. 주소를 적는거라고 생각했는데 왜 숫자를 요구할까?
        File "E:\_CosmosMedic\스터디\Flask\venv\lib\site-packages\sqlalchemy\engine\url.py", line 893, in _parse_url
            components["port"] = int(components["port"])
        ValueError: invalid literal for int() with base 10: '\\_CosmosMedic\\스터디\\Flask\\local.sqlite'
      1. 해 ⇒ A code in page 100 수정 필요
        # 앱의 config 설정
        
        # app.config.from_mapping(
        #     SECRET_KEY="2AZSMss3p5QPbcY2hBsJ",
        #     SQLALCHEMY_DATABASE_URI=f"sqlite://{Path(__file__).parent.parent / 'local.sqlite'}",
        #     SQLALCHEMY_TRACK_MODIFICATIONS=False,
        # )
        
        import os 
        basedir = os.path.abspath(os.path.dirname(__file__))
        app.config["SECRET_KEY"] = "2AZSMss3p5QPbcY2hBsJ"
        app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + os.path.join(
            basedir, "database.sqlite "
        )
        app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
    1. flask db migrate 실행시 models.py 에 정의 된 테이블 명(users) 및 칼럼의 정보가 생성
    1. flask db upgrade 실행시 생성된 users 테이블 생성
  1. 생성된 데이터베이스는 vscode로 확인 가능
    1. VScode 에서 SQLite SQLite Viewer 설치
    1. local.sqlite 에서 확인가능
  1. SQLAIchenu를 사용한 기본적인 데이터 조작 방법은 p.107 참조

2.5 데이터베이스 이용한 crud 앱 만들기

  1. pip install flask-wtf <유효성 검증이나 CSRF에 대 처하기 위한 폼을 작성하는 플라스크 확장>
  1. 실습내용
    1. 사용자를 신규 장성하기 (p. 117)
    1. 사용자 일람 표시하기 (p. 125)
    1. 사용자 편집하기 (p. 127)
    1. 사용자 삭제하기 (p. 131)

2.6 템플릿의 공통화 상속

  1. jinja2 템플릿 엔진에는 HTML 공통의 템플릿 파일을 상속하는 기능소유
    1. base.html 을 생성하여서 HTML 파일에 중복되는 것을 작성하기 (p.133)
      <!DOCTYPE html> 
      <html lang="ko">
      	<head>
      		<meta  charset="UTF-8"  />
      		<!-- title을 상속처에서 구현한다 -->
      		<title>{% block title %}{%  endblock %}</title>
      		<link rel="stylesheet" href="{{ url_for('crud.static', filename='style.css') }}" />
      	</head> 
      
      	<body>
      		<!-- content를 상속처에서 구현한다 -->
      		{%  block content %}{%  endblock %}
      		<!--  상속처에 개별의 구현이 필요하면 여러 개를 사용 -->
      		<!-- 예시 -->
      		 <table> {%  block table%} {% endblock %} </table>
      	</body> 
      </html>
    1. base.html 사용법
      <!-- base.html 상속 해서  -->
      {%  extends "crud/base.html" %}
      {%  block title %}사용자의 일람{%  endblock %}
      
      <!-- body -->
      {% block content %}
      	<h2> base.html 사용법</h2>
      	.....
      	{%block table} 
      		<tr>
      			<th> ID </th> 
      			<th>사용자 명 </th> 
      			<th>메일주소</th>
      		</tr>
      {%  endblock %}
      

2.7 config 설정하기

  1. 앱 개발환경 등 각각의 환경에 설정해야 하는 config의 값이 환경마다 다르므로 직접기입하지 않고 config를 읽어들어버리는 방법을 학습
  1. 설정 방식
    1. from_object를 사용하는 방법 (p. 137)
    1. from_mapping을 사용하는 방법 (p. 139)
    1. from_envvar를 사용하는 방법 ( p. 140)
    1. from_pyfile을 사용하는 방법 (p. 141)
    1. from_file을 사용하는 방법 (p. 142)

 

' > Python Flask Web App 개발입문' 카테고리의 다른 글

Part 0 파이썬 플라스크 소개  (3) 2023.11.21
책관련 자료  (1) 2023.11.21

Part 0 파이썬 플라스크 소개

 

  1. 플라스와 장고 비교
    1. https://yscho03.tistory.com/109
    1. Flask(플라스크)
      1. 마이크로 웹 프레임워크
      1. 구축사례: werkzeug , jinja , MarkupSafe , ItsDangerous
    1. Django(장고)
      1. 풀스택 프레임워크
      1. 구축사례: Instagram, Mozilla, Nextdoor 및 clubhouse와 같은 일부 대형 웹사이트
  1. 환경 구축
    1. Anaconda Install
      1. Windows ⇒ anaconda 홈페이지에서 다운 후 설치
      1. Mac
        1. m1 → 홈페이지에서 다운 후 설치
        1. m2 → Anaconda에서 아직 지원을 하지 않음.
          1. homebrew 설치
            /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
            설치가 완료되면 마직막 안내 메세지 꼭! 확인해서 따라하기.
          1. Anaconda 설치
            brew install --cask anaconda
          1. Terminal에서 conda 명령어가 오류가 나면conda path 지정
            export PATH="/opt/homebrew/anaconda3/bin:$PATH"
          1. 터미널에서 바로 python 명령어가 가능하도록 conda 설정을 초기화zsh 쉘을 사용하고 있으므로 zsh 입력 쉘을 입력
            conda init zsh
            터미널을 다시 시작하면 앞에 (base) 가 뜨는 것을 확인 가능
          2.  
          3. 쉘 확인 방법은 echo $SHELL

    1. 가상환경 구축
      1. 배울때 마다 책이나 강의에서 요구하는 파이썬 버전이 다르므로 Anaconda 를 설치해서 버전에 맞는 가상환경 구축하는 것도 편리함.
        1. Anaconda Navigator 실행
          1. Environments →+create→ 가상환경명 및 버전 선택
          1. 여기서 생성된 가상환경명을 선택 → Not installed 선택 → promp 검색하여 설치 하면 선택한 파이썬 버전이 적용되어 있는 prompt 생성됨 (mac 에서는 적용 안됨)
        1. 터미널(커맨드) 창에서 가상환경 구축하는 법
          conda create --name 가상환경명 python=파이썬버전
          # 가상환경 실행
          conda activate 가상환경명
    1. 가상환경 구축
      1. Window powershell
      1. PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
      1. 원하는 위치에 폴더를 생성 → powershell open (터미널에서 열기)
      1. python -m venv 가상환경이름
      1. Anaconda 로 원하는 파이썬 버전을 생성했을 경우
        1. anaconda prompt 를 실행해서 원하는 폴더로 이동 후
          1. python -m venv 가상환경이름
      1. (가상환경 실행) venv\Scripts\Activate.ps1
        1. 가상환경폴더이름\Scripts\Activate.ps1
      1. (가상환경에 플라스크 설치 )(venv) PS > pip install flask
    1. VScode
      1. 홈페이지에서 컴퓨터 환경에 맞게 설치
      1. 설치 후 파이썬 확장기능 설치
      1. 터미널/쉘 에서 코드 체커및 포메터 라이브러리 설치
        pip install flake8 black isort mypy
        1. 설치 후 톱니바퀴 아이콘에서 설정을 클릭해서 검색 창에 아래에 있는 것을 입력해서 vscode 환경 설정 (page 28)
          1. flake8설정 - PEP8 에 따른 작성법의 코드인지 체크
            1. python > Linting:pylint enable 체크해제
            1. Python > Linting: Flake8 Enabled 체크
              1. 1행의 최대 문자수 기본값은 Hake8이 79개, black이 88개
                1. Flake8 Args라고 검색 창에 입력
                1. -max-line-leng나1=88 추가
          1. black 설정- PEP8 에 따른 작성법으로 코드 자동으로 완성
            1. Python > Formatting: Provider → 포메터를 black 으로 설정
            1. Editor: Format On Save
              1. 파일 저장시 자동으로 포맷기능 활성화
          1. isort 설정하기 - import 문을 PEP8에 맞게 자동으로 정렬
            1. Editor: Code Actions On Save
              1. Edit xxx.json 클릭 아래와 같이 수정
                "editor.codeActionsOnSave": {
                        "source.organizeImports": true
                    }
          1. mypt 설정
          1. 최종 → .vscode 에 있는 settings.json이 아래와 같게 됨
            {
            	"python.linting.flake8Enabled": true, 
            	"python.linting.flake8Args": [
            	"--max-line-length=88" ],
            	"python.formatting.provider": "black", 
            	"editor.formatOnSave": true, "editor.codeActionsOnSave": {
            	"source.organizelmports": true },
            	"python.linting.mypyEnabled": true
            }
          1. 혹시나 깃허브를 이용해서 버전 관리를 하면 커밋 대상에서 제외하기 위해서 아래를 입력
            curl -L http://www.gitignore.io/api/python,flask,visualstudiocode > .gitignore

 

<2023.04 월에 노션에 정리해둔 자료를 티스토리로 옮김 > 

 

예제 코드및 다운로드 링크

  1. 부록 데이터 다운로드 링크
  2. 역자 운영 네이버 카페
  3. Github: https://github.com/ml-flaskbook/flaskbook

참고할 만한 사이트

https://flask.palletsprojects.com/en/2.2.x/quickstart/#

 

Quickstart — Flask Documentation (2.2.x)

Quickstart Eager to get started? This page gives a good introduction to Flask. Follow Installation to set up a project and install Flask first. A Minimal Application A minimal Flask application looks something like this: from flask import Flask app = Flask

flask.palletsprojects.com

https://flask-docs-kr.readthedocs.io/ko/latest/testing.html

 

Flask 어플리케이션 테스트하기 — Flask 0.11-dev documentation

이 문구의 기원을 정확하게 알수는 없지만, 이것은 진실에 가깝다. 테스트되지 않은 어플리케이션은들은 기존 코드의 개선을 어렵게 하며 프로그램 개발자들을 심한 편집증환자로 만들어 버린

flask-docs-kr.readthedocs.io

 

+ Recent posts