codestates / codestates/Reciper-server

[✍️ Dev Log] 정송이 / 2021-05-16

Open
#59 1 comment 0 reactions 1 assignee Claimed by @lovelysi0113 View on GitHub
@lovelysi0113/기록은 성장의 밑거름 ❄️ Dev Log
Dominant language
TypeScript
Stars
9
Forks
3
PR merge metrics
No merged PRs in 30d

Description

### 오늘은 어떻게 프로젝트에 기여했나요?
- image를 관리하는 변수명 통일
- `profileImage`, `recruitImage` 변수명을 `uploadImage`로 통일시키고 이 변수명을 사용하는 로직 수정
- 통일시킨 이유는 클라이언트에서 image 데이터를 관리할 때 효율적으로 사용하기 위해서이고(변수명이 통일되면 한 함수에서 쉽게 관리 가능), 서버에서도 굳이 두 개로 이름을 분리해서 사용할 필요가 없기 때문이다(어차피 저장/검색만 하고 profile과 recruit간 데이터들이 독립적이라 이름을 구분지을 필요가 없다)
- login 관련 요청 로직에서 새로운 유저 정보를 등록할 때 `profileColor` 데이터도 함께 저장
- `post /loginEmail`, `post /loginGoogle`, `post /loginGithub`
- 그 전까지 로직은 `post /profile` 요칭을 해야 `profileColor` 데이터가 생성되었는데 사실 `profileColor` 데이터는 처음 로그인했을 때부터 필요했다(header 상단에 프로필을 표시해야 하므로). 그래서 처음부터 새로 가입한 유저 정보를 데이터베이스에 저장할 때 `email`, `name` 뿐만 아니라 `profileColor`도 함께 저장되도록 보완하였다
- 게시글 등록/수정할 때 사용될 기본 썸네일 이미지 설정 및 저장
- `basic_img_1.png` ~ `basic_img_13.png` 추가
- 기존에 기본 썸네일 사진으로 입력되어 있던 `basic.png` 부분 삭제
- #53 로그인을 하지 않은 유저에게 제공되는 체험모드 설정
- 체험모드가 가능한 기능
- 팀원모집 게시글 리스트 보기 - `get /recruitList`
- 팀원모집 게시글 조회 - `get /recruitBoard/:board_id`
- 체험모드가 가능한 controllers 들은 따로 `noLoginRouter`로 묶은 뒤, `noLoginRouter`은 `authChecker`(access token으로 현재 로그인한 유저를 확인하는 미들웨어)를 거치지 않게 하였다
- #55 댓글 데이터에 유저 정보 추가
- Users 테이블과 Recruit_comments 테이블을 1:N 관계로 연결
- Users: `commentsList` - Recruit_comments: `writer`
- `post /recruitBoardComment/:board_id` 요청 처리 로직 수정
- `delete /recruitBoardComment/:board_id/:comment_id` 요청 처리 로직 수정
- 이외 response로 댓글 정보를 보내주는 로직에 writer 정보 추가
- #56 게시글 데이터에 유저 정보 추가
- `get /recruitBoard/:board_id` 요청 처리 로직 수정
- `post /recruitBoard` 요청 처리 로직 수정
- `post /recruitBoard/:board_id` 요청 처리 로직 수정
- 지금까지 구현한 로직에서 발생한 여러가지 에러 수정
- 작업한 로직들
- login: #6 #7
- profile: #15 #16
- recruit: #23 #24 #25 #26 #27 #32 #33
- stacks: #36
- 수정한 에러 유형
- undefined 에러 수정
- JSON 에러 수정
- map 에러 수정
- null 데이터로 변경되는 에러 수정
- 지금까지 구현한 로직을 포함하여 배포 작업 진행

