Develop
-
Develop/Web & Framework 2022. 12. 30. 21:02
기능을 추가하게 되어 모델을 변경해야 할 일이 생겼다. 테이블을 수정하고 migration을 적용하면서 dependency 오류부터 relation exists 오류까지 아주 난항을 겪었다. 사실 토이프로젝트를 진행했을 때는 migration이 꼬이면 그냥 전부 밀어버리고 다시 적용하면 그만이었다. 하지만 실제로 배포되고 데이터가 담겨 있는 db의 테이블을 수정하는 경우에서 이러한 1차원적인 방식으로 접근할 수는 없었다. 이 과정에서 다소 긴 삽질의 과정을 경험하며... 내가 migration에 대하여 정확히 이해를 하지 못하고 있음을 깨달았다. 💡 Migration이란? 일종의 database version control log라고 이해하면 될 것 같다. python manage.py makemigra..
-
Develop/DevOps 2022. 12. 16. 23:33
💡 Github Actions이란? Github Action은 build, test, deployment와 같은 workflow를 자동화할 수 있는 CI/CD 플랫폼으로, github repository에서 발생하는 모든 이벤트(push, pull request, merge 등)에 대하여 정해진 동작을 실행시키도록 할 수 있다. 진행중인 프로젝트에서는 docker compose를 이용해 서비스 컨테이너들을 관리하고 있다. 소스코드가 수정될 때마다 수동으로 컨테이너를 삭제하고 빌드하는 방식으로 테스트 서버를 운영하다가 Github action을 사용하여 CI/CD를 자동화해보기로 했다. 🤔 CI/CD 프로세스 설계해보기 다음과 같은 프로세스들을 자동화시키려 하였다. 1. 생성된 pull request에 대..
-
Develop/DevOps 2022. 9. 18. 22:12
🍏 Vargrant란? - OS를 프로비저닝하기 위한 도구로, VM을 생성하고 관리하기 위해 사용한다 - hostname, ip, service등의 환경을 손쉽게 구성하여 시스템을 사용할 수 있다 N개의 worker node를 생성하는 Vagrant file을 작성했다. 주석으로 자세한 설명을 기록하였다. 이제 vagrant up으로 파일을 빌드하면, 다음과 같이 ip를 할당하고, port를 포워딩하며 vm을 생성한다. 나는 N=3으로 3개의 worker node를 생성하였는데, 모두 running 상태로 잘 동작하고 있는 것을 확인할 수 있다. 쉘에서는 vagrant status 명령어로 확인할 수 있고, provider로 설정한 VirtualBox에서도 확인 가능하다. vb.customize(--gr..
-
Develop/Web & Framework 2022. 2. 6. 23:49
비밀 key를 평문으로 저장하는 플랫폼이 있을까? 없을것이다. 우리는 평문 데이터에 해시 기법을 적용하여 변환된 암호화된 데이터(digest라 부른다)를 사용한다. 해싱 기법은 단방향으로 적용되기 때문에, 복호화가 불가하다. 즉, 서비스에서 사용자의 비밀번호를 암호화하여 DB에 저장한 뒤에는, 관리자조차 raw한 비밀번호를 알 수 없다는 말이 된다! 이렇게 암호화된 데이터를 DB에 저장하면, 무결성이 보장된다는 것이 이론적인 개념이지만... 현실은 그렇지 않다. 복호화가 불가능한 것 뿐, 동일한 문자열에 특정 해싱 알고리즘을 적용하면, 그 digest는 항상 같은 값을 가지게 되지 않겠는가? 즉, 복잡하지 않은 문자열이나 사용자들이 자주 사용하는 문자열의 경우, 손쉽게 해싱을 무력화시킬 수 있는 것이다...
-
Develop/Web & Framework 2022. 1. 3. 23:24
migration 로그를 읽어보던 중, 다음과 같은 dependency를 발견했다. 장고 도큐먼트에 언급되어 있지 않아서 궁금해졌다. 🚀 django.contrib.auth의 User django.contrib.auth 에서는 유저를 정의할 수 있는, 인증에 관련된 모델을 제공해준다. 우리는 이 모델(가장 상위 모델은 User인데, 사실상 대부분의 속성은 AbstractUser 가 가지고 있다. 따라서 보통 AbstractUser를 상속하여 사용한다) 을 확장하여 서비스 내에서 customizing한 유저 모델을 생성하고, 이를 settings 변수인 AUTH_USER_MODEL에 지정함으로서 우리가 정의한 유저를 사용할 수 있게 된다. 인증에 관련된 모델이 상속되는 구조를 다이어그램으로 나타낸 것이다...
-
Develop/DevOps 2021. 10. 23. 16:41
AWS Community Day Online 2021 세션 수강! 인터넷 기반의 컴퓨팅을 Cloud라고 정의한다 1. AWS Network VPC (virtual Private Cloud) AWS 계정 전용의 가상 데이터 센터 (네트워크가 분리되어 있는 개인의 사설 network 센터 개념) region에 종속적 region 당 다수의 vpc 생성 가능 계정당 생성 가능한 vpc의 개수는 한정이 되어 있음 enterprise 환경에서는 다수의 vpc를 이용하는 경우가 다수 소규모 app의 경우 단일 vpc가 유리할 수도 있다! 1. 사용할 IP 범위 대역 구하기 CIDR notation 사용 ex) 172.16.0.0/16 (IP/subnet) 2. VPC 내부의 subnet 생성 subnet은 AZ에 ..
-
Develop/Web & Framework 2021. 10. 17. 19:41
장고는 하나의 프로젝트 내에 여러 개의 app이 존재하는 구조이다. python manage.py startapp [appname] 명령으로 app을 생성한 뒤, settings의 INSTALLED_APPS에 생성된 app을 등록해줌으로서 손쉽게 관리할 수 있다. 좌측의 이미지는 app을 생성하였을 때의 기본구조이다. root 디렉토리에 manage.py가 위치하고, app내에 각각 model, view, test, admin, migration 파일들이 위치하고 있다. 최근 새로운 사이드 프로젝트를 시작할 때도 해당 구조를 그대로 적용했었는데, 프로젝트 구조가 정리되지 않은 느낌이 있다는 피드백을 듣고 정말 고민을 많이 했었다. url과 setting을 개발용/배포용으로 분리하는 것 의외에 프로젝트 구..
-
Develop/Web & Framework 2021. 10. 17. 17:30
진행 중인 사이드 프로젝트에서 문자 인증 기능이 필요했고, Naver Cloud의 Simple&Easy Notification Service를 이용하기로 하였다. 프로젝트를 생성하고, 계정 인증 키를 발급받는 것까지는 어렵지 않았다. serviceId, accessKey, secretKey 세 종류의 key가 필요한데 헷갈리기 아주 딱 좋다. serviceId는 요청URL에 포함시킬 path parameter로서 사용되며, 서비스 프로젝트를 생성하는 즉시 발급된다. accessKey, secretKey는 네이버 클라우드 계정에 대한 인증키 값으로, 메뉴 > 마이페이지 > 인증키 관리 메뉴에서 발급받고 관리할 수 있다. 내가 지금까지 호출하여 사용해본 API들은 대부분 인증 key값만 raw하게 heade..