Repository files navigation

⌨️ Dechive

데스크 셋업에 관심이 있는 사람들의 정보를 공유하고 다른 인테리어, 몰랐던 장비들을 알게 되는 계기를 만들어 줄 수 있는 커뮤니티를 만드는 프로젝트입니다.
사용자들은 자신의 책상 사진을 소개하고 구성한 장비들을 구입한 곳을 공유하고, 팔로우와 팔로위 기능으로 사용자들을 연결하고 게시물에 좋아요를 남겨 취향에 맞는 셋업에 쉽게 접근할 수 있습니다.


📆 프로젝트 기간

  • 2023.04.10 - 2023.05.04

🧱 아키택처


  • Node.js에서 Express 프레임 워크를 기반으로 만들어진 Nest.js를 통해 IoC와 같은 기능과 기본적으로 제공되는 모듈, 컨트롤러, 서비스 구조를 통해 개발 속도를 향상시키고 typescript를 통해 안정적인 개발이 가능.

  • Graphql 통신을 통해 REST API의 over,under-vetching을 피하고 하나의 엔드 포인트로 다양한 데이터들 중 필요한 정보만 요청 가능.

  • Nest.js와 Graphql과 함꼐 사용할 ORM은 팀원이 모두 사용해보고, 가장 점유율이 높아 다양한 예시코드와 Nest 공식문서에도 자료가 많은 TypeORM으로 선정하여 유지보수와 개발이 용이하게 함.

  • 유저의 회원등록에 편의성을 더하기위해 Google과 kakao 소셜로그인을 추가.

  • 특정 키워드에 대한 YouTube 영상들과 영상들에 대한 정보를 받아오기위해 YouTube Data API v3을 사용.

  • Redis를 통해 로그아웃시 토큰을 저장해 유저의 토큰을 만료시키고, 유튜브 API를 통해 받아온 데스크셋업 정보를 일정 기간에 한번 씩 초기화 할 수 있도록 사용.


🏖 ERD


🛠 기술 스택

Environment

VscodeGitGithub
EslintPrettierDocker

Developement

TypeScriptNestJsGraphql
MysqlRedisGoogleCloud



🕹️ 주요 기능

  1. 지금 유튜브에서 유행인 데스크 셋업을 소개
  2. 유저간 팔로워, 팔로위 기능을 통해 본인취향의 셋업에 손쉽게 접근
  3. 유저가 공유한 구입처 링크를 통해 og정보들 받아와 간략한 상품 정보를 제공한다.

📖 라이브러리

이름설명
typeormNest.js와 함께 사용하며 점유율이 가장 높고 데이터 매퍼 패턴을 지원하며 유지보수가 용이한 TypeORM을 사용
axiosFetch API와는 달리 요청및 응답객체를 직접작성하지 않고 매서드와 속성을 제공하여 코드가 간결해지고, Promise 처리과정에서 에러를 catch블록으로 던져주기에 자동으로 에러를 다룰수 있으므로 axios를 사용
redis클라이언트에서 동일한 요청이 계속 올때 서버에서 직접 데이터를 찾으면 상당히 비효율적이고 데이터의 크기에 따라 응답속도가 느려짐. 이때 요청결과를 미리 저장해 두었다가, 동일한 데이터 요청이 오면 바로 전달할 수 있도록 redis를 사용
bcrypt해시 함수들은 무결성 검사를 위해 빠른 속도가 필요하지만, 해커가 DB를 탈취 했을때 빠른 속도로 비밀번호를 알아낼 수 있음. 패스워드 저장에서의 해시 함수의 문제점을 보완해서 나온것이 pbkfd2. 8글자 부터는 동일 시스템에서 bcrypt가 pbkfd2보다 4배 이상의 시간을 소모해야 비밀번호를 알아낼 수 있기 때문에 보안성을 위해 사용
passportpassport는 express 프레임워크 상에서 사용되는 인증 미들웨어 라이브러리. strategies로 알려져 있는 인증 메커니즘을 각 모듈로 패키지화해서 제공. 즉, 앱은 passport에서 지원하는 전략을 선택해 의존성 없이 독립적으로 이용 가능함
nodemailer이메일 인증을 위해서 이메일 전송에 필요한 네트워크 프로토콜인 SMTP(우편 전송 프로토콜)을 사용해야 함. Node.js SMTP기반으로 개발된 전용 모듈인 nodemailer는 사용법이 매우 간단하여 사용하게 됨
eslint코드를 분석해 문법적인 오류를 찾아주거나 프로젝트 내에서 일관된 코드 스타일을 유지하기 위해 사용. 프로젝트에는 Airbnb의 코딩 컨벤션을 적용.

✍ 커밋 메세지 규칙

  • Feat : 새로운 기능 추가
  • Fix : 버그 수정
  • Style : 코드 양식 변경
  • Refactor : 코드 리팩토링
  • Test : 테스트 코드 수정
  • Docs : 문서 수정

🔥 트러블 슈팅


🧑‍💻 팀 구성

Backend
sounwooKyuwonKwon
Frontend
osdoonhyunapplepykimjinShineyrk721

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

