Develop/Web & Framework
-
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/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/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..
-
Develop/Web & Framework 2020. 9. 20. 15:58
저는 지금 에서 서비스를 개발 중인데요😎 유저가 악성 유저에 대한 신고를 접수하면, 관리자인 우리 팀에게 바로 알림이 오도록 하는 기능이 있으면 좋겠다! 라는 생각이 들었고 마침 협업 툴로 slack을 사용하고 있었기에, slack bot을 이용해보기로 했습니다! 코드 몇 줄로 아주 간단하게 사용이 가능해요👍🏻 0. 라이브러리 설치하기 파이선에서 slack을 사용하기 위해 slacker 라이브러리를 설치합니다 $ pip install slacker 1. Slack API 사이트에서 token 발급받기 Slack API 사이트에 접속하여 bot을 사용할 workspace를 지정하고, app 이름을 설정해줍니다 그 다음, 지정한 workspace에서 app을 추가해주면, 이렇게 "xoxb-__로 시작하는 A..
-
Develop/Web & Framework 2020. 8. 3. 17:25
API를 사용하여 Django에서 지도를 구현해보는 실습입니다! 먼저, 가상환경을 생성하고, 실행해줍니다. $ python -m venv myvenv $ source myvenv/Scripts/activate //mac $ python3 -m venv myvenv $ source myvenv/bin/activate 장고를 설치해준 뒤, $ pip install django //mac $ pip3 install django 장고 프로젝트를 생성하고 지도를 위한 app을 만들어줍니다! $ django-admin startproject [myproj]//프로젝트 생성 $ cd [myproj]//생성한 프로젝트 폴더 안으로 이동 $ python manage.py startapp [appname]//app 생성 ..
-
Develop/Web & Framework 2020. 7. 30. 05:15
새로운 언어에 대한 백그라운드 지식도 없이 프로젝트를 시작하면서 그 때 그 때 필요한 문법들을 익히는 방식으로 언어를 배우니까 삽질도 두 배, 머릿 속에서 여러 개념들이 얽히는 건 덤이다... 오늘은 어제 꽤나 애를 먹었던 viewController간의 화면 전환. swift에서 view를 전환하는 방식에는 여러 가지가 있다. 1. 다른 ViewController를 호출(Present)하는 방식 2. NavigationController를 사용한 화면 전환(Push/Pop) 3. storyboard에서의 segue 1. 다른 ViewController를 호출(Present)하는 방식 다른 ViewController를 Modal로 띄우는 방식이다. 현재 위치한 View에서 해당 버튼을 누르면, 다른 vie..