8 Fri

TIL & Discover

[배프의 오지랖 파이썬 웹프로그래밍]

백엔드 개발자도 자신의 개발 내용을 보여주기 위해 프론트 지식을 쌓을 필요가 있다는 것을 알았다. 장고를 통한 웹 프로그래밍을 통해 프론트 지식 향상이 목적이다.

책의 내용은 본인의 입맛대로 요약 및 변형하여 기록하며 자세한 내용을 확인하고 싶다면 구매를 추천한다.

#1 웹프로그래밍이란?

인터넷

  • 전 세계에 걸쳐 원거리 접속이나 파일 전송, 전자 메일 등의 데이터 통신 서비스를 받을 수 있는, 컴퓨터 네트워크의 시스템

  • 핵전쟁 상황에서도 커뮤니케이션이 가능하게 설계했던 아파넷이 인터넷의 최초 기원

  • 이후, 미국과 여러 나라에서 자체적으로 네트워크를 만들기 시작했고 데이터 교환방식을 통일하기 위해서 TCP/IP 공동 프로토콜이 만들어졌다.

웹 사이트

  • 도메인 이름이나 IP주소, 루트 경로만으로 이루어진 일반 URL을 통하여 보이는 웹 페이지들의 이미 있는 묶음이다.

  • 웹 브라우저를 통해 사이트 주소를 입력해서 접속하는 모든 페이지가 웹사이트.

웹 프로그래밍

  • 웹 사이트 혹은 웹 페이지를 만드는 과정

  • HTML, CSS, JS와 같은 웹 브라우저 단에서 동작하는 코드와 Python, Ruby, PHP, Java 등 서버 컴퓨터 쪽에서 동작하는 코드를 작성한다

  • 브라우저 단에서 동작하는 코드를 작성하는 것을 프론트엔드 프로그래밍이라고 한다. 클라이언트 사이드 프로그래밍이라고도 한다. 대부분 화면을 구성하는 코드를 작성하기 때문에 퍼블리싱이라고도 부른다. 프론트엔드에서는 HTML, CSS, JavaScript를 이용한다.

  • 백엔드 프로그래밍은 서버 쪽에서 실행되는 코드를 작성하는 것 서버 사이드 프로그래밍이라고도 한다. 현존하는 대부분의 언어로 백엔드 프로그래밍이 가능하며 최근 많이 사용 되는 언어에는 Python, Java, C#, Ruby, JavaScript, PHP 등이 있다.

  • 언어 자체로 웹 프로그래밍을 하는 것은 꽤 반복적이고 지루한 작업을 많이 해야 하고 이 빈도와 양이 상당하다. 이 비효율을 해결하기 위해 만들어진 도구가 프레임워크이다. 요즘은 프레임워크를 많이 사용한다.

  • Java는 Spring을, JS는 Node.js를, Ruby는 Ruby on Rails라는 프레임워크를 사용하고 PHP도 Laravel이라는 프레임워크를 사용한다.

웹 프레임워크

  • 풀스택 프레임워크와 마이크로 프레임워크가 있다.

  • 풀스택 프레임워크는 웹 서비스를 만드는데 필요한 다양한 기능을 모두 포함한다. 설치하자마자 기본적인 웹 서비스를 할 수 있을 정도로 편리하지만 커스터마이징이 비교적 어렵고 느리다.

  • 마이크로 프레임워크는 가볍고 빠르며 커스터마이징 하기 좋지만 기능 개발에 비교적 시간이 오래 걸린다.

웹 서버와 웹 애플리케이션 서버

  • 프레임워크를 활용하거나 웹 서비스를 만들면 특정 컴퓨터가 웹 애플리케이션이 동작하고 있어야만 사람들이 이용할 수 있는데 이 컴퓨터를 웹 서버라고 한다.

  • 이전에는 CGI(Common Gateway Interface)방식을 사용했는데 상당히 느리고 비효율적이다.

  • 이후 발전을 거쳐 웹 애플리케이션 서버 방식으로 발전했다.

  • Java의 경우 톰캣이라는 웹 애픨리케이션 서버를 사용하고 파이썬 장고나 루비 레일즈 같은 경우는 Gunicorn같은 방식의 미들웨어 서버 방식으로 사용하고 있다.

  • CGI 방식에 비해 포크 방식으로 요청이 있을 때마다 프로그램을 별도로 실행하지 않고 요청을 한곳에 전달해 메모리를 절약할 수 있게 효율화되었다.