### 오늘의 프로젝트에서 힘든 점은 무엇인가요?
- foreign key나 join으로 relation을 설정한 필드를 포함하여 데이터베이스를 검색하고 싶을 때는 `ralations`에 해당 필드명을 추가해주면 된다. 보길 원하는 필드명만 입력해주면 그 필드를 포함하여 데이터가 검색된다!
```js
const commentsList = await getRepository(Recruit_comments).find({
relations: ['writer'],
where: {
recruitBoard: {
id: boardId,
},
},
});
```
그동안은 검색할 때 항상 모든 필드명을 입력해주어야하는 줄 알았는데(그래서 response로 댓글 데이터를 보내줄 때 필요하지않은 댓글이 어느 게시글에 포함되어있는지에 대한 정보(`recruitBoard`)도 함께 내려갔었다. 그동안은 spread syntax 등을 사용하여 recruitBoard를 제외해보려 했지만 실패했었는데 오늘 드디어 방법을 찾았다! 와아!!)
다시한번 내가 아직 typeORM에 대해 모르는 게 많다는 것을 깨달았다.
- 원래는 새 글이나 새 댓글을 저장할 때 writer도 함께 저장해주는데 users 테이블에도 연결된 board나 comment 정보를 저장해줘야 되는 것으로 알고있었다. 그런데 실제로 코드를 작성하고 테스트할 때 저장이 되지않고 writer 데이터가 null로 변하는 이상한 현상이 일어났다. 결국 users 테이블에 따로 relation과 관련된 정보를 저장하지 않게 되니 정상적으로 작동이 되었다.
이 방법이 맞는건지 아님 아직 완벽하게 구현하지 못하고 일부만 끼워맞춰 작성한 것인지 감이 오지 않는다. typeORM에 대해 더 깊게 공부해보고 이부분은 나중에 수정&보완하는 방향으로 가야할 것 같다.
```js
// 왜 이게 안되는 것일까.. 틀린 방법인건지 아니면 내가 무얼 빼먹은 것인지는 알려면 좀 더 공부가 필요하다
userInfo.recruitBoards.push(createdBoard);
userInfo.save();
```
- 오늘로써 프로젝트 개발을 본격적으로 시작한지 6일차가 되었다(SR 단계를 제외하고).
그런데 참 신기한게 분명 며칠전에 코드를 작성할 때는 이게 맞는 로직이라고 생각했었는데 오늘 다시 보니 전혀 다른 방향으로 작성한 엉뚱한 로직이라 다시 수정해야하는 경우가 많았다. 그때는 클라이언트에 필요한 데이터를 다 보내주었다고 생각했었는데 오늘 writer 정보를 새로 추가하여 수정한 것처럼 빼먹은 것도 많고 그때는 몰랐던 에러들도 많이 발견했다.
약 일주일이라는 짧은 시간이지만 프로젝트 개발을 하며 매일 폭풍성장을 하는 기분이다. 며칠전 송이와 오늘의 송이의 실력차가 확 느껴진달까. 계속 에러를 수정하고 로직들을 점검하는데 그때마다 새로 수정하고 보완해야하는 부분이 발견된다. 지금 코드를 어떻게 해야 더 효율적으로 짤 수 있는지도 보인다. 참 신기하다.
오늘 작업을 하면서 다시 느낀건 한번 로직을 완성했다고 다 끝난게 아니라 매일 다시 그 로직을 점검해보면서 수정&보완할 부분이 없는지 찾는 과정이 꼭 필요하다는 것이다. 끝날 때까지 끝난게 아니다, 라는 말을 다시 되새기며 배포 + 클라이언트와 연결하여 테스트가 끝나기 전까지는 주기적으로 그동안 작성했던 로직들을 점검하는 시간을 가져야겠다라,는 다짐을 했다.
며칠전에 작성한 코드의 부족함이 눈에 띄고 고치는 과정이 쉽지는 않고 같은 코드를 여러번 뜯어보고 고민하는 작업이 힘들지만 그만큼 성장하고 있다는 게 느껴져서 그런지 오히려 재밌다. 앞으로도 이와 같은 모든 작업들이 다 배우는 과정이라고 생각하고 하나하나 허투루 하지말고 집중하며 코드를 점검하고 작성 및 수정 해야겠다.

### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?
- [x] 이제 response data format은 거의 확정인 것 같다. API 문서 수정&보완 꼭 완료하기!!!
- [x] 스키마 디자인도 보완하기
- [x] project 기능 구현 시작하기
- [x] 프로젝트 테이블 entity 작성
- [x] 프로젝트 router inital setup
- [x] 프로젝트 리스트 조회
- [x] 프로젝트 생성
- [x] 프로젝트 팀원 초대

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.