⌨️ Dechive

데스크 셋업에 관심이 있는 사람들의 정보를 공유하고 다른 인테리어, 몰랐던 장비들을 알게 되는 계기를 만들어 줄 수 있는 커뮤니티를 만드는 프로젝트입니다.
사용자들은 자신의 책상 사진을 소개하고 구성한 장비들을 구입한 곳을 공유하고, 팔로우와 팔로위 기능으로 사용자들을 연결하고 게시물에 좋아요를 남겨 취향에 맞는 셋업에 쉽게 접근할 수 있습니다.


📆 프로젝트 기간

  • 2023.04.10 - 2023.05.04

🧱 아키택처


  • Node.js에서 Express 프레임 워크를 기반으로 만들어진 Nest.js를 통해 IoC와 같은 기능과 기본적으로 제공되는 모듈, 컨트롤러, 서비스 구조를 통해 개발 속도를 향상시키고 typescript를 통해 안정적인 개발이 가능.

  • Graphql 통신을 통해 REST API의 over,under-vetching을 피하고 하나의 엔드 포인트로 다양한 데이터들 중 필요한 정보만 요청 가능.

  • Nest.js와 Graphql과 함꼐 사용할 ORM은 팀원이 모두 사용해보고, 가장 점유율이 높아 다양한 예시코드와 Nest 공식문서에도 자료가 많은 TypeORM으로 선정하여 유지보수와 개발이 용이하게 함.

  • 유저의 회원등록에 편의성을 더하기위해 Google과 kakao 소셜로그인을 추가.

  • 특정 키워드에 대한 YouTube 영상들과 영상들에 대한 정보를 받아오기위해 YouTube Data API v3을 사용.

  • Redis를 통해 로그아웃시 토큰을 저장해 유저의 토큰을 만료시키고, 유튜브 API를 통해 받아온 데스크셋업 정보를 일정 기간에 한번 씩 초기화 할 수 있도록 사용.


🏖 ERD


🛠 기술 스택

Environment

VscodeGitGithub
EslintPrettierDocker

Developement

TypeScriptNestJsGraphql
MysqlRedisGoogleCloud



🕹️ 주요 기능

  1. 지금 유튜브에서 유행인 데스크 셋업을 소개
  2. 유저간 팔로워, 팔로위 기능을 통해 본인취향의 셋업에 손쉽게 접근
  3. 유저가 공유한 구입처 링크를 통해 og정보들 받아와 간략한 상품 정보를 제공한다.

📖 라이브러리

이름설명
typeormNest.js와 함께 사용하며 점유율이 가장 높고 데이터 매퍼 패턴을 지원하며 유지보수가 용이한 TypeORM을 사용
axiosFetch API와는 달리 요청및 응답객체를 직접작성하지 않고 매서드와 속성을 제공하여 코드가 간결해지고, Promise 처리과정에서 에러를 catch블록으로 던져주기에 자동으로 에러를 다룰수 있으므로 axios를 사용
redis클라이언트에서 동일한 요청이 계속 올때 서버에서 직접 데이터를 찾으면 상당히 비효율적이고 데이터의 크기에 따라 응답속도가 느려짐. 이때 요청결과를 미리 저장해 두었다가, 동일한 데이터 요청이 오면 바로 전달할 수 있도록 redis를 사용
bcrypt해시 함수들은 무결성 검사를 위해 빠른 속도가 필요하지만, 해커가 DB를 탈취 했을때 빠른 속도로 비밀번호를 알아낼 수 있음. 패스워드 저장에서의 해시 함수의 문제점을 보완해서 나온것이 pbkfd2. 8글자 부터는 동일 시스템에서 bcrypt가 pbkfd2보다 4배 이상의 시간을 소모해야 비밀번호를 알아낼 수 있기 때문에 보안성을 위해 사용
passportpassport는 express 프레임워크 상에서 사용되는 인증 미들웨어 라이브러리. strategies로 알려져 있는 인증 메커니즘을 각 모듈로 패키지화해서 제공. 즉, 앱은 passport에서 지원하는 전략을 선택해 의존성 없이 독립적으로 이용 가능함
nodemailer이메일 인증을 위해서 이메일 전송에 필요한 네트워크 프로토콜인 SMTP(우편 전송 프로토콜)을 사용해야 함. Node.js SMTP기반으로 개발된 전용 모듈인 nodemailer는 사용법이 매우 간단하여 사용하게 됨
eslint코드를 분석해 문법적인 오류를 찾아주거나 프로젝트 내에서 일관된 코드 스타일을 유지하기 위해 사용. 프로젝트에는 Airbnb의 코딩 컨벤션을 적용.

✍ 커밋 메세지 규칙

  • Feat : 새로운 기능 추가
  • Fix : 버그 수정
  • Style : 코드 양식 변경
  • Refactor : 코드 리팩토링
  • Test : 테스트 코드 수정
  • Docs : 문서 수정

🔥 트러블 슈팅


🧑‍💻 팀 구성

Backend
sounwooKyuwonKwon
Frontend
osdoonhyunapplepykimjinShineyrk721

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