장고

  • 장고는 WSGI라는 미들웨어 방식으로 웹 애플리케이션 서버를 구동해 적은 리소스로 높은 효율성을 내기 위해 발전해가고 있다.

  • 장고는 파이썬 언어로 프로그래밍 하는 웹 프레임워크이다. 웹 프레임워크 중에서도 가장 빠른 시간내에 웹 서비스를 구현할 수 있는 프레임워크이다. 생산성이 좋다고 말하며 이 이유는 웹 서비스를 만들 때 필요한 대부분의 기능을 미리 정형화된 형태로 준비해뒀기 때문이다.

인프라

  • 웹 서버와 웹 애플리케이션 서버가 동작하려면 컴퓨터가 필요하다. 이 때 사용자 접속량에 따라 여러 컴퓨터가 필요하며 디비 서버, 이미지 서버 등이 별도로 동작한다. 이런 다양한 종류의 서버 컴퓨터들이 동작하는 환경과 이 환경의 형태를 인프라라고 부른다. 요즘은 클라우드 컴퓨팅이라고 해서 인프라를 가상화를 통해 구성한다.

  • 예 : CDN - 로드밸런스 - 웹서버

  • CDN은 Content Delivery Network 라고 불리는 서비스로 세계 곳곳에 컴퓨터를 두어 사용자의 요청을 대비한 캐시 시스템을 미리 설정하는 것(실제로 캐시와는 살짝 다르다). 자주 열리는 고화질 이미지는 이 CDN에 미리 저장해두어 실제 통신에서 응답 시간을 줄인다.

  • 한 대의 웹서버가 동시접속자 10명을 감당하다가 30명이 되었을 때 웹 서버 사양을 높이는 방식을 업 스케일링, 컴퓨터를 3대로 늘리는 것을 아웃 스케일링이라고 한다.

#2 장고 시작하기

1. 파이썬 설치

2. 파이참 설치

3. 기본 프로젝트 만들기

가상환경 세팅

  • 프로젝트 생성시 New environment using : Virtualenv 로 설정

장고 설치

  • pip install django

프로젝트 생성

  • django-admin startproject config .

  • .은 현재 폴더를 의미하며 현재 폴더에 파일들을 만들겠다는 의미

  • 프로젝트를 만들면 config 폴더가 생기고 manage.py 파일이 생성된다.

데이터베이스 생성

  • python manage.py migrate

  • DB를 초기화하면서 DB 파일을 생성한다.

  • db.sqlite3 가 생성된 것을 알 수 있다.

프로젝트 구조

  • config 폴더 : 설정 파일과 웹 서비스 실행을 위한 파일이 들어있다. config라는 이름을 사용할 필요는 없으며 생성한 후 변경하려면 매우 귀찮으니 생성할 때 잘 결정하는 것이 좋다.

    • init.py : python3 에서는 불필요한 버전이다. python2 와의 호환을 위함

    • settings.py : 프로젝트 설정에 대한 다양한 내용이 들어있다.

      • BASE_DIR : 프로젝트 루트 폴더이며 하위를 탐색하는 일을 빈번히 수행하기 때문에 변수로 미리 설정

      • SECRET_KEY : 다양한 보안을 위해 사용하며 세션 값의 보호나 비밀번호 변경 시 사용되는 보안 URL을 만드는 일 등에 사용된다. 임의로 변경하면 로그인이 풀리니 조심.

      • DEBUG : 디버그 모드를 설정. True일 경우 다양한 오류 메시지를 확인 가능하며 배포시에는 False로 바꿔야 내부 에러가 공개가 되지 않는다. 공개되면 악용에 소지가 있음

      • ALLOWED_HOSTS : 현재 서비스의 호스트를 설정. 개발 시에는 비워두고 사용하며 배포시에는 '*' 이나 실제 도메인을 기록한다. (실제 도메인을 기록하기를 권장한다. '*' 은 위험 => DNS Rebinding을 막기 위함) DEBUG = False 일 때 이 값이 비어있으면 서비스 시작을 할 수 없다.

      • INSTALLED_APPS : 프로젝트에서 사용하는 앱의 목록을 기록하고 관리

      • MIDDLEWARE : 장고의 요청/응답 사이에 실행되는 특수한 프레임워크를 관리하며 주로 보안에 관한 내용이 많다.

      • ROOT_URLCONF : 기준이 되는 urls.py 파일의 경로를 설정한다.

      • TEMPLATES : 장고에서 사용하는 템플릿에 관한 설정

      • WSGI_APPLICATION : 실행을 위한 WSGI 어플리케이션을 설정

      • DATABASES : DB 설정

      • AUTH_PASSWORD_VALIDATORS : 비밀번호 검증을 위한 설정.

      • LAUGUAGE_CODE : 다국어에 관한 설정

    • urls.py : 특정 기능을 수행하기 위해 접속하는 주소 URL을 설정하고 기록한다. 이 파일은 최초로 탐색되는 기준이 되는 URL 파일이다.

    • wsgi.py : 웹 서버와 장고 사이에 통신 역할을 담당하는 WSGI 어플리케이션 구동을 위해 사용되는 파일이다. Web Server Gateway Interface의 약어로 Nginx나 Apache 같은 서버 컴퓨터에서 사용자의 요청을 받아서 처리한다. 중간 역할자로서 역할을 한다. 중간 역할자 없이는 효율적으로 요청을 전달할 수 없고 특정 언어로만 웹 서비스가 제작되지 않기 때문에 여러 언어로 된 프로그램과 통신해야 하기 때문이다.

  • venv 폴더 : 프로젝트 구동을 위한 가상환경 폴더

  • db.sqlite3 : SQLite3 DB 파일. SQLite를 사용하지 않으면 필요 없다.

  • manage.py : 장고의 다양한 명령어를 실행하기 위한 파일이다.

