목록Wecode (17)
오늘도 개발
1. 프로젝트 개요 2차 프로젝트로는 오늘의 집을 클론코딩하여 '내일의 집'을 만들었다. 기획, 디자인만 오늘의 집을 참고하고 기능은 모두 직접 구현하였다. 클론코딩 사이트로 오늘의 집을 선정한 이유 오늘의 집은 커뮤니티와 스토어가 밀접하게 연동되어 있는 구조이다. 따라서 커뮤니티를 통해 SNS 기능을, 스토어를 통해 커머스 기능을 둘 다 연습해볼 수 있으리라 기대했다. 또 두 기능이 얽혀 있는 구조이므로 복잡한 모델링을 연습해보기 좋으리라 생각했다. 또 소셜 로그인 기능을 구현하며 카카오 API를, 포스트 작성 기능을 구현하며 AWS S3를 사용해보고 싶었다. 개발 인원 프론트엔드 3명, 백엔드 2명(나 포함) 개발 기간 2022.8.1 ~ 8.12(2주) 내 역할 DB 모델링, SNS 로그인 API,..
(위코드 수업 Git Workflow & Rebase를 정리한 내용입니다.) Git merge 두 브랜치를 합칠 때 commit을 시간순으로 정렬해서 합치는 방법. merge되는 브랜치(ex.feature)에 merge할 브랜치(ex.main)의 commit을 시간 순으로 삽입함. merge 후 불필요한 merge commit도 생성. (모든 feature 브랜치마다 merge commit이 남음.) commit이 시간순으로 정렬됨. => 단점 : 브랜치 history가 지저분해짐 ex) feature/sign-in에서 main을 merge하면 main의 커밋이 feature/sign-in의 커밋과 섞여서 정렬되고 merge commit이 남음 Git rebase 두 브랜치를 합칠 때 commit을 ..
Liked 1. 이번 스프린트에 목표한 작업 모두 완료 - 나 뿐만 아니라 대부분 팀원이 이번 스프린트에 목표한 작업을 완료함. - 내 일, 남 일 나누지 않고 서로 어려운 부분이 있으면 도와가며 잘 진행했기 때문. 2. 트렐로를 사용하여 일정관리를 잘 했음 - 스프린트 초반에 업무를 잘게 쪼개어 티켓을 만들었음. - 각자 업무 진행 사항에 맞춰 backlog, this sprint, in progress, in review, done에 맡은 티켓을 잘 옮김. - 누가 어떤 업무를 얼마만큼 진행했는지 한 눈에 파악 => 일정 관리가 쉬웠음 3. 데일리 스크럼 하루도 빠지지 않고 잘 진행 - 10시부터 10분 내외로 빠르게 회의 진행. - 매일매일 누가 무슨 일을 얼마나 진행했는지 파악할 수 있었음. - ..
어느정도 필터링과 페이지네이션을 구현한 후 PR을 올리고 멘토님께 코드 리뷰를 받았다. 리뷰를 통해 여러 번 수정을 했더니 좀 더 효율적이고 정확한 코드가 된 것 같다. 코드 리뷰로 배운 것 1. 딕셔너리에 getlist를 사용하면 리스트로 값을 받을 수 있다. 쿼리 파라미터에 다음과 같이 넣으면 # 엔드포인트 /products/list?type=powder&type=tealeaf views.py에서 이렇게 받을 수 있다. getlist를 사용하면 type을 키로 사용한 모든 키를 리스트로 한 번에 받을 수 있어서 편리하다. request.GET # request.GET.get('type') # tealeaf # 리스트 중 하나만 추출됨 request.GET.getlist('type') # ['powde..
문제 문자로 구성된 배열을 input으로 전달하면, 문자를 뒤집어서 return 해주세요. 새로운 배열을 선언하면 안 됩니다. 인자로 받은 배열을 수정해서 만들어주세요. Input: ["h","e","l","l","o"] Output: ["o","l","l","e","h"] 내가 푼 방식 1 파이썬 내장함수 reverse 사용 * reverse한 결과를 새 변수에 할당할 수는 없음. 새 변수에 할당하면 None타입으로 나옴 def reverse_string(s): s.reverse() return s 내가 푼 방식 2 제일 첫 요소를 가리키는 포인터 left, 제일 마지막 요소를 가리키는 포인터 right 설정. left 요소와 right 요소를 바꾼 후 left는 한 칸 앞으로, right는 한 칸 뒤..
max(iterable) 형태로 사용한다. 리스트나 딕셔너리 등 for문을 사용할 수 있는 객체(iterable)를 넣으면 그 중 가장 큰 값을 반환한다. max(iterable, key=함수명)처럼 옵션으로 함수명을 넣으면 iterable의 각 요소를 함수 인자로 넣어 반환된 값 중 가장 큰 값을 갖는 요소를 반환한다. min 함수도 마찬가지로 사용할 수 있다. 리스트에서 가장 큰 요소 찾기 a = [1, 1, 2, 3] max(a) # 3 리스트에서 가장 많이 반복된 요소 찾기 a = [1, 1, 2, 3] def getCount(x): return a.count(x) max(a, key=getCount) 위 코드는 다음과 같이 줄여쓸 수 있다. a = [1, 1, 2, 3] max(a, key=la..
1. 개요 인증이란? 유저의 아이디와 비밀번호를 확인하는 절차. 우리 서비스 유저가 맞는지 확인하는 절차. 인증에 필요한 것 아이디, 비밀번호 등. 비밀번호가 제일 중요 비밀번호 관리 방법 원본으로 DB에 저장하면 안되고 꼭 암호화해서 저장해야 함. 그냥 저장하면 - 개인정보보호법 위반 - DB가 해킹당하면 유저 비밀번호도 노출됨 - 내부 인력에게도 유저 비밀번호가 노출됨 2. 단방향 해쉬 함수 단방향 해쉬 함수(one-way hash function)란? 비밀번호를 암호화 하는 방법. 원본 메시지를 암호화할 수는 있지만 복호화할 수는 없기 때문에 단방향이라고 함. - 방법 : 원본 메시지 -> 해쉬 함수 적용 -> 다이제스트(=digest, 암호화된 결과물) 생성 - 예 : MD5, SHA-1(둘은 보..
장고에서 일대다 관계는 ForeignKey, 다대다 관계는 ManyToManyField로 구현할 수 있다. ForeignKey나 ManyToManyField에서 사용하는 정참조와 역참조의 개념에 대해 알아보자. 예시 모델 한 질문에는 여러 선택지가 있을 수 있지만, 한 선택지는 한 질문하고만 연결되는 일대다 관계의 모델이다. OnetoMany 관계에서는 Many쪽 테이블에 ForeignKey를 넣는다. 아래 모델에서도 Choice에 question 속성을 추가하고 ForeignKey 필드를 생성했다. # One class Question(models.Model): question_text = models.CharField(max_length=200) # Many class Choice(models.Mod..