Coder Social home page Coder Social logo

f-lab-edu / share-my-hobby Goto Github PK

View Code? Open in Web Editor NEW
18.0 2.0 1.0 314 KB

[대기업SI -> 카카오 이직, 연봉 6,000만원 이상 이직] 동네 기반 취미 공유 서비스 개발 프로젝트

Java 100.00%
decacorn f-lab graduate java-backend

share-my-hobby's Introduction

🎮 Share My Hobby

동네기반 취미공유 서비스 - Share My Hobby

💡 서비스 및 프로젝트 소개

Share My Hobby 는 이웃들과 함께 취미를 공유할 수 있는 커뮤니티 서비스 입니다. 사용자들은 온라인 상에서 자신이 살고 있는 동네를 기반으로 이웃들과 관심있는 취미에 대한 이야기를 나누고, 정보를 교류하고, 취미를 전파하기 위한 자신만의 클래스를 개설할 수도 있습니다. 본 프로젝트는 Share My Hobby 의 서버 개발을 하며 만났던 다양한 문제들과 그런 문제들을 해결하기 위해 고민했던 내용들, 그리고 실제 구현 코드들을 담고 있습니다.
항상 다음과 같은 질문을 던지며 프로젝트를 진행하고 있습니다.

  1. 이 코드들은 충분히 확장에 용이한가?
  2. 이 아키텍처는 대용량의 트래픽에도 안정적인가?
  3. 사용성을 더욱 개선시킬 수는 없을까?

아직 구현해야할 기능과 해결해야할 이슈들이 많이 남아있지만, 어떤 상황에서도 견고한 서비스를 만들기 위해 꾸준히 개선해나갈 예정입니다.

🔍 서비스 기능

Share My Hobby 에는 크게 다음과 같은 기능들이 있습니다. 더 자세한 내용들은 이곳을 참고해 주세요.

  • 자신과 관심 취미가 맞는 이웃들과 함께 자유롭게 이야기를 나눌 수 있습니다.
  • 자신의 취미를 전수하고 싶은 분들은 자신만의 취미 클래스를 개설할 수 있습니다.
  • 우리 동네에서 즐길 수 있는 취미와 관련된 정보들을 제공받을 수 있습니다.(예정)

🚀 프로젝트 목표

