오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

Web Programming 53

[Docker] 자 떠나자 고래 잡으러 : Docker로 Django+Nginx 배포하기

서비스를 만들면서 어려운 점을 순위 매겨본다면 배포는 분명 세 손가락안에 들 것이다. 개발을 시작한지 얼마되지 않아서 클론 코딩이나 게시판 같은 어플리케이션을 만든 후 마주하는 암흑어둠의 흑막인 킹제네럴갓충무공카이사르알렉산더 악당같은 검은 터미널 창이 앞으로 길이 쉽지 않을 것을 보여주는 것 같다. 물론 배포가 어려운 것은 웹서버나 WAS의 내부적인 동작을 명확히 알지 못하기 때문일 것이다. 이런 어려움을 제외하더라도 배포는 결코 쉬운 과정이 아니다. 이번 포스팅은 배포의 어려움을 덜어줄 방법에 대해 소개할 것이다. 바로 도커를 이용한 Django(WAS) + Nginx(Web server) 배포다. 물론 도커가 배포의 어려움만을 덜어주는 기술은 아니다. 여러 장점 중 하나가 쉽게 배포할 수 있게 해주는..

[linux] 파일 원격으로 가져오기 (feat. scp)

종종 운영 서버같이 원격으로 떨어져 있는 서버로 부터 파일을 가져와야할 때가 있다. 매번 찾아서 쓰는게 귀찮아 아래와 같이 기록해둔다. scp -P 22 -r [계정명]@[주소]:디렉토리 다운받을 로컬위치 예시는 다음과 같다. scp -P 22 -r root@123.123.123.123:/home/somewhere/ /over/the/rainbow # -P는 포트를 작성하겠다는 의미 # -r은 파일 위치를 디렉토리로 알려주겠다는 의미

Web Programming 2021.05.26

[Django] python manage.py를 하면 무슨 일이?(runserver 편)

지난 글에서는 python manage.py를 작성했을 때 어떤 과정으로 명령어가 실행되는지 알아보았다. 이번 포스트에서는 python manage.py 명령어 중에 가장 많이 사용한다고 해도 무방한 python manange.py runserver 를 사용했을 때 어떤 일이 발생하는지 알아보겠다. 1. 코드 먼저 지난 글에서 python manage.py [파일이름]을 작성하면 해당 파일을 실행시켜준다는 것을 알았다. 이를 통해 python manage.py runserver를 실행시키면 runserver.py를 실행 시켜주는 것을 알 수 있다. runserver.py 코드는 아래와 같다. 가시성을 위해 메인 로직만을 적어놓았으며 자세한 코드를 확인하고 싶다면 아래 링크나 VS code에서 Go to ..

[장고백서] 필드에서 작성한 validator가 작동을 안할 때

필드에 validators를 선언해 해당 필드 값에 제한을 둘 때가 있다. 가령 이름에 공백을 포함하고 싶지 않다면 해당 기능을 아래와 같이 구현할 수 있다. #persons/models.py from django.db import models from .validators import space_validator class Person(models.Model): name = models.CharField("이름", max_length=100, validators=[space_validator,]) #persons/validators.py from django.core.exceptions import ValidationError def space_validate(value): if len(value.sp..

[Django] Form 동적으로 생성하기

현재 하고 있는 프로젝트의 요구 사항중에 admin에서 몇가지 설정을 통해 이벤트 랜딩페이지를 생성하는 부분이 있었다. 이벤트마다 수집하는 개인정보가 달랐기 때문에 수집 개인정보 항목(이름, 전화번호..등등)을 이벤트와 ManyToMany로 연결시켜서 이벤트마다 수집 개인정보 항목을 다르게 수집할 수 있도록 만들어 주었다. 일단 기한안에 완성해야했기 때문에 view에 모든 부분을 구현하고 배포한뒤 코드를 보니 개인정보를 받는 view나 django template 쪽의 코드가 지나치게 지저분해졌다. 이를 리팩토링하기 위해 form을 사용해서 이벤트마다 동적으로 폼을 생성할 수 있도록 만들어 주기로 했다. 이번 포스트에서는 정적인 form이 아닌 모델 마다 변하는 동적인 폼을 생성하는 방법에 대해 알아보도..