장고 기본 명령들

  • django-admin startproject : 장고 프로젝트를 만드는 명령어. django-admin으로 이후 명령들을 실행할 수 있지만 보통 python manage.py를 이용한다

  • startapp : 프로젝트에 앱을 새로 만들 때 사용한다

  • makemigrations : 어플리케이션에 변경 사항을 추적하여 DB에 적용할 내용을 정리한다. 보통 앱 안에 있는 모델의 변경 사항이 있을 때 주로 사용한다.

  • sqlmigrate : 실행할 SQL 명령문을 출력한다. 어떤 명령문을 실행할지 확인할 때 사용하며 튜닝이 안된 쿼리나 슬로우 쿼리 여부를 확인할 수 있다.

  • migrate : 실제 변경사항을 DB에 반영한다.

  • showmigrations : 프로젝트의 DB 변경사항 목록과 상태를 출력한다.

  • runserver : 테스트 서버를 실행한다.

  • dumpdata : 현재 DB의 내용을 백업할 때 사용한다.

  • loaddata : 백업 파일로 DB 내용을 복구할 때 사용한다.

  • flush : DB 테이블은 두고 내용만 전부 삭제한다.

  • shell : 장고 쉘 실행한다.

  • dbshell : DB에 직접 접근할 수 있는 쉘 실행. 장고 어플리케이션에 문제가 있지만 관리자 페이지에 접근할 수 없을 때 보통 shell을 이용해 DB를 수정하고 SQL 구문을 이용해 직접 수정할 때 dbshell을 사용한다.

  • createsuperuser : 관리자 계정을 생성한다.

  • changepassword : 계정의 비밀번호를 변경한다.

디자인 패턴

  • 웹 프로그래밍은 백엔드, 프론트, 기획자, 디자이너, DB엔지니어 등 다양한 영역의 사람들이 일하기 때문에 실제 발생하는 문제를 해결하기 위해 디자인 패턴을 사용한다. 프론트 코드와 백엔드 코드의 분리 그리고 로직과 DB의 분리

  • 장고에서는 이를 특별한 패턴 이름 MTV라고 부른다.

MVC & MTV

  • MVC : Model-View-Controller

    • Model : DB의 구조를 결정

    • View : 사용자에게 보여지는 UI 부분

    • Controller : 기능, 로직을 담당. 넘겨받은 데이터를 어떻게 가공하고 결과를 어떻게 돌려줄지 결정하는 부분

  • MTV : Model-Template-View

  • 각 위치에 있는 단어끼리 같은 역할을 한다.

    • Model - Model, View - Template, Controller - View

