웹 프로그래밍

    HTTPS/SSL 적용 (Let's encrypt)

    let's encrypt로 인증서를 발급하고 만료가 3개월이기 때문에 이에 맞춰 갱신 자동화까지 시도해보도록한다. * Application:Docker on Ubuntu 20.04 x64 * url : oconnect.kr > /var/log/letsencrypt/renew.log (분 시 일 월 요일) => 매월 1일 4시 1분에 갱신하고싶음. 1 4 1 * *

    Real-time Django with Channels

    필요해서 정리해본다. Django3는 asynchronous view 나 middleware를 지원하지 않는다. 하지만 Django Channels를 사용하면 연결과 소켓을 비동기적으로 처리하는 것이 가능하다. https://channels.readthedocs.io/en/latest/index.html#django-channels Django Channels — Channels 3.0.3 documentation Channels is a project that takes Django and extends its abilities beyond HTTP - to handle WebSockets, chat protocols, IoT protocols, and more. It’s built on a Pytho..

    AWS 요금정리

    EC2를 사용할 때 가장 흔하게 t2.micro 프리티어를 사용한다. cpu 성능을 제공하는 방식이 조금 특별하다. 일반적으로 CPU 성능이 정해져있어서 24시간 같은 성능을 제공할 것이라 생각하지만, T계열 인스턴스들은 기본 성능을 제공하다가, 유저들이 몰리거나 하는 등 기준 이상의 성능이 필요할 경우 버스트 기능이 동작하게 된다. 물론, 공짜는 아니고 인스턴스 사양마다 제공되는 크레딧이 다르고 그 크레딧이 남아있는 동안 버스트 기능을 사용할 수 있다. 기준 이하 성능 사용을 지속할 경우 크레딧이 쌓이고(한계치 있음), 그 이상의 성능을 사용할 경우 크레딧을 소모시킨다. 크레딧이 다 소모되면, 기준 이상의 성능을 발휘하지 못하고 성능은 급격히 떨어지게 된다. 평소에는 CPU사용률 저조하다가 특정 시간대..

    Django form에 대한 정리

    HTML HTML에서 은 웹사이트를 사용하는 사용자가 데이터를 입력할 수 있도록 하고 서버로 데이터를 보내는 역할을 제공한다. 폼은 2가지 정보를 담고 있어야한다. 1) 서버로 보낼때 어디로 보낼지 2) HTTP 방법 명시. 데이터를 보낼때 HTTP 방법은 POST방식으로 보내기 되어 POST를 입력해준다. 예를 들어 아래를 보면 submit이 트리거가 되어 사용자가 Log in 버튼을 누르면 데이터가 전송이 되는 것이다. DJANGO 폼을 핸들링한다는 것은 사용자를 위해 수많은 타입의 데이터 항목들을 필요로하고 화면에 보여야하며 이런 값들은 다시 서버로 보내진다. 이후에도 값에 대한 유효성겁증을 필요로 하며 검증 이후 데이터를 처리하는 로직도 필요하다. 장고 폼은 이런 작업에 대한 단순화와 자동화를 제..

    Django Transaction

    트랜잭션(Transaction)이란 데이터베이스의 상태를 변환시키려는 작업의 단위를 의미한다. 트랜잭션의 목적은 데이터베이스 완전성(integrity)의 유지에 있다. 데이터베이스를 저장하고 수정하는 여러작업을 하나의 쿼리로 처리할 수 없기 때문에 여러개의 쿼리로 나누어 실행하는데, 그 결과의 원자성을 보장하기 위해 동일한 DB connection 객체를 이용하는 기술이라 볼 수 있다. 즉 하나의 실행단위로, 존재하는 중간 과정들에 대해서 모두 성공하면 데이터베이스의 상태가 변하게 되고, 중간에 실패하면 기존에 작업들 모두 RollBack된다. Transaction의 4가지 특성 (ACID) 원자성 (Atomicity) 모두 실패하거나, 모두 완성되거나 둘 중 하나의 상태만 존재한다. 100개 명령어로 ..

    GET과 POST 정리

    현재 이해하고 있는 내용과는 별개로 뭘 언제써야하는지는 계속 확 와닿지를 않는다. 간단하게 알고있는 부분은 아래와 같다. GET과 POST는 HTTP 프로토콜을 이용해 서버에 데이터를 전달할때 사용하는 방식이다. GET은 주소뒤 ? 뒤에 값이 붙어 전달되고 POST는 body안에 보내진다 GET은 URL뒤에 값이 붙는거기때문에 길이제한이 있지만 POST는 그렇지않아 많은 데이터를 보내기 적합하다. 주소뒤에 붙어서 가는건 GET, form이용해서 submit하는건 POST 하지만 여기서 고민하고자하는것은 그래서 언제 GET쓰고 언제 POST쓰는가? 이다. 사실 글을 작성하는 정도면 POST, 그럭저럭해보이면 대충 GET을 쓰면 되겠다 싶었다. 하지만 용도구분없이 혼용하는 일이 잦아지기전에 구분해두려한다. ..

    Django Model - OneToOneField

    * OneToOneField와 ForeignKey의 차이 OneToOneField와 ForeignKey(model, unique=True)는 개념적으로 같다. 둘의 차이는 역관계(reverse relationship)에 있다. One-to-one 모델의 역참조는 하나의 객체(single object) 를 반환하지만, ForeignKey의 역참조는 QuerySet 을 반환한다. OneToOneField 언제쓰나? 예를 들어 1명의 유저는 하나의 프로필만을 가져야한다고 강제한다면 사용할 수 있다. ()첫번째 테이블이 User, 두번째 테이블은 Profile. 두번째 테이블은 반드시 첫번째 테이블과 한번만 매칭된다. class Profile(models.Model): user = models.OneToOneF..

    [AWS (5)] AWS HTTPS 설정

    AWS에서 LOAD Balancer를 만들어 HTTPS를 설정해줄 수 있다. LOAD Balancer란? 서버가 처리량이 많아져 용량이 필요하거나 성능개선이 필요할 때 서버를 여러대로 scale out하는 형식을 보강을 많이 하는 추세이다. 여러 서버를 구현함에 있어 중요한것은 서버가 모두 정상작동할 수 있도록 부하를 분산해주는 것이 중요하다. 이것이 load balancer이다. AWS EC2 > 로드밸런서 > 로드밸런서 생성 > HTTPS 선택 1단계 ) 이름설정, 리스너에 HTTPS 추가, 가용영역 선택 2단계 ) 보안설정 구성 인증서 자동생성 3단계 ) EC2보안그룹에 해당하는 그룹을 선택 4단계) 5단계) 인스턴스를 등록된 항목에 추가 > 검토 > 생성 Route53 서비스에서 새로운 레코드 생..

    [AWS (4)] AWS 도메인 연결

    AWS Route 53 > 호스팅 영역생성 > 생성된 네임서버 가비아에서 등록 > 레코드생성 > 값에 EC2인스턴스 IP 입력

    [AWS (3)] AWS 기반 Stack 배포

    1. docker secret 생성 MYSQL_ROOT_PASSWORD MYSQL_PASSWORD DJANGO_SECRET_KEY 2. 서버에 nginx.conf 올려주기 a) 접속 vultr에서 호스트와 비밀번호를 줬던 방식과 달리 pem파일을 이용해야한다. filezilla 좌측상단 사이트관리자 > new site > 프로토콜: SFTP > 호스트 입력, 포트22, 사용자 ubuntu, 로그온 유형: 키파일 b) 접속상태로 home/아래에 파일을 만들어주려하나 관리자권한이 없어 직접 생성이 불가. CLI에서 생성 ubuntu로 접속해 /home으로 이동. 파일 생성 sudo mkdir django_course ubuntu 유저에 대해 django_course에대한 관리자권한 부여 sudo chmod ..