---
# System prepended metadata

title: 발표
tags: [project base]

---

# 발표

###### tags: `project base`

## 기능
1. 로그인 및 회원가입
    - 네이버 소셜 로그인
2. 검색 페이지
    - 리스트 무한 스크롤
    - 메인은 최신순
    - 검색 형태소 분석해서 한다.
    - 카테고리로 검색
3. 매물 추가
4. 댓글 작성 / 삭제, 댓글 무한 스크롤
5. 구매 요청 / 구매 확정
6. 평가
7. 프로필
    - 평가한 내용 있다.
    - 구매 목록 / 판매 목록
8. 매물 수정


## 공유할만한 것
1. hackmd
2. 도커 / 엘라스틱 서치 
    - 엘라스틱 서치와 몽고디비를 동기화 하기 위해 monstache를 사용함
    - monstache를 사용하기 위해 mongodb가 replicaSet가 설정이 되어 있어야 했음
    - 그래서 도커를 사용하여 한번에 설정
    - 엘라스틱 서치에 nori형태소 분석기를 사용해서 검색어를 형태소 분석하여 검색

3. 순수함수 만들기
    - 이벤트 핸들러에서 컴포넌트의 state를 참조해야 하는 경우가 있었는데 이벤트 핸들러를 순수함수로 만들면 좋을 것 같다는 리뷰를 받아서 순수함수로 바꾸기 위한 노력을 했다. 결국에 state를 참조해야하기 때문에 언젠가는 외부 변수를 참조해야 해서 함수를 분리해서 로직이 있는 부분을 순수함수로 만들고 순수함수가 아닌 부분을 최대한 축소해줬다.
4. debounce
    - 버튼 연속 클릭을 할 때 처리
    - 처음에 timer를 전역 변수로 두었는데 closer를 이용해서 재사용 할 수 있는 debounce 함수로 변경했다.
5. 디비 설계
    - 댓글을 post 안에 넣을 것인가?
    - 평가를 어떻게 저장할 것인가? 배열?
    - 구매 요청 테이블을 나눈 이유
        - post에 배열로 넣으면 post에서 검색해서 삭제해야된다.
        - 사용자의 구매 요청 목록 조회가 힘들다.
        - 배열 조작이 힘들 것 같다.
        - 지속적으로 증가할 수 있다.
6. ssr에서 쿠키 전달하는 방법 / 쿠키 옵션
    - httponly 브라우저에서 쿠키 접근 못하게
    - samesite:strict 다른 사이트와 통신시 쿠키를 안 보낸다.
7. directive
    - 쿠키에 있는 토큰의 값이 올바른지에 따라, 로그인의 여부를 확인한다
    - resolver에서 하면 계속해서 각 함수마다 인증 함수를 호출해야한다.


## 앞으로 구현하면 좋은 것
1. 채팅
    1. 채팅이 생기면 메인 푸터를 생성해야될 것 같다.
2. 리팩토링
    - 쓸데없는 파일 삭제 -> root index.js list로 바꾸기
4. UI
    - 리스트 페이지에서 판매 완료 되면 완료된 것 좀 예쁘게 보여주기
4. directive를 써서 권한처리 해보기. 재사용 가능하게
5. 판매자만 수정 삭제 버튼 보이기

## 현재 남아있는 에러
- 각 페이지마다 권한 처리
    - 평가를 하고 나서 url로 다시 페이지에 접근했을 때 페이지에 접근이 된다. 다시 요청을 보낼 수는 없다.
- 구매 완료를 하고나서 구매 요청 목록에서 지워주기
- 평가 페이지 디바운스 적용
- '/'가 있는 것 카테고리 검색이 안되는 문제
- 검색 결과가 없을 때 ''에 대한 검색 결과가 없다고 뜬다.

- create를 하고 에러가 발생할 때 트랜젝션 처리

# 발표