⌨️ Dechive

데스크 셋업에 관심이 있는 사람들의 정보를 공유하고 다른 인테리어, 몰랐던 장비들을 알게 되는 계기를 만들어 줄 수 있는 커뮤니티를 만드는 프로젝트입니다.
사용자들은 자신의 책상 사진을 소개하고 구성한 장비들을 구입한 곳을 공유하고, 팔로우와 팔로위 기능으로 사용자들을 연결하고 게시물에 좋아요를 남겨 취향에 맞는 셋업에 쉽게 접근할 수 있습니다.


📆 프로젝트 기간

  • 2023.04.10 - 2023.05.04

🧱 아키택처


  • Node.js에서 Express 프레임 워크를 기반으로 만들어진 Nest.js를 통해 IoC와 같은 기능과 기본적으로 제공되는 모듈, 컨트롤러, 서비스 구조를 통해 개발 속도를 향상시키고 typescript를 통해 안정적인 개발이 가능.

  • Graphql 통신을 통해 REST API의 over,under-vetching을 피하고 하나의 엔드 포인트로 다양한 데이터들 중 필요한 정보만 요청 가능.

  • Nest.js와 Graphql과 함꼐 사용할 ORM은 팀원이 모두 사용해보고, 가장 점유율이 높아 다양한 예시코드와 Nest 공식문서에도 자료가 많은 TypeORM으로 선정하여 유지보수와 개발이 용이하게 함.

  • 유저의 회원등록에 편의성을 더하기위해 Google과 kakao 소셜로그인을 추가.

  • 특정 키워드에 대한 YouTube 영상들과 영상들에 대한 정보를 받아오기위해 YouTube Data API v3을 사용.

  • Redis를 통해 로그아웃시 토큰을 저장해 유저의 토큰을 만료시키고, 유튜브 API를 통해 받아온 데스크셋업 정보를 일정 기간에 한번 씩 초기화 할 수 있도록 사용.


🏖 ERD


🛠 기술 스택

Environment

VscodeGitGithub
EslintPrettierDocker

Developement

TypeScriptNestJsGraphql
MysqlRedisGoogleCloud



🕹️ 주요 기능

  1. 지금 유튜브에서 유행인 데스크 셋업을 소개
  2. 유저간 팔로워, 팔로위 기능을 통해 본인취향의 셋업에 손쉽게 접근
  3. 유저가 공유한 구입처 링크를 통해 og정보들 받아와 간략한 상품 정보를 제공한다.

📖 라이브러리

이름설명
typeormNest.js와 함께 사용하며 점유율이 가장 높고 데이터 매퍼 패턴을 지원하며 유지보수가 용이한 TypeORM을 사용
axiosFetch API와는 달리 요청및 응답객체를 직접작성하지 않고 매서드와 속성을 제공하여 코드가 간결해지고, Promise 처리과정에서 에러를 catch블록으로 던져주기에 자동으로 에러를 다룰수 있으므로 axios를 사용
redis클라이언트에서 동일한 요청이 계속 올때 서버에서 직접 데이터를 찾으면 상당히 비효율적이고 데이터의 크기에 따라 응답속도가 느려짐. 이때 요청결과를 미리 저장해 두었다가, 동일한 데이터 요청이 오면 바로 전달할 수 있도록 redis를 사용
bcrypt해시 함수들은 무결성 검사를 위해 빠른 속도가 필요하지만, 해커가 DB를 탈취 했을때 빠른 속도로 비밀번호를 알아낼 수 있음. 패스워드 저장에서의 해시 함수의 문제점을 보완해서 나온것이 pbkfd2. 8글자 부터는 동일 시스템에서 bcrypt가 pbkfd2보다 4배 이상의 시간을 소모해야 비밀번호를 알아낼 수 있기 때문에 보안성을 위해 사용
passportpassport는 express 프레임워크 상에서 사용되는 인증 미들웨어 라이브러리. strategies로 알려져 있는 인증 메커니즘을 각 모듈로 패키지화해서 제공. 즉, 앱은 passport에서 지원하는 전략을 선택해 의존성 없이 독립적으로 이용 가능함
nodemailer이메일 인증을 위해서 이메일 전송에 필요한 네트워크 프로토콜인 SMTP(우편 전송 프로토콜)을 사용해야 함. Node.js SMTP기반으로 개발된 전용 모듈인 nodemailer는 사용법이 매우 간단하여 사용하게 됨
eslint코드를 분석해 문법적인 오류를 찾아주거나 프로젝트 내에서 일관된 코드 스타일을 유지하기 위해 사용. 프로젝트에는 Airbnb의 코딩 컨벤션을 적용.

✍ 커밋 메세지 규칙

  • Feat : 새로운 기능 추가
  • Fix : 버그 수정
  • Style : 코드 양식 변경
  • Refactor : 코드 리팩토링
  • Test : 테스트 코드 수정
  • Docs : 문서 수정

🔥 트러블 슈팅


🧑‍💻 팀 구성

Backend
sounwooKyuwonKwon
Frontend
osdoonhyunapplepykimjinShineyrk721

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

