Giter VIP home page Giter VIP logo

team5_be's Introduction

Team5_BE

순수웨딩 소개

목차


프로젝트 소개

개발 동기 및 목적

예비 부부의 경우 결혼과 관련된 정보를 찾기 위해서는 웨딩 박람회, 온라인 검색, SNS 등 여러 방법을 사용하지만, 어디를 알아봐도 복잡하기만 하고 가격도 천차만별이라 선택하기 어렵습니다. 또한, 결혼 시장의 경우 일회성 고객이 대부분이다 보니 소비자보다 판매자 위주의 시장이 형성되어 왔습니다. 이에 따라 결혼 비용을 공개하지 않아 지인 소개 등으로 가면 훨씬 싸게 해주는 등 소비자 입장에선 모르고 당하기 십상입니다.

웨딩 플래너의 경우 무급으로 시작해서 실력이 아닌 연차가 쌓일 때까지는 최저시급에도 미치지 못하는 기본급을 받으며 열정 페이를 강요받아 어려움을 겪고 있었습니다.

✨ 저희 순수웨딩 팀은 앞선 웨딩플래너의 결혼 준비 비용 불투명성 문제와 웨딩 플래너의 급여 공정성 문제를 해결하기 위해 투명한 가격으로 이 둘을 매칭 해주는 서비스를 기획하게 되었습니다. ✨


서비스 소개

투명한 가격으로 웨딩 플래너와 예비 부부를 매칭하다, '순수웨딩'

  1. ✏️ 투명한 웨딩 플래너의 포트폴리오

    • 웨딩 플래너가 직접 등록한 자기 소개, 예상 가격, 사진, 사용자 리뷰등 볼 수 있어요
    • 순수 웨딩 멤버십에 가입하면 플래너의 실제 이전 계약 기록(업체, 가격, 날짜 등)을 볼 수 있어요
    • 마음에 드는 플래너를 찜할 수 있어요!
  2. 🗨️ 내 PICK! 플래너에게 채팅 상담받기

    • 원하는 플래너들과 채팅으로 상담받으며 결혼 준비를 할 수 있어요
  3. 📜 견적서로 결혼 진행 과정을 서로 공유해요

    • 채팅방에서 견적서를 만들어서 업체 이름, 가격 등을 확인하고 진행 상황을 한눈에 확인할 수 있어요
    • 전체 견적서를 확정하면 해당 플래너에 대한 리뷰를 작성할 수 있어요
  4. 💯 리뷰를 통해 생생한 결혼 진행 후기 확인하기

    • 다른 사람이 실제로 플래너와 진행한 후기를 들려줘요 이를 기반으로 더 좋은 플래너를 선택할 수 있어요
    • 해당 내용은 포트폴리오 상세 페이지에서 확인할 수 있어요

개발 기간

2023.09-11 (카카오 테크 캠퍼스 1기 - 3단계 진행 기간)


팀원 소개

이름 남원정 문석준 천영채 김정도
개발 범위 회원, 결제, 찜하기 토큰, 이메일, 포트폴리오, 견적서 채팅, 매칭, 견적서, 리뷰 포트폴리오

주요 기능

  • ✏️ 포트폴리오
  • 🗨️ 채팅 상담
  • 📜 견적서
  • 💯 리뷰
분류 기능1 기능2
포트폴리오 포트폴리오 조회 포트폴리오 등록
• 플래너가 등록한 정보, 이미지, 리뷰 등 조회
• 검색과 필터링
• 멤버십 사용자 - 지난 계약 정보(진행 가격, 업체 등) 조회
• 찜하기
• 플래너의 소개, 가격 등의 정보를 등록
• 수정 및 삭제
채팅 상담 채팅 상담
견적서 예비 부부 견적서 플래너 견적서
• 견적서 전체 리스트 조회
• 견적서 매칭별 리스트 조회
• 매칭 확정
• 견적서 등록, 수정, 삭제
• 견적서 1개 확정
리뷰 리뷰
• 리뷰 전체 리스트 조회
• 리뷰 플래너별 리스트 조회
• 리뷰 상세 조회
• 등록 수정 삭제

링크 모음

기획 디자인 개발 배포
노션 와이어프레임 백엔드 깃허브 프론트 배포 주소
기획안 PPT ERD 백엔드 / 풀스택 배포 주소
Survey API 문서
테스트 시나리오 명세서 유튜브
테스트 결과 보고서

ERD

ERD

API 모아보기

API 모아보기

파일 구조