앱 생성

  • python manage.py startapp app_default

    • models.py : DB의 명세를 관리한다. 모델은 클래스로 만들어진다. 클래스의 이름이 테이블 이름이 되고 클래스의 속성들이 컬럼이 된다. 속성의 값이 컬럼의 데이터 타입과 제약사항을 결정하며 SQL을 모르더라도 DB접근이 가능하도록 ORM(Object Relational Mapping)을 제공한다.

    • admin.py : 모델이 제대로 만들어졌는지 확인하거나 특별한 기능을 추가할 때 admin.py에 해당 내용을 작성하면 된다.

    • views.py : 페이지를 만들 때 필요한 파일이다. 대부분의 프로그래밍 작업은 뷰를 만들고 수정하는 일이다. 클래스형 뷰와 함수형 뷰 두가지로 이루어져있다.

    • urls.py : views.py 에 어떤 기능을 만들면 해당 기능은 URL을 통해 호출해야 한다. 특정 URL이 특정 view를 동작한다는 정의를 하기 위해 작성하는 파일이다.

    • templates : 보통 HTML 파일이 들어있다.

관리자 계정 생성

python manage.py createsuperuser

사이트 확인을 위한 서버 실행

python manage.py runserver

  • 127.0.0.1:8000 이라는 주소로 접속하여 확인 가능

[Statistics 110]

해당 강의는 https://www.edwith.org/harvardprobability/lecture/29349/에 무료로 업로드 되어 있다. AI스쿨에서 배운 확률과 통계를 내가 못따라가서 따로 공부하려고 한다.

하루에 1강씩 들어서 총 34번의 수강 계획을 하겠습니다! (한 강의가 무려 50분 ㅠ_ㅠ 바쁘다)

Present Part [1 / 34]

1강- 확률과 셈 원리 (Probability and Counting)

표본공간

어떤 실험에서 가능한 모든 경우의 집합. 이 실험 = Experiemnet을 거대하게 봐야 하는데, 모든 일이라고 생각하면 된다. 실험을 시작하기 전까지는 결과를 알 수 없고 실험을 시작하면 결과가 도출된다. 포괄적으로는 모든 일이 표본 공간이라고 할 수 있다.

사건

표본공간의 부분집합.

확률

P(A)는 A가 발생한 확률이다. P는 확률을 의미하고, A는 사건이다.

  • 간단한 확률의 정의 : #원하는경우의수#모든경우의수 \frac {\# 원하는 경우의 수} {\# 모든 경우의 수}

  • ex) 동전 두개를 던져 둘 다 두시면이 나올 확률 : 1 / 4

  • 단순한게 원하는 경우의 수를 세고 전체 경우의 수를 세어 나누고 있다.

  • 동전 던지기는 공정한 사건이다. => 앞뒷면이 나올 가능성이 동일하다.

  • 이제부터 다루는 모든 사건들은 언급이 없는 이상 등장 가능성이 동일하다

  • 주사위는 정육면체이므로 모든 면이 나올 가능성은 1/6 이지만 주사위가 만들어질 때 무게중심이 다르게 만들어졌을 수도 있음. => 엄격한 가정이 필요하다.

해왕성에 지능을 가진 생명체가 존재할 확률은 얼마나 될까?

  • 있다 50%, 없다 50% 이므로 1/2 이다.

  • 무언가 이상함이 느껴진다. 최소한 생명체가 있을 확률보다는 낮아야 하기 때문이다.

  • 확률을 가정함에 있어 타당한(확실한) 이유가 있어야 한다

셈, Counting

알아야 할 두 가지 법칙이 있다.

곱셈법칙

  • 특정한 실험에 적용된다.

  • 다음과 같이 가정한다.

    • n1 n_1 개의 실험이 가능하다.

    • n2 n_2 개의 실험이 가능하다.

    • n3 n_3 개의 실험이 가능하다.

    • ...

    • nr n_r 개의 실험이 가능하다.

  • 아이스크림이 있다. 3가지 맛이 있다. 초콜릿, 바닐라, 딸기이다. 와플형 또는 콘형이 있다.

  • 맛을 선택하고 모양을 결정해도, 또는 그 반대로 해도 항상 6가지의 경우가 나온다.

  • 따라서, 백만가지의 수형도가 있더라도 작은 수형도를 이해하면 큰 수형도를 해석할 수 있다.

또 다른 예를 든다. 포커에서 5장의 카드를 가지고 풀하우스가 나올 확률

  • 기본적으로 카드는 52장의 카드로 이루어진다. (카드는 잘 섞인 상태 = 카드를 뽑는 행위는 공평)

  • 52장 중 5장을 가져야 하고 이 카드가 풀하우스의 조건을 만족해야 함

  • 풀하우스 조건 : 세 장의 같은 숫자와 또다른 두 장의 같은 숫자

  • 총 경우의 수 : (525){52 \choose 5}

  • 원하는 경우의 수 : 13(43)12(43) 13 {4 \choose 3} 12 {4 \choose 3} 13 종류 중 한 종류 뽑기 그리고 처음 뽑은 한장을 제외하고 한 종류 뽑기

