■ 목표
- 카피 사이트(프로젝트) 완성(배포 후 추가 기능 구현 중)
- udemy 강의 영상(쇼핑 카트 만들기) 완성 (90%)_ AWS 배포로 전환 예정_
- 1일 1커밋(그동안 공부한 repository 에 주석 + 티스토리 블로그 포스팅)
- 프로그래머스 알고리즘 풀기
- 그동안 프로젝트한 저장소에 README.md 추가
udemy 강의 추가!!!(TDD & API 관련 강의)- (도서) 생각의 탄생 완독(~/.200p)
- (도서) 파이썬과 함께하는 자료구조의 이해
■ TIL(Today I Learned)
독서) 생각의 탄생
2019-04-18(목)
몸으로 생각하기, 감정이입, 차원적 사고, 모형 만들기
학습을 할 때는 5감으로 생각하여 공부해야 기억이 더욱 오래 간다고 한다. 가능하다면 코딩을 하면서도 내가 데이터가 된다고 생각해서 어디서 어떻게 흘러가는지 상상을 하면서 공부하는 방식을 습관들이도록 하자. 그리고 그 흐름을 놓치지 않고 블로그와 노트에 정리하여 수시로 보면서 자연스럽게 받아들이도록 하자. 인풋이 있으면 아웃풋이 있고, 버그와 같은 결과가 발생한다면 그것은 분명 어떠한 원인에 대해서 결과로 나왔을 것이니 아키텍처에 대한 이해를 게을리 하지 않고 이해하자.
2019-04-04(목)
관찰, 추상화, 형상화, 패턴인식, 패턴형성, 유추
모든 것에는 패턴이 있고, 그 패턴이 모여서 새로운 패턴을 형성한다. 즉, 공부를 할 때도 무작정 외운다기 보다는 각 카테고리를 분류
하고 패턴을 인식하는 것이 훨씬 더 깊은 학습 효과를 가진다.
유추라는 것은 하나의 사물을 보았을 때 받아들이기만 하는 것이 아니라 창의적으로 생각해내는 것이다. 창의력은 타고나는 것이 아니라 우리 생활에서도 충분히 훈련할 수 있는데 예를들면 머그컵을 보고 물을 담는 용도 말고 다른 용도가 있다면 무엇이 있을까? 처럼 다양한 시선으로 이해를 한다면 발전할 수 있다고 생각한다.
p. 209
"어떤 사물을 볼 때, '그것이 무엇인가'가 아니라 '그것이 무엇이 될까'에 착안해야 한다. 그래야 사물을 전혀 새로운 방식으로 활용할 수 있다."
(도서) 파이썬과 함께하는 자료구조의 이해
** 재귀함수로 호출하면 바로 이전의 노드는 스택프레임에 쌓여 대기상태에 있다가, 상위에 올라간 스택프레임이 종료되면 해당 스택프레임이 실행된다.**
이진트리에 대해서 공부
- 각 노드의 자식 수가 2 이하인 트리
- 이진트리는 1. 비어있거나 // 2. 비어있지 않다면 루트와 2개의 이진트리인 왼쪽 서브트리와 오른쪽 서브트리로 구성
- 이진트리의 형태
- 포화이진트리, 완전이진트리(또는 불완전한 이진트리)
- 리스트에 저장해야 효율적인 이진트리와 그렇지 않은 이진트리
- 완전이진트리(또는 포화이진트리)는 리스트에 꽉꽉 채워져있어(메모리에 순서대로 저장) 효율적이다.
- 그렇지만 편향이진트리는 리스트에 듬성듬성 값이 채워져있어(메모리에 듬성듬성 저장) 비효율적이다.
- 재귀함수로 호출
- 재귀함수로 호출하면 바로 이전의 데이터값은 재귀함수의 호출 위치에 머물러있다가, 재귀함수 호출값이 다음 코드로 넘어갔을 때 그 함수 호출 값을 처리한다......(말로 하니 어렵다)
- 스택프레임에 쌓이는 것은 재귀함수
- 레벨순회를 제외하고는 모두 스택 자료구조를 사용
- 함수의 재귀호출은 시스템 스택을 사용하므로 스택 자료구조를 사용한 것으로 간주
- 스택에 사용되는 메모리 공간의 크기는 트리의 높이에 비례
udemy 강의(TDD)
2019-04-07(일)
모든 테스트 코드 진행 완료
CBV 를 사용했을 때 특정 메서드에 대해서는 오버라이딩 한다는 개념은 있었지만 쿼리셋 자체를 가져온다는 생각은 안해봤던 것 같다.(물론 그럴 여력도 없었겠지만..) 결국 queryset = self.queryset 을 정의해서 queryset.filter()를 하게 되면 해당 쿼리셋을 가져오게 된다는 것은 나중에 써먹을 수 있을만한 팁이다.
2019-04-05(금)
메인 모델인 Recipe 모델을 통해 recipe 객체를 만들고, Many-To-Many 필드로 관련된 tags, ingredients 를 추가
MTOM 은 add 함수를 통해 필드를 채우기 때문에 recipe.tags.add(tag1) 과 같은 형식으로 recipe 객체에 필드값을 채움
self.client = APIClient() 를 통해 get 요청을 해당 url 과 recipe 객체를 함께 보냄
실제로 비교하고자 하는 값은 직렬화로 된 recipe 와 get 요청을 보낸 res 의 data 를 비교하여 테스트 코드를 작성.
django 에서 모든 objects 하나의 manager() 을 가지고 있다.
2019-04-03(수)
STATIC 과 MEDIA 파일
- STATIC 파일은 프로젝트에 종속되어 장고 프로젝트에서 지원한다.
- MEDIA 파일은 static() 메서드를 사용하여 STATIC 과 같이 프로젝트에 종속시킨다.
chmod(changemode)
r: 읽기(4)
w: 쓰기(2)
x: 실행(1)
소유주/그룹/나머지/
chmod755: 소유주 그룹은 모든 권한/그룹과 나머지는 읽고 실행할 수 있는 권한만 부여
2019-04-02(화)
PUT, PATCH 의 차이
- PUT
: 해당 모델의 모든 자원이 필요함
- PATCH
: 해당 모델에서 수정하고자 하는 부분만 필요로 함
하나의 테스트 코드 안에서 db 를 업데이트 하지 않으면 put/patch 모두 확인할 수 없다.
그렇기 때문에 object_name.refresh_from_db()
메서드를 사용하여 새로 갱신이 필수
Many-To-Many 필드는 2개의 모델 사이에 중계 테이블이 존재하고,
해당 테이블에 객체를 추가하기 위해서는 add, remove 를 사용한다.
배포 과정
2019-04-10(수)
- 장바구니 총 합산 가격 기능 추가
- 게시판 모델, 게시판 모델의 댓글 기능 추가(현재 admin 페이지에서 보여지기까지만 함)
* 꾸준히 하다보니 뭔가...전보다 더 잘 이해가 되는 느낌이다. 아직까지는 큰 무리없이 코딩 진행 중(오늘 커밋 9개!!)
2019-04-08(월)
댓글 모델에 CharField(choices=RATING_CHOICES) 추가.
deploy 하면서 static 파일이 없다고 해서 .gitignore 를 찾아보니 static 이 추가되어 있는 것을 확인..문제는 SECRET_KEY 가 아니라서 git 에 올라가도 괜찮지만 가급적 올리고 싶지 않았는데 필요하다.
docker run --rm -it today-home:production /bin/bash
cd /srv/project #이 경로에 static 파일이 없었다.(.gitignore 에 추가되었기 때문)
- deploy
를 하게 되면 크게 2가지의 과정으로 나뉜다.
첫번째는 S3 에 media, static 파일을 업로드
두번째는 eb 안에서 ec2 에 코드를 배포(docker 를 사용했기 때문에 eb > ec2 > docker container 의 구조)
- STATIC_ROOT
: collectstatic 을 하게 되면 Django 의 static 파일 + 각 어플리케이션(app)의 static 이라는 디렉터리명의 파일이 모이게 되는 곳
- STATICFILES_DIRS
: 이 외에도 추가적인 정적 파일(static)을 포함하고 싶다면 STATICFILES_DIRS 를 settings.py 에 추가
(정확한 스펠링 입력, 튜플 또는 리스트 형식으로 설정)
- eb init --profile -> eb create --profile -> eb deploy --profile 의 순서대로 진행
- eb deploy (배포) 과정 중에 발생한 문제들은 /var/log/eb-activity.log 에서 확인 가능
- eb ssh 는 EC2 에 접속
- Revser proxy 에서 Nginx(EB):80 -> Docker:7000 -> Nginx(Docker):80
즉, EB 안에 Nginx 가 80번 포트를 주면 Docker 안의 Nginx 도 80번 포트를 받으면 접속이 됨(Nginx 끼리 매칭시켜야 연결 가능)
컴퓨터 기초
2019-04-03(수)
- 패킷
패킷에는 (payload 와 같은)데이터가 담기며, Header 를 포함한다.
그리고 패킷은 데이터를 쪼개기 때문에 각 패킷마다 번호를 가지고 있고, response 받는 쪽에서 패킷을 합친다.
실제로 송장이 Header 에 포함되며 이름은 port 주소는 ipv4 와 같은 IP 주소로 비유할 수 있다.
그리고 Gateway 를 지나면 ISP(Internet Service Provider) 가 제공하는 라우터로 reponse 쪽으로 정보를 제공한다.
- OS 가 하는 일은 스케줄링과 동기화
를 진행
RAM 에서는 현재 실행하고 있는 프로그램을 처리하며, 백그라운드에서 존재하는 프로그램들은 여유가 되면 RAM 에 그렇지 않다면 HDD 에 존재하여 대기하고 있다.
프로그램을 실행시키게 되면 프로세스가 진행된다. 그리고 이 프로세스 안에는 수많은 쓰레드가 존재한다.
프로그램 > 프로세스 > 쓰레드
'TIL' 카테고리의 다른 글
2019-04-21-SUN (0) | 2019.04.21 |
---|---|
2019-04-20-SAT (0) | 2019.04.20 |
2019-04-10-WED (0) | 2019.04.10 |
2019-04-08-MON (0) | 2019.04.08 |
2019-04-04-THU (0) | 2019.04.04 |