Giter Club home page Giter Club logo

swacademy-server's Introduction

SWAcademy-Server

탄소중립 sw아카데미 다회용기팀 서버

👥 Server 팀원

이희주 황규혁 김동한
희주 동한
@hj1487 @Gyuhyeok99 @kdhan235

🌟 담당 역할

담당 역할 Role
Nginx 배포, CI/CD 구축 황규혁
DB 구축 (RDS) 황규혁
ERD 작성 이희주, 황규혁, 김동한
API 개발 황규혁

🛠️ 개발 환경

통합 개발 환경 IntelliJ
Spring 버전 3.2.4
데이터베이스 AWS RDS(MySQL), ElastiCache(Redis)
배포 AWS Elastic beanstalk, EC2
Project 빌드 관리 도구 Gradle
Java version java 17
패키지 구조 도메인 패키지 구조
API 테스트 PostMan, Swagger(https://dev.swacademy.store/swagger-ui/index.html#/)

🔧 시스템 아키텍처

아키텍처

📜 API Docs

🔗 API Docs

☁️ERD

erd

✨Structure

api-server-spring-boot
  > .ebextensions-dev // dev 서버 관련 ci/cd 구축
    | 00-makeFiles.config
    | 01-set-timezone.config
  > .ebextensions-�prod // prod 서버 관련 ci/cd 구축
    | 00-makeFiles.config
    | 01-set-timezone.config
  > .github
    > ISSUE_TEMPLATE
      | ✨feat.md
      | 🆘help.md
      | 🐛bug-report.md
      | 🚑fix.md
    > worksflows
      | develop_dev.yml // dev 서버 github action을 위한 파일
      | develop_prod.yml // prod 서버 github action을 위한 파일
  > .platform
    | nginx.conf // nginx 설정
  > * build
  > gradle
  > src.main.java.carbonneutral.academy
    > api
      > controller
        > auth
          > dto
            > request
            > response
          | AuthController.java
        > point
          > dto
            > request
            > response
          | PointController.java
        > use
          > dto
            > request
            > response
          | UseController.java
        > user
          > dto
            > request
            > response
          | UserController.java
      > converter
        > auth
          | AuthConverter.java
        > time
          | TimeConverter.java
        > use
          | UseConverter.java
        > user
          | UserConverter.java
      > service
        > auth
          > social // 소셜 로그인 관련
            > kakao
              | KakaoLoginService.java
              | KakaoLoginServiceImpl.java
          | AuthService.java
          | AuthServiceImpl.java
        > point
          | PointService.java
          | PointServiceImpl.java
        > use
          | UseService.java
          | UseServiceImpl.java
        > user
          | UserService.java
          | UserServiceImpl.java
    > common
      > code
        > status
          | ErrorStatus.java // 에러 응답 메시지 모아놓은 곳
          | SuccessStatus.java // 성공 응답 메시지 모아놓은 곳
        | BaseCode.java
        | BaseErrorCode.java
        | ErrorReasonDTO.java
        | ReasonDTO.java
      > config
        | AppConfig.java
        | RedisConfig.java // 레디스 관련 설정
        | Security.config.java // Spring Security 관련 설정
        | SwaggerConfig.java // Swagger 관련 설정
      > exceptions
        > handler
          | ExceptionHandler.java
        | BaseException.java // Controller, Service에서 Response 용으로 공통적으로 사용 될 익셉션 클래스
        | ExceptionAdvice.java // ExceptionHandler를 활용하여 정의해놓은 예외처리를 통합 관리하는 클래스
      | BaseEntity.java // create, update, state 등 Entity에 공통적으로 정의되는 변수를 정의한 BaseEntity
      | BaseResponse.java // Controller 에서 Response 용으로 공통적으로 사용되는 구조를 위한 모델 클래스
    > domain
      > location
        > enums
          | LocationType.java
        > repository
          | LocationJpaRepository
        | Location.java
      > mapping
        > repository
          | LocationContainerJpaRepository.java
        | LocationContainer.java
      > multi_use_container
        > repository
          | MultiUseContainerRepository.java
        | MultiUseContainer.java
      > point
        > repository
          | PointJpaRepository.java
        | Point.java
      > use
        > enums
          | UseStatus.java
        > repository
          | UseJpaRepository.java
          | UseQueryRepository // 통계 쿼리를 위한 querydsl용 repository
        | Use.java
      > user
        > enums
          | Permission.java //권한 부여
          | Role.java // 유저 역할
          | SocialType.java
        > repository
          | UserJpaRepository.java
        | User.java
    > utils
      > jwt // jwt 관련
        | JwtAuthenticationFilter.java
        | JwtProvider.java
        | LogoutService.java // 로그아웃
      | ApplicationAuditAware.java
      | RedisProvider.java // 레디스 서비스
    | AcademyApplication // SpringBootApplication 서버 시작 지점
  > resources
    | application.yml // Database 연동을 위한 설정 값 세팅 및 Port 정의 파일
    | application-dev.yml // dev 연동
    | application-local.yml // local 연동
build.gradle // gradle 빌드시에 필요한 dependency 설정
.gitignore // git 에 포함되지 않아야 하는 폴더, 파일들을 작성

환경 설정 내역

  • Local 실행 시

    • 실행 방법: 프로젝트를 로컬 환경에서 실행할 때는 환경 변수 또는 설정 파일을 통해 local 모드로 설정
    • 서버 접속 주소: localhost:8080 에서 서버 실행
    • 데이터베이스 접속: 로컬에 설치된 MySQL 데이터베이스에 접속, 로컬 데이터베이스의 접속 정보(호스트, 포트, 사용자 이름, 비밀번호 등)는 개발 환경에 맞게 설정.
    • 캐시 서버 접속: 로컬에서 실행 중인 Redis 인스턴스에 접속, 로컬 Redis 서버의 접속 정보를 환경에 맞게 설정.
  • Dev 실행 시

    • 실행 방법: 개발 환경에서는 환경 변수 또는 설정 파일을 dev 모드로 설정
    • 서버 접속 주소: 프로젝트는 https://dev.swacademy.store/ 주소를 통해 접근
    • 데이터베이스 접속: AWS RDS(MySQL) 인스턴스에 접속, 개발 환경에 맞는 RDS 인스턴스의 접속 정보(엔드포인트, 포트, 사용자 이름, 비밀번호 등)를 설정 파일에 명시해야 함.
    • 캐시 서버 접속: AWS ElastiCache(Redis) 인스턴스에 접속, 개발 환경에 맞는 ElastiCache 인스턴스의 접속 정보(엔드포인트, 포트 등)를 설정 파일에 명시해야 함.
  • Prod 서버 아직 존재 x

🌱 Branch

  • main : 최종
  • develop : 개발
  • feat : 기능 개발
  • refactor : 기능 수정
  • ci : ci/cd 구축

swacademy-server's People

Contributors

gyuhyeok99 avatar

Forkers

gyuhyeok99 hj1487

swacademy-server's Issues

[refactor] accessToken 유효시간 환경변수로 변경

이슈내용

accessToken 유효시간 환경변수로 변경

상세 내용

  • accessToken 유효시간 하드코딩에서 환경변수로 변경

체크리스트

  • accessToken 유효시간 하드코딩에서 환경변수로 변경

🔎레퍼런스

[FEAT] 영수증 인증 API 추가

이슈내용

영수증 인증 API 추가

상세 내용

  • 영수증 인증 API 추가

체크리스트

  • 영수증 인증 API 추가

🔎레퍼런스

[CI] ci/cd 파이프라인 구축

이슈내용

ci/cd 파이프라인 구축

상세 내용

  • github action과 AWS elastic beanstalk을 활용하여 ci/cd 파이프라인 구축

체크리스트

  • ci/cd 파이프라인 구축

🔎레퍼런스

[BUG] 변조된 jwt 토큰으로 api 요청 시 500 error 터짐

😡오류 설명
클라이언트에서 잘못된 jwt 토큰을 입력하면 log에는 잘못된 토큰 요청 error가 찍힘


🔎오류 발생 상황
Steps to reproduce the behavior:

  1. 로그인하여 jwt 토큰을 발급 받음
  2. 발급 받은 토큰을 변조함
  3. 변조한 토큰으로 api 요청을함
  4. 500 error 터짐

😁의도한 결과
�변조한 토큰으로 api를 요청 시 잘못된 토큰이라고 400대 에러가 터져야함


🎆스크린샷
스크린샷 2024-05-16 오후 12 41 48
스크린샷 2024-05-16 오후 12 42 01

[FEAT] 포인트 내역 조회 api

이슈내용

포인트 내역 조회 api

상세 내용

  • 포인트 내역 조회 api

체크리스트

  • 포인트 내역 조회 api 개발

🔎레퍼런스

[Setting] 프로젝트 기초 세팅

상세 내용

  • 프로젝트 기초 세팅

체크리스트

  • 이슈템플릿 추가
  • 라이브러리 추가
  • 패키지 분리
  • 스웨거 설정
  • 시큐리티 설정
  • api 응답 및 예외 처리 통일

🔎레퍼런스

[REFACTOR] ERD 설계 수정

이슈내용

ERD 설계 수정

상세 내용

  • 요구사항 변경으로 인한 ERD 설계 수정

체크리스트

  • Entity 설계 수정

🔎레퍼런스

[FEAT] 다회용기 이용 구현

이슈내용

다회용기 이용 구현

상세 내용

  • 다회용기 이용 구현

체크리스트

  • 다회용기 이용 구현
  • 이용 현황 조회 구현

🔎레퍼런스

[REFACTOR] erd 수정 및 다회용기 이용 api 로직 수정

이슈내용

erd 수정 및 다회용기 이용 api 로직 수정

상세 내용

  • �point 테이블과 매핑 테이블 pk 삭제 및 다회 용기를 이용하기 위해 qr촬영 시 카페에 대한 정보 주는 api 로직 추가

체크리스트

  • point 테이블 및 매핑 테이블 pk 삭제
  • 다회 용기를 이용하기 위해 qr촬영 시 카페에 대한 정보 주는 api 로직 추가

🔎레퍼런스

[REFACTOR] 다회용기 이용 api 수정

이슈내용

다회용기 이용 api 수정

상세 내용

  • 다회용기 이용 api 수정

체크리스트

  • 다회용기 이용 api 수정

🔎레퍼런스

[REFACTOR] 반납 API 수정

이슈내용

반납 API 수정

상세 내용

  • 반납 API 수정

체크리스트

  • 반납 API 수정

🔎레퍼런스

[FEAT] 다회용기 이용 조회 API 개발

이슈내용

다회용기 이용 조회 API 개발

상세 내용

  • 다회용기 이용 조회 API 개발

체크리스트

  • 다회용기 이용 조회 API 개발

🔎레퍼런스

[FEAT] Entity 설계 및 소셜로그인 구현

이슈내용

Entity 설계 및 소셜로그인 구현

상세 내용

  • Entity 설계 및 소셜로그인 구현

체크리스트

  • Entity 설계
  • 카카오 로그인 구현

🔎레퍼런스

[FEAT] 다회용기 반납 인증 구현

이슈내용

다회용기 반납 인증 구현

상세 내용

  • 반납함 혹은 카페에서 QR 반납 인증을 통해 반납을 하고 적립금을 획득하는 API구현

체크리스트

  • 다회용기 반납 인증 API 구현

🔎레퍼런스

[REFACTOR] 요구사항 수정으로 ERD 수정

이슈내용

요구사항 수정으로 ERD 수정

상세 내용

  • User table에서 point를 관리하지 않고 table로 따로 관리.
  • 컬럼명 스네이크 케이스로 변경.
  • 이용 테이블에 반납장소 컬럼 추가.
  • 다회용기 종류 명 카테고리로 수정

체크리스트

  • point table 추가
  • 컬럼명 스네이크 케이스로 변경
  • 이용테이블에 반납장소 컬럼 추가
  • 다회용기 컬럼명 수정

🔎레퍼런스

[REFACTOR] 카카오 로그인 형식 수정

이슈내용

카카오 로그인 형식 수정

상세 내용

  • 카카오 로그인 형식 수정

체크리스트

  • 카카오 로그인 형식 수정

🔎레퍼런스

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.