n개중 k의 수를 고르는 경우의 수를 이항 계수라고 부른다. 선택의 경우의 수에 사용되며 순서에 상관없이 뽑는다. 만약 순서가 중요해진 다면?

표본 (Sampling)

사물이나 사람 등의 집단

표본표

복원 : 설문조사를 할 때 사람을 한 명 선택했더라도 이 사람이 다시 설문조사를 할 수 있다는 특성

n개의 객체 중 k개를 선택하는 행위 (외울 필요 없이 이해하라)

  • 복원 가능, 순서 고려(A) : nk n^k

  • 복원 불가능, 순서 고려(B) : n(n-1)...(n-k+1)

  • 복원 가능, 순서 미고려(C) : (n+k1k) {n+k-1 \choose k}

  • 복원 불가능, 순서 미고려(D) : (nk) {n \choose k}

[인공지능을 위한 선형대수]

해당 강의는 https://www.edwith.org/linearalgebra4ai/joinLectures/14072에 무료로 업로드 되어 있다. AI스쿨에서 배운 선형대수를 내가 못따라가서 따로 공부하려고 한다!

Present Part [1 / 5]

선형대수의 기초

스칼라

  • 숫자 하나.

벡터

  • 숫자들의 순서가 있는 리스트

  • 순서가 없는 리스트는 set이라고 한다

  • 보통 벡터는 컬럼 벡터를 많이 사용할 것.

매트릭스

  • 행렬이고 보통 2차원 행렬을 의미한다.

  • 가로줄을 행 또는 row라고 표현하고 세로줄을 열 또는 column 이라고 한다.

  • 매트릭스의 사이즈는 행 x 열로 표현하며 '행 by 열'로 읽는다.

컬럼벡터

  • n x 1 형태의 벡터이다.

  • 로우 벡터를 표현할 때는 transpose 연산을 사용하여 표현한다. 이 때 사이즈는 1 x n

매트릭스 용어

  • Square matrix : size n x n

    • e.g. B = [1245]\left[\begin{array}{rrr} 1&2\\ 4&5\end{array}\right]

  • Rectangular matrix : size n x m

    • e.g. A = [123456]\left[\begin{array}{rrr} 1&2&3\\ 4&5&6 \end{array}\right]

  • Transpose of matrix : mirroring across the main diagonal

    • e.g AT A^ T= [142536]\left[\begin{array}{rrr} 1&4\\ 2&5\\ 3&6\end{array}\right]

  • Aij A_{ij} : (i, j)th component of A. e.g. A21 A_{21} = 4

벡터/매트릭스의 연산 : 덧셈과 곱셈

  • C = A + B, 이 때 A와 B의 크기는 동일해야 한다.

  • aC = a * C : Scalar multiple

  • C = AB : Matrix-matrix multiplication, 이 때 A의 컬럼의 갯수와 B의 로우의 갯수가 같아야 한다.

    • 이 때 vector를 도출하면 outer-product, scalar를 도출하면 inner-product 라고 한다.

매트릭스의 교환법칙 : Commutative

  • AB != BA

  • AB가 정의되어도 BA는 정의되지 않을 수 있다.

    • BA가 정의되려면 A의 size가 m X n 일때, B의 size는 n X m이어야 한다.

    • m == n 이더라도 AB != BA

다른 특성

  • A(B + C) = AB + AC : Distributive

  • A(BC) = (AB)C : Associative

  • (AB)T=BTAT (AB)^T = B^TA^T : Property of transpose

  • (AB)1=B1A1 (AB)^{-1} = B^{-1}A^{-1}

[AI 스쿨 1기] 5주차 DAY 4

[AI 스쿨 1기] 5주차 DAY 5

깃북의 한글호환 문제점

사실 깃북을 포기하려고 깃허브블로그나 벨로그를 한창 알아보는 참이었다. 깃북에 피드백도 요청했고 다른 사람이 쓴 피드백도 보았는데 그다지 반영이 안되는 것 같아서 포기했다. 왜 포기하냐고? 한글 지원이 너무 안되기 때문이다. 다음이 안된다.

1. 두번째 글자부터 포커싱 소멸

안녕하세요를 치려면

을 치고나서 다시 마우스로 클릭한다음에

안녕하세요