⌨️ Dechive

데스크 셋업에 관심이 있는 사람들의 정보를 공유하고 다른 인테리어, 몰랐던 장비들을 알게 되는 계기를 만들어 줄 수 있는 커뮤니티를 만드는 프로젝트입니다.
사용자들은 자신의 책상 사진을 소개하고 구성한 장비들을 구입한 곳을 공유하고, 팔로우와 팔로위 기능으로 사용자들을 연결하고 게시물에 좋아요를 남겨 취향에 맞는 셋업에 쉽게 접근할 수 있습니다.


📆 프로젝트 기간

  • 2023.04.10 - 2023.05.04

🧱 아키택처


  • Node.js에서 Express 프레임 워크를 기반으로 만들어진 Nest.js를 통해 IoC와 같은 기능과 기본적으로 제공되는 모듈, 컨트롤러, 서비스 구조를 통해 개발 속도를 향상시키고 typescript를 통해 안정적인 개발이 가능.

  • Graphql 통신을 통해 REST API의 over,under-vetching을 피하고 하나의 엔드 포인트로 다양한 데이터들 중 필요한 정보만 요청 가능.

  • Nest.js와 Graphql과 함꼐 사용할 ORM은 팀원이 모두 사용해보고, 가장 점유율이 높아 다양한 예시코드와 Nest 공식문서에도 자료가 많은 TypeORM으로 선정하여 유지보수와 개발이 용이하게 함.

  • 유저의 회원등록에 편의성을 더하기위해 Google과 kakao 소셜로그인을 추가.

  • 특정 키워드에 대한 YouTube 영상들과 영상들에 대한 정보를 받아오기위해 YouTube Data API v3을 사용.

  • Redis를 통해 로그아웃시 토큰을 저장해 유저의 토큰을 만료시키고, 유튜브 API를 통해 받아온 데스크셋업 정보를 일정 기간에 한번 씩 초기화 할 수 있도록 사용.


🏖 ERD


🛠 기술 스택

Environment

VscodeGitGithub
EslintPrettierDocker

Developement

TypeScriptNestJsGraphql
MysqlRedisGoogleCloud



🕹️ 주요 기능

  1. 지금 유튜브에서 유행인 데스크 셋업을 소개
  2. 유저간 팔로워, 팔로위 기능을 통해 본인취향의 셋업에 손쉽게 접근
  3. 유저가 공유한 구입처 링크를 통해 og정보들 받아와 간략한 상품 정보를 제공한다.

📖 라이브러리

이름설명
typeormNest.js와 함께 사용하며 점유율이 가장 높고 데이터 매퍼 패턴을 지원하며 유지보수가 용이한 TypeORM을 사용
axiosFetch API와는 달리 요청및 응답객체를 직접작성하지 않고 매서드와 속성을 제공하여 코드가 간결해지고, Promise 처리과정에서 에러를 catch블록으로 던져주기에 자동으로 에러를 다룰수 있으므로 axios를 사용
redis클라이언트에서 동일한 요청이 계속 올때 서버에서 직접 데이터를 찾으면 상당히 비효율적이고 데이터의 크기에 따라 응답속도가 느려짐. 이때 요청결과를 미리 저장해 두었다가, 동일한 데이터 요청이 오면 바로 전달할 수 있도록 redis를 사용
bcrypt해시 함수들은 무결성 검사를 위해 빠른 속도가 필요하지만, 해커가 DB를 탈취 했을때 빠른 속도로 비밀번호를 알아낼 수 있음. 패스워드 저장에서의 해시 함수의 문제점을 보완해서 나온것이 pbkfd2. 8글자 부터는 동일 시스템에서 bcrypt가 pbkfd2보다 4배 이상의 시간을 소모해야 비밀번호를 알아낼 수 있기 때문에 보안성을 위해 사용
passportpassport는 express 프레임워크 상에서 사용되는 인증 미들웨어 라이브러리. strategies로 알려져 있는 인증 메커니즘을 각 모듈로 패키지화해서 제공. 즉, 앱은 passport에서 지원하는 전략을 선택해 의존성 없이 독립적으로 이용 가능함
nodemailer이메일 인증을 위해서 이메일 전송에 필요한 네트워크 프로토콜인 SMTP(우편 전송 프로토콜)을 사용해야 함. Node.js SMTP기반으로 개발된 전용 모듈인 nodemailer는 사용법이 매우 간단하여 사용하게 됨
eslint코드를 분석해 문법적인 오류를 찾아주거나 프로젝트 내에서 일관된 코드 스타일을 유지하기 위해 사용. 프로젝트에는 Airbnb의 코딩 컨벤션을 적용.

✍ 커밋 메세지 규칙

  • Feat : 새로운 기능 추가
  • Fix : 버그 수정
  • Style : 코드 양식 변경
  • Refactor : 코드 리팩토링
  • Test : 테스트 코드 수정
  • Docs : 문서 수정

🔥 트러블 슈팅


🧑‍💻 팀 구성

Backend
sounwooKyuwonKwon
Frontend
osdoonhyunapplepykimjinShineyrk721

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