└───📂src
    ├───📂main
    │   ├───📂generated
    │   ├───📂java.com.kakao.sunsuwedding
    │   │               ├───📁chat
    │   │               ├───📁favorite
    │   │               ├───📁match
    │   │               ├───📁payment
    │   │               ├───📁portfolio
    │   │               │   ├───📁cursor
    │   │               │   ├───📁image
    │   │               │   └───📁price
    │   │               ├───📁quotation
    │   │               ├───📁review
    │   │               │   └───📁image
    │   │               ├───📁user
    │   │               │   ├───📁base_user
    │   │               │   ├───📁constant
    │   │               │   ├───📁couple
    │   │               │   ├───📁mail
    │   │               │   ├───📁planner
    │   │               │   └───📁token
    │   │               └───📁_core
    │   │                   ├───📁constants
    │   │                   ├───📁errors
    │   │                   │   └───📁exception
    │   │                   ├───📁security
    │   │                   └───📁utils
    │   └───📂resources
    │       ├───📁db
    │       └───📁env
    └───📂test
        └───📂java.com.kakao.sunsuwedding
            ├───📁chat
            ├───📁favorite
            ├───📁match
            ├───📁payment
            ├───📁portfolio
            │   ├───📁image
            │   └───📁price
            ├───📁quotation
            ├───📁review
            ├───📁user
            ├───📁util
            └───📁_core

시작 가이드

Requirements: Java 17, Spring 3.1.4

순수웨딩 환경 변수 설정이 완료되어야 프로젝트가 실행됩니다.

  1. 프로젝트 클론
git clone https://github.com/Step3-kakao-tech-campus/Team5_BE.git
cd Team5_BE
cd sunsu-wedding
  1. 실행
./gradlew build
cd build
cd libs
java -jar sunsu-wedding-0.0.1-SNAPSHOT.jar

기술 스택

기술 스택)


License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

team5_be's People

Contributors

1jeongg avatar chaee813 avatar donghyun-manager avatar fc-hyeonjeong avatar rizingblare avatar seokwns avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

team5_be's Issues

포트폴리오 이미지 항목 및 가격 항목 엔티티 수정

📌 설명

이미지 저장 방식이 변경됨에 따라 이미지 엔티티가 수정될 필요가 있을 듯함
추가로 엔티티 코드를 구현할 때 컬럼에 NotNull 등의 제약조건을 고려하지 않고
일단 그냥 컬럼만 추가했기 때문에 필요한 제약조건들을 고려해서 수정할 필요가 있음

✅ 할 일

  • 이미지 엔티티 컬럼 추가 및 수정
  • 이미지 및 가격 엔티티 컬럼 제약 조건 추가

⛔ 수정 필요(Optional)

📃 참고 자료

견적서 1개 확정, 수정 기능 구현

📌 설명

견적서 기능 구현 마무리하기

✅ 할 일

  • 견적서 1개 확정 기능 구현
  • 견적서 수정 기능 구현
  • 테스트 코드 작성

⛔ 수정 필요(Optional)

📃 참고 자료

유저 BaseEntity 생성 및 soft delete 적용

📌 설명

  • 멘토링 때 유저 2명에 관한 처리를 여쭤봤는데 BaseEntity를 사용하라고 하셔서 이 부분을 적용할 것이다.
  • 유저에서 soft delete 사용하기

✅ 할 일

  • User의 BaseEntity 생성하기
  • 유저 부분의 soft delete
  • 테스트 코드 추가하기

포트폴리오 조회 구현 방식 변경

📌 설명

포트폴리오 리스트 조회 방식을 기존 페이지 기반에서 커서 기반 페이지네이션으로 변경

✅ 할 일

  • 커서 기반 페이지네이션 구현

견적서 등록, 조회 구현

📌 설명

견적서 등록 및 조회 기능 구현

✅ 할 일

  • 견적서 등록
  • 견적서 조회
  • 테스트 코드 작성

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 업데이트 로직 변경

📌 설명

현재 포트폴리오 업데이트 관련 기능들을 포트폴리오 엔티티에 컬럼별로 update 메서드를 추가해서 변경하고 있는 방식이 불변 객체 패턴에 어긋나므로, 변경이 필요한 경우 새 객체를 생성하는 방식으로 변경

✅ 할 일

  • PortfolioService의 updatePortfolio 로직 수정
  • ImageItemService의 updateImage 로직 수정

⛔ 수정 필요(Optional)

📃 참고 자료

유저 정보 조회, 등급 업그레이드

📌 설명

유저와 관련된 기능 추가

✅ 할 일

  • 유저 role, email 등을 조회하는 user/info api 구현
  • 유저 등급을 premium으로 변경하는 user/upgrade api 구현