를 이어나가며 타이핑해야 한다. 이게 무슨 일이고. 글자를 쓰려면 마우스를 사용해야 한다니. 근데 이게 한글에 한정이다. 영어를 쓸 때에는 큰 제약이 없는데 한글한테만 박하다.

English does not matter.

그래서 어쩔 수 없이

스페이스바를 한번 누르고 타이핑을 하는 꼼수를 쓰기로 해서 한동안 이렇게 작성했다. 근데 매번 귀찮고 성질난다.

2. 엔터 입력시 마지막 한글 소멸

말 그대로이다. 줄바꿈을 할 때 마지막 글자가 없어진다. 다음과 같은 느낌이랄까.

나는 학교에 가고 있었

그래서 정말 싫었

뒷 글자들이 사라지는 현상. 이게 무슨 일이고.

3. 엔터 입력 시 한번 더 엔터를 필요

엔터에 대한 문제는 여기까지가 아닌데, 한글을 입력하고 엔터를 누르면 엔터가 먹힌다(사라진다 표현이 적절하려나) 엔터를 꼭 한번 더 눌러야 되는 귀찮고 신경써야 하는 일이 생긴다. 결국 2, 3번 문제를 해결하기 위해서도 마지막에 스페이스바를 한번 더 누르고 엔터를 누른다.

이게 무슨 일이고.

4. 상당한 렉 발생과 한글 입력 오작동

이건 매번 다른 것 같은데 글을 쓰기 시작할 때도 렉이 발생하지만 주로 글을 어느 정도 썼을 때 렉이 발생한다. 이러면 문제가 뭐냐면 타자를 빠르게 못친다. 한 400-500타 정도의 속도에서도 렉이 걸린다. 이러면 어떤 문제가 발생하냐면 "나는 집에 갔다가 학원에 가려는데 우산을 놓고와서 다시 집에 갔다." 라는 문장을 빠르게 칠 때

아.. 첫글자 다시..

나는 집에 갔따가 ㅏㄱ원에 ㅏ려는데 우산을 놓고아서 다시 집에 갔

처럼 된다. 여기서 볼 수 있는 문제점은

  • 갔따가

갔의 ㅆ을 입력하고 shift가 남아있어서 다음 ㄷ 이 ㄸ이 됨

  • ㅏㄱ원에 ㅏ려는데

학원에 가려는데를 입력하려고 했는데. ㅎ과 ㄱ 어디

  • 놓고아서, 집에 갔(다)

ㅗ는 어디갔고 역시나 마지막 글자 사라짐

이렇다보니 글 입력할 때 타자속도도 제한을 받으면서 쳐야되고 렉도 걸리면서 각종 신경쓸 것은 다 신경쓰면서 해야하니 이거 쓸 수 있겠나?? 한달 반을 유지한 것도 대단한 일이다.

라고 생각해서 블로그 교체를 생각하고 있었는데 다른 블로그는 CSS 수정해야 되는 것도 많고 복잡한 것도 많아서 은근 정이 가지 않았다. 그리고 내가 GITBOOK을 쓰는 이유는

  • 잔디 만들기 (제일 중요)

  • 깔끔한 카테고리 구조 (이것도 꽤 중요)

  • 오른쪽 바에 H2부터 컨텐츠로 고정 (이건 쏠쏠히 중요)

인데 ..

그란데 말입니다.

너무 아쉬워 깃북에서 직접 Contact를 했고 20줄 가량의 호소몬을 제출했더니 한글 인터페이스를 고칠 수 있을 지 모르겠다는 불확실성을 내비추었고 결국 포기하려던 참에 파이어폭스로 해보라는 마지막 줄 발견.

깔기가 너무 귀찮아서 엣지랑 IE로 작성해봤는데 동일한 문제 발생. 파이어폭스는 다르겠어? 하고 포기한 뒤 깃허브 지킬테마 만지다가 성질나서 파이어폭스 설치.

5. 결론

파이어폭스는 한글 호환이 된다. 문제 1~3번은 완전히 해결이고 4번은 어느 정도 렉이 있긴한데 아무리 빨리 써도 글자가 사라지는 일은 발생하지 않는다 (타자 빠르게 치고 손떼면 원격으로 누가 타이핑 하는 것처럼 보임. 아 내컴이 안좋은건가) 그래서 다시 쓰게되었다. 끝. 다른 깃북 유저도 참고하면 될 것 같다. 구글링 검색 결과에는 깃북 한글호환에 대한 이슈를 다룬 글이 거의 없고 해결책은 하나도 없다.

Last updated

Was this helpful?