⌨️ Dechive

데스크 셋업에 관심이 있는 사람들의 정보를 공유하고 다른 인테리어, 몰랐던 장비들을 알게 되는 계기를 만들어 줄 수 있는 커뮤니티를 만드는 프로젝트입니다.
사용자들은 자신의 책상 사진을 소개하고 구성한 장비들을 구입한 곳을 공유하고, 팔로우와 팔로위 기능으로 사용자들을 연결하고 게시물에 좋아요를 남겨 취향에 맞는 셋업에 쉽게 접근할 수 있습니다.


📆 프로젝트 기간

  • 2023.04.10 - 2023.05.04

🧱 아키택처


  • Node.js에서 Express 프레임 워크를 기반으로 만들어진 Nest.js를 통해 IoC와 같은 기능과 기본적으로 제공되는 모듈, 컨트롤러, 서비스 구조를 통해 개발 속도를 향상시키고 typescript를 통해 안정적인 개발이 가능.

  • Graphql 통신을 통해 REST API의 over,under-vetching을 피하고 하나의 엔드 포인트로 다양한 데이터들 중 필요한 정보만 요청 가능.

  • Nest.js와 Graphql과 함꼐 사용할 ORM은 팀원이 모두 사용해보고, 가장 점유율이 높아 다양한 예시코드와 Nest 공식문서에도 자료가 많은 TypeORM으로 선정하여 유지보수와 개발이 용이하게 함.

  • 유저의 회원등록에 편의성을 더하기위해 Google과 kakao 소셜로그인을 추가.

  • 특정 키워드에 대한 YouTube 영상들과 영상들에 대한 정보를 받아오기위해 YouTube Data API v3을 사용.

  • Redis를 통해 로그아웃시 토큰을 저장해 유저의 토큰을 만료시키고, 유튜브 API를 통해 받아온 데스크셋업 정보를 일정 기간에 한번 씩 초기화 할 수 있도록 사용.


🏖 ERD


🛠 기술 스택

Environment

VscodeGitGithub
EslintPrettierDocker

Developement

TypeScriptNestJsGraphql
MysqlRedisGoogleCloud



🕹️ 주요 기능

  1. 지금 유튜브에서 유행인 데스크 셋업을 소개
  2. 유저간 팔로워, 팔로위 기능을 통해 본인취향의 셋업에 손쉽게 접근
  3. 유저가 공유한 구입처 링크를 통해 og정보들 받아와 간략한 상품 정보를 제공한다.

📖 라이브러리

이름설명
typeormNest.js와 함께 사용하며 점유율이 가장 높고 데이터 매퍼 패턴을 지원하며 유지보수가 용이한 TypeORM을 사용
axiosFetch API와는 달리 요청및 응답객체를 직접작성하지 않고 매서드와 속성을 제공하여 코드가 간결해지고, Promise 처리과정에서 에러를 catch블록으로 던져주기에 자동으로 에러를 다룰수 있으므로 axios를 사용
redis클라이언트에서 동일한 요청이 계속 올때 서버에서 직접 데이터를 찾으면 상당히 비효율적이고 데이터의 크기에 따라 응답속도가 느려짐. 이때 요청결과를 미리 저장해 두었다가, 동일한 데이터 요청이 오면 바로 전달할 수 있도록 redis를 사용
bcrypt해시 함수들은 무결성 검사를 위해 빠른 속도가 필요하지만, 해커가 DB를 탈취 했을때 빠른 속도로 비밀번호를 알아낼 수 있음. 패스워드 저장에서의 해시 함수의 문제점을 보완해서 나온것이 pbkfd2. 8글자 부터는 동일 시스템에서 bcrypt가 pbkfd2보다 4배 이상의 시간을 소모해야 비밀번호를 알아낼 수 있기 때문에 보안성을 위해 사용
passportpassport는 express 프레임워크 상에서 사용되는 인증 미들웨어 라이브러리. strategies로 알려져 있는 인증 메커니즘을 각 모듈로 패키지화해서 제공. 즉, 앱은 passport에서 지원하는 전략을 선택해 의존성 없이 독립적으로 이용 가능함
nodemailer이메일 인증을 위해서 이메일 전송에 필요한 네트워크 프로토콜인 SMTP(우편 전송 프로토콜)을 사용해야 함. Node.js SMTP기반으로 개발된 전용 모듈인 nodemailer는 사용법이 매우 간단하여 사용하게 됨
eslint코드를 분석해 문법적인 오류를 찾아주거나 프로젝트 내에서 일관된 코드 스타일을 유지하기 위해 사용. 프로젝트에는 Airbnb의 코딩 컨벤션을 적용.

✍ 커밋 메세지 규칙

  • Feat : 새로운 기능 추가
  • Fix : 버그 수정
  • Style : 코드 양식 변경
  • Refactor : 코드 리팩토링
  • Test : 테스트 코드 수정
  • Docs : 문서 수정

🔥 트러블 슈팅


🧑‍💻 팀 구성

Backend
sounwooKyuwonKwon
Frontend
osdoonhyunapplepykimjinShineyrk721

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

⌨️ Dechive

데스크 셋업에 관심이 있는 사람들의 정보를 공유하고 다른 인테리어, 몰랐던 장비들을 알게 되는 계기를 만들어 줄 수 있는 커뮤니티를 만드는 프로젝트입니다.
사용자들은 자신의 책상 사진을 소개하고 구성한 장비들을 구입한 곳을 공유하고, 팔로우와 팔로위 기능으로 사용자들을 연결하고 게시물에 좋아요를 남겨 취향에 맞는 셋업에 쉽게 접근할 수 있습니다.


📆 프로젝트 기간

  • 2023.04.10 - 2023.05.04

🧱 아키택처


  • Node.js에서 Express 프레임 워크를 기반으로 만들어진 Nest.js를 통해 IoC와 같은 기능과 기본적으로 제공되는 모듈, 컨트롤러, 서비스 구조를 통해 개발 속도를 향상시키고 typescript를 통해 안정적인 개발이 가능.

  • Graphql 통신을 통해 REST API의 over,under-vetching을 피하고 하나의 엔드 포인트로 다양한 데이터들 중 필요한 정보만 요청 가능.

  • Nest.js와 Graphql과 함꼐 사용할 ORM은 팀원이 모두 사용해보고, 가장 점유율이 높아 다양한 예시코드와 Nest 공식문서에도 자료가 많은 TypeORM으로 선정하여 유지보수와 개발이 용이하게 함.

  • 유저의 회원등록에 편의성을 더하기위해 Google과 kakao 소셜로그인을 추가.

  • 특정 키워드에 대한 YouTube 영상들과 영상들에 대한 정보를 받아오기위해 YouTube Data API v3을 사용.

  • Redis를 통해 로그아웃시 토큰을 저장해 유저의 토큰을 만료시키고, 유튜브 API를 통해 받아온 데스크셋업 정보를 일정 기간에 한번 씩 초기화 할 수 있도록 사용.


🏖 ERD


🛠 기술 스택

Environment

VscodeGitGithub
EslintPrettierDocker

Developement

TypeScriptNestJsGraphql
MysqlRedisGoogleCloud



🕹️ 주요 기능

  1. 지금 유튜브에서 유행인 데스크 셋업을 소개
  2. 유저간 팔로워, 팔로위 기능을 통해 본인취향의 셋업에 손쉽게 접근
  3. 유저가 공유한 구입처 링크를 통해 og정보들 받아와 간략한 상품 정보를 제공한다.

📖 라이브러리

이름설명
typeormNest.js와 함께 사용하며 점유율이 가장 높고 데이터 매퍼 패턴을 지원하며 유지보수가 용이한 TypeORM을 사용
axiosFetch API와는 달리 요청및 응답객체를 직접작성하지 않고 매서드와 속성을 제공하여 코드가 간결해지고, Promise 처리과정에서 에러를 catch블록으로 던져주기에 자동으로 에러를 다룰수 있으므로 axios를 사용
redis클라이언트에서 동일한 요청이 계속 올때 서버에서 직접 데이터를 찾으면 상당히 비효율적이고 데이터의 크기에 따라 응답속도가 느려짐. 이때 요청결과를 미리 저장해 두었다가, 동일한 데이터 요청이 오면 바로 전달할 수 있도록 redis를 사용
bcrypt해시 함수들은 무결성 검사를 위해 빠른 속도가 필요하지만, 해커가 DB를 탈취 했을때 빠른 속도로 비밀번호를 알아낼 수 있음. 패스워드 저장에서의 해시 함수의 문제점을 보완해서 나온것이 pbkfd2. 8글자 부터는 동일 시스템에서 bcrypt가 pbkfd2보다 4배 이상의 시간을 소모해야 비밀번호를 알아낼 수 있기 때문에 보안성을 위해 사용
passportpassport는 express 프레임워크 상에서 사용되는 인증 미들웨어 라이브러리. strategies로 알려져 있는 인증 메커니즘을 각 모듈로 패키지화해서 제공. 즉, 앱은 passport에서 지원하는 전략을 선택해 의존성 없이 독립적으로 이용 가능함
nodemailer이메일 인증을 위해서 이메일 전송에 필요한 네트워크 프로토콜인 SMTP(우편 전송 프로토콜)을 사용해야 함. Node.js SMTP기반으로 개발된 전용 모듈인 nodemailer는 사용법이 매우 간단하여 사용하게 됨
eslint코드를 분석해 문법적인 오류를 찾아주거나 프로젝트 내에서 일관된 코드 스타일을 유지하기 위해 사용. 프로젝트에는 Airbnb의 코딩 컨벤션을 적용.

✍ 커밋 메세지 규칙

  • Feat : 새로운 기능 추가
  • Fix : 버그 수정
  • Style : 코드 양식 변경
  • Refactor : 코드 리팩토링
  • Test : 테스트 코드 수정
  • Docs : 문서 수정

🔥 트러블 슈팅


🧑‍💻 팀 구성

Backend
sounwooKyuwonKwon
Frontend
osdoonhyunapplepykimjinShineyrk721

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

