본 서비스는 유저 계정의 해시태그(”#daily”) 를 기반으로 인스타그램, 스레드, 페이스북, 트위터 등 복수의 SNS에 게시된 게시물 중 유저의 해시태그가 포함된 게시물들을 하나의 서비스에서 확인할 수 있는 통합 Feed 어플리케이션 입니다.
이를 통해 본 서비스의 고객은 하나의 채널로 유저(”#daily”)의 SNS 노출 게시물 및 통계를 확인할 수 있습니다.
본 서비스는 사용자가 관심을 가지는 특정 해시태그를 중심으로 다양한 SNS 플랫폼에서 게시된 게시물들을 한눈에 볼 수 있게 해주는 통합 피드 어플리케이션입니다.
인스타그램, 페이스북, 스레드, 트위터 등 다양한 SNS에서 특정 해시태그(예: "#daily")가 포함된 게시물들을 모아 사용자에게 제공합니다. 이를 통해 사용자는 여러 SNS를 따로 접속하여 정보를 찾아보는 번거로움 없이, 본 서비스를 통해 원하는 정보를 쉽고 빠르게 얻을 수 있습니다.
또한, 본 서비스는 각 SNS에서의 게시물 노출 통계 정보도 제공하여, 사용자가 자신의 해시태그가 얼마나 많은 노출을 받았는지에 대한 정보를 쉽게 파악할 수 있도록 돕습니다.
이렇게 통합적인 정보 제공을 통해 사용자의 SNS 이용 편의성을 증대시키고, 해시태그 기반의 정보 검색 및 분석을 더욱 효율적으로 수행할 수 있도록 도와주는 것이 본 서비스의 주요 목표입니다.
Install FeeDaMoA with npm
# Package 설치
npm install
파일 구조 보기
src
├─auth
│ ├─decorator
│ ├─dto
│ └─test
├─common
│ └─decorator
├─configs
├─post
│ ├─dto
│ ├─entities
│ ├─pipes
│ ├─test
│ └─types
├─statistics
│ ├─dto
│ ├─enums
│ ├─pipes
│ └─type
└─user
├─dto
├─entities
└─test
Swagger : http://localhost:{port}/swagger#/
Post entity 설계 시 관계 설정 고려- click
- 태그 관계
- 각 게시물은 여러 개의 해시태그를 포함할 수 있습니다.
- 각 해시태그는 여러 게시물에 포함될 수 있습니다.
- Post 엔터티와 Tag 엔터티 간의 다대다 관계를 @JoinTable post-tag 테이블을 통해 관리하여 검색과 분류에 용이하도록 설계했습니다.
User 보안 고려 - click
-
회원가입
계정은 UserEntity에서 username 컬럼에unique적용이메일회원가입DTO에@IsEmail()로 이메일 구조 검증비밀번호는 아래와 같은제약 조건을 가지며,암호화하여 데이터베이스에 저장- 비밀번호는 최소 10자 이상
- 숫자, 문자, 특수문자 3가지를 포함해야합니다.
-
가입승인
- 회원가입은 누구나 가능하지만 서비스 이용을 못합니다. 로그인 하여 가입 요청을 해야합니다.
- 로그인 한 후, 가입 요청을 하면 회원가입할 때 입력한 이메일로 인증 이메일이 발송됩니다.
- 이메일에 적힌 랜덤한 6자리의 코드를 바르게 입력하면 UserEntity의 컬럼인
IsVerified = True가 되고 JWT토큰에IsVerified = True인 사람들만 사용할 수 있는 조건을 통과 할 수 있습니다.
-
로그인
- 계정, 비밀번호로 로그인 시 JWT토큰이 발급됩니다.
- 이후 게시물, 통계 API 요청 Header에 JWT가 항시 포함되며, JWT 유효성을 검증합니다.
Statistics 통계 설계 고려 - click
- Post App과 분리
- Post 모듈과 기능적으로 구분하기 위해 관심사 분리해 진행하였습니다.
- 실질적으로 DB와 연결하는 Repositury는 Post의 Repositury를 상속받아 Statistics Repository를 구현했습니다.
- Validator Custom Pipe
- 다양한 경우의 수를 대비해 QueryParams로 받아오는 값들의 유효성 검사를 커스텀해 작성했습니다.
- Statistics Data
- 통계라는 조금 난해한 쿼리문을 작성하기 위해 RawQuery와 비슷한 QueryBuilder를 사용했습니다.
- 통계 데이터 조회 후 날짜별/시간별 count: 0인 데이터 형식을 맞추기 위해 데이터 가공 function의형식을 맞췄습니다.
- ManyToMany
- NestJS @EntityRepository 대체 방법은?
- Custom Validation Pipe
- 의존성 주입
- NestJS 이메일 인증 구현
- NestJS + axios
- QueryBuilder
- 통계 데이터 가공하기
- Whitelist, dto
.jpeg?table=block&id=938175f1-165b-470e-9046-2d1f1d52fd78&spaceId=571a24a3-05f9-4ea5-b01f-cba1a3ac070d&width=2000&userId=&cache=v2)