매칭내역 수정, 삭제 테스트 코드 추가

📌 설명

매칭 내역 수정 및 삭제 기능 테스트 코드 추가

✅ 할 일

  • 견적서 전체 확정 및 매칭 내역 삭제 예외 처리 추가
  • 견적서 전체 확정 및 매칭 내역 삭제 테스트 코드 추가

⛔ 수정 필요(Optional)

📃 참고 자료

회원 탈퇴 기능 완성

📌 설명

  • 회원 탈퇴 기능 모두 완성

✅ 할 일

  • 탈퇴 시 견적서 및 매칭 내역 어떻게 처리할 지 정하기
  • 정해진 방법에 따라 userService에서 withdraw 메서드 완성
  • 테스트 코드 재실행 및 기능 확인

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 필터링 기능 구현

📌 설명

포트폴리오 리스트 조회 시, 플래너 이름과 지역으로 필터링한 결과를 보여주는 기능 구현

✅ 할 일

  • 필터링 기능 구현
  • 컨트롤러 요청 양식 변경

포트폴리오 이미지 서비스 로직 수정

📌 설명

멘토 님께 제안받은 개선점들을 수정 및 보완

✅ 할 일

  • uploadImage와 updateImage 메서드 내부의 중복 코드를 별도의 메서드로 추출
  • Exception 대신 구체적인 예외 클래스 명시
  • 로깅 활용 방식 연구

⛔ 수정 필요(Optional)

📃 참고 자료

Chat, Match 엔티티 분리

📌 설명

Chat과 Match 엔티티 분리

✅ 할 일

  • Chat 엔티티에 채팅방 생성, 삭제 기능 생성
  • Match 엔티티에는 전체 견적서 확정 기능 남기기

⛔ 수정 필요(Optional)

📃 참고 자료

유저 등급에 따른 포트폴리오 상세 조회

📌 설명

멤버십에 가입한 유저들에게만 해당 플래너의 이전 거래 내역 정보가 보여질 수 있도록

✅ 할 일

  • PortfolioService 에서 포트폴리오 상세 조회 로직 수정
  • [ ]

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 이미지 보관방식 수정

📌 설명

  • 포트폴리오 등록에서 전달받은 이미지를 서버에 (.jpg)로 저장하는 현재 방식은
    이미지가 추가될 때마다 매번 다시 배포해야 하는 단점이 존재함.
  • 따라서 이미지 파일을 base62의 문자열 데이터로 인코딩 하는 등
    별도의 방식을 통해 이미지 저장에 대해서 고민해볼 필요가 있음

✅ 할 일

  • 서버에 이미지를 효과적으로 저장하는 방법에 대해서 팀원들과 고민해보기
  • 이미지 저장 로직 수정하기

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 등록 및 수정 예외처리

📌 설명

포트폴리오 등록 및 수정 서비스 로직에서 발생할 수 있는 예외 상황들을
파악하고 해당 상황들을 핸들링 할 수 있는 예외 처리 코드 추가

✅ 할 일

  • 포트폴리오 등록을 요청한 웨딩 플래너의 포트폴리오가 이미 존재하는 경우 예외처리
  • 또 뭐가 있을까나

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 평균 거래가격 계산 로직 수정

📌 설명

포트폴리오 거래내역의 평균 가격 계산 시 divide by zero 문제 해결
탈퇴한 플래너의 포트폴리오 id로 조회 시 예외 처리

✅ 할 일

  • 포트폴리오 거래내역의 평균 가격 계산 시 divide by zero 문제 해결
  • 탈퇴한 플래너의 포트폴리오 id로 조회 시 예외 처리

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 등록 및 수정 테스트 코드 작성하기

📌 설명

  • 포트폴리오 등록 및 수정 기능
    -> 레포지토리 & 기능 단위 테스트 및 통합 테스트 코드 구현

✅ 할 일

  • 테스트 코드 짜는 법 공부하기
  • 학습한 내용을 토대로 테스트 코드 구현 하기

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 avg, min, max 값 업데이트

📌 설명

견적서 전체 확정 시 포트폴리오의 거래 내역 평균, 최소, 최대 가격을 업데이트 한다

✅ 할 일

  • 견적서 전체 확정 시 avg, min, max 가격 구하기
  • 각 가격 플래너 포트폴리오에 업데이트

⛔ 수정 필요(Optional)

📃 참고 자료

에러 메시지 중복 버그

📌 설명

토큰 관련 오류가 발생하면 에러 메시지가 중복되어 출력되는 문제 발생