⌨️ Dechive

데스크 셋업에 관심이 있는 사람들의 정보를 공유하고 다른 인테리어, 몰랐던 장비들을 알게 되는 계기를 만들어 줄 수 있는 커뮤니티를 만드는 프로젝트입니다.
사용자들은 자신의 책상 사진을 소개하고 구성한 장비들을 구입한 곳을 공유하고, 팔로우와 팔로위 기능으로 사용자들을 연결하고 게시물에 좋아요를 남겨 취향에 맞는 셋업에 쉽게 접근할 수 있습니다.


📆 프로젝트 기간

  • 2023.04.10 - 2023.05.04

🧱 아키택처


  • Node.js에서 Express 프레임 워크를 기반으로 만들어진 Nest.js를 통해 IoC와 같은 기능과 기본적으로 제공되는 모듈, 컨트롤러, 서비스 구조를 통해 개발 속도를 향상시키고 typescript를 통해 안정적인 개발이 가능.

  • Graphql 통신을 통해 REST API의 over,under-vetching을 피하고 하나의 엔드 포인트로 다양한 데이터들 중 필요한 정보만 요청 가능.

  • Nest.js와 Graphql과 함꼐 사용할 ORM은 팀원이 모두 사용해보고, 가장 점유율이 높아 다양한 예시코드와 Nest 공식문서에도 자료가 많은 TypeORM으로 선정하여 유지보수와 개발이 용이하게 함.

  • 유저의 회원등록에 편의성을 더하기위해 Google과 kakao 소셜로그인을 추가.

  • 특정 키워드에 대한 YouTube 영상들과 영상들에 대한 정보를 받아오기위해 YouTube Data API v3을 사용.

  • Redis를 통해 로그아웃시 토큰을 저장해 유저의 토큰을 만료시키고, 유튜브 API를 통해 받아온 데스크셋업 정보를 일정 기간에 한번 씩 초기화 할 수 있도록 사용.


🏖 ERD


🛠 기술 스택

Environment

VscodeGitGithub
EslintPrettierDocker

Developement

TypeScriptNestJsGraphql
MysqlRedisGoogleCloud



🕹️ 주요 기능

  1. 지금 유튜브에서 유행인 데스크 셋업을 소개
  2. 유저간 팔로워, 팔로위 기능을 통해 본인취향의 셋업에 손쉽게 접근
  3. 유저가 공유한 구입처 링크를 통해 og정보들 받아와 간략한 상품 정보를 제공한다.

📖 라이브러리

이름설명
typeormNest.js와 함께 사용하며 점유율이 가장 높고 데이터 매퍼 패턴을 지원하며 유지보수가 용이한 TypeORM을 사용
axiosFetch API와는 달리 요청및 응답객체를 직접작성하지 않고 매서드와 속성을 제공하여 코드가 간결해지고, Promise 처리과정에서 에러를 catch블록으로 던져주기에 자동으로 에러를 다룰수 있으므로 axios를 사용
redis클라이언트에서 동일한 요청이 계속 올때 서버에서 직접 데이터를 찾으면 상당히 비효율적이고 데이터의 크기에 따라 응답속도가 느려짐. 이때 요청결과를 미리 저장해 두었다가, 동일한 데이터 요청이 오면 바로 전달할 수 있도록 redis를 사용
bcrypt해시 함수들은 무결성 검사를 위해 빠른 속도가 필요하지만, 해커가 DB를 탈취 했을때 빠른 속도로 비밀번호를 알아낼 수 있음. 패스워드 저장에서의 해시 함수의 문제점을 보완해서 나온것이 pbkfd2. 8글자 부터는 동일 시스템에서 bcrypt가 pbkfd2보다 4배 이상의 시간을 소모해야 비밀번호를 알아낼 수 있기 때문에 보안성을 위해 사용
passportpassport는 express 프레임워크 상에서 사용되는 인증 미들웨어 라이브러리. strategies로 알려져 있는 인증 메커니즘을 각 모듈로 패키지화해서 제공. 즉, 앱은 passport에서 지원하는 전략을 선택해 의존성 없이 독립적으로 이용 가능함
nodemailer이메일 인증을 위해서 이메일 전송에 필요한 네트워크 프로토콜인 SMTP(우편 전송 프로토콜)을 사용해야 함. Node.js SMTP기반으로 개발된 전용 모듈인 nodemailer는 사용법이 매우 간단하여 사용하게 됨
eslint코드를 분석해 문법적인 오류를 찾아주거나 프로젝트 내에서 일관된 코드 스타일을 유지하기 위해 사용. 프로젝트에는 Airbnb의 코딩 컨벤션을 적용.

✍ 커밋 메세지 규칙

  • Feat : 새로운 기능 추가
  • Fix : 버그 수정
  • Style : 코드 양식 변경
  • Refactor : 코드 리팩토링
  • Test : 테스트 코드 수정
  • Docs : 문서 수정

🔥 트러블 슈팅


🧑‍💻 팀 구성

Backend
sounwooKyuwonKwon
Frontend
osdoonhyunapplepykimjinShineyrk721

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