서비스의 기능을 구현하는 것 자체도 중요하지만, 어떤 과정을 통해 어떻게 구현했는지가 그 이상으로 중요하다고 생각합니다. 예를 들어, 실무에서는 개인이 아닌 팀 단위로 개발을 진행하기 때문에 합의된 코딩 스타일과 개발 프로세스를 유지해야 하고 효율적인 협업 방식을 고려해야합니다. 또 실무에서의 서비스 규모는 훨씬 크고 복잡하기 때문에 유지보수성 고려하여 일정 좋은 코드 퀄리티와 유연한 설계를 유지해야 합니다.
따라서 Share My Hobby 개발 프로젝트에서는 아래와 같은 목표들을 세운 후, 팀 단위로 실제 운영 중인 서비스를 개발하는 상황에서 어떻게 이와 같은 목표를 달성할 수 있을지 고민하며 개발을 진행하고 있습니다.

  1. 유연한 설계와 확장성 높은 코드로 유지보수성을 높이자

    • 여기저기 중복되는 코드들, 기능을 수정하고 추가할 때 마다 불필요한 수정을 필요로 하는 상황들을 최소화하고 유지보수성을 높이기 위해 노력합니다.
    • 이를 위해 SOLID 원칙과 디자인 패턴에 대한 이해를 바탕으로 객체지향의 장점을 최대한 활용하는 코드를 작성합니다.
  2. 대용량 트래픽을 고려하여 아키텍처를 구성하자

    • 서비스가 빠르게 성장함에 따라 함께 빠르게 증가하는 트래픽에도 견딜 수 있는 아키텍처를 설계하기 위해 노력합니다.
    • 아키텍처를 구성하는 다양한 방법들 간의 trade-off를 분석하고 분석한 내용을 바탕으로 설계를 진행합니다.
  3. 테스트 코드를 통해 개발한 코드의 신뢰를 높이자

    • 안정적인 서비스를 개발하기 위해 테스트 코드는 필수입니다. 꼼꼼히 작성된 테스트 코드들은 개발한 코드의 올바른 동작을 보장해주며 이를 통해 다른 팀원들에게도 신뢰를 줄 수 있습니다. 또 잘 작성된 테스트 코드 목록은 전체적인 서비스를 파악할 수 있는 하나의 명세서 역할을 하기도 합니다.
    • 따라서 기능을 수정/추가할 때마다 반드시 테스트 코드를 작성하되 빠른 테스트를 통한 효율적인 개발 사이클을 유지하기 위해 테스트 스텁(stub)을 활용하여 고립된 단위 테스트 코드를 작성합니다.
  4. 문서화를 통해 협업 효율성을 높이자

    • 프론트엔드-백엔드 팀이 협업하는 환경에서 요청과 응답 방식에 대해 잘 정리된 API 문서는 원활한 커뮤니케이션을 도와주는 좋은 자료가 됩니다. 뿐만 아니라 외부의 사용자가 우리가 개발한 API를 호출하기 위해서도 API 문서는 필수적입니다.
    • 하지만 개발을 진행하며 API 문서를 함께 직접 작성하는 것은 비효율적이기 때문에 Spring RestDocs와 같은 툴을 활용하여 문서 작업을 자동화할 수 있는 방법을 고민합니다.
  5. CI/CD를 구축하여 개발 프로세스의 효율성을 높이자

    • 다수의 개발자가 하나의 서비스를 개발해나가는 환경에서는 각자의 코드를 머지하고 충돌을 해결하고 테스트하고 빌드, 배포하는 과정에도 많은 리소스가 소요됩니다. 이러한 문제를 해결하기 위한 방법으로 CI/CD를 직접 구축하여 애자일한 개발 프로세스를 실현하기 위해 노력합니다.
  6. 성능 테스트를 통한 성능을 개선하자

    • 실제 서비스 환경에서 트래픽이 몰리는 경우 예상치 못한 문제들이 발생할 수 있기 때문에 성능 테스트 역시 반드시 병행되어야 합니다. 성능 테스트를 통해 병목 지점을 개선하고 컴퓨팅 자원을 더 효율적을 활용할 수 있는 방안들을 고민하여 성능을 향상시키기 위해 노력합니다.
    • nGrinder와 Pinpoint와 같은 툴을 이용해 높은 트래픽을 발생시키고 성능을 모니터링하여 개선점을 찾아냅니다.

🔧 사용 기술 스택

  • Java 8
  • Spring Boot
  • JUnit5
  • MySQL 8.0
  • MyBatis
  • Redis
  • AWS S3
  • Naver Cloud Platform

🤖 프로젝트 아키텍처

system_architecture

❗ 이슈 정리

💾 ER Diagram

  • 지속적으로 업데이트 중입니다.

erd

share-my-hobby's People

Contributors

cold-pumpkin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

saintyun

share-my-hobby's Issues

취미 목록 조회 시 캐시 활용

Description

  • 취미 카테고리 및 취미 목록 조회 시 캐시 활용

Todo

  • Spring Cache 도입하여 취미 목록 조회 시 캐싱된 데이터 조회하도록 구현

회원가입 기능

Description

  • 회원가입 기능 구현

Todo

  • 멤버 관련 객체 설계
  • 회원가입 요청/응답 객체 설계
  • 회원가입 서비스 로직 설계
  • 회원가입 테스트 코드 작성

로그인 기능

Description

  • 로그인 기능 추가
  • 이메일 중복 체크 구현

Todo

  • 로그인 시 이메일로 회원 정보 존재 여부 체크
  • 회원 정보 존재할 시 패스워드 체크
  • 회원 정보 없을 시 예외처리
  • 로그인 테스트 코드 작성

유저 프로필 수정 기능

Description

  • 유저 프로필 이미지 및 상태 메시지 수정

Todo

  • AWS S3 프로필 이미지 업데이트
  • DB의 유저 상태 메시지 내용 업데이트

유저 동네 정보 등록 기능

Description

  • 유저 동네 이름으로 주소 조회하기

Todo

  • 외부 API 활용해 주소 파악 기능 구현
  • 주소 정보 리스트 리턴하도록 구현