[postgresql] Ubuntu에서 postgresql 설치하고 외부 접속 열어주기

1. PostgreSQL 설치 apt-get을 업데이트하고 postgresql과 postgresql-contrib을 다운로드 받아준다. sudo apt-get update sudo apt-get install -y postgresql postgresql-contrib postgresql-contrib은 postgresql을 사용하기 위한 확장팩이라고 생각하면 된다. 2. 계정 및 데이터베이스 생성 postgresql을 다운받으면 자동으로 postgres라는 유저가 생성되는데 먼저 postgres로 postgresql shell에 접근할 수 있다. 만약 그냥 접근하려고 하면 아래와 같이 해당 유저가 존재하지 않는다고 나온다. 먼저 접속된 유저를 바꿔주기 전에 postgres 유저의 비밀번호부터 바꿔주자 아..

Web Programming 2021.03.19

[Ubuntu] Ubuntu에 redis 설치하고 포트 열어주기

Ubuntu에서 redis를 사용할 일이 있어서 설치와 외부 접속 허용 방법에 대해 적어 놓는다. 1. Redis 설치 sudo apt-get update sudo apt-get install redis-server 2. 레디스 데몬 실행 sudo systemctl start redis 실행하게 되면 아무 창도 뜨지 않으면 성공적으로 실행된 것이다. 만약 redis의 상태를 보고 싶다면 아래 명령어를 작성해주자 sudo systemctl status redis 3. 포트 개방 redis를 로컬로 사용하는 경우는 흔치 않다. 따라서 외부에서 접속할 수 있도록 포트를 열어줘야 하는데 그 방법은 아래와 같다. 먼저 redis 설정 파일을 열어주자 sudo vi /etc/redis/redis.conf 설정 파일..

Web Programming 2021.03.19

[postgresql] postgresql 명령어 모음

장고로 마이그레이션을 할 때면 종종 python manage.py dbshell을 이용해 직접 DB에 접근하는 경우가 있다. 이번 포스트에서는 이럴 때 필요한 postgresql 명령어에 대해 알아보겠다. 대괄호가 들어가 있는 명령어가 있는데 대괄호는 제외하고 작성하면 된다. 1. 접속 데이터 베이스 변경 \c [DBName] [Connection User] 예시 \c django_test test_db_admin 2. 목록 조회 명령어 (DB, 테이블, Sequence, Function, VIew) \list : DB 목록 조회 \dt : 테이블 목록 조회 \df : Function 목록 조회 \ds : Sequence 목록 조회 \dv : View 목록 조회 \du : User 목록 조회 3. 테이블..

Web Programming 2021.03.16

[postgresql] Mac에서 Postgresql 설치 하기

오늘은 Postgresql을 MAC에 설치하는 방법에 대해 알아보겠다. Postgresql은 Django와 자주 사용하는 데이터 베이스이다. 나의 경우에는 ArrayField를 사용하기 위해 Django에서 디폴트로 설치하는 sqlite 대신 Postgresql을 사용하려고 시도하였다. (물론 이 이유뿐만 아니라 장고 공식 문서에서 실제 배포 시 Sqlite를 권장하지 않는다.) 어쨌든 딴 소리는 차치하고 이제 본격적으로 Postgresql을 설치해보자! 1. Brew로 Postgresql 설치하기 일단 MAC에는 Window에는 없는 brew라는 멋진 명령어가 있다.(어그로..) 아래와 같이 마법의 주문을 터미널에 외워보자! 다운로드 될 것이다. brew install postgresql 다운로드 중 ..

Web Programming 2021.03.09