■ 목표
- 카피 사이트(프로젝트) 완성(배포 후 추가 기능 구현 중)
- udemy 강의 영상(쇼핑 카트 만들기) 완성 (90%)_ AWS 배포로 전환 예정_
- 1일 1커밋(그동안 공부한 repository 에 주석 + 티스토리 블로그 포스팅)
- 프로그래머스 알고리즘 풀기
- 그동안 프로젝트한 저장소에 README.md 추가
- udemy 강의 추가!!!(TDD & API 관련 강의)
- (도서) 생각의 탄생 완독(~/.200p)
■ TIL(Today I Learned)
독서) 생각의 탄생
2019-04-04(목)
관찰, 추상화, 형상화, 패턴인식, 패턴형성, 유추
모든 것에는 패턴이 있고, 그 패턴이 모여서 새로운 패턴을 형성한다. 즉, 공부를 할 때도 무작정 외운다기 보다는 각 카테고리를 분류
하고 패턴을 인식하는 것이 훨씬 더 깊은 학습 효과를 가진다.
유추라는 것은 하나의 사물을 보았을 때 받아들이기만 하는 것이 아니라 창의적으로 생각해내는 것이다. 창의력은 타고나는 것이 아니라 우리 생활에서도 충분히 훈련할 수 있는데 예를들면 머그컵을 보고 물을 담는 용도 말고 다른 용도가 있다면 무엇이 있을까? 처럼 다양한 시선으로 이해를 한다면 발전할 수 있다고 생각한다.
p. 209
"어떤 사물을 볼 때, '그것이 무엇인가'가 아니라 '그것이 무엇이 될까'에 착안해야 한다. 그래야 사물을 전혀 새로운 방식으로 활용할 수 있다."
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-20-SAT (0) | 2019.04.20 |
---|---|
2019-04-18-THU (0) | 2019.04.18 |
2019-04-08-MON (0) | 2019.04.08 |
2019-04-04-THU (0) | 2019.04.04 |
2019-04-03-WED (0) | 2019.04.03 |