AWS S3 파일 삭제 기능

Description

  • 추후 프로필 수정 서비스 구현을 위해 AWS S3에 업로드 했던 기존 파일 삭제 기능 구현

Todo

  • AWS S3 S3ClientdeleteObject 메소드 활용하여 삭제 기능 추가
  • AWS S3에 파일이 삭제되었는지 확인하는 테스트 코드 작성

프로젝트 생성

Description

  • 스프링 부트 프로젝트 생성

Todo

  • Maven Project
  • 스프링 부트 버전 확인 및 선택 (v2.4.3)
  • Java 11
  • 초기 의존성 추가
    • Spring Web
    • Lombok
    • MySQL Driver
    • MyBatis Framework

로그아웃 & 회원탈퇴 기능

Description

  • 로그아웃 기능 추가
  • 회원탈퇴 및 회원 기본정보 수정 기능 추가
  • 닉네임 & 패스워드 수정 기능 추가

Todo

  • 로그아웃 & 회원탈퇴 시 세션 정보 삭제
  • 닉네임, 비밀번호 수정 컨트롤러/서비스 구현
  • 현재 로그인 되어있는 경우에만 현재 요청 처리될 수 있도록 구현
  • 각 기능별 테스트 코드 추가

Redis 세션 스토리지 연동

Description

  • Redis 연동하여 세션 데이터 활용

Todo

  • 추후 회원가입/로그인/로그아웃 등 서비스에서 세션 데이터 활용 수 있도록 연동 개발

Jenkins로 CD 환경 구축

Description

  • Jenkins 활용하여 CD 환경 구축

Todo

  • 네이버 클라우드 서버 생성
  • MySQL, Redis, Nginx, WAS 등 서버 띄우기

회원가입 시 이메일 중복 체크 로직 추가

Description

  • 현재 회원가입 시 이메일 중복 체크 로직 부재로 인해 중복 이메일 입력 시 SQLIntegrityConstraintViolationException 발생

Todo

  • 이메일 중복 체크 로직 추가하여 예외 발생 시 적절한 RuntimeException 발생하도록 구현

유저 취미 관련 테이블 설계

Description

  • 유저들의 취미 관련 테이블 정보를 저장할 테이블 스키마 설계

Todo

  • 카테고리별로 취미 데이터를 담을 테이블 설계
  • DDL 쿼리 작성

사용자 관심 취미 등록 기능

Description

  • 사용자가 선택한 관심 취미 등록하는 기능 개발

Todo

  • 선택된 관심 취미 리스트를 받아 DB에 저장하는 서비스 구현
  • 응답으로 선택한 취미 정보 리스트를 리턴하도록 구현

Spring REST Docs 연동하여 문서화

Description

  • API 문서 자동화를 위해 Spring REST Docs 도입 하기

Todo

  • API 문서 자동화를 위한 툴 비교
  • Spring REST Docs 적용해 API 문서 자동화

README 업데이트

Description

  • README 업데이트

Todo

  • 프로젝트 소개 작성
  • 기술 스택 작성
  • 프로젝트 목표 작성
  • 프로젝트 구성도 이미지 첨부

카테고리 및 취미 목록 보여주기

Description

  • 사용자에게 취미 카테고리 및 취미 목록 노출

Todo

  • 취미 카테고리별로 취미 목록 가져오도록 기능 구현
  • 테스트코드 작성

Jenkins로 CI 환경 구축

Description

  • 젠킨스를 활용하여 CI 환경 구축하기

Todo

  • 네이버 클라우드 젠킨스 서버 도입

유저 주소 등록 기능

Description

  • 조회된 주소 목록 중 하나 선택 시 주소 등록

Todo

  • 주소 정보 DB 저장
  • 유저 당 최대 저장 가능 주소 개수 체크하기

유저 프로필 설정 기능

Description

  • 회원가입 후 유저 프로필 정보 등록 기능
  • 프로필 정보는 프로필 이미지 및 상태 메시지 설정로 구성됨

Todo

  • 프로필 이미지 등록을 위한 파일 업로드 기능 구현
  • 프로필 이미지 저장을 위한 스토리지 선택하기

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.