✅ 할 일

  • 메시지를 응답 content에 추가할 때, 버퍼를 비워서 하나의 오류 메시지만 담기도록 수정

채팅방 생성 API 수정 및 테스트코드 추가

📌 설명

채팅방 생성시 chatId 반환

✅ 할 일

  • 결제 관련 테스트 코드 생성
  • 유저-플래너당 채팅방은 최대 한 번만
  • Match 생성 테스트 코드 생성
  • User RepositoryTest 수정

⛔ 수정 필요(Optional)

📃 참고 자료

유저 리팩토링 & 결제 관련 API 추가

📌 설명

4주차 Code Review를 기반으로 한 리팩토링 작업

✅ 할 일

  • testcode
    • 테스트 코드에서 비밀번호 검증하지 않기 → 유틸리티 클래스에서 수행하기
    • 정적 임포트 사용
  • 로깅 사용하기
  • 사용하지 않는 import 제거
  • CustomUserDetailsService
    • UsernameNotFoundException 예외 날리기
    • Planner와 Couple 동시 존재 검증 로직
    • plannerPS와 couplePS 변수명에 'PS' 접미사의 의미가 명확하지 않습니다. 보다 명시적인 이름을 사용하면 좋습니다.
  • JWTProvider
    • 토큰 생성 시에 "Bearer " Prefix를 붙이고, 검증 시에는 해당 Prefix를 제거하는 로직이 있습니다. 이런 작업은 JWTProvider 외부에서 처리하는 것이 좋을 수 있습니다. JWTProvider는 순수하게 JWT와 관련된 작업만 수행하게 하면 좋겠습니다.
    • create(Couple couple)와 create(Planner planner) 메서드에서 중복 코드가 있습니다. 공통 로직을 별도의 메서드로 분리하여 코드 중복을 줄일 수 있을 것 같습니다.
    • create(Couple couple)와 create(Planner planner) 메소드는 중복되는 로직이 많습니다. 중복을 최소화하려면 별도의 private 메소드로 리팩토링하는 것이 좋습니다.
  • JWTAuthenticationFilter
    • 📌 Role을 확인하는 로직에서, Role.valueOfRole 메소드를 사용하여 유효한 Role을 가져옵니다. 만약 잘못된 Role이 올 경우, 직접 예외를 발생시키는 것이 좋을 것 같습니다.
  • JWTExceptionFilter
    • ObjectMapper는 thread-safe 하므로, 여러 곳에서 재사용될 수 있습니다. Spring의 빈으로 등록해서 주입 받아 사용하는 것이 좋습니다. 이렇게 하면 해당 클래스 외부에서도 동일한 ObjectMapper 인스턴스를 사용할 수 있게 됩니다.
  • ApiUtils
    • 현재 ApiResult와 ApiError 클래스에 [@Setter](https://github.com/Setter) 애너테이션을 사용하였습니다. API 응답은 일반적으로 immutable해야 합니다. 즉, 일단 생성되면 변경되지 않아야 합니다. 따라서, setter 메소드는 제거하는 것이 바람직합니다.
    • ApiError의 status는 HTTP 상태 코드를 나타내는 것 같습니다. 그렇다면 int status보다는 HttpStatus status 타입을 사용하는 것이 더 명확할 수 있습니다. 이 경우, .value() 메소드를 통해 실제 상태 코드의 정수값을 얻을 수 있습니다.
  • Annotation 순서 정하기
  • column명 snake case로

결제 관련 API

image

포트폴리오 없을 때 가격 업데이트 예외 처리

📌 설명

견적서 전체 확정 시에 해당 플래너의 포트폴리오가 없다면 에러 발생하는 부분 해결

✅ 할 일

  • 견적서 전체 확정 시 포트폴리오 없으면 에러 없이 전체 확정 Status만 업데이트
  • 포트폴리오 삭제 후 다시 등록하면 이전 거래내역 기준으로 가격 업데이트 하기

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 거래내역 조회 추가

📌 설명

포트폴리오 상세 조회 메서드에 거래내역 조회 부분 추가

✅ 할 일

  • 거래내역 관련 DTO 생성
  • 거래내역 관련하여 포트폴리오 상세 조회 메서드 수정

⛔ 수정 필요(Optional)

📃 참고 자료

코드 리팩토링

📌 설명

코드 리팩토링

✅ 할 일

  • 응답 DTO 파일 통일시키기
  • 파일 저장 방법 변경
  • 어노테이션 정리

⛔ 수정 필요(Optional)

📃 참고 자료

멘토님 코드리뷰 기반 리팩토링

📌 설명

6주차 코드리뷰 기반 리팩토링

✅ 할 일

  • is_active → isActive로 변경
  • PortfolioService에서의 메서드들이 길다 → 더 작은 메서드로 분리
  • ResultActions의 실행과 응답바디의 로깅부분이 반복 → 메서드로 추출

⛔ 수정 필요(Optional)

📃 참고 자료

매칭내역 수정, 삭제

📌 설명

매칭내역 관련 Update, Delete 기능 구현

✅ 할 일

  • 전체 확정 상태 변경 기능 구현 (매칭내역 status 업데이트)
  • 매칭 내역 soft delete 구현

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 엔티티 썸네일 컬럼 추가하기

📌 설명

현재 포트폴리오 등록 및 수정 기능에 썸네일 항목이 누락되어 있는 상태이므로 수정이 필요함

✅ 할 일

  • 석준 님이 작성한 코드 파트 분석
  • 제반사항들을 고려한 엔티티 및 서비스 로직 수정

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 READ, DELETE 테스트 코드 작성

📌 설명

포트폴리오에 대한 읽기, 삭제 테스트 코드 작성

✅ 할 일

  • READ 성공 테스트 케이스 작성
  • READ 실패 테스트 케이스 작성
  • DELETE 성공 테스트 케이스 작성
  • DELETE 실패 테스트 케이스 작성

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 수정 로직 구현

📌 설명

포트폴리오 수정 하기

✅ 할 일

  • [ 플래너 정보를 통해 기존에 작성한 포트폴리오 데이터를 전달해주는 API ]
  • [ 수정된 포트폴리오 데이터를 DBMS에 반영하는 API ]

⛔ 수정 필요(Optional)

📃 참고 자료

Payment 엔티티 분리

📌 설명

user와 payment 를 분리하기

✅ 할 일

  • Payment 분리하기
  • Payment 테스트 작성하기
  • 필드에 paymentKey 추가하기
  • 테스트 auto-increment 에러 수정하기

유저 업그레이드 response 바꾸기 및 멘토님 코드리뷰 기반 리팩토링

📌 설명

유저 업그레이드시 body가 잘못된 경우 error response를 보내주기 (현재는 success responseBody에 "fail"을 담음
멘토님 코드 리뷰 기반 리팩토링

✅ 할 일

  • 유저 업그레이드시 error message 변경
  • JWTProvider에서 메서드 non-static으로 변경
  • Object.equals() 할 때 null이 들어있는 경우 에러
  • GlobalExceptionHandler에서 예외 처리 메서드 중복 줄이기
  • Exception Class 이름 바꾸기
  • FilterResponseUtils의 메서드 일반화하기
  • Column명 카멜케이스로 바꾸기

⛔ 수정 필요(Optional)

📃 참고 자료

refresh-token 구현

📌 설명

보안 강화를 위한 refresh token 구현

✅ 할 일

  • 응답 DTO 변경
  • refresh token 구현

로그인, 회원가입 리팩토링

📌 설명

멘토님 피드백 이후 로그인 및 회원가입 부분 리팩토링

✅ 할 일

  • 로그인 DTO 수정 및 관련 기능 수정
  • 회원가입 코드 수정
  • teardown.sql에 raw password 주석으로 추가

⛔ 수정 필요(Optional)

📃 참고 자료

포트폴리오 썸네일 불일치 문제

📌 설명

포트폴리오와 썸네일 이미지를 조회할 때, 순서 불일치 문제가 발생합니다.

✅ 할 일

  • 포트폴리오와 이미지 순서를 일치시키기

견적서 등록, 확정 시 가격 업데이트 문제

📌 설명

견적서 등록, 1개 확정 시 매칭 내역에서 가격 업데이트가 안되는 문제

✅ 할 일

  • 견적서 등록 시 매칭 내역에서 전체 가격 업데이트
  • 견적서 1건 확정 시 매칭 내역에서 확정 가격 업데이트

포트폴리오 조회 시 1+N 문제 해결

📌 설명

포트폴리오 조회 쿼리를 요청하면 유저 정보 검색으로 인해 추가 쿼리 발생

✅ 할 일

  • 추가 쿼리 방지를 위해 테이블 join 메서드 추가하기

회원 탈퇴 기능 기본 구현

📌 설명

  • 회원 탈퇴 구현 (플래너, 예비 부부)

✅ 할 일

  • Controller 에서 회원 탈퇴 api 매핑 및 메서드 구현
  • Match Entity 작성 , Repository 생성
  • Quotation Entity 작성, Repository 생성
  • Service에서 DB에 저장된 회원 정보 및 관련 정보들 처리를 위한 스켈레톤 코드 짜기

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.