{"id":16407302,"url":"https://github.com/alstn113/emotions","last_synced_at":"2026-03-17T03:50:41.316Z","repository":{"id":65803565,"uuid":"585693695","full_name":"alstn113/emotions","owner":"alstn113","description":"마크다운 형식의 시리즈를 작성할 수 있는 커뮤니티 블로그","archived":false,"fork":false,"pushed_at":"2023-10-31T07:54:54.000Z","size":10272,"stargazers_count":16,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-18T18:14:17.521Z","etag":null,"topics":["blog","markdown","mobile","nest","react","web","workspace"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alstn113.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-05T20:37:55.000Z","updated_at":"2024-12-31T08:59:30.000Z","dependencies_parsed_at":"2023-09-18T02:58:48.631Z","dependency_job_id":"75b5e297-7753-4f8a-96f8-8c0f07917d62","html_url":"https://github.com/alstn113/emotions","commit_stats":null,"previous_names":["alstn113/emotions"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alstn113%2Femotions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alstn113%2Femotions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alstn113%2Femotions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alstn113%2Femotions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alstn113","download_url":"https://codeload.github.com/alstn113/emotions/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245061382,"owners_count":20554563,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","markdown","mobile","nest","react","web","workspace"],"created_at":"2024-10-11T06:13:30.336Z","updated_at":"2026-03-17T03:50:36.266Z","avatar_url":"https://github.com/alstn113.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Emotions \n\u003e (1년간 유지 후 AWS free tier 만료와 함께 사망했습니다( ~2023.10.31 ))\n\nEmotions는 자신의 감정을 마크다운 형식으로 기록할 수 있는 커뮤니티입니다.\n또한 글을 시리즈 형식으로 연재할 수도 있습니다.\n\n## `What I Learned`\n\n1. pnpm workspace를 통해서 monorepo를 구성했습니다.\n\n2. 모바일 우선(mobile first) 방식으로 개발해서 UI/UX를 높였습니다.\n\n3. React의 Suspense와 Error-boundary 을 통해서 데이터 로드와 에러 처리를 분리하였습니다. Lazy Load를 이용한 Code Splitting을 통해 성능을 향상시켰습니다.\n\n4. Git Actions를 통해서 배포 자동화를 시켰습니다.\n\n5. Nest.js에서 class-transformer, class-validator, plainToInstance를 통해서 dto를 요청과 응답에서 알맞는 타입의 값을 받을 수 있게 했습니다.\n\n6. 댓글을 2단계까지 구성하였고, 그 이후로는 mention으로 처리하였습니다. 또한 parentId값을 통해서 한 번의 query 요청으로 댓글들을 받아오고, 이후 Map을 통해 group화하는 방식을 사용했습니다.\n\n7. AWS SES(Simple Email Service)를 통해서 댓글이나 답글이 달릴 시, 경우에 따라 Post Author이나 Commenter, Mention User에게 Notification Email을 보냅니다.\n\n## `Sturcture`\n\n- Server: Nest\n- Web: React + Vite\n- Deploy: AWS EC2 Ubuntu, NGINX, Docker, PM2, Git Actions\n- DB: Superbase + Postgresql\n- ETC: AWS S3, AWS SES, Google Analytics\n\n## `Website Link`\n\n- web: \u003chttps://wap-dev.store\u003e\n- server: \u003chttps://api.wap-dev.store\u003e\n\n## `Project Stack`\n\n- Server\n\n  - Nest\n  - Typescript\n  - Prisma\n  - Swagger\n  - Postgresql\n  - Passport\n  - JWT + Cookie\n  - AWS S3, AWS SES\n  - PM2\n\n- Web\n  - React\n  - Typescript\n  - React-Router\n  - Suspense + Error-boundary\n  - Tanstack Query\n  - Zustand\n  - Emotion\n  - Framer-motion\n  - React-beautiful-dnd\n  - Code-mirror\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falstn113%2Femotions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falstn113%2Femotions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falstn113%2Femotions/lists"}