목록분류 전체보기 (101)
최용우
장고를 공부하다 아래와 같은 정규식 표현을 발견했다. r"[^>:]+):)?(?P[^>]+)>" 도대체 이게 뭐람? URL에서 정보를 캐내기 위한 정규식이다.urls.py에서 와 같이 경로를 설정하면 해당 url 숫자 부분을 integer 형태로 받아오겠다는 것이다.개발자를 참으로 편리하게 해주는 방법인데 그 원리가 궁금했다. 그중에서 ?:이것은 비캡처링 그룹이라고 한다.유명한 예시를 소개한다. import rematchObj = re.findall('(?:tom|pot)ato', 'tomato potato')print(matchObj)#출력 : ['tomato', 'potato']import rematchObj = re.findall('(tom|pot)ato', 'tomato potato')print..
나는 혼자서 작업하다보니 Git을 쓸일이 거의 없다. 그냥 혼자서 잔디 심고 뿌듯해 하는 정도. 배포는 AWS의 Lightsail을 이용한다. 그런데 노트북에서 작업한 코드를 Lightsail에 가져오려면 git을 사용해야 한다. $git clone "주소" 이건 모두 알고있다. 문제는 다음이다. 처음 클론을 하고 수정사항이 발생하면 어떻게 해야할까? 노트북에서 수정사항을 github(remote)로 푸시하고 Lightsail에서 pull을 하면 되지 않을까? 라고 생각했으나 틀렸다. 이유는 노트북과 Lightsail은 모두 같은 master 브랜치다. 한마디로 같은 컴퓨터로 인식한다는 것이다. 그래서 pull을 하면 안되고 fetch를 사용해야 한다. $git fetch --all $git reset ..
2022년 3월 5일(토) 정보처리기사 제1회 필기시험을 봤다. 저녁 6시에 가답안이 올라왔고 채점결과 합격이다. 1과목 : 80점 2과목 : 90점 3과목 : 70점 4과목 : 60점 5과목 : 65점 정보처리기사 필기는 타 기사시험에 비해 난이도가 쉬운편에 속한다. 평소에 프로그래밍을 꾸준히 했던 사람이라도 기본 개념을 모르면 풀수 없는 문제들이 있을 수 있기에 최소한의 공부가 필요하다. 어차피 대부분의 기사시험은 실기가 찐(진짜)이기 때문에 필기합격에 큰 의미를 둘 필요가 없다. 따라서 합격한 사람은 겸손히 실기를 준비하고 불합격한 사람은 낙담할 필요없이 다음회차를 준비하면 될 것이다. 실기는 온라인 강의를 수강할 계획이다. 준비방법은 2020, 2021년 2개년 기출문제만 3회독을 했다. CBT사..
로컬에서 작업 후 github remote에 push 한 뒤 aws lightsail에서 pull 했는데 발생한 오류. 원인은 lightsail(로컬)에서 수정한 내용이 commit 되지 않아서 발생. 가끔 단순한 오류를 수정하기 위해 lightsail에 직접 접근하는데 이때 소스코드를 수정하고 commit - push를 하지 않아서 그렇다. 어떻게 해결 할 수 있을까? 1. stash로 스택에 임시 저장한다. $git stash 2. pull 한다. $git pull origin master 3. stash(임시저장) 했던 것을 삭제한다. $git stash pop 4. 한번에 하는 방법 $git stash && git pull origin master && git stash pop
매번 gunicorn 서버를 키고 끄는게 귀찮다. 한개의 프로젝트라면 그러려니 하는데 프로젝트 개수가 늘어날 수록 귀찮다. 배포 자동화의 매우매우 기초 단계라고 생각하고 기록한다. $vi test 아무 이름의 파일을 만들어준다. #!/bin/bash pkill gunicorn sudo systemctl daemon-reload sudo systemctl start gunicornlottery.service sudo systemctl start gunicorntodolist.service sudo service nginx restart 첫줄에 bash 파일임을 선언하고 원하는 명령어를 순서대로 입력하고 vi를 닫아준다. $chmod 755 test 실행권한을 부여한다. $sh test 위 명령어로 실행하면..
클라이언트에서 받은 Json을 저장하고 싶다. 그러나 Json에는 해당 유저에 대한 정보는 없는 상황. 토큰을 활용하여 해당 유저에 대한 정보를 파악한 후 DB에 저장하고 싶을때 어떻게 해야하나. 내가 직면한 상황이다. 분명히 models.py에는 user에 대한 칼럼을 생성해 놓은 상황이지만 클라이언트에서 보내는 json에는 user에 대한 정보가 없다. 이럴 땐 serializer.py에 user 정보를 ReadOnlyField로 지정한다 username = serializers.ReadOnlyField(source='username.username') 그리고 views.py에 perform_create 함수를 오버라이딩 한다.(generic 클래스 뷰 사용시) def perform_create(se..
테스트의 중요성이 크다고 한다. 내가 만든 api가 잘 작동하는지 확인하기 위해서, 예상치 못한 오류를 잡아내기 위해서 테스트는 아무리 강조해조 지나치지 않다. 사실 나는 지금까지 insomnia라는 http request를 통해서 수동으로 테스트를 했다. 얼마나 비효율적인 방식인가. '프로그래머 = 효율' 이라고 생각했던 내가 만연하게 저지르고 있었던 잘못이다. 장고 프로젝트에서 app을 생성하면 tests.py가 딸려온다. 예제를 통해 알아보자. #tests.py class TestRegister(APITestCase): def setUp(self): self.url = "http://127.0.0.1:8000/api/register/" def test_post_user_data(self): self..
시리얼라이저를 공부하다 몇가지 테스트를 해보았다. 회원가입 기능이 포함된 Todo리스트 프로젝트의 일부이다. 게시판 모델에 username이라는 필드가 정의 되어있는데 이 필드는 User 모델의 외래키다. 처음에는 게시판 시리얼라이저를 아래와 같이 정의했다. class TodoSerializer(serializers.ModelSerializer): class Meta: model = todolist fields = ('date','username', 'title', 'repeat',) 그리고 게시글을 등록하려고 하니까 username : "this fields is required." 라는 오류가 뜬다. 분명히 fields 튜플에 'username'을 지정했고 모델에 저장 시 perform_create함..
나는 AWS lightsail 3.5$ ubuntu를 사용중이다. 근래 만들고 싶은 프로젝트가 많아졌고 동시에 여러개의 서버를 작동시키고 싶었다. 프로젝트마다 인스턴스를 구입하려면 돈이 많이 든다.(난 실제로 그렇게 해야하는 것인줄 알았다.) Nginx로 배포를 시작하면서(프론트 개발자에게 안정적인 api 제공) Nginx, Gunicorn 조합으로 하나의 인스턴스(1대의 컴퓨터)에서 여러개 프로젝트를 배포하는 방법을 공부했다. 구글링을 해보았으나 나의 문제를 명쾌하게 해결해 줄만한 자료는 보이지 않았다. 결국, stackoverflow에서 해답을 찾았다. 아래는 참조 링크다. https://stackoverflow.com/questions/62264100/serving-two-django-apps-wi..