⌨️ Dechive

데스크 셋업에 관심이 있는 사람들의 정보를 공유하고 다른 인테리어, 몰랐던 장비들을 알게 되는 계기를 만들어 줄 수 있는 커뮤니티를 만드는 프로젝트입니다.
사용자들은 자신의 책상 사진을 소개하고 구성한 장비들을 구입한 곳을 공유하고, 팔로우와 팔로위 기능으로 사용자들을 연결하고 게시물에 좋아요를 남겨 취향에 맞는 셋업에 쉽게 접근할 수 있습니다.


📆 프로젝트 기간

  • 2023.04.10 - 2023.05.04

🧱 아키택처


  • Node.js에서 Express 프레임 워크를 기반으로 만들어진 Nest.js를 통해 IoC와 같은 기능과 기본적으로 제공되는 모듈, 컨트롤러, 서비스 구조를 통해 개발 속도를 향상시키고 typescript를 통해 안정적인 개발이 가능.

  • Graphql 통신을 통해 REST API의 over,under-vetching을 피하고 하나의 엔드 포인트로 다양한 데이터들 중 필요한 정보만 요청 가능.

  • Nest.js와 Graphql과 함꼐 사용할 ORM은 팀원이 모두 사용해보고, 가장 점유율이 높아 다양한 예시코드와 Nest 공식문서에도 자료가 많은 TypeORM으로 선정하여 유지보수와 개발이 용이하게 함.

  • 유저의 회원등록에 편의성을 더하기위해 Google과 kakao 소셜로그인을 추가.

  • 특정 키워드에 대한 YouTube 영상들과 영상들에 대한 정보를 받아오기위해 YouTube Data API v3을 사용.

  • Redis를 통해 로그아웃시 토큰을 저장해 유저의 토큰을 만료시키고, 유튜브 API를 통해 받아온 데스크셋업 정보를 일정 기간에 한번 씩 초기화 할 수 있도록 사용.


🏖 ERD


🛠 기술 스택

Environment

VscodeGitGithub
EslintPrettierDocker

Developement

TypeScriptNestJsGraphql
MysqlRedisGoogleCloud



🕹️ 주요 기능

  1. 지금 유튜브에서 유행인 데스크 셋업을 소개
  2. 유저간 팔로워, 팔로위 기능을 통해 본인취향의 셋업에 손쉽게 접근
  3. 유저가 공유한 구입처 링크를 통해 og정보들 받아와 간략한 상품 정보를 제공한다.

📖 라이브러리

이름설명
typeormNest.js와 함께 사용하며 점유율이 가장 높고 데이터 매퍼 패턴을 지원하며 유지보수가 용이한 TypeORM을 사용
axiosFetch API와는 달리 요청및 응답객체를 직접작성하지 않고 매서드와 속성을 제공하여 코드가 간결해지고, Promise 처리과정에서 에러를 catch블록으로 던져주기에 자동으로 에러를 다룰수 있으므로 axios를 사용
redis클라이언트에서 동일한 요청이 계속 올때 서버에서 직접 데이터를 찾으면 상당히 비효율적이고 데이터의 크기에 따라 응답속도가 느려짐. 이때 요청결과를 미리 저장해 두었다가, 동일한 데이터 요청이 오면 바로 전달할 수 있도록 redis를 사용
bcrypt해시 함수들은 무결성 검사를 위해 빠른 속도가 필요하지만, 해커가 DB를 탈취 했을때 빠른 속도로 비밀번호를 알아낼 수 있음. 패스워드 저장에서의 해시 함수의 문제점을 보완해서 나온것이 pbkfd2. 8글자 부터는 동일 시스템에서 bcrypt가 pbkfd2보다 4배 이상의 시간을 소모해야 비밀번호를 알아낼 수 있기 때문에 보안성을 위해 사용
passportpassport는 express 프레임워크 상에서 사용되는 인증 미들웨어 라이브러리. strategies로 알려져 있는 인증 메커니즘을 각 모듈로 패키지화해서 제공. 즉, 앱은 passport에서 지원하는 전략을 선택해 의존성 없이 독립적으로 이용 가능함
nodemailer이메일 인증을 위해서 이메일 전송에 필요한 네트워크 프로토콜인 SMTP(우편 전송 프로토콜)을 사용해야 함. Node.js SMTP기반으로 개발된 전용 모듈인 nodemailer는 사용법이 매우 간단하여 사용하게 됨
eslint코드를 분석해 문법적인 오류를 찾아주거나 프로젝트 내에서 일관된 코드 스타일을 유지하기 위해 사용. 프로젝트에는 Airbnb의 코딩 컨벤션을 적용.

✍ 커밋 메세지 규칙

  • Feat : 새로운 기능 추가
  • Fix : 버그 수정
  • Style : 코드 양식 변경
  • Refactor : 코드 리팩토링
  • Test : 테스트 코드 수정
  • Docs : 문서 수정

🔥 트러블 슈팅


🧑‍💻 팀 구성

Backend
sounwooKyuwonKwon
Frontend
osdoonhyunapplepykimjinShineyrk721

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages