Skip to content

podofarm-dev/backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“¦ Podofarm Backend ꡬ쑰

πŸ“Œ ν”„λ‘œμ νŠΈ κ°œμš”

  • ν”„λ‘œμ νŠΈλͺ…: Podofarm
  • μ„€λͺ…: μ•Œκ³ λ¦¬μ¦˜ 풀이 곡유, μŠ€ν„°λ”” κΈ°λŠ₯, 톡계 μ‹œκ°ν™” 등을 μ œκ³΅ν•˜λŠ” λ°±μ—”λ“œ μ‹œμŠ€ν…œ
  • μ£Όμš” 기술 μŠ€νƒ:
    • Java 17
    • Spring Boot
    • Spring Security + OAuth2
    • JPA / Hibernate
    • AWS (S3, EC2 λ“±)
    • Docker
    • Caffeine Cache

🧱 도메인별 ꡬ성

1. 🧩 μ½”λ“œ 관리 (code)

  • CodeEntity: μ•Œκ³ λ¦¬μ¦˜ μ½”λ“œ λ³Έλ¬Έ μ €μž₯
  • CommentEntity: μ½”λ“œμ— 달린 λŒ“κΈ€ μ €μž₯
  • μš”μ²­ DTO: CacheRequestDTO, CodeLevelDTO, CodeSolvedListDTO, CommentContentDTO, ExtensionSyncDTO, UploadDTO
  • 응닡 DTO: CommentListResponse, CommentResponse, OpenAIResponse, CodeInfoDTO
  • μ„œλΉ„μŠ€: CodeService
  • λ ˆν¬μ§€ν† λ¦¬: CodeRepository, CommentRepository

2. πŸ‘€ νšŒμ› 관리 (member)

  • MemberEntity: μ‚¬μš©μž 정보
  • TokenEntity: Access, Refresh 토큰 μ €μž₯
  • μš”μ²­ DTO: MemberReNameDto, TokenDto
  • 응닡 DTO: SolvedMemberListResponse
  • OAuth κ΄€λ ¨:
    • CustomUser: OAuth 인증 μ‚¬μš©μž 정보
    • CustomOAuthUserService: OAuth2 둜그인 처리 μ„œλΉ„μŠ€
  • μ„œλΉ„μŠ€: MemberService
  • λ ˆν¬μ§€ν† λ¦¬: MemberRepository, TokenRepository

3. πŸ“š 문제 관리 (problem)

  • ProblemEntity: 문제 정보 및 ν‘Ό μ‚¬μš©μž 관리
  • μš”μ²­ DTO: UserProfileDto, ProblemSolverDto
  • 응닡 DTO: ProblemListResponse, ProblemStaticDto
  • μ„œλΉ„μŠ€: ProblemService
  • λ ˆν¬μ§€ν† λ¦¬: ProblemRepository

4. πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦ μŠ€ν„°λ”” 관리 (study)

  • StudyEntity: μŠ€ν„°λ”” 생성 및 정보 μ €μž₯
  • μš”μ²­ DTO: DailySolvedSearchCond, StudyCreateReqDto, StudyJoinReqDto, StudyLeaderUpdateReqDto, StudyNameUpdateReqDto
  • 응닡 DTO: DailySolvedResDto, DashBoardFrameResDto, DashBoardGrassResDto, DashBoardSolvedCountResDto, LogResDto, MessageResDto, StudyDetailResDto, StudySummaryResDto
  • μ„œλΉ„μŠ€: StudyService
  • λ ˆν¬μ§€ν† λ¦¬: StudyRepository, CustomStudyRepository, CustomStudyRepositoryImpl
  • μ˜ˆμ™Έ 처리: StudyExceptionHandler

5. πŸ›  μœ ν‹Έλ¦¬ν‹° (utils)

  • CookieUtil: μΏ ν‚€ 생성, μ‚­μ œ λ“± κΈ°λŠ₯ 제곡
  • CodeGenerator: λ‚œμˆ˜ μ½”λ“œ 생성 μœ ν‹Έλ¦¬ν‹°

6. 🌐 κΈ€λ‘œλ²Œ μ„€μ • (global)

πŸ“‘ μ„€μ • (config)

  • AsyncConfig: @Async 비동기 μ„€μ •
  • CaffeineCacheConfig: Caffeine 기반 μΊμ‹œ μ„€μ •
  • CorsConfig: CORS μ •μ±… 적용
  • OpenAIConfig: OpenAI API μ—°λ™μš© μ„€μ •
  • S3Config: AWS S3 파일 μ—…λ‘œλ“œ μ„€μ •
  • SecurityConfig: OAuth2 및 JWT λ³΄μ•ˆ μ„€μ •

πŸ“¦ μΊμ‹œ (cache)

  • CacheAspect: AOP 기반 캐싱 처리
  • CacheProblemList: 문제 리슀트 μΊμ‹œ μ €μž₯

🧯 μ˜ˆμ™Έ 처리 (exception)

  • GlobalException: μ „μ—­ μ˜ˆμ™Έ 처리 클래슀
  • ErrorResDto: μ˜ˆμ™Έ λ°œμƒ μ‹œ 응닡 객체
  • ExceptionMessage: μ˜ˆμ™Έ λ©”μ‹œμ§€ λͺ¨μŒ μƒμˆ˜
  • μ»€μŠ€ν…€ μ˜ˆμ™Έλ“€:
    • AlreadyInStudyException, LeaderCannotLeaveException, MemberEqException, NotInThatStudyException
    • ServerUnstableException, StudyPasswordMismatchException, TokenException

πŸ” OAuth & JWT (oauth)

  • JwtInterface: 토큰 정보 μ •μ˜ μΈν„°νŽ˜μ΄μŠ€
  • JwtTokenProvider: JWT 토큰 λ°œκΈ‰ 및 검증

πŸ“ 디렉토리 ꡬ쑰

podofarm/
└── src/main/java/com/podofarm/dev/
    β”œβ”€β”€ MildoBackendApplication.java                    # Spring Boot 메인 클래슀
    β”‚
    β”œβ”€β”€ api/                                            # 도메인 API λͺ¨λ“ˆ 루트
    β”‚   β”œβ”€β”€ code/                                       # μ½”λ“œ 관리 도메인
    β”‚   β”‚   β”œβ”€β”€ controller/
    β”‚   β”‚   β”‚   └── CodeController.java                 # μ½”λ“œ API 컨트둀러
    β”‚   β”‚   β”œβ”€β”€ domain/
    β”‚   β”‚   β”‚   β”œβ”€β”€ dto/
    β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ request/
    β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ CacheRequestDTO.java        # μΊμ‹œ μš”μ²­ DTO
    β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ CodeLevelDTO.java           # λ‚œμ΄λ„ DTO
    β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ CodeSolvedListDTO.java      # ν‘Ό λͺ©λ‘ μš”μ²­ DTO
    β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ CommentContentDTO.java      # λŒ“κΈ€ μž‘μ„± DTO
    β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ ExtensionSyncDTO.java       # ν™•μž₯ 동기화 DTO
    β”‚   β”‚   β”‚   β”‚   β”‚   └── UploadDTO.java              # μ½”λ“œ μ—…λ‘œλ“œ DTO
    β”‚   β”‚   β”‚   β”‚   └── response/
    β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ CommentListResponse.java    # λŒ“κΈ€ 리슀트 응닡
    β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ CommentResponse.java        # λŒ“κΈ€ 응닡
    β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ OpenAIResponse.java         # AI 응닡 DTO
    β”‚   β”‚   β”‚   β”‚       └── CodeInfoDTO.java            # μ½”λ“œ 상세 응닡
    β”‚   β”‚   β”‚   └── entity/
    β”‚   β”‚   β”‚       β”œβ”€β”€ CodeEntity.java                 # μ½”λ“œ λ³Έλ¬Έ μ—”ν‹°ν‹°
    β”‚   β”‚   β”‚       └── CommentEntity.java              # λŒ“κΈ€ μ—”ν‹°ν‹°
    β”‚   β”‚   β”œβ”€β”€ repository/
    β”‚   β”‚   β”‚   β”œβ”€β”€ CodeRepository.java                 # μ½”λ“œ JPA μΈν„°νŽ˜μ΄μŠ€
    β”‚   β”‚   β”‚   └── CommentRepository.java              # λŒ“κΈ€ JPA μΈν„°νŽ˜μ΄μŠ€
    β”‚   β”‚   └── service/
    β”‚   β”‚       └── CodeService.java                    # μ½”λ“œ μ„œλΉ„μŠ€ 클래슀
    β”‚
    β”‚   β”œβ”€β”€ member/                                     # νšŒμ› 관리 도메인
    β”‚   β”‚   β”œβ”€β”€ controller/
    β”‚   β”‚   β”‚   └── MemberController.java
    β”‚   β”‚   β”œβ”€β”€ domain/
    β”‚   β”‚   β”‚   β”œβ”€β”€ entity/
    β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MemberEntity.java               # μ‚¬μš©μž 정보 μ—”ν‹°ν‹°
    β”‚   β”‚   β”‚   β”‚   └── TokenEntity.java                # 토큰 μ—”ν‹°ν‹°
    β”‚   β”‚   β”‚   └── dto/
    β”‚   β”‚   β”‚       β”œβ”€β”€ request/
    β”‚   β”‚   β”‚       β”‚   β”œβ”€β”€ MemberReNameDto.java        # λ‹‰λ„€μž„ λ³€κ²½ DTO
    β”‚   β”‚   β”‚       β”‚   └── TokenDto.java               # 토큰 μš”μ²­ DTO
    β”‚   β”‚   β”‚       └── response/
    β”‚   β”‚   β”‚           └── SolvedMemberListResponse.java # ν‘Ό μ‚¬μš©μž 리슀트
    β”‚   β”‚   β”œβ”€β”€ repository/
    β”‚   β”‚   β”‚   β”œβ”€β”€ MemberRepository.java
    β”‚   β”‚   β”‚   └── TokenRepository.java
    β”‚   β”‚   β”œβ”€β”€ service/
    β”‚   β”‚   β”‚   └── MemberService.java
    β”‚   β”‚   └── customoauth/
    β”‚   β”‚       β”œβ”€β”€ dto/
    β”‚   β”‚       β”‚   └── CustomUser.java                 # OAuth μœ μ € 정보
    β”‚   β”‚       └── handler/
    β”‚   β”‚           └── CustomOAuthUserService.java     # OAuth2 μ„œλΉ„μŠ€
    β”‚
    β”‚   β”œβ”€β”€ problem/                                    # 문제 관리 도메인
    β”‚   β”‚   β”œβ”€β”€ controller/
    β”‚   β”‚   β”‚   └── ProblemController.java
    β”‚   β”‚   β”œβ”€β”€ domain/
    β”‚   β”‚   β”‚   β”œβ”€β”€ entity/
    β”‚   β”‚   β”‚   β”‚   └── ProblemEntity.java              # 문제 μ—”ν‹°ν‹°
    β”‚   β”‚   β”‚   └── dto/
    β”‚   β”‚   β”‚       β”œβ”€β”€ request/
    β”‚   β”‚   β”‚       β”‚   β”œβ”€β”€ UserProfileDto.java         # μ‚¬μš©μž 문제 정보 μš”μ²­
    β”‚   β”‚   β”‚       β”‚   └── ProblemSolverDto.java       # 문제 ν•΄κ²° 정보
    β”‚   β”‚   β”‚       └── response/
    β”‚   β”‚   β”‚           β”œβ”€β”€ ProblemListResponse.java    # 문제 리슀트 응닡
    β”‚   β”‚   β”‚           └── ProblemStaticDto.java       # ν†΅κ³„μš© DTO
    β”‚   β”‚   β”œβ”€β”€ repository/
    β”‚   β”‚   β”‚   └── ProblemRepository.java
    β”‚   β”‚   └── service/
    β”‚   β”‚       └── ProblemService.java
    β”‚
    β”‚   β”œβ”€β”€ study/                                      # μŠ€ν„°λ”” 도메인
    β”‚   β”‚   β”œβ”€β”€ controller/
    β”‚   β”‚   β”‚   └── StudyController.java
    β”‚   β”‚   β”œβ”€β”€ domain/
    β”‚   β”‚   β”‚   β”œβ”€β”€ entity/
    β”‚   β”‚   β”‚   β”‚   └── StudyEntity.java
    β”‚   β”‚   β”‚   └── dto/
    β”‚   β”‚   β”‚       β”œβ”€β”€ request/
    β”‚   β”‚   β”‚       β”‚   β”œβ”€β”€ DailySolvedSearchCond.java
    β”‚   β”‚   β”‚       β”‚   β”œβ”€β”€ StudyCreateReqDto.java
    β”‚   β”‚   β”‚       β”‚   β”œβ”€β”€ StudyJoinReqDto.java
    β”‚   β”‚   β”‚       β”‚   β”œβ”€β”€ StudyLeaderUpdateReqDto.java
    β”‚   β”‚   β”‚       β”‚   └── StudyNameUpdateReqDto.java
    β”‚   β”‚   β”‚       └── response/
    β”‚   β”‚   β”‚           β”œβ”€β”€ DailySolvedResDto.java
    β”‚   β”‚   β”‚           β”œβ”€β”€ DashBoardFrameResDto.java
    β”‚   β”‚   β”‚           β”œβ”€β”€ DashBoardGrassResDto.java
    β”‚   β”‚   β”‚           β”œβ”€β”€ DashBoardSolvedCountResDto.java
    β”‚   β”‚   β”‚           β”œβ”€β”€ LogResDto.java
    β”‚   β”‚   β”‚           β”œβ”€β”€ MessageResDto.java
    β”‚   β”‚   β”‚           β”œβ”€β”€ StudyDetailResDto.java
    β”‚   β”‚   β”‚           └── StudySummaryResDto.java
    β”‚   β”‚   β”œβ”€β”€ repository/
    β”‚   β”‚   β”‚   β”œβ”€β”€ StudyRepository.java
    β”‚   β”‚   β”‚   β”œβ”€β”€ CustomStudyRepository.java
    β”‚   β”‚   β”‚   └── CustomStudyRepositoryImpl.java
    β”‚   β”‚   β”œβ”€β”€ service/
    β”‚   β”‚   β”‚   └── StudyService.java
    β”‚   β”‚   └── exhandler/
    β”‚   β”‚       └── StudyExceptionHandler.java
    β”‚
    β”‚   └── utils/
    β”‚       β”œβ”€β”€ cookie/
    β”‚       β”‚   └── CookieUtil.java                   # μΏ ν‚€ 생성/μ‚­μ œ μœ ν‹Έ
    β”‚       └── random/
    β”‚           └── CodeGenerator.java                # 랜덀 μ½”λ“œ 생성기
    β”‚
    └── global/                                       # κΈ€λ‘œλ²Œ μ„€μ • λͺ¨λ“ˆ
        β”œβ”€β”€ config/
        β”‚   β”œβ”€β”€ async/
        β”‚   β”‚   └── AsyncConfig.java                  # 비동기 처리 μ„€μ •
        β”‚   β”œβ”€β”€ caffeine/
        β”‚   β”‚   └── CaffeineCacheConfig.java          # μΊμ‹œ μ„€μ •
        β”‚   β”œβ”€β”€ cors/
        β”‚   β”‚   └── CorsConfig.java                   # CORS μ •μ±… μ„€μ •
        β”‚   β”œβ”€β”€ openai/
        β”‚   β”‚   └── OpenAIConfig.java                 # OpenAI 연동 μ„€μ •
        β”‚   β”œβ”€β”€ s3/
        β”‚   β”‚   └── S3Config.java                     # AWS S3 연동 μ„€μ •
        β”‚   └── security/
        β”‚       └── SecurityConfig.java               # Spring Security μ„€μ •
        β”‚
        β”œβ”€β”€ cache/
        β”‚   β”œβ”€β”€ CacheAspect.java                      # AOP μΊμ‹œ 처리
        β”‚   └── CacheProblemList.java                 # 문제 리슀트 μΊμ‹œ
        β”‚
        β”œβ”€β”€ exception/
        β”‚   β”œβ”€β”€ GlobalException.java                  # μ „μ—­ μ˜ˆμ™Έ 처리기
        β”‚   β”œβ”€β”€ dto/
        β”‚   β”‚   └── ErrorResDto.java                  # μ˜ˆμ™Έ 응닡 DTO
        β”‚   β”œβ”€β”€ message/
        β”‚   β”‚   └── ExceptionMessage.java             # λ©”μ‹œμ§€ μƒμˆ˜
        β”‚   └── exceptionClass/
        β”‚       β”œβ”€β”€ AlreadyInStudyException.java
        β”‚       β”œβ”€β”€ LeaderCannotLeaveException.java
        β”‚       β”œβ”€β”€ MemberEqException.java
        β”‚       β”œβ”€β”€ NotInThatStudyException.java
        β”‚       β”œβ”€β”€ ServerUnstableException.java
        β”‚       β”œβ”€β”€ StudyPasswordMismatchException.java
        β”‚       └── TokenException.java
        β”‚
        └── oauth/
            └── jwt/
                β”œβ”€β”€ JwtInterface.java                 # JWT μΈν„°νŽ˜μ΄μŠ€ μ •μ˜
                └── JwtTokenProvider.java             # JWT λ°œκΈ‰/검증 제곡

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •