From 3025b64f58256b5cde755adb85641b29d6e0ce5f Mon Sep 17 00:00:00 2001 From: essaysir Date: Sun, 1 Feb 2026 23:40:08 +0900 Subject: [PATCH 01/10] =?UTF-8?q?refactor:=20Gradle=20Kotlin=20DSL?= =?UTF-8?q?=EB=A1=9C=20=EB=B9=8C=EB=93=9C=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20?= =?UTF-8?q?=EB=A7=88=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - build.gradle -> build.gradle.kts 변환 - Version Catalog (libs.versions.toml) 적용 - 멀티모듈 구조 설정 (settings.gradle) Co-Authored-By: Claude Opus 4.5 --- build.gradle | 115 -------------------------------------- build.gradle.kts | 48 ++++++++++++++++ gradle/libs.versions.toml | 20 +++++++ settings.gradle | 2 + 4 files changed, 70 insertions(+), 115 deletions(-) delete mode 100644 build.gradle create mode 100644 build.gradle.kts create mode 100644 gradle/libs.versions.toml diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 306c7975..00000000 --- a/build.gradle +++ /dev/null @@ -1,115 +0,0 @@ -plugins { - id 'java' - id 'org.springframework.boot' version '3.2.1' - id 'io.spring.dependency-management' version '1.1.4' -} - -group = 'umc.5th' -version = '0.0.1-SNAPSHOT' - -java { - sourceCompatibility = '17' -} -ext { - springCloudVersion = "2023.0.0" -} - -dependencyManagement { - imports { - mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" - } -} - -configurations { - compileOnly { - extendsFrom annotationProcessor - } -} - -repositories { - mavenCentral() -} - -jar { - enabled = false -} -dependencies { - implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' - implementation 'org.springframework.boot:spring-boot-starter-validation' - implementation 'org.springframework.boot:spring-boot-starter-security' - implementation 'org.springframework.boot:spring-boot-starter-actuator' - - implementation 'org.springframework.retry:spring-retry' - implementation 'org.springframework.boot:spring-boot-starter-aop' - implementation 'org.springframework.boot:spring-boot-starter-webflux' - // - implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' // 4.1.0 -// implementation 'org.springframework.cloud:spring-cloud-commons:4.1.1' - - compileOnly 'org.projectlombok:lombok' - testCompileOnly 'org.projectlombok:lombok' - testAnnotationProcessor 'org.projectlombok:lombok' - - runtimeOnly 'com.mysql:mysql-connector-j' -// runtimeOnly 'mysql:mysql-connector-java' - - annotationProcessor 'org.projectlombok:lombok' - testImplementation 'org.springframework.boot:spring-boot-starter-test' - - // h2 - runtimeOnly 'com.h2database:h2' - - //security - implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' - implementation 'org.springframework.boot:spring-boot-starter-security' - testImplementation 'org.springframework.security:spring-security-test' - - //jwt - runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5' - runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5' - implementation 'io.jsonwebtoken:jjwt-api:0.11.5' - - //S3 - implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' - - // querydsl - implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' - annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" - annotationProcessor "jakarta.annotation:jakarta.annotation-api" - annotationProcessor "jakarta.persistence:jakarta.persistence-api" - - implementation 'commons-codec:commons-codec:1.16.0' // Base64 인코딩을 위한 의존성 - - // prometheus - implementation 'io.micrometer:micrometer-registry-prometheus' - - // Redis - implementation 'org.springframework.boot:spring-boot-starter-data-redis' - - //Safe Search - implementation 'com.google.cloud:google-cloud-vision:3.58.0' - - // Apple - implementation 'com.apple.itunes.storekit:app-store-server-library:3.4.0' - testImplementation 'org.springframework.security:spring-security-test' -} - -tasks.named('test') { - useJUnitPlatform() - testLogging { - events("passed", "skipped", "failed") - showStandardStreams = false - } -} - - -def generated = 'src/main/generated' -tasks.withType(JavaCompile).configureEach { - options.getGeneratedSourceOutputDirectory().set(file(generated)) -} - -clean { - delete file(generated) -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..58c319d0 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,48 @@ +import io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension + +plugins { + id("org.springframework.boot") version "3.4.4" apply false + id("io.spring.dependency-management") version "1.1.7" apply false + kotlin("jvm") version "2.0.20" apply false + kotlin("plugin.spring") version "2.0.20" apply false + kotlin("plugin.jpa") version "2.0.20" apply false + id("org.jlleitschuh.gradle.ktlint") version "12.1.2" apply false +} + +allprojects { + group = "umc.5th" + version = "0.0.1-SNAPSHOT" + + repositories { + mavenCentral() + } +} + +subprojects { + apply(plugin = "java") + apply(plugin = "io.spring.dependency-management") + + configure { + sourceCompatibility = JavaVersion.VERSION_17 + } + + configurations { + named("compileOnly") { + extendsFrom(configurations.named("annotationProcessor").get()) + } + } + + the().apply { + imports { + mavenBom("org.springframework.cloud:spring-cloud-dependencies:2024.0.1") + } + } + + tasks.withType { + useJUnitPlatform() + testLogging { + events("passed", "skipped", "failed") + showStandardStreams = false + } + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..022208bc --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,20 @@ +[versions] +# Kotlin +kotlin = "2.0.20" +ktlint-plugin = "12.1.2" +ktlint = "1.0.1" + +# Spring +spring-boot = "3.4.4" +spring-dependency-management = "1.1.7" +spring-cloud-dependencies = "2024.0.1" + +# Library +springdoc-openapi = "2.7.0" +spring-mockk = "4.0.2" +mockito = "5.14.0" +mockito-kotlin = "5.4.0" +instancio-junit = "5.0.2" +slack-appender = "1.6.1" + + diff --git a/settings.gradle b/settings.gradle index 8d17be2b..d71976a8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,3 @@ rootProject.name = 'juinjang' + +include 'apps:juinjang-api' From 93ececa292f048e2c203ebe88990b310280719c8 Mon Sep 17 00:00:00 2001 From: essaysir Date: Sun, 1 Feb 2026 23:40:16 +0900 Subject: [PATCH 02/10] =?UTF-8?q?refactor:=20=EB=A9=80=ED=8B=B0=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=EA=B5=AC=EC=A1=B0=EB=A1=9C=20=EC=86=8C=EC=8A=A4=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - src/ -> apps/juinjang-api/ 모듈로 이동 - OpenFeign, Spring Retry, Redis 의존성 추가 Co-Authored-By: Claude Opus 4.5 --- apps/juinjang-api/build.gradle.kts | 55 +++++++ .../config/AppConfig/model/QAppConfig.java | 43 ++++++ .../checklist/model/QChecklistAnswer.java | 64 +++++++++ .../model/QChecklistQuestionShort.java | 52 +++++++ .../juinjang/domain/common/QBaseEntity.java | 39 +++++ .../domain/flag/model/QFlagSharedNote.java | 53 +++++++ .../juinjang/domain/image/model/QImage.java | 61 ++++++++ .../domain/limjang/model/QAddress.java | 59 ++++++++ .../domain/limjang/model/QLimjang.java | 100 +++++++++++++ .../domain/limjang/model/QLimjangPrice.java | 69 +++++++++ .../juinjang/domain/member/model/QMember.java | 82 +++++++++++ .../domain/note/liked/model/QLikedNote.java | 54 +++++++ .../domain/note/shared/model/QSharedNote.java | 82 +++++++++++ .../acquired/model/QAcquiredPencil.java | 69 +++++++++ .../purchased/model/QPurchasedPencil.java | 77 ++++++++++ .../domain/pencil/used/model/QUsedPencil.java | 69 +++++++++ .../pencilaccount/model/QPencilAccount.java | 69 +++++++++ .../juinjang/domain/record/model/QRecord.java | 67 +++++++++ .../juinjang/domain/report/model/QReport.java | 73 ++++++++++ .../juinjang/domain/reward/model/QReward.java | 59 ++++++++ .../juinjang/domain/scrap/model/QScrap.java | 59 ++++++++ .../repository/QTermsAgreement.java | 43 ++++++ .../domain/withdraw/model/QWithdraw.java | 49 +++++++ .../umc/th/juinjang/JuinjangApplication.java | 2 - .../api/address/service/AddressUpdater.java | 0 .../controller/AppVersionController.java | 0 .../response/AppVersionResponse.java | 0 .../appVersion/service/AppVersionService.java | 0 .../api/apple/controller/AppleController.java | 0 .../apple/controller/MockAppleController.java | 0 .../api/apple/service/AppleService.java | 0 .../api/apple/service/AppleServiceImpl.java | 0 .../api/apple/service/AppleServiceStub.java | 0 .../AppleTransactionVerifyCommand.java | 0 .../api/auth/controller/OAuthController.java | 0 .../auth/controller/request/AppleInfo.java | 0 .../request/AppleLoginRequestDto.java | 0 .../request/AppleSignUpRequestDto.java | 0 .../AppleSignUpRequestVersion2Dto.java | 0 .../controller/request/AppleTokenRequest.java | 0 .../request/KakaoLoginRequestDto.java | 0 .../request/KakaoSignUpRequestDto.java | 0 .../KakaoSignUpRequestVersion2Dto.java | 0 .../request/WithdrawReasonRequestDto.java | 0 .../api/auth/service/OAuthService.java | 0 .../api/auth/service/OAuthServiceV2.java | 0 .../api/auth/service/WithdrawService.java | 0 .../service/response/LoginResponseDto.java | 0 .../response/LoginResponseVersion2Dto.java | 0 .../controller/ChecklistController.java | 0 .../controller/ChecklistControllerV2.java | 0 .../request/ChecklistAnswerRequestDTO.java | 0 .../request/ChecklistQuestionDTO.java | 0 .../service/ChecklistAnswerFinder.java | 0 .../service/ChecklistCommandService.java | 0 .../service/ChecklistCommandServiceImpl.java | 0 .../service/ChecklistCommandServiceV2.java | 0 .../service/ChecklistQueryService.java | 0 .../service/ChecklistQueryServiceImpl.java | 0 .../service/ChecklistQueryServiceV2.java | 0 .../api/checklist/service/ReportFinder.java | 0 .../ChecklistAnswerAndReportConverter.java | 0 .../converter/ChecklistAnswerConverter.java | 0 .../converter/ChecklistQuestionConverter.java | 0 .../ChecklistAnswerAndReportResponseDTO.java | 0 .../response/ChecklistAnswerResponseDTO.java | 0 .../service/response/ReportGetResponse.java | 0 .../service/response/ReportResponseDTO.java | 0 .../ReportWithLimjangResponseDTO.java | 0 .../th/juinjang/api/config/SwaggerConfig.java | 0 .../umc/th/juinjang/api/dto/ApiResponse.java | 0 .../api/flag/controller/FlagController.java | 0 .../request/FlagSharedNotePostRequest.java | 0 .../service/FlagSharedNoteCommandService.java | 0 .../flag/service/FlagSharedNoteUpdater.java | 0 .../api/image/controller/ImageController.java | 0 .../request/ImageDeleteRequestDTO.java | 0 .../request/ImageUploadRequestDTO.java | 0 .../image/service/ImageCommandService.java | 0 .../service/ImageCommandServiceImpl.java | 0 .../api/image/service/ImageFinder.java | 0 .../api/image/service/ImageQueryService.java | 0 .../image/service/ImageQueryServiceImpl.java | 0 .../response/ImageListResponseDTO.java | 0 .../response/ImageUploadResponseDTO.java | 0 .../service/response/ImagesGetResponse.java | 0 .../limjang/controller/LimjangController.java | 0 .../limjang/controller/NoteControllerV2.java | 0 .../parameter/LimjangSortOptions.java | 0 .../request/LimjangPatchRequest.java | 0 .../request/LimjangPostRequest.java | 0 .../request/LimjangUpdateRequestDTO.java | 0 .../request/LimjangsDeleteRequest.java | 0 .../controller/request/NoteInitRequest.java | 0 .../controller/request/NotePatchRequest.java | 0 .../request/NotePatchRequestV2.java | 0 .../controller/request/NotePostRequest.java | 0 .../service/LimjangCommandService.java | 0 .../service/LimjangCommandServiceImpl.java | 0 .../limjang/service/LimjangPriceBridge.java | 0 .../limjang/service/LimjangQueryService.java | 0 .../service/LimjangQueryServiceImpl.java | 0 .../service/LimjangSchedulerService.java | 0 .../limjang/service/NoteCommandServiceV2.java | 0 .../api/limjang/service/NoteFinder.java | 0 .../api/limjang/service/NotePriceUpdater.java | 0 .../limjang/service/NoteQueryServiceV2.java | 0 .../api/limjang/service/NoteUpdater.java | 0 .../converter/LimjangDetailConverter.java | 0 .../LimjangsMainGetResponseConverter.java | 0 .../response/ChecklistConditionResponse.java | 0 .../response/LimjangDetailGetResponse.java | 0 .../response/LimjangDetailResponseDTO.java | 0 .../response/LimjangMemoResponseDTO.java | 0 .../service/response/LimjangPostResponse.java | 0 .../response/LimjangTotalListResponseDTO.java | 0 .../LimjangsGetByKeywordResponse.java | 0 .../service/response/LimjangsGetResponse.java | 0 .../response/LimjangsMainGetResponse.java | 0 .../LimjangsMainGetVersion2Response.java | 0 .../service/response/NotePostResponse.java | 0 .../service/response/UserNoteGetResponse.java | 0 .../response/UserNotesGetResponse.java | 0 .../UserNotesShareableGetResponse.java | 0 .../member/controller/MemberController.java | 0 .../request/IntroductionPatchRequest.java | 0 .../MemberAgreeVersionPostRequest.java | 0 .../controller/request/MemberRequestDto.java | 0 .../api/member/service/MemberService.java | 0 .../service/response/MemberResponseDto.java | 0 .../th/juinjang/api/mock/MockController.java | 0 .../liked/controller/LikedNoteController.java | 0 .../service/LikedNoteCommandService.java | 0 .../note/liked/service/LikedNoteDeleter.java | 0 .../note/liked/service/LikedNoteFinder.java | 0 .../note/liked/service/LikedNoteUpdater.java | 0 .../response/LikedNoteDeleteResponse.java | 0 .../response/LikedNotePostResponse.java | 0 .../controller/SharedNoteController.java | 0 .../controller/request/ExploreSortType.java | 0 .../shared/controller/request/NoteType.java | 0 .../request/SharedNotePostRequest.java | 0 .../service/SharedNoteCommandService.java | 0 .../note/shared/service/SharedNoteFinder.java | 0 .../service/SharedNoteQueryService.java | 0 .../shared/service/SharedNoteUpdater.java | 0 .../note/shared/service/ViewCountService.java | 0 .../SharedNoteCheckListAndReviewResponse.java | 0 .../SharedNoteExploreGetResponse.java | 0 .../response/SharedNoteGetResponse.java | 0 .../response/SharedNotePostResponse.java | 0 .../response/UserSharedNotesGetResponse.java | 0 .../util/SharedNotesTimeAgoFormatter.java | 0 .../pencil/controller/PencilController.java | 0 .../request/AppleIAPPurchaseRequest.java | 0 .../pencil/service/AcquiredPencilFinder.java | 0 .../pencil/service/AcquiredPencilUpdater.java | 0 .../pencil/service/PencilCommandService.java | 0 .../pencil/service/PencilQueryService.java | 0 .../pencil/service/PurchasedPencilFinder.java | 0 .../service/PurchasedPencilUpdater.java | 0 .../api/pencil/service/UsedPencilFinder.java | 0 .../api/pencil/service/UsedPencilUpdater.java | 0 .../response/AcquiredPencilReadResponse.java | 0 .../AcquiredPencilReadStatusResponse.java | 0 .../response/AcquiredPencilResponse.java | 0 .../response/AppleIAPPurchaseResponse.java | 0 .../response/PurchasedPencilResponse.java | 0 .../service/response/UsedPencilResponse.java | 0 .../service/response/VerificationResult.java | 0 .../controller/PencilAccountController.java | 0 .../service/PencilAccountFinder.java | 0 .../service/PencilAccountService.java | 0 .../service/PencilAccountUpdater.java | 0 .../response/PencilQuantityGetResponse.java | 0 .../record/controller/RecordController.java | 0 .../controller/request/RecordRequestDTO.java | 0 .../api/record/service/RecordService.java | 0 .../converter/LimjangMemoConverter.java | 0 .../service/converter/RecordConverter.java | 0 .../service/response/RecordResponseDTO.java | 0 .../api/reward/service/RewardFinder.java | 0 .../api/reward/service/RewardService.java | 0 .../api/reward/service/RewardUpdater.java | 0 .../api/scrap/controller/ScrapController.java | 0 .../api/scrap/service/ScarpFinder.java | 0 .../api/scrap/service/ScrapService.java | 0 .../api/scrap/service/ScrapServiceImpl.java | 0 .../controller/TermsAgreementController.java | 0 .../controller/request/AgreeRequest.java | 0 .../controller/response/AgreeResponse.java | 0 .../controller/response/StatusResponse.java | 0 .../service/TermsAgreementService.java | 0 .../juinjang/auth/config/SecurityConfig.java | 0 .../auth/jwt/JwtAuthenticationFilter.java | 0 .../juinjang/auth/jwt/JwtExceptionFilter.java | 0 .../umc/th/juinjang/auth/jwt/JwtService.java | 0 .../umc/th/juinjang/auth/jwt/TokenDto.java | 0 .../auth/jwt/UserDetailServiceImpl.java | 0 .../th/juinjang/common/ExceptionHandler.java | 0 .../th/juinjang/common/LoggerProvider.java | 0 .../umc/th/juinjang/common/code/BaseCode.java | 0 .../juinjang/common/code/BaseErrorCode.java | 0 .../juinjang/common/code/ErrorReasonDTO.java | 0 .../th/juinjang/common/code/ReasonDTO.java | 0 .../common/code/status/ErrorStatus.java | 0 .../common/code/status/SuccessStatus.java | 0 .../common/constant/MockConstant.java | 0 .../common/exception/ExceptionAdvice.java | 0 .../common/exception/GeneralException.java | 0 .../exception/handler/AppleHandler.java | 0 .../exception/handler/ChecklistHandler.java | 0 .../exception/handler/LikedNoteHandler.java | 0 .../exception/handler/LimjangHandler.java | 0 .../exception/handler/MemberHandler.java | 0 .../handler/PencilAccountHandler.java | 0 .../common/exception/handler/S3Handler.java | 0 .../exception/handler/ScrapHandler.java | 0 .../exception/handler/SharedNoteHandler.java | 0 .../common/redis/RedisKeyFactory.java | 0 .../annotation/VaildPriceListSize.java | 0 .../validator/PriceListVaildation.java | 0 .../config/AppConfig/model/AppConfig.java | 0 .../repository/AppConfigRepository.java | 0 .../umc/th/juinjang/config/JpaConfig.java | 0 .../umc/th/juinjang/config/RedisConfig.java | 0 .../checklist/model/ChecklistAnswer.java | 0 .../model/ChecklistQuestionCategory.java | 0 .../model/ChecklistQuestionShort.java | 0 .../model/ChecklistQuestionType.java | 0 .../model/ChecklistQuestionVersion.java | 0 .../model/LimjangCheckListVersion.java | 0 .../repository/ChecklistAnswerRepository.java | 0 .../ChecklistQuestionRepository.java | 0 .../th/juinjang/domain/common/BaseEntity.java | 0 .../domain/flag/model/FlagSharedNote.java | 0 .../flag/model/FlagSharedNoteStatus.java | 0 .../domain/flag/model/FlagSharedNoteType.java | 0 .../repository/FlagSharedNoteRepository.java | 0 .../th/juinjang/domain/image/model/Image.java | 0 .../repository/ImageQueryDslRepository.java | 0 .../ImageQueryDslRepositoryImpl.java | 0 .../image/repository/ImageRepository.java | 0 .../domain/limjang/model/Address.java | 0 .../domain/limjang/model/Limjang.java | 0 .../domain/limjang/model/LimjangPrice.java | 0 .../limjang/model/LimjangPriceType.java | 0 .../limjang/model/LimjangPropertyType.java | 0 .../domain/limjang/model/LimjangPurpose.java | 0 .../limjang/repository/AddressRepository.java | 0 .../LimjangMainListDBResponsetDto.java | 0 .../repository/LimjangPriceRepository.java | 0 .../repository/LimjangQueryDslRepository.java | 0 .../LimjangQueryDslRepositoryImpl.java | 0 .../limjang/repository/LimjangRepository.java | 0 .../limjang/repository/NotePriceFactory.java | 0 .../juinjang/domain/member/model/Member.java | 0 .../domain/member/model/MemberProvider.java | 0 .../domain/member/model/MemberStatus.java | 0 .../member/repository/MemberRepository.java | 0 .../domain/note/liked/model/LikedNote.java | 0 .../LikedNoteQueryDSLRepository.java | 0 .../LikedNoteQueryDSLRepositoryImpl.java | 0 .../model/repository/LikedNoteRepository.java | 0 .../domain/note/shared/model/SharedNote.java | 0 .../note/shared/model/ViewCountPolicy.java | 0 .../SharedNoteQueryDSLRepository.java | 0 .../SharedNoteQueryDSLRepositoryImpl.java | 0 .../repository/SharedNoteRepository.java | 0 .../pencil/acquired/model/AcquiredPencil.java | 0 .../pencil/acquired/model/AcquiredType.java | 0 .../repository/AcquiredPencilRepository.java | 0 .../purchased/model/DeliveryStatus.java | 0 .../model/DeliveryStatusConverter.java | 0 .../purchased/model/PurchasedPencil.java | 0 .../purchased/model/TransactionStatus.java | 0 .../repository/PurchasedPencilRepository.java | 0 .../domain/pencil/used/model/UsedPencil.java | 0 .../domain/pencil/used/model/Usedtype.java | 0 .../used/repository/UsedPencilRepository.java | 0 .../pencilaccount/model/PencilAccount.java | 0 .../repository/PencilAccountRepository.java | 0 .../juinjang/domain/record/model/Record.java | 0 .../record/repository/RecordRepository.java | 0 .../juinjang/domain/report/model/Report.java | 0 .../report/repository/ReportRepository.java | 0 .../juinjang/domain/reward/model/Reward.java | 0 .../domain/reward/model/RewardType.java | 0 .../reward/repository/RewardRepository.java | 0 .../th/juinjang/domain/scrap/model/Scrap.java | 0 .../scrap/repository/ScrapRepository.java | 0 .../repository/TermsAgreement.java | 0 .../repository/TermsAgreementRepository.java | 0 .../termsAgreement/repository/TermsType.java | 0 .../domain/withdraw/model/Withdraw.java | 0 .../domain/withdraw/model/WithdrawReason.java | 0 .../repository/WithdrawRepository.java | 0 .../juinjang/event/FlagSharedNoteEvent.java | 0 .../umc/th/juinjang/event/PaymentEvent.java | 0 .../juinjang/event/RewardViewCountEvent.java | 0 .../umc/th/juinjang/event/SignUpEvent.java | 0 ...plicationFlagSharedNoteEventPublisher.java | 0 ...pplicationMemberEventPublisherAdapter.java | 0 ...plicationPaymentEventPublisherAdapter.java | 0 ...cationRewardViewCountPublisherAdapter.java | 0 .../FlagSharedNoteEventPublisher.java | 0 .../event/publisher/MemberEventPublisher.java | 0 .../publisher/PaymentEventPublisher.java | 0 .../publisher/RewardViewCountPublisher.java | 0 .../subscriber/DiscordEventListener.java | 0 .../event/subscriber/EventMessage.java | 0 .../RewardViewCountEventListener.java | 0 .../external/openfeign/FeignClientConfig.java | 0 .../external/openfeign/apple/AppleClient.java | 0 .../apple/AppleClientSecretGenerator.java | 0 .../openfeign/apple/AppleOAuthProvider.java | 0 .../apple/ApplePrivateKeyGenerator.java | 0 .../apple/ApplePublicKeyGenerator.java | 0 .../apple/ApplePublicKeyResponse.java | 0 .../openfeign/apple/AppleTokenResponse.java | 0 .../discord/DiscordAlertProvider.java | 0 .../openfeign/discord/StatusMessage.java | 0 .../openfeign/discord/dto/DiscordAlert.java | 0 .../openfeign/kakao/KakaoUnlinkClient.java | 0 .../th/juinjang/external/s3/AWSS3Config.java | 0 .../th/juinjang/external/s3/S3Service.java | 0 .../external/safeSearch/SafeSearchClient.java | 0 .../juinjang/monitoring/ApiFilterConfig.java | 0 .../juinjang/monitoring/ApiLogGenerator.java | 0 .../th/juinjang/monitoring/ApiLogPrinter.java | 0 .../monitoring/ApiLogRequestLogGenerator.java | 0 .../monitoring/ApiLogResponseGenerator.java | 0 .../juinjang/monitoring/ApiLoggerFactory.java | 0 .../juinjang/monitoring/ApiLoggerFilter.java | 0 .../src/main/resources/application-test.yml | 135 ++++++++++++++++++ .../certs/AppleIncRootCertificate.cer | Bin .../main/resources/certs/AppleRootCA-G2.cer | Bin .../main/resources/certs/AppleRootCA-G3.cer | Bin .../src}/main/resources/logback-appender.xml | 0 .../src}/main/resources/logback-dev.xml | 0 .../src}/main/resources/logback-local.xml | 0 .../src}/main/resources/logback-prod.xml | 0 .../th/juinjang/JuinjangApplicationTests.java | 0 .../juinjang/api/ControllerTestSupport.java | 0 .../juinjang/api/IntegrationTestSupport.java | 0 .../api/auth/service/OauthServiceTest.java | 0 .../limjang/service/command/InitNoteTest.java | 0 .../service/command/NoteCreateTest.java | 0 .../controller/MemberControllerTest.java | 0 .../api/member/service/MemberServiceTest.java | 0 .../service/PencilCommandServiceTest.java | 0 .../service/PencilQueryServiceTest.java | 0 .../PencilAccountControllerTest.java | 0 .../service/PencilAccountServiceTest.java | 0 .../umc/th/juinjang/config/TestConfig.java | 0 .../domain/member/model/MemberTest.java | 0 .../repository/limjang/LimjangFixture.java | 0 .../limjang/LimjangQuerydslTest.java | 0 .../service/LimjangCommandServiceTest.java | 0 .../testutil/fixture/MemberFixture.java | 0 360 files changed, 1582 insertions(+), 2 deletions(-) create mode 100644 apps/juinjang-api/build.gradle.kts create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/config/AppConfig/model/QAppConfig.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/checklist/model/QChecklistAnswer.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/checklist/model/QChecklistQuestionShort.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/common/QBaseEntity.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/flag/model/QFlagSharedNote.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/image/model/QImage.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QAddress.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QLimjang.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QLimjangPrice.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/member/model/QMember.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/note/liked/model/QLikedNote.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/note/shared/model/QSharedNote.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/acquired/model/QAcquiredPencil.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/purchased/model/QPurchasedPencil.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/used/model/QUsedPencil.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencilaccount/model/QPencilAccount.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/record/model/QRecord.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/report/model/QReport.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/reward/model/QReward.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/scrap/model/QScrap.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/termsAgreement/repository/QTermsAgreement.java create mode 100644 apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/withdraw/model/QWithdraw.java rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/JuinjangApplication.java (89%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/address/service/AddressUpdater.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/appVersion/controller/AppVersionController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/appVersion/controller/response/AppVersionResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/appVersion/service/AppVersionService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/apple/controller/AppleController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/apple/controller/MockAppleController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/apple/service/AppleService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/apple/service/AppleServiceImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/apple/service/AppleServiceStub.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/apple/service/command/AppleTransactionVerifyCommand.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/controller/OAuthController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/controller/request/AppleInfo.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/controller/request/AppleLoginRequestDto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/controller/request/AppleSignUpRequestDto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/controller/request/AppleSignUpRequestVersion2Dto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/controller/request/AppleTokenRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/controller/request/KakaoLoginRequestDto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/controller/request/KakaoSignUpRequestDto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/controller/request/KakaoSignUpRequestVersion2Dto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/controller/request/WithdrawReasonRequestDto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/service/OAuthService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/service/OAuthServiceV2.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/service/WithdrawService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/service/response/LoginResponseDto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/auth/service/response/LoginResponseVersion2Dto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/controller/ChecklistController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/controller/ChecklistControllerV2.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/controller/request/ChecklistAnswerRequestDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/controller/request/ChecklistQuestionDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/ChecklistAnswerFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandServiceImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandServiceV2.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryServiceImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryServiceV2.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/ReportFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistAnswerAndReportConverter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistAnswerConverter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistQuestionConverter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/response/ChecklistAnswerAndReportResponseDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/response/ChecklistAnswerResponseDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/response/ReportGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/response/ReportResponseDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/checklist/service/response/ReportWithLimjangResponseDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/config/SwaggerConfig.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/dto/ApiResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/flag/controller/FlagController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/flag/controller/request/FlagSharedNotePostRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/flag/service/FlagSharedNoteCommandService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/flag/service/FlagSharedNoteUpdater.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/image/controller/ImageController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/image/controller/request/ImageDeleteRequestDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/image/controller/request/ImageUploadRequestDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/image/service/ImageCommandService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/image/service/ImageCommandServiceImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/image/service/ImageFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/image/service/ImageQueryService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/image/service/ImageQueryServiceImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/image/service/response/ImageListResponseDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/image/service/response/ImageUploadResponseDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/image/service/response/ImagesGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/controller/LimjangController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/controller/NoteControllerV2.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/controller/parameter/LimjangSortOptions.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangPatchRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangPostRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangUpdateRequestDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangsDeleteRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/controller/request/NoteInitRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/controller/request/NotePatchRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/controller/request/NotePatchRequestV2.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/controller/request/NotePostRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/LimjangCommandService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/LimjangCommandServiceImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/LimjangPriceBridge.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/LimjangQueryService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/LimjangQueryServiceImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/LimjangSchedulerService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/NoteCommandServiceV2.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/NoteFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/NotePriceUpdater.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/NoteUpdater.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/converter/LimjangDetailConverter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/converter/LimjangsMainGetResponseConverter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/ChecklistConditionResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/LimjangDetailGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/LimjangDetailResponseDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/LimjangMemoResponseDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/LimjangPostResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/LimjangTotalListResponseDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsGetByKeywordResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsMainGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsMainGetVersion2Response.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/NotePostResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/UserNoteGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesShareableGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/member/controller/MemberController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/member/controller/request/IntroductionPatchRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/member/controller/request/MemberAgreeVersionPostRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/member/controller/request/MemberRequestDto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/member/service/MemberService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/member/service/response/MemberResponseDto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/mock/MockController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/liked/controller/LikedNoteController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteCommandService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteDeleter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteUpdater.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/liked/service/response/LikedNoteDeleteResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/liked/service/response/LikedNotePostResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/controller/SharedNoteController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/controller/request/ExploreSortType.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/controller/request/NoteType.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/controller/request/SharedNotePostRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteCommandService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteQueryService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteUpdater.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/service/ViewCountService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteCheckListAndReviewResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteExploreGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNotePostResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/service/response/UserSharedNotesGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/note/shared/service/util/SharedNotesTimeAgoFormatter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/controller/PencilController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/controller/request/AppleIAPPurchaseRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/AcquiredPencilFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/AcquiredPencilUpdater.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/PencilCommandService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/PencilQueryService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/PurchasedPencilFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/PurchasedPencilUpdater.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/UsedPencilFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/UsedPencilUpdater.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilReadResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilReadStatusResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/response/AppleIAPPurchaseResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/response/PurchasedPencilResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/response/UsedPencilResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencil/service/response/VerificationResult.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencilAccount/controller/PencilAccountController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountUpdater.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/pencilAccount/service/response/PencilQuantityGetResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/record/controller/RecordController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/record/controller/request/RecordRequestDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/record/service/RecordService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/record/service/converter/LimjangMemoConverter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/record/service/converter/RecordConverter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/record/service/response/RecordResponseDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/reward/service/RewardFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/reward/service/RewardService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/reward/service/RewardUpdater.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/scrap/controller/ScrapController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/scrap/service/ScarpFinder.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/scrap/service/ScrapService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/scrap/service/ScrapServiceImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/termsAgreement/controller/TermsAgreementController.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/termsAgreement/controller/request/AgreeRequest.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/termsAgreement/controller/response/AgreeResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/termsAgreement/controller/response/StatusResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/api/termsAgreement/service/TermsAgreementService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/auth/config/SecurityConfig.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/auth/jwt/JwtAuthenticationFilter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/auth/jwt/JwtExceptionFilter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/auth/jwt/JwtService.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/auth/jwt/TokenDto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/auth/jwt/UserDetailServiceImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/ExceptionHandler.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/LoggerProvider.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/code/BaseCode.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/code/BaseErrorCode.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/code/ErrorReasonDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/code/ReasonDTO.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/code/status/ErrorStatus.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/code/status/SuccessStatus.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/constant/MockConstant.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/exception/ExceptionAdvice.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/exception/GeneralException.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/exception/handler/AppleHandler.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/exception/handler/ChecklistHandler.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/exception/handler/LikedNoteHandler.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/exception/handler/LimjangHandler.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/exception/handler/MemberHandler.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/exception/handler/PencilAccountHandler.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/exception/handler/S3Handler.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/exception/handler/ScrapHandler.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/exception/handler/SharedNoteHandler.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/redis/RedisKeyFactory.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/validation/annotation/VaildPriceListSize.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/common/validation/validator/PriceListVaildation.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/config/AppConfig/model/AppConfig.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/config/AppConfig/repository/AppConfigRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/config/JpaConfig.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/config/RedisConfig.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/checklist/model/ChecklistAnswer.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionCategory.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionShort.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionType.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionVersion.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/checklist/model/LimjangCheckListVersion.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/checklist/repository/ChecklistAnswerRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/checklist/repository/ChecklistQuestionRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/common/BaseEntity.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNote.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNoteStatus.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNoteType.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/flag/repository/FlagSharedNoteRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/image/model/Image.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/image/repository/ImageQueryDslRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/image/repository/ImageQueryDslRepositoryImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/image/repository/ImageRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/model/Address.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/model/Limjang.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/model/LimjangPrice.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/model/LimjangPriceType.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/model/LimjangPropertyType.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/model/LimjangPurpose.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/repository/AddressRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/repository/LimjangMainListDBResponsetDto.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/repository/LimjangPriceRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepositoryImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/repository/LimjangRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/limjang/repository/NotePriceFactory.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/member/model/Member.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/member/model/MemberProvider.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/member/model/MemberStatus.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/member/repository/MemberRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/note/liked/model/LikedNote.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteQueryDSLRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteQueryDSLRepositoryImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/note/shared/model/SharedNote.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/note/shared/model/ViewCountPolicy.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteQueryDSLRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteQueryDSLRepositoryImpl.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencil/acquired/model/AcquiredPencil.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencil/acquired/model/AcquiredType.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencil/acquired/repository/AcquiredPencilRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencil/purchased/model/DeliveryStatus.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencil/purchased/model/DeliveryStatusConverter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencil/purchased/model/PurchasedPencil.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencil/purchased/model/TransactionStatus.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencil/purchased/repository/PurchasedPencilRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencil/used/model/UsedPencil.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencil/used/model/Usedtype.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencil/used/repository/UsedPencilRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencilaccount/model/PencilAccount.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/pencilaccount/repository/PencilAccountRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/record/model/Record.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/record/repository/RecordRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/report/model/Report.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/report/repository/ReportRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/reward/model/Reward.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/reward/model/RewardType.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/reward/repository/RewardRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/scrap/model/Scrap.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/scrap/repository/ScrapRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsAgreement.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsAgreementRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsType.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/withdraw/model/Withdraw.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/withdraw/model/WithdrawReason.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/domain/withdraw/repository/WithdrawRepository.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/FlagSharedNoteEvent.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/PaymentEvent.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/RewardViewCountEvent.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/SignUpEvent.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/publisher/ApplicationFlagSharedNoteEventPublisher.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/publisher/ApplicationMemberEventPublisherAdapter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/publisher/ApplicationPaymentEventPublisherAdapter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/publisher/ApplicationRewardViewCountPublisherAdapter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/publisher/FlagSharedNoteEventPublisher.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/publisher/MemberEventPublisher.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/publisher/PaymentEventPublisher.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/publisher/RewardViewCountPublisher.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/subscriber/DiscordEventListener.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/subscriber/EventMessage.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/event/subscriber/RewardViewCountEventListener.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/FeignClientConfig.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/apple/AppleClient.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/apple/AppleClientSecretGenerator.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/apple/AppleOAuthProvider.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/apple/ApplePrivateKeyGenerator.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/apple/ApplePublicKeyGenerator.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/apple/ApplePublicKeyResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/apple/AppleTokenResponse.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/discord/DiscordAlertProvider.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/discord/StatusMessage.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/discord/dto/DiscordAlert.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/openfeign/kakao/KakaoUnlinkClient.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/s3/AWSS3Config.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/s3/S3Service.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/external/safeSearch/SafeSearchClient.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/monitoring/ApiFilterConfig.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/monitoring/ApiLogGenerator.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/monitoring/ApiLogPrinter.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/monitoring/ApiLogRequestLogGenerator.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/monitoring/ApiLogResponseGenerator.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/monitoring/ApiLoggerFactory.java (100%) rename {src => apps/juinjang-api/src}/main/java/umc/th/juinjang/monitoring/ApiLoggerFilter.java (100%) create mode 100644 apps/juinjang-api/src/main/resources/application-test.yml rename {src => apps/juinjang-api/src}/main/resources/certs/AppleIncRootCertificate.cer (100%) rename {src => apps/juinjang-api/src}/main/resources/certs/AppleRootCA-G2.cer (100%) rename {src => apps/juinjang-api/src}/main/resources/certs/AppleRootCA-G3.cer (100%) rename {src => apps/juinjang-api/src}/main/resources/logback-appender.xml (100%) rename {src => apps/juinjang-api/src}/main/resources/logback-dev.xml (100%) rename {src => apps/juinjang-api/src}/main/resources/logback-local.xml (100%) rename {src => apps/juinjang-api/src}/main/resources/logback-prod.xml (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/JuinjangApplicationTests.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/api/ControllerTestSupport.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/api/IntegrationTestSupport.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/api/auth/service/OauthServiceTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/api/limjang/service/command/InitNoteTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/api/limjang/service/command/NoteCreateTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/api/member/controller/MemberControllerTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/api/member/service/MemberServiceTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/api/pencil/service/PencilCommandServiceTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/api/pencil/service/PencilQueryServiceTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/api/pencilAccount/controller/PencilAccountControllerTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountServiceTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/config/TestConfig.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/domain/member/model/MemberTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/repository/limjang/LimjangFixture.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/repository/limjang/LimjangQuerydslTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/service/LimjangCommandServiceTest.java (100%) rename {src => apps/juinjang-api/src}/test/java/umc/th/juinjang/testutil/fixture/MemberFixture.java (100%) diff --git a/apps/juinjang-api/build.gradle.kts b/apps/juinjang-api/build.gradle.kts new file mode 100644 index 00000000..84a7394d --- /dev/null +++ b/apps/juinjang-api/build.gradle.kts @@ -0,0 +1,55 @@ +plugins { + id("org.springframework.boot") + kotlin("jvm") + kotlin("plugin.spring") + kotlin("plugin.jpa") + id("org.jlleitschuh.gradle.ktlint") +} + +tasks.named("bootJar") { + archiveBaseName.set("juinjang-api") +} + +tasks.named("jar") { enabled = false } + +tasks.withType { + kotlinOptions { + freeCompilerArgs = listOf("-Xjsr305=strict") + jvmTarget = "17" + } +} + +dependencies { + // Kotlin + implementation("org.jetbrains.kotlin:kotlin-reflect") + implementation("com.fasterxml.jackson.module:jackson-module-kotlin") + + // Spring Boot + implementation("org.springframework.boot:spring-boot-starter-web") + implementation("org.springframework.boot:spring-boot-starter-data-jpa") + implementation("org.springframework.boot:spring-boot-starter-validation") + implementation("org.springframework.boot:spring-boot-starter-aop") + + // Spring Cloud + implementation("org.springframework.cloud:spring-cloud-starter-openfeign") + + // Spring Retry + implementation("org.springframework.retry:spring-retry") + + // Redis + implementation("org.springframework.boot:spring-boot-starter-data-redis") + + // Documentation + implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0") + + // Database + runtimeOnly("com.mysql:mysql-connector-j") + runtimeOnly("com.h2database:h2") + + // Test + testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("com.ninja-squad:springmockk:4.0.2") + testImplementation("org.mockito:mockito-core:5.14.0") + testImplementation("org.mockito.kotlin:mockito-kotlin:5.4.0") + testImplementation("org.instancio:instancio-junit:5.0.2") +} diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/config/AppConfig/model/QAppConfig.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/config/AppConfig/model/QAppConfig.java new file mode 100644 index 00000000..73568b92 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/config/AppConfig/model/QAppConfig.java @@ -0,0 +1,43 @@ +package umc.th.juinjang.config.AppConfig.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QAppConfig is a Querydsl query type for AppConfig + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QAppConfig extends EntityPathBase { + + private static final long serialVersionUID = 473934270L; + + public static final QAppConfig appConfig = new QAppConfig("appConfig"); + + public final StringPath configKey = createString("configKey"); + + public final StringPath configValue = createString("configValue"); + + public final StringPath description = createString("description"); + + public final DateTimePath updatedAt = createDateTime("updatedAt", java.time.LocalDateTime.class); + + public QAppConfig(String variable) { + super(AppConfig.class, forVariable(variable)); + } + + public QAppConfig(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QAppConfig(PathMetadata metadata) { + super(AppConfig.class, metadata); + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/checklist/model/QChecklistAnswer.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/checklist/model/QChecklistAnswer.java new file mode 100644 index 00000000..06e3414a --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/checklist/model/QChecklistAnswer.java @@ -0,0 +1,64 @@ +package umc.th.juinjang.domain.checklist.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QChecklistAnswer is a Querydsl query type for ChecklistAnswer + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QChecklistAnswer extends EntityPathBase { + + private static final long serialVersionUID = -1311778812L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QChecklistAnswer checklistAnswer = new QChecklistAnswer("checklistAnswer"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + public final StringPath answer = createString("answer"); + + public final NumberPath answerId = createNumber("answerId", Long.class); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final umc.th.juinjang.domain.limjang.model.QLimjang limjangId; + + public final QChecklistQuestionShort questionId; + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QChecklistAnswer(String variable) { + this(ChecklistAnswer.class, forVariable(variable), INITS); + } + + public QChecklistAnswer(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QChecklistAnswer(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QChecklistAnswer(PathMetadata metadata, PathInits inits) { + this(ChecklistAnswer.class, metadata, inits); + } + + public QChecklistAnswer(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.limjangId = inits.isInitialized("limjangId") ? new umc.th.juinjang.domain.limjang.model.QLimjang(forProperty("limjangId"), inits.get("limjangId")) : null; + this.questionId = inits.isInitialized("questionId") ? new QChecklistQuestionShort(forProperty("questionId")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/checklist/model/QChecklistQuestionShort.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/checklist/model/QChecklistQuestionShort.java new file mode 100644 index 00000000..8cca3ebb --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/checklist/model/QChecklistQuestionShort.java @@ -0,0 +1,52 @@ +package umc.th.juinjang.domain.checklist.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QChecklistQuestionShort is a Querydsl query type for ChecklistQuestionShort + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QChecklistQuestionShort extends EntityPathBase { + + private static final long serialVersionUID = -159808208L; + + public static final QChecklistQuestionShort checklistQuestionShort = new QChecklistQuestionShort("checklistQuestionShort"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + public final ListPath answerList = this.createList("answerList", ChecklistAnswer.class, QChecklistAnswer.class, PathInits.DIRECT2); + + public final EnumPath answerType = createEnum("answerType", ChecklistQuestionType.class); + + public final EnumPath category = createEnum("category", ChecklistQuestionCategory.class); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath questionId = createNumber("questionId", Long.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QChecklistQuestionShort(String variable) { + super(ChecklistQuestionShort.class, forVariable(variable)); + } + + public QChecklistQuestionShort(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QChecklistQuestionShort(PathMetadata metadata) { + super(ChecklistQuestionShort.class, metadata); + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/common/QBaseEntity.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/common/QBaseEntity.java new file mode 100644 index 00000000..e83123d2 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/common/QBaseEntity.java @@ -0,0 +1,39 @@ +package umc.th.juinjang.domain.common; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QBaseEntity is a Querydsl query type for BaseEntity + */ +@Generated("com.querydsl.codegen.DefaultSupertypeSerializer") +public class QBaseEntity extends EntityPathBase { + + private static final long serialVersionUID = 614035204L; + + public static final QBaseEntity baseEntity = new QBaseEntity("baseEntity"); + + public final DateTimePath createdAt = createDateTime("createdAt", java.time.LocalDateTime.class); + + public final DateTimePath updatedAt = createDateTime("updatedAt", java.time.LocalDateTime.class); + + public QBaseEntity(String variable) { + super(BaseEntity.class, forVariable(variable)); + } + + public QBaseEntity(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QBaseEntity(PathMetadata metadata) { + super(BaseEntity.class, metadata); + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/flag/model/QFlagSharedNote.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/flag/model/QFlagSharedNote.java new file mode 100644 index 00000000..e2715f23 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/flag/model/QFlagSharedNote.java @@ -0,0 +1,53 @@ +package umc.th.juinjang.domain.flag.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QFlagSharedNote is a Querydsl query type for FlagSharedNote + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QFlagSharedNote extends EntityPathBase { + + private static final long serialVersionUID = 38297911L; + + public static final QFlagSharedNote flagSharedNote = new QFlagSharedNote("flagSharedNote"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath flagged_by_member_id = createNumber("flagged_by_member_id", Long.class); + + public final NumberPath sharedNoteFlagId = createNumber("sharedNoteFlagId", Long.class); + + public final NumberPath sharedNoteId = createNumber("sharedNoteId", Long.class); + + public final EnumPath status = createEnum("status", FlagSharedNoteStatus.class); + + public final EnumPath type = createEnum("type", FlagSharedNoteType.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QFlagSharedNote(String variable) { + super(FlagSharedNote.class, forVariable(variable)); + } + + public QFlagSharedNote(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QFlagSharedNote(PathMetadata metadata) { + super(FlagSharedNote.class, metadata); + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/image/model/QImage.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/image/model/QImage.java new file mode 100644 index 00000000..df1da1d5 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/image/model/QImage.java @@ -0,0 +1,61 @@ +package umc.th.juinjang.domain.image.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QImage is a Querydsl query type for Image + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QImage extends EntityPathBase { + + private static final long serialVersionUID = 1931134736L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QImage image = new QImage("image"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath imageId = createNumber("imageId", Long.class); + + public final StringPath imageUrl = createString("imageUrl"); + + public final umc.th.juinjang.domain.limjang.model.QLimjang limjangId; + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QImage(String variable) { + this(Image.class, forVariable(variable), INITS); + } + + public QImage(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QImage(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QImage(PathMetadata metadata, PathInits inits) { + this(Image.class, metadata, inits); + } + + public QImage(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.limjangId = inits.isInitialized("limjangId") ? new umc.th.juinjang.domain.limjang.model.QLimjang(forProperty("limjangId"), inits.get("limjangId")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QAddress.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QAddress.java new file mode 100644 index 00000000..cd61641a --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QAddress.java @@ -0,0 +1,59 @@ +package umc.th.juinjang.domain.limjang.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QAddress is a Querydsl query type for Address + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QAddress extends EntityPathBase
{ + + private static final long serialVersionUID = 150056654L; + + public static final QAddress address = new QAddress("address"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + public final StringPath addressDetail = createString("addressDetail"); + + public final NumberPath addressId = createNumber("addressId", Long.class); + + public final StringPath bcode = createString("bcode"); + + public final StringPath bname1 = createString("bname1"); + + public final StringPath bname2 = createString("bname2"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final StringPath roadAddress = createString("roadAddress"); + + public final StringPath sido = createString("sido"); + + public final StringPath sigungo = createString("sigungo"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QAddress(String variable) { + super(Address.class, forVariable(variable)); + } + + public QAddress(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QAddress(PathMetadata metadata) { + super(Address.class, metadata); + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QLimjang.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QLimjang.java new file mode 100644 index 00000000..d52ada56 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QLimjang.java @@ -0,0 +1,100 @@ +package umc.th.juinjang.domain.limjang.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QLimjang is a Querydsl query type for Limjang + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QLimjang extends EntityPathBase { + + private static final long serialVersionUID = 1473877658L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QLimjang limjang = new QLimjang("limjang"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + public final StringPath address = createString("address"); + + public final StringPath addressDetail = createString("addressDetail"); + + public final QAddress addressEntity; + + public final ListPath answerList = this.createList("answerList", umc.th.juinjang.domain.checklist.model.ChecklistAnswer.class, umc.th.juinjang.domain.checklist.model.QChecklistAnswer.class, PathInits.DIRECT2); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final BooleanPath deleted = createBoolean("deleted"); + + public final StringPath floor = createString("floor"); + + public final ListPath imageList = this.createList("imageList", umc.th.juinjang.domain.image.model.Image.class, umc.th.juinjang.domain.image.model.QImage.class, PathInits.DIRECT2); + + public final BooleanPath isSharable = createBoolean("isSharable"); + + public final NumberPath limjangId = createNumber("limjangId", Long.class); + + public final QLimjangPrice limjangPrice; + + public final umc.th.juinjang.domain.member.model.QMember memberId; + + public final StringPath memo = createString("memo"); + + public final StringPath nickname = createString("nickname"); + + public final EnumPath priceType = createEnum("priceType", LimjangPriceType.class); + + public final EnumPath propertyType = createEnum("propertyType", LimjangPropertyType.class); + + public final EnumPath purpose = createEnum("purpose", LimjangPurpose.class); + + public final NumberPath pyong = createNumber("pyong", Integer.class); + + public final NumberPath recordCount = createNumber("recordCount", Integer.class); + + public final ListPath recordList = this.createList("recordList", umc.th.juinjang.domain.record.model.Record.class, umc.th.juinjang.domain.record.model.QRecord.class, PathInits.DIRECT2); + + public final umc.th.juinjang.domain.report.model.QReport report; + + public final NumberPath rewardPencil = createNumber("rewardPencil", Integer.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QLimjang(String variable) { + this(Limjang.class, forVariable(variable), INITS); + } + + public QLimjang(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QLimjang(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QLimjang(PathMetadata metadata, PathInits inits) { + this(Limjang.class, metadata, inits); + } + + public QLimjang(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.addressEntity = inits.isInitialized("addressEntity") ? new QAddress(forProperty("addressEntity")) : null; + this.limjangPrice = inits.isInitialized("limjangPrice") ? new QLimjangPrice(forProperty("limjangPrice"), inits.get("limjangPrice")) : null; + this.memberId = inits.isInitialized("memberId") ? new umc.th.juinjang.domain.member.model.QMember(forProperty("memberId")) : null; + this.report = inits.isInitialized("report") ? new umc.th.juinjang.domain.report.model.QReport(forProperty("report"), inits.get("report")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QLimjangPrice.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QLimjangPrice.java new file mode 100644 index 00000000..2e04fc1a --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/limjang/model/QLimjangPrice.java @@ -0,0 +1,69 @@ +package umc.th.juinjang.domain.limjang.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QLimjangPrice is a Querydsl query type for LimjangPrice + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QLimjangPrice extends EntityPathBase { + + private static final long serialVersionUID = -1441056049L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QLimjangPrice limjangPrice = new QLimjangPrice("limjangPrice"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final StringPath depositPrice = createString("depositPrice"); + + public final QLimjang limjang; + + public final StringPath marketPrice = createString("marketPrice"); + + public final StringPath monthlyRent = createString("monthlyRent"); + + public final NumberPath priceId = createNumber("priceId", Long.class); + + public final StringPath pullRent = createString("pullRent"); + + public final StringPath sellingPrice = createString("sellingPrice"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QLimjangPrice(String variable) { + this(LimjangPrice.class, forVariable(variable), INITS); + } + + public QLimjangPrice(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QLimjangPrice(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QLimjangPrice(PathMetadata metadata, PathInits inits) { + this(LimjangPrice.class, metadata, inits); + } + + public QLimjangPrice(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.limjang = inits.isInitialized("limjang") ? new QLimjang(forProperty("limjang"), inits.get("limjang")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/member/model/QMember.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/member/model/QMember.java new file mode 100644 index 00000000..7da60069 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/member/model/QMember.java @@ -0,0 +1,82 @@ +package umc.th.juinjang.domain.member.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMember is a Querydsl query type for Member + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMember extends EntityPathBase { + + private static final long serialVersionUID = -2003808864L; + + public static final QMember member = new QMember("member1"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + public final StringPath agreeVersion = createString("agreeVersion"); + + public final StringPath appleSub = createString("appleSub"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final DateTimePath deletedAt = createDateTime("deletedAt", java.time.LocalDateTime.class); + + public final StringPath email = createString("email"); + + public final StringPath imageUrl = createString("imageUrl"); + + public final StringPath introduction = createString("introduction"); + + public final NumberPath kakaoTargetId = createNumber("kakaoTargetId", Long.class); + + public final ListPath likedNotes = this.createList("likedNotes", umc.th.juinjang.domain.note.liked.model.LikedNote.class, umc.th.juinjang.domain.note.liked.model.QLikedNote.class, PathInits.DIRECT2); + + public final ListPath limjangList = this.createList("limjangList", umc.th.juinjang.domain.limjang.model.Limjang.class, umc.th.juinjang.domain.limjang.model.QLimjang.class, PathInits.DIRECT2); + + public final NumberPath memberId = createNumber("memberId", Long.class); + + public final StringPath nickname = createString("nickname"); + + public final ListPath pencilAccounts = this.createList("pencilAccounts", umc.th.juinjang.domain.pencilaccount.model.PencilAccount.class, umc.th.juinjang.domain.pencilaccount.model.QPencilAccount.class, PathInits.DIRECT2); + + public final EnumPath provider = createEnum("provider", MemberProvider.class); + + public final ListPath purchasedPencils = this.createList("purchasedPencils", umc.th.juinjang.domain.pencil.purchased.model.PurchasedPencil.class, umc.th.juinjang.domain.pencil.purchased.model.QPurchasedPencil.class, PathInits.DIRECT2); + + public final StringPath refreshToken = createString("refreshToken"); + + public final DateTimePath refreshTokenExpiresAt = createDateTime("refreshTokenExpiresAt", java.time.LocalDateTime.class); + + public final ListPath sharedNotes = this.createList("sharedNotes", umc.th.juinjang.domain.note.shared.model.SharedNote.class, umc.th.juinjang.domain.note.shared.model.QSharedNote.class, PathInits.DIRECT2); + + public final EnumPath status = createEnum("status", MemberStatus.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public final ListPath usedPencils = this.createList("usedPencils", umc.th.juinjang.domain.pencil.used.model.UsedPencil.class, umc.th.juinjang.domain.pencil.used.model.QUsedPencil.class, PathInits.DIRECT2); + + public QMember(String variable) { + super(Member.class, forVariable(variable)); + } + + public QMember(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QMember(PathMetadata metadata) { + super(Member.class, metadata); + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/note/liked/model/QLikedNote.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/note/liked/model/QLikedNote.java new file mode 100644 index 00000000..8706dbf1 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/note/liked/model/QLikedNote.java @@ -0,0 +1,54 @@ +package umc.th.juinjang.domain.note.liked.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QLikedNote is a Querydsl query type for LikedNote + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QLikedNote extends EntityPathBase { + + private static final long serialVersionUID = 1432819984L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QLikedNote likedNote = new QLikedNote("likedNote"); + + public final NumberPath likedNoteId = createNumber("likedNoteId", Long.class); + + public final umc.th.juinjang.domain.member.model.QMember member; + + public final umc.th.juinjang.domain.note.shared.model.QSharedNote sharedNote; + + public QLikedNote(String variable) { + this(LikedNote.class, forVariable(variable), INITS); + } + + public QLikedNote(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QLikedNote(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QLikedNote(PathMetadata metadata, PathInits inits) { + this(LikedNote.class, metadata, inits); + } + + public QLikedNote(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new umc.th.juinjang.domain.member.model.QMember(forProperty("member")) : null; + this.sharedNote = inits.isInitialized("sharedNote") ? new umc.th.juinjang.domain.note.shared.model.QSharedNote(forProperty("sharedNote"), inits.get("sharedNote")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/note/shared/model/QSharedNote.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/note/shared/model/QSharedNote.java new file mode 100644 index 00000000..d9f47f67 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/note/shared/model/QSharedNote.java @@ -0,0 +1,82 @@ +package umc.th.juinjang.domain.note.shared.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QSharedNote is a Querydsl query type for SharedNote + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QSharedNote extends EntityPathBase { + + private static final long serialVersionUID = -1789647012L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QSharedNote sharedNote = new QSharedNote("sharedNote"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + public final StringPath buildingName = createString("buildingName"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final DateTimePath deletedAt = createDateTime("deletedAt", java.sql.Timestamp.class); + + public final BooleanPath isImageShared = createBoolean("isImageShared"); + + public final NumberPath likeCount = createNumber("likeCount", Long.class); + + public final umc.th.juinjang.domain.limjang.model.QLimjang limjang; + + public final umc.th.juinjang.domain.member.model.QMember member; + + public final NumberPath month = createNumber("month", Integer.class); + + public final StringPath period = createString("period"); + + public final NumberPath price = createNumber("price", Long.class); + + public final StringPath review = createString("review"); + + public final NumberPath sharedNoteId = createNumber("sharedNoteId", Long.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public final NumberPath viewCount = createNumber("viewCount", Long.class); + + public final NumberPath year = createNumber("year", Integer.class); + + public QSharedNote(String variable) { + this(SharedNote.class, forVariable(variable), INITS); + } + + public QSharedNote(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QSharedNote(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QSharedNote(PathMetadata metadata, PathInits inits) { + this(SharedNote.class, metadata, inits); + } + + public QSharedNote(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.limjang = inits.isInitialized("limjang") ? new umc.th.juinjang.domain.limjang.model.QLimjang(forProperty("limjang"), inits.get("limjang")) : null; + this.member = inits.isInitialized("member") ? new umc.th.juinjang.domain.member.model.QMember(forProperty("member")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/acquired/model/QAcquiredPencil.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/acquired/model/QAcquiredPencil.java new file mode 100644 index 00000000..e506f0c5 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/acquired/model/QAcquiredPencil.java @@ -0,0 +1,69 @@ +package umc.th.juinjang.domain.pencil.acquired.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QAcquiredPencil is a Querydsl query type for AcquiredPencil + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QAcquiredPencil extends EntityPathBase { + + private static final long serialVersionUID = 2035080946L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QAcquiredPencil acquiredPencil = new QAcquiredPencil("acquiredPencil"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + public final NumberPath acquiredQuantity = createNumber("acquiredQuantity", Long.class); + + public final StringPath content = createString("content"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final BooleanPath isRead = createBoolean("isRead"); + + public final umc.th.juinjang.domain.member.model.QMember member; + + public final NumberPath sharedNoteId = createNumber("sharedNoteId", Long.class); + + public final EnumPath type = createEnum("type", AcquiredType.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QAcquiredPencil(String variable) { + this(AcquiredPencil.class, forVariable(variable), INITS); + } + + public QAcquiredPencil(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QAcquiredPencil(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QAcquiredPencil(PathMetadata metadata, PathInits inits) { + this(AcquiredPencil.class, metadata, inits); + } + + public QAcquiredPencil(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new umc.th.juinjang.domain.member.model.QMember(forProperty("member")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/purchased/model/QPurchasedPencil.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/purchased/model/QPurchasedPencil.java new file mode 100644 index 00000000..999905fc --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/purchased/model/QPurchasedPencil.java @@ -0,0 +1,77 @@ +package umc.th.juinjang.domain.pencil.purchased.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QPurchasedPencil is a Querydsl query type for PurchasedPencil + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QPurchasedPencil extends EntityPathBase { + + private static final long serialVersionUID = -910346830L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QPurchasedPencil purchasedPencil = new QPurchasedPencil("purchasedPencil"); + + public final ComparablePath appAccountToken = createComparable("appAccountToken", java.util.UUID.class); + + public final EnumPath deliveryStatus = createEnum("deliveryStatus", DeliveryStatus.class); + + public final NumberPath id = createNumber("id", Long.class); + + public final umc.th.juinjang.domain.member.model.QMember member; + + public final NumberPath playTime = createNumber("playTime", Integer.class); + + public final NumberPath price = createNumber("price", Long.class); + + public final DateTimePath purchasedAt = createDateTime("purchasedAt", java.time.LocalDateTime.class); + + public final NumberPath purchaseQuantity = createNumber("purchaseQuantity", Long.class); + + public final NumberPath remainQuantity = createNumber("remainQuantity", Long.class); + + public final NumberPath retryCount = createNumber("retryCount", Long.class); + + public final StringPath title = createString("title"); + + public final StringPath transactionId = createString("transactionId"); + + public final EnumPath transactionStatus = createEnum("transactionStatus", TransactionStatus.class); + + public final DateTimePath updatedAt = createDateTime("updatedAt", java.time.LocalDateTime.class); + + public final NumberPath usedQuantity = createNumber("usedQuantity", Long.class); + + public QPurchasedPencil(String variable) { + this(PurchasedPencil.class, forVariable(variable), INITS); + } + + public QPurchasedPencil(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QPurchasedPencil(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QPurchasedPencil(PathMetadata metadata, PathInits inits) { + this(PurchasedPencil.class, metadata, inits); + } + + public QPurchasedPencil(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new umc.th.juinjang.domain.member.model.QMember(forProperty("member")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/used/model/QUsedPencil.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/used/model/QUsedPencil.java new file mode 100644 index 00000000..7d6f9666 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencil/used/model/QUsedPencil.java @@ -0,0 +1,69 @@ +package umc.th.juinjang.domain.pencil.used.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QUsedPencil is a Querydsl query type for UsedPencil + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QUsedPencil extends EntityPathBase { + + private static final long serialVersionUID = 2069121042L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QUsedPencil usedPencil = new QUsedPencil("usedPencil"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + public final StringPath buildingName = createString("buildingName"); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final umc.th.juinjang.domain.member.model.QMember member; + + public final NumberPath remainQuantity = createNumber("remainQuantity", Long.class); + + public final NumberPath sharedNoteId = createNumber("sharedNoteId", Long.class); + + public final EnumPath type = createEnum("type", Usedtype.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public final NumberPath usedPencilId = createNumber("usedPencilId", Long.class); + + public final NumberPath usedQuantity = createNumber("usedQuantity", Long.class); + + public QUsedPencil(String variable) { + this(UsedPencil.class, forVariable(variable), INITS); + } + + public QUsedPencil(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QUsedPencil(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QUsedPencil(PathMetadata metadata, PathInits inits) { + this(UsedPencil.class, metadata, inits); + } + + public QUsedPencil(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new umc.th.juinjang.domain.member.model.QMember(forProperty("member")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencilaccount/model/QPencilAccount.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencilaccount/model/QPencilAccount.java new file mode 100644 index 00000000..fdda516f --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/pencilaccount/model/QPencilAccount.java @@ -0,0 +1,69 @@ +package umc.th.juinjang.domain.pencilaccount.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QPencilAccount is a Querydsl query type for PencilAccount + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QPencilAccount extends EntityPathBase { + + private static final long serialVersionUID = -347828550L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QPencilAccount pencilAccount = new QPencilAccount("pencilAccount"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + public final NumberPath acquiredBalance = createNumber("acquiredBalance", Long.class); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final umc.th.juinjang.domain.member.model.QMember member; + + public final NumberPath pencilAccountId = createNumber("pencilAccountId", Long.class); + + public final NumberPath purchasedBalance = createNumber("purchasedBalance", Long.class); + + public final NumberPath totalBalance = createNumber("totalBalance", Long.class); + + public final NumberPath totalPurchaseAmount = createNumber("totalPurchaseAmount", Long.class); + + public final NumberPath totalRefundAmount = createNumber("totalRefundAmount", Long.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QPencilAccount(String variable) { + this(PencilAccount.class, forVariable(variable), INITS); + } + + public QPencilAccount(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QPencilAccount(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QPencilAccount(PathMetadata metadata, PathInits inits) { + this(PencilAccount.class, metadata, inits); + } + + public QPencilAccount(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new umc.th.juinjang.domain.member.model.QMember(forProperty("member")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/record/model/QRecord.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/record/model/QRecord.java new file mode 100644 index 00000000..9d9a1a85 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/record/model/QRecord.java @@ -0,0 +1,67 @@ +package umc.th.juinjang.domain.record.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QRecord is a Querydsl query type for Record + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QRecord extends EntityPathBase { + + private static final long serialVersionUID = 422645504L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QRecord record = new QRecord("record"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final umc.th.juinjang.domain.limjang.model.QLimjang limjangId; + + public final NumberPath recordId = createNumber("recordId", Long.class); + + public final StringPath recordName = createString("recordName"); + + public final StringPath recordScript = createString("recordScript"); + + public final NumberPath recordTime = createNumber("recordTime", Long.class); + + public final StringPath recordUrl = createString("recordUrl"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QRecord(String variable) { + this(Record.class, forVariable(variable), INITS); + } + + public QRecord(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QRecord(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QRecord(PathMetadata metadata, PathInits inits) { + this(Record.class, metadata, inits); + } + + public QRecord(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.limjangId = inits.isInitialized("limjangId") ? new umc.th.juinjang.domain.limjang.model.QLimjang(forProperty("limjangId"), inits.get("limjangId")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/report/model/QReport.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/report/model/QReport.java new file mode 100644 index 00000000..1fc1e9b7 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/report/model/QReport.java @@ -0,0 +1,73 @@ +package umc.th.juinjang.domain.report.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QReport is a Querydsl query type for Report + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QReport extends EntityPathBase { + + private static final long serialVersionUID = 1337186272L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QReport report = new QReport("report"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final StringPath indoorKeyword = createString("indoorKeyword"); + + public final NumberPath indoorRate = createNumber("indoorRate", Float.class); + + public final umc.th.juinjang.domain.limjang.model.QLimjang limjangId; + + public final StringPath locationConditionsKeyword = createString("locationConditionsKeyword"); + + public final NumberPath locationConditionsRate = createNumber("locationConditionsRate", Float.class); + + public final StringPath publicSpaceKeyword = createString("publicSpaceKeyword"); + + public final NumberPath publicSpaceRate = createNumber("publicSpaceRate", Float.class); + + public final NumberPath reportId = createNumber("reportId", Long.class); + + public final NumberPath totalRate = createNumber("totalRate", Float.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QReport(String variable) { + this(Report.class, forVariable(variable), INITS); + } + + public QReport(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QReport(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QReport(PathMetadata metadata, PathInits inits) { + this(Report.class, metadata, inits); + } + + public QReport(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.limjangId = inits.isInitialized("limjangId") ? new umc.th.juinjang.domain.limjang.model.QLimjang(forProperty("limjangId"), inits.get("limjangId")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/reward/model/QReward.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/reward/model/QReward.java new file mode 100644 index 00000000..428e59c7 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/reward/model/QReward.java @@ -0,0 +1,59 @@ +package umc.th.juinjang.domain.reward.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QReward is a Querydsl query type for Reward + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QReward extends EntityPathBase { + + private static final long serialVersionUID = 277161920L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QReward reward = new QReward("reward"); + + public final umc.th.juinjang.domain.member.model.QMember member; + + public final NumberPath milestone = createNumber("milestone", Long.class); + + public final NumberPath rewardId = createNumber("rewardId", Long.class); + + public final NumberPath rewardPencil = createNumber("rewardPencil", Long.class); + + public final NumberPath sharedNoteId = createNumber("sharedNoteId", Long.class); + + public final EnumPath type = createEnum("type", RewardType.class); + + public QReward(String variable) { + this(Reward.class, forVariable(variable), INITS); + } + + public QReward(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QReward(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QReward(PathMetadata metadata, PathInits inits) { + this(Reward.class, metadata, inits); + } + + public QReward(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new umc.th.juinjang.domain.member.model.QMember(forProperty("member")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/scrap/model/QScrap.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/scrap/model/QScrap.java new file mode 100644 index 00000000..976a212a --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/scrap/model/QScrap.java @@ -0,0 +1,59 @@ +package umc.th.juinjang.domain.scrap.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QScrap is a Querydsl query type for Scrap + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QScrap extends EntityPathBase { + + private static final long serialVersionUID = -1231813892L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QScrap scrap = new QScrap("scrap"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final umc.th.juinjang.domain.limjang.model.QLimjang limjangId; + + public final NumberPath scrapId = createNumber("scrapId", Long.class); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QScrap(String variable) { + this(Scrap.class, forVariable(variable), INITS); + } + + public QScrap(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QScrap(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QScrap(PathMetadata metadata, PathInits inits) { + this(Scrap.class, metadata, inits); + } + + public QScrap(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.limjangId = inits.isInitialized("limjangId") ? new umc.th.juinjang.domain.limjang.model.QLimjang(forProperty("limjangId"), inits.get("limjangId")) : null; + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/termsAgreement/repository/QTermsAgreement.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/termsAgreement/repository/QTermsAgreement.java new file mode 100644 index 00000000..c6924301 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/termsAgreement/repository/QTermsAgreement.java @@ -0,0 +1,43 @@ +package umc.th.juinjang.domain.termsAgreement.repository; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QTermsAgreement is a Querydsl query type for TermsAgreement + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QTermsAgreement extends EntityPathBase { + + private static final long serialVersionUID = 802654735L; + + public static final QTermsAgreement termsAgreement = new QTermsAgreement("termsAgreement"); + + public final DateTimePath agreedAt = createDateTime("agreedAt", java.time.LocalDateTime.class); + + public final NumberPath id = createNumber("id", Long.class); + + public final NumberPath memberId = createNumber("memberId", Long.class); + + public final EnumPath termsType = createEnum("termsType", TermsType.class); + + public QTermsAgreement(String variable) { + super(TermsAgreement.class, forVariable(variable)); + } + + public QTermsAgreement(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QTermsAgreement(PathMetadata metadata) { + super(TermsAgreement.class, metadata); + } + +} + diff --git a/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/withdraw/model/QWithdraw.java b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/withdraw/model/QWithdraw.java new file mode 100644 index 00000000..34e4b274 --- /dev/null +++ b/apps/juinjang-api/src/main/generated/umc/th/juinjang/domain/withdraw/model/QWithdraw.java @@ -0,0 +1,49 @@ +package umc.th.juinjang.domain.withdraw.model; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QWithdraw is a Querydsl query type for Withdraw + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QWithdraw extends EntityPathBase { + + private static final long serialVersionUID = 1769459424L; + + public static final QWithdraw withdraw = new QWithdraw("withdraw"); + + public final umc.th.juinjang.domain.common.QBaseEntity _super = new umc.th.juinjang.domain.common.QBaseEntity(this); + + public final NumberPath count = createNumber("count", Long.class); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public final NumberPath withdrawId = createNumber("withdrawId", Long.class); + + public final EnumPath withdrawReason = createEnum("withdrawReason", WithdrawReason.class); + + public QWithdraw(String variable) { + super(Withdraw.class, forVariable(variable)); + } + + public QWithdraw(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QWithdraw(PathMetadata metadata) { + super(Withdraw.class, metadata); + } + +} + diff --git a/src/main/java/umc/th/juinjang/JuinjangApplication.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/JuinjangApplication.java similarity index 89% rename from src/main/java/umc/th/juinjang/JuinjangApplication.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/JuinjangApplication.java index 848e5fcd..936dfc2c 100644 --- a/src/main/java/umc/th/juinjang/JuinjangApplication.java +++ b/apps/juinjang-api/src/main/java/umc/th/juinjang/JuinjangApplication.java @@ -5,11 +5,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.FeignAutoConfiguration; import org.springframework.retry.annotation.EnableRetry; -import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication -// @EnableAsync @ImportAutoConfiguration({FeignAutoConfiguration.class}) @EnableScheduling @EnableRetry diff --git a/src/main/java/umc/th/juinjang/api/address/service/AddressUpdater.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/address/service/AddressUpdater.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/address/service/AddressUpdater.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/address/service/AddressUpdater.java diff --git a/src/main/java/umc/th/juinjang/api/appVersion/controller/AppVersionController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/appVersion/controller/AppVersionController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/appVersion/controller/AppVersionController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/appVersion/controller/AppVersionController.java diff --git a/src/main/java/umc/th/juinjang/api/appVersion/controller/response/AppVersionResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/appVersion/controller/response/AppVersionResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/appVersion/controller/response/AppVersionResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/appVersion/controller/response/AppVersionResponse.java diff --git a/src/main/java/umc/th/juinjang/api/appVersion/service/AppVersionService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/appVersion/service/AppVersionService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/appVersion/service/AppVersionService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/appVersion/service/AppVersionService.java diff --git a/src/main/java/umc/th/juinjang/api/apple/controller/AppleController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/controller/AppleController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/apple/controller/AppleController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/controller/AppleController.java diff --git a/src/main/java/umc/th/juinjang/api/apple/controller/MockAppleController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/controller/MockAppleController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/apple/controller/MockAppleController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/controller/MockAppleController.java diff --git a/src/main/java/umc/th/juinjang/api/apple/service/AppleService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/service/AppleService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/apple/service/AppleService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/service/AppleService.java diff --git a/src/main/java/umc/th/juinjang/api/apple/service/AppleServiceImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/service/AppleServiceImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/apple/service/AppleServiceImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/service/AppleServiceImpl.java diff --git a/src/main/java/umc/th/juinjang/api/apple/service/AppleServiceStub.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/service/AppleServiceStub.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/apple/service/AppleServiceStub.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/service/AppleServiceStub.java diff --git a/src/main/java/umc/th/juinjang/api/apple/service/command/AppleTransactionVerifyCommand.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/service/command/AppleTransactionVerifyCommand.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/apple/service/command/AppleTransactionVerifyCommand.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/apple/service/command/AppleTransactionVerifyCommand.java diff --git a/src/main/java/umc/th/juinjang/api/auth/controller/OAuthController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/OAuthController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/controller/OAuthController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/OAuthController.java diff --git a/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleInfo.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleInfo.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/controller/request/AppleInfo.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleInfo.java diff --git a/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleLoginRequestDto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleLoginRequestDto.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/controller/request/AppleLoginRequestDto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleLoginRequestDto.java diff --git a/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleSignUpRequestDto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleSignUpRequestDto.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/controller/request/AppleSignUpRequestDto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleSignUpRequestDto.java diff --git a/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleSignUpRequestVersion2Dto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleSignUpRequestVersion2Dto.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/controller/request/AppleSignUpRequestVersion2Dto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleSignUpRequestVersion2Dto.java diff --git a/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleTokenRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleTokenRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/controller/request/AppleTokenRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/AppleTokenRequest.java diff --git a/src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoLoginRequestDto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoLoginRequestDto.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoLoginRequestDto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoLoginRequestDto.java diff --git a/src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoSignUpRequestDto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoSignUpRequestDto.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoSignUpRequestDto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoSignUpRequestDto.java diff --git a/src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoSignUpRequestVersion2Dto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoSignUpRequestVersion2Dto.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoSignUpRequestVersion2Dto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/KakaoSignUpRequestVersion2Dto.java diff --git a/src/main/java/umc/th/juinjang/api/auth/controller/request/WithdrawReasonRequestDto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/WithdrawReasonRequestDto.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/controller/request/WithdrawReasonRequestDto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/controller/request/WithdrawReasonRequestDto.java diff --git a/src/main/java/umc/th/juinjang/api/auth/service/OAuthService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/service/OAuthService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/service/OAuthService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/service/OAuthService.java diff --git a/src/main/java/umc/th/juinjang/api/auth/service/OAuthServiceV2.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/service/OAuthServiceV2.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/service/OAuthServiceV2.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/service/OAuthServiceV2.java diff --git a/src/main/java/umc/th/juinjang/api/auth/service/WithdrawService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/service/WithdrawService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/service/WithdrawService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/service/WithdrawService.java diff --git a/src/main/java/umc/th/juinjang/api/auth/service/response/LoginResponseDto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/service/response/LoginResponseDto.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/service/response/LoginResponseDto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/service/response/LoginResponseDto.java diff --git a/src/main/java/umc/th/juinjang/api/auth/service/response/LoginResponseVersion2Dto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/service/response/LoginResponseVersion2Dto.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/auth/service/response/LoginResponseVersion2Dto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/auth/service/response/LoginResponseVersion2Dto.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/controller/ChecklistController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/controller/ChecklistController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/controller/ChecklistController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/controller/ChecklistController.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/controller/ChecklistControllerV2.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/controller/ChecklistControllerV2.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/controller/ChecklistControllerV2.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/controller/ChecklistControllerV2.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/controller/request/ChecklistAnswerRequestDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/controller/request/ChecklistAnswerRequestDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/controller/request/ChecklistAnswerRequestDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/controller/request/ChecklistAnswerRequestDTO.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/controller/request/ChecklistQuestionDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/controller/request/ChecklistQuestionDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/controller/request/ChecklistQuestionDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/controller/request/ChecklistQuestionDTO.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistAnswerFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistAnswerFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/ChecklistAnswerFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistAnswerFinder.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandService.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandServiceImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandServiceImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandServiceImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandServiceImpl.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandServiceV2.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandServiceV2.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandServiceV2.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistCommandServiceV2.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryService.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryServiceImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryServiceImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryServiceImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryServiceImpl.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryServiceV2.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryServiceV2.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryServiceV2.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ChecklistQueryServiceV2.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/ReportFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ReportFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/ReportFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/ReportFinder.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistAnswerAndReportConverter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistAnswerAndReportConverter.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistAnswerAndReportConverter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistAnswerAndReportConverter.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistAnswerConverter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistAnswerConverter.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistAnswerConverter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistAnswerConverter.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistQuestionConverter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistQuestionConverter.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistQuestionConverter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/converter/ChecklistQuestionConverter.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/response/ChecklistAnswerAndReportResponseDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/response/ChecklistAnswerAndReportResponseDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/response/ChecklistAnswerAndReportResponseDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/response/ChecklistAnswerAndReportResponseDTO.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/response/ChecklistAnswerResponseDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/response/ChecklistAnswerResponseDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/response/ChecklistAnswerResponseDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/response/ChecklistAnswerResponseDTO.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/response/ReportGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/response/ReportGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/response/ReportGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/response/ReportGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/response/ReportResponseDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/response/ReportResponseDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/response/ReportResponseDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/response/ReportResponseDTO.java diff --git a/src/main/java/umc/th/juinjang/api/checklist/service/response/ReportWithLimjangResponseDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/response/ReportWithLimjangResponseDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/checklist/service/response/ReportWithLimjangResponseDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/checklist/service/response/ReportWithLimjangResponseDTO.java diff --git a/src/main/java/umc/th/juinjang/api/config/SwaggerConfig.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/config/SwaggerConfig.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/config/SwaggerConfig.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/config/SwaggerConfig.java diff --git a/src/main/java/umc/th/juinjang/api/dto/ApiResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/dto/ApiResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/dto/ApiResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/dto/ApiResponse.java diff --git a/src/main/java/umc/th/juinjang/api/flag/controller/FlagController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/flag/controller/FlagController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/flag/controller/FlagController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/flag/controller/FlagController.java diff --git a/src/main/java/umc/th/juinjang/api/flag/controller/request/FlagSharedNotePostRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/flag/controller/request/FlagSharedNotePostRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/flag/controller/request/FlagSharedNotePostRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/flag/controller/request/FlagSharedNotePostRequest.java diff --git a/src/main/java/umc/th/juinjang/api/flag/service/FlagSharedNoteCommandService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/flag/service/FlagSharedNoteCommandService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/flag/service/FlagSharedNoteCommandService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/flag/service/FlagSharedNoteCommandService.java diff --git a/src/main/java/umc/th/juinjang/api/flag/service/FlagSharedNoteUpdater.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/flag/service/FlagSharedNoteUpdater.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/flag/service/FlagSharedNoteUpdater.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/flag/service/FlagSharedNoteUpdater.java diff --git a/src/main/java/umc/th/juinjang/api/image/controller/ImageController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/controller/ImageController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/image/controller/ImageController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/controller/ImageController.java diff --git a/src/main/java/umc/th/juinjang/api/image/controller/request/ImageDeleteRequestDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/controller/request/ImageDeleteRequestDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/image/controller/request/ImageDeleteRequestDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/controller/request/ImageDeleteRequestDTO.java diff --git a/src/main/java/umc/th/juinjang/api/image/controller/request/ImageUploadRequestDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/controller/request/ImageUploadRequestDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/image/controller/request/ImageUploadRequestDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/controller/request/ImageUploadRequestDTO.java diff --git a/src/main/java/umc/th/juinjang/api/image/service/ImageCommandService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/ImageCommandService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/image/service/ImageCommandService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/ImageCommandService.java diff --git a/src/main/java/umc/th/juinjang/api/image/service/ImageCommandServiceImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/ImageCommandServiceImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/image/service/ImageCommandServiceImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/ImageCommandServiceImpl.java diff --git a/src/main/java/umc/th/juinjang/api/image/service/ImageFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/ImageFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/image/service/ImageFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/ImageFinder.java diff --git a/src/main/java/umc/th/juinjang/api/image/service/ImageQueryService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/ImageQueryService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/image/service/ImageQueryService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/ImageQueryService.java diff --git a/src/main/java/umc/th/juinjang/api/image/service/ImageQueryServiceImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/ImageQueryServiceImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/image/service/ImageQueryServiceImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/ImageQueryServiceImpl.java diff --git a/src/main/java/umc/th/juinjang/api/image/service/response/ImageListResponseDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/response/ImageListResponseDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/image/service/response/ImageListResponseDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/response/ImageListResponseDTO.java diff --git a/src/main/java/umc/th/juinjang/api/image/service/response/ImageUploadResponseDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/response/ImageUploadResponseDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/image/service/response/ImageUploadResponseDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/response/ImageUploadResponseDTO.java diff --git a/src/main/java/umc/th/juinjang/api/image/service/response/ImagesGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/response/ImagesGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/image/service/response/ImagesGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/image/service/response/ImagesGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/LimjangController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/LimjangController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/controller/LimjangController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/LimjangController.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/NoteControllerV2.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/NoteControllerV2.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/controller/NoteControllerV2.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/NoteControllerV2.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/parameter/LimjangSortOptions.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/parameter/LimjangSortOptions.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/controller/parameter/LimjangSortOptions.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/parameter/LimjangSortOptions.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangPatchRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangPatchRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangPatchRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangPatchRequest.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangPostRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangPostRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangPostRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangPostRequest.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangUpdateRequestDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangUpdateRequestDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangUpdateRequestDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangUpdateRequestDTO.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangsDeleteRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangsDeleteRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangsDeleteRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/LimjangsDeleteRequest.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/request/NoteInitRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/NoteInitRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/controller/request/NoteInitRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/NoteInitRequest.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePatchRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePatchRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePatchRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePatchRequest.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePatchRequestV2.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePatchRequestV2.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePatchRequestV2.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePatchRequestV2.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePostRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePostRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePostRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/controller/request/NotePostRequest.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/LimjangCommandService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangCommandService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/LimjangCommandService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangCommandService.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/LimjangCommandServiceImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangCommandServiceImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/LimjangCommandServiceImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangCommandServiceImpl.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/LimjangPriceBridge.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangPriceBridge.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/LimjangPriceBridge.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangPriceBridge.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/LimjangQueryService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangQueryService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/LimjangQueryService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangQueryService.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/LimjangQueryServiceImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangQueryServiceImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/LimjangQueryServiceImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangQueryServiceImpl.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/LimjangSchedulerService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangSchedulerService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/LimjangSchedulerService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/LimjangSchedulerService.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/NoteCommandServiceV2.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/NoteCommandServiceV2.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/NoteCommandServiceV2.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/NoteCommandServiceV2.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/NoteFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/NoteFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/NoteFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/NoteFinder.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/NotePriceUpdater.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/NotePriceUpdater.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/NotePriceUpdater.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/NotePriceUpdater.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/NoteUpdater.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/NoteUpdater.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/NoteUpdater.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/NoteUpdater.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/converter/LimjangDetailConverter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/converter/LimjangDetailConverter.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/converter/LimjangDetailConverter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/converter/LimjangDetailConverter.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/converter/LimjangsMainGetResponseConverter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/converter/LimjangsMainGetResponseConverter.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/converter/LimjangsMainGetResponseConverter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/converter/LimjangsMainGetResponseConverter.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/ChecklistConditionResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/ChecklistConditionResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/ChecklistConditionResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/ChecklistConditionResponse.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangDetailGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangDetailGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangDetailGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangDetailGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangDetailResponseDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangDetailResponseDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangDetailResponseDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangDetailResponseDTO.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangMemoResponseDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangMemoResponseDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangMemoResponseDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangMemoResponseDTO.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangPostResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangPostResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangPostResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangPostResponse.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangTotalListResponseDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangTotalListResponseDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangTotalListResponseDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangTotalListResponseDTO.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsGetByKeywordResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsGetByKeywordResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsGetByKeywordResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsGetByKeywordResponse.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsMainGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsMainGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsMainGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsMainGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsMainGetVersion2Response.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsMainGetVersion2Response.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsMainGetVersion2Response.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/LimjangsMainGetVersion2Response.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/NotePostResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/NotePostResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/NotePostResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/NotePostResponse.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNoteGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNoteGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/UserNoteGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNoteGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesShareableGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesShareableGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesShareableGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesShareableGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/member/controller/MemberController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/controller/MemberController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/member/controller/MemberController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/controller/MemberController.java diff --git a/src/main/java/umc/th/juinjang/api/member/controller/request/IntroductionPatchRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/controller/request/IntroductionPatchRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/member/controller/request/IntroductionPatchRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/controller/request/IntroductionPatchRequest.java diff --git a/src/main/java/umc/th/juinjang/api/member/controller/request/MemberAgreeVersionPostRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/controller/request/MemberAgreeVersionPostRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/member/controller/request/MemberAgreeVersionPostRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/controller/request/MemberAgreeVersionPostRequest.java diff --git a/src/main/java/umc/th/juinjang/api/member/controller/request/MemberRequestDto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/controller/request/MemberRequestDto.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/member/controller/request/MemberRequestDto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/controller/request/MemberRequestDto.java diff --git a/src/main/java/umc/th/juinjang/api/member/service/MemberService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/service/MemberService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/member/service/MemberService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/service/MemberService.java diff --git a/src/main/java/umc/th/juinjang/api/member/service/response/MemberResponseDto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/service/response/MemberResponseDto.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/member/service/response/MemberResponseDto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/member/service/response/MemberResponseDto.java diff --git a/src/main/java/umc/th/juinjang/api/mock/MockController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/mock/MockController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/mock/MockController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/mock/MockController.java diff --git a/src/main/java/umc/th/juinjang/api/note/liked/controller/LikedNoteController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/controller/LikedNoteController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/liked/controller/LikedNoteController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/controller/LikedNoteController.java diff --git a/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteCommandService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteCommandService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteCommandService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteCommandService.java diff --git a/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteDeleter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteDeleter.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteDeleter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteDeleter.java diff --git a/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteFinder.java diff --git a/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteUpdater.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteUpdater.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteUpdater.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/LikedNoteUpdater.java diff --git a/src/main/java/umc/th/juinjang/api/note/liked/service/response/LikedNoteDeleteResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/response/LikedNoteDeleteResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/liked/service/response/LikedNoteDeleteResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/response/LikedNoteDeleteResponse.java diff --git a/src/main/java/umc/th/juinjang/api/note/liked/service/response/LikedNotePostResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/response/LikedNotePostResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/liked/service/response/LikedNotePostResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/liked/service/response/LikedNotePostResponse.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/controller/SharedNoteController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/controller/SharedNoteController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/controller/SharedNoteController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/controller/SharedNoteController.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/controller/request/ExploreSortType.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/controller/request/ExploreSortType.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/controller/request/ExploreSortType.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/controller/request/ExploreSortType.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/controller/request/NoteType.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/controller/request/NoteType.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/controller/request/NoteType.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/controller/request/NoteType.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/controller/request/SharedNotePostRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/controller/request/SharedNotePostRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/controller/request/SharedNotePostRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/controller/request/SharedNotePostRequest.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteCommandService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteCommandService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteCommandService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteCommandService.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteFinder.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteQueryService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteQueryService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteQueryService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteQueryService.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteUpdater.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteUpdater.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteUpdater.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteUpdater.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/ViewCountService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/ViewCountService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/service/ViewCountService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/ViewCountService.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteCheckListAndReviewResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteCheckListAndReviewResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteCheckListAndReviewResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteCheckListAndReviewResponse.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteExploreGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteExploreGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteExploreGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteExploreGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNoteGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNotePostResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNotePostResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNotePostResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/response/SharedNotePostResponse.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/response/UserSharedNotesGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/response/UserSharedNotesGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/service/response/UserSharedNotesGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/response/UserSharedNotesGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/util/SharedNotesTimeAgoFormatter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/util/SharedNotesTimeAgoFormatter.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/note/shared/service/util/SharedNotesTimeAgoFormatter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/note/shared/service/util/SharedNotesTimeAgoFormatter.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/controller/PencilController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/controller/PencilController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/controller/PencilController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/controller/PencilController.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/controller/request/AppleIAPPurchaseRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/controller/request/AppleIAPPurchaseRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/controller/request/AppleIAPPurchaseRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/controller/request/AppleIAPPurchaseRequest.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/AcquiredPencilFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/AcquiredPencilFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/AcquiredPencilFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/AcquiredPencilFinder.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/AcquiredPencilUpdater.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/AcquiredPencilUpdater.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/AcquiredPencilUpdater.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/AcquiredPencilUpdater.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/PencilCommandService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/PencilCommandService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/PencilCommandService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/PencilCommandService.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/PencilQueryService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/PencilQueryService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/PencilQueryService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/PencilQueryService.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/PurchasedPencilFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/PurchasedPencilFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/PurchasedPencilFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/PurchasedPencilFinder.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/PurchasedPencilUpdater.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/PurchasedPencilUpdater.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/PurchasedPencilUpdater.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/PurchasedPencilUpdater.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/UsedPencilFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/UsedPencilFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/UsedPencilFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/UsedPencilFinder.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/UsedPencilUpdater.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/UsedPencilUpdater.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/UsedPencilUpdater.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/UsedPencilUpdater.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilReadResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilReadResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilReadResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilReadResponse.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilReadStatusResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilReadStatusResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilReadStatusResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilReadStatusResponse.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/AcquiredPencilResponse.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/response/AppleIAPPurchaseResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/AppleIAPPurchaseResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/response/AppleIAPPurchaseResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/AppleIAPPurchaseResponse.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/response/PurchasedPencilResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/PurchasedPencilResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/response/PurchasedPencilResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/PurchasedPencilResponse.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/response/UsedPencilResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/UsedPencilResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/response/UsedPencilResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/UsedPencilResponse.java diff --git a/src/main/java/umc/th/juinjang/api/pencil/service/response/VerificationResult.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/VerificationResult.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencil/service/response/VerificationResult.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencil/service/response/VerificationResult.java diff --git a/src/main/java/umc/th/juinjang/api/pencilAccount/controller/PencilAccountController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencilAccount/controller/PencilAccountController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencilAccount/controller/PencilAccountController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencilAccount/controller/PencilAccountController.java diff --git a/src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountFinder.java diff --git a/src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountService.java diff --git a/src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountUpdater.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountUpdater.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountUpdater.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountUpdater.java diff --git a/src/main/java/umc/th/juinjang/api/pencilAccount/service/response/PencilQuantityGetResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencilAccount/service/response/PencilQuantityGetResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/pencilAccount/service/response/PencilQuantityGetResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/pencilAccount/service/response/PencilQuantityGetResponse.java diff --git a/src/main/java/umc/th/juinjang/api/record/controller/RecordController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/controller/RecordController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/record/controller/RecordController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/controller/RecordController.java diff --git a/src/main/java/umc/th/juinjang/api/record/controller/request/RecordRequestDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/controller/request/RecordRequestDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/record/controller/request/RecordRequestDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/controller/request/RecordRequestDTO.java diff --git a/src/main/java/umc/th/juinjang/api/record/service/RecordService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/service/RecordService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/record/service/RecordService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/service/RecordService.java diff --git a/src/main/java/umc/th/juinjang/api/record/service/converter/LimjangMemoConverter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/service/converter/LimjangMemoConverter.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/record/service/converter/LimjangMemoConverter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/service/converter/LimjangMemoConverter.java diff --git a/src/main/java/umc/th/juinjang/api/record/service/converter/RecordConverter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/service/converter/RecordConverter.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/record/service/converter/RecordConverter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/service/converter/RecordConverter.java diff --git a/src/main/java/umc/th/juinjang/api/record/service/response/RecordResponseDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/service/response/RecordResponseDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/record/service/response/RecordResponseDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/record/service/response/RecordResponseDTO.java diff --git a/src/main/java/umc/th/juinjang/api/reward/service/RewardFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/reward/service/RewardFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/reward/service/RewardFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/reward/service/RewardFinder.java diff --git a/src/main/java/umc/th/juinjang/api/reward/service/RewardService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/reward/service/RewardService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/reward/service/RewardService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/reward/service/RewardService.java diff --git a/src/main/java/umc/th/juinjang/api/reward/service/RewardUpdater.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/reward/service/RewardUpdater.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/reward/service/RewardUpdater.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/reward/service/RewardUpdater.java diff --git a/src/main/java/umc/th/juinjang/api/scrap/controller/ScrapController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/scrap/controller/ScrapController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/scrap/controller/ScrapController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/scrap/controller/ScrapController.java diff --git a/src/main/java/umc/th/juinjang/api/scrap/service/ScarpFinder.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/scrap/service/ScarpFinder.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/scrap/service/ScarpFinder.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/scrap/service/ScarpFinder.java diff --git a/src/main/java/umc/th/juinjang/api/scrap/service/ScrapService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/scrap/service/ScrapService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/scrap/service/ScrapService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/scrap/service/ScrapService.java diff --git a/src/main/java/umc/th/juinjang/api/scrap/service/ScrapServiceImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/scrap/service/ScrapServiceImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/scrap/service/ScrapServiceImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/scrap/service/ScrapServiceImpl.java diff --git a/src/main/java/umc/th/juinjang/api/termsAgreement/controller/TermsAgreementController.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/termsAgreement/controller/TermsAgreementController.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/termsAgreement/controller/TermsAgreementController.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/termsAgreement/controller/TermsAgreementController.java diff --git a/src/main/java/umc/th/juinjang/api/termsAgreement/controller/request/AgreeRequest.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/termsAgreement/controller/request/AgreeRequest.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/termsAgreement/controller/request/AgreeRequest.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/termsAgreement/controller/request/AgreeRequest.java diff --git a/src/main/java/umc/th/juinjang/api/termsAgreement/controller/response/AgreeResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/termsAgreement/controller/response/AgreeResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/termsAgreement/controller/response/AgreeResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/termsAgreement/controller/response/AgreeResponse.java diff --git a/src/main/java/umc/th/juinjang/api/termsAgreement/controller/response/StatusResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/termsAgreement/controller/response/StatusResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/termsAgreement/controller/response/StatusResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/termsAgreement/controller/response/StatusResponse.java diff --git a/src/main/java/umc/th/juinjang/api/termsAgreement/service/TermsAgreementService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/api/termsAgreement/service/TermsAgreementService.java similarity index 100% rename from src/main/java/umc/th/juinjang/api/termsAgreement/service/TermsAgreementService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/api/termsAgreement/service/TermsAgreementService.java diff --git a/src/main/java/umc/th/juinjang/auth/config/SecurityConfig.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/auth/config/SecurityConfig.java similarity index 100% rename from src/main/java/umc/th/juinjang/auth/config/SecurityConfig.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/auth/config/SecurityConfig.java diff --git a/src/main/java/umc/th/juinjang/auth/jwt/JwtAuthenticationFilter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/auth/jwt/JwtAuthenticationFilter.java similarity index 100% rename from src/main/java/umc/th/juinjang/auth/jwt/JwtAuthenticationFilter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/auth/jwt/JwtAuthenticationFilter.java diff --git a/src/main/java/umc/th/juinjang/auth/jwt/JwtExceptionFilter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/auth/jwt/JwtExceptionFilter.java similarity index 100% rename from src/main/java/umc/th/juinjang/auth/jwt/JwtExceptionFilter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/auth/jwt/JwtExceptionFilter.java diff --git a/src/main/java/umc/th/juinjang/auth/jwt/JwtService.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/auth/jwt/JwtService.java similarity index 100% rename from src/main/java/umc/th/juinjang/auth/jwt/JwtService.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/auth/jwt/JwtService.java diff --git a/src/main/java/umc/th/juinjang/auth/jwt/TokenDto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/auth/jwt/TokenDto.java similarity index 100% rename from src/main/java/umc/th/juinjang/auth/jwt/TokenDto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/auth/jwt/TokenDto.java diff --git a/src/main/java/umc/th/juinjang/auth/jwt/UserDetailServiceImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/auth/jwt/UserDetailServiceImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/auth/jwt/UserDetailServiceImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/auth/jwt/UserDetailServiceImpl.java diff --git a/src/main/java/umc/th/juinjang/common/ExceptionHandler.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/ExceptionHandler.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/ExceptionHandler.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/ExceptionHandler.java diff --git a/src/main/java/umc/th/juinjang/common/LoggerProvider.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/LoggerProvider.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/LoggerProvider.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/LoggerProvider.java diff --git a/src/main/java/umc/th/juinjang/common/code/BaseCode.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/BaseCode.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/code/BaseCode.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/BaseCode.java diff --git a/src/main/java/umc/th/juinjang/common/code/BaseErrorCode.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/BaseErrorCode.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/code/BaseErrorCode.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/BaseErrorCode.java diff --git a/src/main/java/umc/th/juinjang/common/code/ErrorReasonDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/ErrorReasonDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/code/ErrorReasonDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/ErrorReasonDTO.java diff --git a/src/main/java/umc/th/juinjang/common/code/ReasonDTO.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/ReasonDTO.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/code/ReasonDTO.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/ReasonDTO.java diff --git a/src/main/java/umc/th/juinjang/common/code/status/ErrorStatus.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/status/ErrorStatus.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/code/status/ErrorStatus.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/status/ErrorStatus.java diff --git a/src/main/java/umc/th/juinjang/common/code/status/SuccessStatus.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/status/SuccessStatus.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/code/status/SuccessStatus.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/code/status/SuccessStatus.java diff --git a/src/main/java/umc/th/juinjang/common/constant/MockConstant.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/constant/MockConstant.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/constant/MockConstant.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/constant/MockConstant.java diff --git a/src/main/java/umc/th/juinjang/common/exception/ExceptionAdvice.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/ExceptionAdvice.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/exception/ExceptionAdvice.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/ExceptionAdvice.java diff --git a/src/main/java/umc/th/juinjang/common/exception/GeneralException.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/GeneralException.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/exception/GeneralException.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/GeneralException.java diff --git a/src/main/java/umc/th/juinjang/common/exception/handler/AppleHandler.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/AppleHandler.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/exception/handler/AppleHandler.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/AppleHandler.java diff --git a/src/main/java/umc/th/juinjang/common/exception/handler/ChecklistHandler.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/ChecklistHandler.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/exception/handler/ChecklistHandler.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/ChecklistHandler.java diff --git a/src/main/java/umc/th/juinjang/common/exception/handler/LikedNoteHandler.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/LikedNoteHandler.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/exception/handler/LikedNoteHandler.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/LikedNoteHandler.java diff --git a/src/main/java/umc/th/juinjang/common/exception/handler/LimjangHandler.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/LimjangHandler.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/exception/handler/LimjangHandler.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/LimjangHandler.java diff --git a/src/main/java/umc/th/juinjang/common/exception/handler/MemberHandler.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/MemberHandler.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/exception/handler/MemberHandler.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/MemberHandler.java diff --git a/src/main/java/umc/th/juinjang/common/exception/handler/PencilAccountHandler.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/PencilAccountHandler.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/exception/handler/PencilAccountHandler.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/PencilAccountHandler.java diff --git a/src/main/java/umc/th/juinjang/common/exception/handler/S3Handler.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/S3Handler.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/exception/handler/S3Handler.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/S3Handler.java diff --git a/src/main/java/umc/th/juinjang/common/exception/handler/ScrapHandler.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/ScrapHandler.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/exception/handler/ScrapHandler.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/ScrapHandler.java diff --git a/src/main/java/umc/th/juinjang/common/exception/handler/SharedNoteHandler.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/SharedNoteHandler.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/exception/handler/SharedNoteHandler.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/exception/handler/SharedNoteHandler.java diff --git a/src/main/java/umc/th/juinjang/common/redis/RedisKeyFactory.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/redis/RedisKeyFactory.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/redis/RedisKeyFactory.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/redis/RedisKeyFactory.java diff --git a/src/main/java/umc/th/juinjang/common/validation/annotation/VaildPriceListSize.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/validation/annotation/VaildPriceListSize.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/validation/annotation/VaildPriceListSize.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/validation/annotation/VaildPriceListSize.java diff --git a/src/main/java/umc/th/juinjang/common/validation/validator/PriceListVaildation.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/common/validation/validator/PriceListVaildation.java similarity index 100% rename from src/main/java/umc/th/juinjang/common/validation/validator/PriceListVaildation.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/common/validation/validator/PriceListVaildation.java diff --git a/src/main/java/umc/th/juinjang/config/AppConfig/model/AppConfig.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/config/AppConfig/model/AppConfig.java similarity index 100% rename from src/main/java/umc/th/juinjang/config/AppConfig/model/AppConfig.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/config/AppConfig/model/AppConfig.java diff --git a/src/main/java/umc/th/juinjang/config/AppConfig/repository/AppConfigRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/config/AppConfig/repository/AppConfigRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/config/AppConfig/repository/AppConfigRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/config/AppConfig/repository/AppConfigRepository.java diff --git a/src/main/java/umc/th/juinjang/config/JpaConfig.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/config/JpaConfig.java similarity index 100% rename from src/main/java/umc/th/juinjang/config/JpaConfig.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/config/JpaConfig.java diff --git a/src/main/java/umc/th/juinjang/config/RedisConfig.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/config/RedisConfig.java similarity index 100% rename from src/main/java/umc/th/juinjang/config/RedisConfig.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/config/RedisConfig.java diff --git a/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistAnswer.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistAnswer.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistAnswer.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistAnswer.java diff --git a/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionCategory.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionCategory.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionCategory.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionCategory.java diff --git a/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionShort.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionShort.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionShort.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionShort.java diff --git a/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionType.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionType.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionType.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionType.java diff --git a/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionVersion.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionVersion.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionVersion.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/ChecklistQuestionVersion.java diff --git a/src/main/java/umc/th/juinjang/domain/checklist/model/LimjangCheckListVersion.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/LimjangCheckListVersion.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/checklist/model/LimjangCheckListVersion.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/model/LimjangCheckListVersion.java diff --git a/src/main/java/umc/th/juinjang/domain/checklist/repository/ChecklistAnswerRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/repository/ChecklistAnswerRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/checklist/repository/ChecklistAnswerRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/repository/ChecklistAnswerRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/checklist/repository/ChecklistQuestionRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/repository/ChecklistQuestionRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/checklist/repository/ChecklistQuestionRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/checklist/repository/ChecklistQuestionRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/common/BaseEntity.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/common/BaseEntity.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/common/BaseEntity.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/common/BaseEntity.java diff --git a/src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNote.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNote.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNote.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNote.java diff --git a/src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNoteStatus.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNoteStatus.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNoteStatus.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNoteStatus.java diff --git a/src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNoteType.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNoteType.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNoteType.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/flag/model/FlagSharedNoteType.java diff --git a/src/main/java/umc/th/juinjang/domain/flag/repository/FlagSharedNoteRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/flag/repository/FlagSharedNoteRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/flag/repository/FlagSharedNoteRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/flag/repository/FlagSharedNoteRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/image/model/Image.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/image/model/Image.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/image/model/Image.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/image/model/Image.java diff --git a/src/main/java/umc/th/juinjang/domain/image/repository/ImageQueryDslRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/image/repository/ImageQueryDslRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/image/repository/ImageQueryDslRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/image/repository/ImageQueryDslRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/image/repository/ImageQueryDslRepositoryImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/image/repository/ImageQueryDslRepositoryImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/image/repository/ImageQueryDslRepositoryImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/image/repository/ImageQueryDslRepositoryImpl.java diff --git a/src/main/java/umc/th/juinjang/domain/image/repository/ImageRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/image/repository/ImageRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/image/repository/ImageRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/image/repository/ImageRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/model/Address.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/Address.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/model/Address.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/Address.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/model/Limjang.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/Limjang.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/model/Limjang.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/Limjang.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPrice.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPrice.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPrice.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPrice.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPriceType.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPriceType.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPriceType.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPriceType.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPropertyType.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPropertyType.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPropertyType.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPropertyType.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPurpose.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPurpose.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPurpose.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/model/LimjangPurpose.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/repository/AddressRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/AddressRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/repository/AddressRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/AddressRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangMainListDBResponsetDto.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangMainListDBResponsetDto.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangMainListDBResponsetDto.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangMainListDBResponsetDto.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangPriceRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangPriceRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangPriceRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangPriceRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepositoryImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepositoryImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepositoryImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangQueryDslRepositoryImpl.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/LimjangRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/limjang/repository/NotePriceFactory.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/NotePriceFactory.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/limjang/repository/NotePriceFactory.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/limjang/repository/NotePriceFactory.java diff --git a/src/main/java/umc/th/juinjang/domain/member/model/Member.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/member/model/Member.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/member/model/Member.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/member/model/Member.java diff --git a/src/main/java/umc/th/juinjang/domain/member/model/MemberProvider.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/member/model/MemberProvider.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/member/model/MemberProvider.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/member/model/MemberProvider.java diff --git a/src/main/java/umc/th/juinjang/domain/member/model/MemberStatus.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/member/model/MemberStatus.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/member/model/MemberStatus.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/member/model/MemberStatus.java diff --git a/src/main/java/umc/th/juinjang/domain/member/repository/MemberRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/member/repository/MemberRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/member/repository/MemberRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/member/repository/MemberRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/note/liked/model/LikedNote.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/liked/model/LikedNote.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/note/liked/model/LikedNote.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/liked/model/LikedNote.java diff --git a/src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteQueryDSLRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteQueryDSLRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteQueryDSLRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteQueryDSLRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteQueryDSLRepositoryImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteQueryDSLRepositoryImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteQueryDSLRepositoryImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteQueryDSLRepositoryImpl.java diff --git a/src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/liked/model/repository/LikedNoteRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/note/shared/model/SharedNote.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/shared/model/SharedNote.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/note/shared/model/SharedNote.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/shared/model/SharedNote.java diff --git a/src/main/java/umc/th/juinjang/domain/note/shared/model/ViewCountPolicy.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/shared/model/ViewCountPolicy.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/note/shared/model/ViewCountPolicy.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/shared/model/ViewCountPolicy.java diff --git a/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteQueryDSLRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteQueryDSLRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteQueryDSLRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteQueryDSLRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteQueryDSLRepositoryImpl.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteQueryDSLRepositoryImpl.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteQueryDSLRepositoryImpl.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteQueryDSLRepositoryImpl.java diff --git a/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/pencil/acquired/model/AcquiredPencil.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/acquired/model/AcquiredPencil.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencil/acquired/model/AcquiredPencil.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/acquired/model/AcquiredPencil.java diff --git a/src/main/java/umc/th/juinjang/domain/pencil/acquired/model/AcquiredType.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/acquired/model/AcquiredType.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencil/acquired/model/AcquiredType.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/acquired/model/AcquiredType.java diff --git a/src/main/java/umc/th/juinjang/domain/pencil/acquired/repository/AcquiredPencilRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/acquired/repository/AcquiredPencilRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencil/acquired/repository/AcquiredPencilRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/acquired/repository/AcquiredPencilRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/DeliveryStatus.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/DeliveryStatus.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencil/purchased/model/DeliveryStatus.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/DeliveryStatus.java diff --git a/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/DeliveryStatusConverter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/DeliveryStatusConverter.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencil/purchased/model/DeliveryStatusConverter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/DeliveryStatusConverter.java diff --git a/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/PurchasedPencil.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/PurchasedPencil.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencil/purchased/model/PurchasedPencil.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/PurchasedPencil.java diff --git a/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/TransactionStatus.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/TransactionStatus.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencil/purchased/model/TransactionStatus.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/purchased/model/TransactionStatus.java diff --git a/src/main/java/umc/th/juinjang/domain/pencil/purchased/repository/PurchasedPencilRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/purchased/repository/PurchasedPencilRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencil/purchased/repository/PurchasedPencilRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/purchased/repository/PurchasedPencilRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/pencil/used/model/UsedPencil.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/used/model/UsedPencil.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencil/used/model/UsedPencil.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/used/model/UsedPencil.java diff --git a/src/main/java/umc/th/juinjang/domain/pencil/used/model/Usedtype.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/used/model/Usedtype.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencil/used/model/Usedtype.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/used/model/Usedtype.java diff --git a/src/main/java/umc/th/juinjang/domain/pencil/used/repository/UsedPencilRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/used/repository/UsedPencilRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencil/used/repository/UsedPencilRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencil/used/repository/UsedPencilRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/pencilaccount/model/PencilAccount.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencilaccount/model/PencilAccount.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencilaccount/model/PencilAccount.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencilaccount/model/PencilAccount.java diff --git a/src/main/java/umc/th/juinjang/domain/pencilaccount/repository/PencilAccountRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencilaccount/repository/PencilAccountRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/pencilaccount/repository/PencilAccountRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/pencilaccount/repository/PencilAccountRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/record/model/Record.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/record/model/Record.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/record/model/Record.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/record/model/Record.java diff --git a/src/main/java/umc/th/juinjang/domain/record/repository/RecordRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/record/repository/RecordRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/record/repository/RecordRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/record/repository/RecordRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/report/model/Report.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/report/model/Report.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/report/model/Report.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/report/model/Report.java diff --git a/src/main/java/umc/th/juinjang/domain/report/repository/ReportRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/report/repository/ReportRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/report/repository/ReportRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/report/repository/ReportRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/reward/model/Reward.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/reward/model/Reward.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/reward/model/Reward.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/reward/model/Reward.java diff --git a/src/main/java/umc/th/juinjang/domain/reward/model/RewardType.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/reward/model/RewardType.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/reward/model/RewardType.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/reward/model/RewardType.java diff --git a/src/main/java/umc/th/juinjang/domain/reward/repository/RewardRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/reward/repository/RewardRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/reward/repository/RewardRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/reward/repository/RewardRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/scrap/model/Scrap.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/scrap/model/Scrap.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/scrap/model/Scrap.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/scrap/model/Scrap.java diff --git a/src/main/java/umc/th/juinjang/domain/scrap/repository/ScrapRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/scrap/repository/ScrapRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/scrap/repository/ScrapRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/scrap/repository/ScrapRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsAgreement.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsAgreement.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsAgreement.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsAgreement.java diff --git a/src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsAgreementRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsAgreementRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsAgreementRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsAgreementRepository.java diff --git a/src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsType.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsType.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsType.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/termsAgreement/repository/TermsType.java diff --git a/src/main/java/umc/th/juinjang/domain/withdraw/model/Withdraw.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/withdraw/model/Withdraw.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/withdraw/model/Withdraw.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/withdraw/model/Withdraw.java diff --git a/src/main/java/umc/th/juinjang/domain/withdraw/model/WithdrawReason.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/withdraw/model/WithdrawReason.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/withdraw/model/WithdrawReason.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/withdraw/model/WithdrawReason.java diff --git a/src/main/java/umc/th/juinjang/domain/withdraw/repository/WithdrawRepository.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/withdraw/repository/WithdrawRepository.java similarity index 100% rename from src/main/java/umc/th/juinjang/domain/withdraw/repository/WithdrawRepository.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/domain/withdraw/repository/WithdrawRepository.java diff --git a/src/main/java/umc/th/juinjang/event/FlagSharedNoteEvent.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/FlagSharedNoteEvent.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/FlagSharedNoteEvent.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/FlagSharedNoteEvent.java diff --git a/src/main/java/umc/th/juinjang/event/PaymentEvent.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/PaymentEvent.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/PaymentEvent.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/PaymentEvent.java diff --git a/src/main/java/umc/th/juinjang/event/RewardViewCountEvent.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/RewardViewCountEvent.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/RewardViewCountEvent.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/RewardViewCountEvent.java diff --git a/src/main/java/umc/th/juinjang/event/SignUpEvent.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/SignUpEvent.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/SignUpEvent.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/SignUpEvent.java diff --git a/src/main/java/umc/th/juinjang/event/publisher/ApplicationFlagSharedNoteEventPublisher.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/ApplicationFlagSharedNoteEventPublisher.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/publisher/ApplicationFlagSharedNoteEventPublisher.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/ApplicationFlagSharedNoteEventPublisher.java diff --git a/src/main/java/umc/th/juinjang/event/publisher/ApplicationMemberEventPublisherAdapter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/ApplicationMemberEventPublisherAdapter.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/publisher/ApplicationMemberEventPublisherAdapter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/ApplicationMemberEventPublisherAdapter.java diff --git a/src/main/java/umc/th/juinjang/event/publisher/ApplicationPaymentEventPublisherAdapter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/ApplicationPaymentEventPublisherAdapter.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/publisher/ApplicationPaymentEventPublisherAdapter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/ApplicationPaymentEventPublisherAdapter.java diff --git a/src/main/java/umc/th/juinjang/event/publisher/ApplicationRewardViewCountPublisherAdapter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/ApplicationRewardViewCountPublisherAdapter.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/publisher/ApplicationRewardViewCountPublisherAdapter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/ApplicationRewardViewCountPublisherAdapter.java diff --git a/src/main/java/umc/th/juinjang/event/publisher/FlagSharedNoteEventPublisher.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/FlagSharedNoteEventPublisher.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/publisher/FlagSharedNoteEventPublisher.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/FlagSharedNoteEventPublisher.java diff --git a/src/main/java/umc/th/juinjang/event/publisher/MemberEventPublisher.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/MemberEventPublisher.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/publisher/MemberEventPublisher.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/MemberEventPublisher.java diff --git a/src/main/java/umc/th/juinjang/event/publisher/PaymentEventPublisher.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/PaymentEventPublisher.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/publisher/PaymentEventPublisher.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/PaymentEventPublisher.java diff --git a/src/main/java/umc/th/juinjang/event/publisher/RewardViewCountPublisher.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/RewardViewCountPublisher.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/publisher/RewardViewCountPublisher.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/publisher/RewardViewCountPublisher.java diff --git a/src/main/java/umc/th/juinjang/event/subscriber/DiscordEventListener.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/subscriber/DiscordEventListener.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/subscriber/DiscordEventListener.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/subscriber/DiscordEventListener.java diff --git a/src/main/java/umc/th/juinjang/event/subscriber/EventMessage.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/subscriber/EventMessage.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/subscriber/EventMessage.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/subscriber/EventMessage.java diff --git a/src/main/java/umc/th/juinjang/event/subscriber/RewardViewCountEventListener.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/event/subscriber/RewardViewCountEventListener.java similarity index 100% rename from src/main/java/umc/th/juinjang/event/subscriber/RewardViewCountEventListener.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/event/subscriber/RewardViewCountEventListener.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/FeignClientConfig.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/FeignClientConfig.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/FeignClientConfig.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/FeignClientConfig.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleClient.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleClient.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/apple/AppleClient.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleClient.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleClientSecretGenerator.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleClientSecretGenerator.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/apple/AppleClientSecretGenerator.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleClientSecretGenerator.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleOAuthProvider.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleOAuthProvider.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/apple/AppleOAuthProvider.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleOAuthProvider.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePrivateKeyGenerator.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePrivateKeyGenerator.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePrivateKeyGenerator.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePrivateKeyGenerator.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePublicKeyGenerator.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePublicKeyGenerator.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePublicKeyGenerator.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePublicKeyGenerator.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePublicKeyResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePublicKeyResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePublicKeyResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/ApplePublicKeyResponse.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleTokenResponse.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleTokenResponse.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/apple/AppleTokenResponse.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/apple/AppleTokenResponse.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/discord/DiscordAlertProvider.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/discord/DiscordAlertProvider.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/discord/DiscordAlertProvider.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/discord/DiscordAlertProvider.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/discord/StatusMessage.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/discord/StatusMessage.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/discord/StatusMessage.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/discord/StatusMessage.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/discord/dto/DiscordAlert.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/discord/dto/DiscordAlert.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/discord/dto/DiscordAlert.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/discord/dto/DiscordAlert.java diff --git a/src/main/java/umc/th/juinjang/external/openfeign/kakao/KakaoUnlinkClient.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/kakao/KakaoUnlinkClient.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/openfeign/kakao/KakaoUnlinkClient.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/openfeign/kakao/KakaoUnlinkClient.java diff --git a/src/main/java/umc/th/juinjang/external/s3/AWSS3Config.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/s3/AWSS3Config.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/s3/AWSS3Config.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/s3/AWSS3Config.java diff --git a/src/main/java/umc/th/juinjang/external/s3/S3Service.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/s3/S3Service.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/s3/S3Service.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/s3/S3Service.java diff --git a/src/main/java/umc/th/juinjang/external/safeSearch/SafeSearchClient.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/external/safeSearch/SafeSearchClient.java similarity index 100% rename from src/main/java/umc/th/juinjang/external/safeSearch/SafeSearchClient.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/external/safeSearch/SafeSearchClient.java diff --git a/src/main/java/umc/th/juinjang/monitoring/ApiFilterConfig.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiFilterConfig.java similarity index 100% rename from src/main/java/umc/th/juinjang/monitoring/ApiFilterConfig.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiFilterConfig.java diff --git a/src/main/java/umc/th/juinjang/monitoring/ApiLogGenerator.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLogGenerator.java similarity index 100% rename from src/main/java/umc/th/juinjang/monitoring/ApiLogGenerator.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLogGenerator.java diff --git a/src/main/java/umc/th/juinjang/monitoring/ApiLogPrinter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLogPrinter.java similarity index 100% rename from src/main/java/umc/th/juinjang/monitoring/ApiLogPrinter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLogPrinter.java diff --git a/src/main/java/umc/th/juinjang/monitoring/ApiLogRequestLogGenerator.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLogRequestLogGenerator.java similarity index 100% rename from src/main/java/umc/th/juinjang/monitoring/ApiLogRequestLogGenerator.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLogRequestLogGenerator.java diff --git a/src/main/java/umc/th/juinjang/monitoring/ApiLogResponseGenerator.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLogResponseGenerator.java similarity index 100% rename from src/main/java/umc/th/juinjang/monitoring/ApiLogResponseGenerator.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLogResponseGenerator.java diff --git a/src/main/java/umc/th/juinjang/monitoring/ApiLoggerFactory.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLoggerFactory.java similarity index 100% rename from src/main/java/umc/th/juinjang/monitoring/ApiLoggerFactory.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLoggerFactory.java diff --git a/src/main/java/umc/th/juinjang/monitoring/ApiLoggerFilter.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLoggerFilter.java similarity index 100% rename from src/main/java/umc/th/juinjang/monitoring/ApiLoggerFilter.java rename to apps/juinjang-api/src/main/java/umc/th/juinjang/monitoring/ApiLoggerFilter.java diff --git a/apps/juinjang-api/src/main/resources/application-test.yml b/apps/juinjang-api/src/main/resources/application-test.yml new file mode 100644 index 00000000..bb3aaa1d --- /dev/null +++ b/apps/juinjang-api/src/main/resources/application-test.yml @@ -0,0 +1,135 @@ +spring: + jpa: + hibernate: + ddl-auto: create-drop # 테스트마다 스키마 재생성 + dialect: org.hibernate.dialect.H2Dialect # H2 데이터베이스 사용 + use_sql_comments: false + default_batch_fetch_size: 100 + show-sql: true + properties: + hibernate: + format_sql: false + datasource: + driver-class-name: org.h2.Driver + url: jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + username: sa + password: + h2: + console: + enabled: true + sql: + init: + mode: never + servlet: + multipart: + enabled: true + max-file-size: 10MB + max-request-size: 10MB + data: + redis: + host: localhost + port: 6379 + +# AWS 설정 - 테스트용 더미 값 +cloud: + aws: + credentials: + access-key: test-access-key + secret-key: test-secret-key + s3: + bucket: test-bucket + uploadPath: https://test-bucket.s3.ap-northeast-2.amazonaws.com + region: + static: ap-northeast-2 + auto: false + stack: + auto: false + +# JWT 설정 - 테스트용 +jwt: + secret: test-secret-key-for-junit-test-environment-minimum-256-bits + access-token-expiration: 3600000 # 1시간 + refresh-token-expiration: 86400000 # 24시간 + +# OAuth2 설정 - 테스트용 더미 값 +security: + oauth2: + client: + provider: + kakao: + authorization-uri: https://kauth.kakao.com/oauth/authorize + token-uri: https://kauth.kakao.com/oauth/token + user-info-uri: https://kapi.kakao.com/v2/user/me + user-name-attribute: id + registration: + kakao: + client-id: test-client-id + client-secret: test-client-secret + client-authentication-method: client_secret_post + redirect-uri: http://localhost:8080/api/auth/kakao/callback + authorization-grant-type: authorization_code + admin-key: test-admin-key + client-name: kakao + scope: + - profile_nickname + - account_email + +# 앱 버전 +app: + version: + ios: 1.0.0 + +# Apple 설정 - 테스트용 +apple: + iap: + enabled: false + environment: Sandbox + bundle-id: com.juinjangteam.juinjang.test + issuer-id: test-issuer-id + key-id: test-key-id + apple-id: 0000000000 + enable-online-checks: false + certificate-names: + private-key-path: + auth: + token-uri: https://appleid.apple.com/auth/token + public-key-url: https://appleid.apple.com/auth/keys + redirect-uri: null + iss: https://appleid.apple.com + aud: test.juinjangteam.com + client-id: com.juinjangteam.juinjang.test + team-id: test-team-id + key: + id: test-key-id + path: + +# Discord webhook - 테스트 환경에서는 비활성화 +discord: + name: discord-feign-client + webhook-url: https://discord.com/test + report-shared-note: https://discord.com/test + member-create: https://discord.com/test + execute-payment: https://discord.com/test + +# Management endpoints +management: + endpoints: + prometheus: + enabled: false + web: + exposure: + include: health,info + +# 로깅 설정 +logging: + file: + path: ./test-log + api: + excluded-paths: /actuator/**,/swagger-ui/**,/h2-console/** + level: + org.hibernate.SQL: DEBUG + org.hibernate.orm.jdbc.bind: TRACE + org.springframework.test: INFO + umc.th.juinjang: DEBUG + pattern: + console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n" \ No newline at end of file diff --git a/src/main/resources/certs/AppleIncRootCertificate.cer b/apps/juinjang-api/src/main/resources/certs/AppleIncRootCertificate.cer similarity index 100% rename from src/main/resources/certs/AppleIncRootCertificate.cer rename to apps/juinjang-api/src/main/resources/certs/AppleIncRootCertificate.cer diff --git a/src/main/resources/certs/AppleRootCA-G2.cer b/apps/juinjang-api/src/main/resources/certs/AppleRootCA-G2.cer similarity index 100% rename from src/main/resources/certs/AppleRootCA-G2.cer rename to apps/juinjang-api/src/main/resources/certs/AppleRootCA-G2.cer diff --git a/src/main/resources/certs/AppleRootCA-G3.cer b/apps/juinjang-api/src/main/resources/certs/AppleRootCA-G3.cer similarity index 100% rename from src/main/resources/certs/AppleRootCA-G3.cer rename to apps/juinjang-api/src/main/resources/certs/AppleRootCA-G3.cer diff --git a/src/main/resources/logback-appender.xml b/apps/juinjang-api/src/main/resources/logback-appender.xml similarity index 100% rename from src/main/resources/logback-appender.xml rename to apps/juinjang-api/src/main/resources/logback-appender.xml diff --git a/src/main/resources/logback-dev.xml b/apps/juinjang-api/src/main/resources/logback-dev.xml similarity index 100% rename from src/main/resources/logback-dev.xml rename to apps/juinjang-api/src/main/resources/logback-dev.xml diff --git a/src/main/resources/logback-local.xml b/apps/juinjang-api/src/main/resources/logback-local.xml similarity index 100% rename from src/main/resources/logback-local.xml rename to apps/juinjang-api/src/main/resources/logback-local.xml diff --git a/src/main/resources/logback-prod.xml b/apps/juinjang-api/src/main/resources/logback-prod.xml similarity index 100% rename from src/main/resources/logback-prod.xml rename to apps/juinjang-api/src/main/resources/logback-prod.xml diff --git a/src/test/java/umc/th/juinjang/JuinjangApplicationTests.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/JuinjangApplicationTests.java similarity index 100% rename from src/test/java/umc/th/juinjang/JuinjangApplicationTests.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/JuinjangApplicationTests.java diff --git a/src/test/java/umc/th/juinjang/api/ControllerTestSupport.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/ControllerTestSupport.java similarity index 100% rename from src/test/java/umc/th/juinjang/api/ControllerTestSupport.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/api/ControllerTestSupport.java diff --git a/src/test/java/umc/th/juinjang/api/IntegrationTestSupport.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/IntegrationTestSupport.java similarity index 100% rename from src/test/java/umc/th/juinjang/api/IntegrationTestSupport.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/api/IntegrationTestSupport.java diff --git a/src/test/java/umc/th/juinjang/api/auth/service/OauthServiceTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/auth/service/OauthServiceTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/api/auth/service/OauthServiceTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/api/auth/service/OauthServiceTest.java diff --git a/src/test/java/umc/th/juinjang/api/limjang/service/command/InitNoteTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/limjang/service/command/InitNoteTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/api/limjang/service/command/InitNoteTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/api/limjang/service/command/InitNoteTest.java diff --git a/src/test/java/umc/th/juinjang/api/limjang/service/command/NoteCreateTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/limjang/service/command/NoteCreateTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/api/limjang/service/command/NoteCreateTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/api/limjang/service/command/NoteCreateTest.java diff --git a/src/test/java/umc/th/juinjang/api/member/controller/MemberControllerTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/member/controller/MemberControllerTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/api/member/controller/MemberControllerTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/api/member/controller/MemberControllerTest.java diff --git a/src/test/java/umc/th/juinjang/api/member/service/MemberServiceTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/member/service/MemberServiceTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/api/member/service/MemberServiceTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/api/member/service/MemberServiceTest.java diff --git a/src/test/java/umc/th/juinjang/api/pencil/service/PencilCommandServiceTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/pencil/service/PencilCommandServiceTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/api/pencil/service/PencilCommandServiceTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/api/pencil/service/PencilCommandServiceTest.java diff --git a/src/test/java/umc/th/juinjang/api/pencil/service/PencilQueryServiceTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/pencil/service/PencilQueryServiceTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/api/pencil/service/PencilQueryServiceTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/api/pencil/service/PencilQueryServiceTest.java diff --git a/src/test/java/umc/th/juinjang/api/pencilAccount/controller/PencilAccountControllerTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/pencilAccount/controller/PencilAccountControllerTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/api/pencilAccount/controller/PencilAccountControllerTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/api/pencilAccount/controller/PencilAccountControllerTest.java diff --git a/src/test/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountServiceTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountServiceTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountServiceTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/api/pencilAccount/service/PencilAccountServiceTest.java diff --git a/src/test/java/umc/th/juinjang/config/TestConfig.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/config/TestConfig.java similarity index 100% rename from src/test/java/umc/th/juinjang/config/TestConfig.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/config/TestConfig.java diff --git a/src/test/java/umc/th/juinjang/domain/member/model/MemberTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/domain/member/model/MemberTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/domain/member/model/MemberTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/domain/member/model/MemberTest.java diff --git a/src/test/java/umc/th/juinjang/repository/limjang/LimjangFixture.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/repository/limjang/LimjangFixture.java similarity index 100% rename from src/test/java/umc/th/juinjang/repository/limjang/LimjangFixture.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/repository/limjang/LimjangFixture.java diff --git a/src/test/java/umc/th/juinjang/repository/limjang/LimjangQuerydslTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/repository/limjang/LimjangQuerydslTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/repository/limjang/LimjangQuerydslTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/repository/limjang/LimjangQuerydslTest.java diff --git a/src/test/java/umc/th/juinjang/service/LimjangCommandServiceTest.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/service/LimjangCommandServiceTest.java similarity index 100% rename from src/test/java/umc/th/juinjang/service/LimjangCommandServiceTest.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/service/LimjangCommandServiceTest.java diff --git a/src/test/java/umc/th/juinjang/testutil/fixture/MemberFixture.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/testutil/fixture/MemberFixture.java similarity index 100% rename from src/test/java/umc/th/juinjang/testutil/fixture/MemberFixture.java rename to apps/juinjang-api/src/test/java/umc/th/juinjang/testutil/fixture/MemberFixture.java From 12f209f9b12c3d91e2e46bd2be92cc5cc71ab669 Mon Sep 17 00:00:00 2001 From: essaysir Date: Sun, 1 Feb 2026 23:40:22 +0900 Subject: [PATCH 03/10] =?UTF-8?q?build:=20CI/CD=20=EB=B0=8F=20Docker=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EB=A9=80=ED=8B=B0=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GitHub Actions 워크플로우 경로 업데이트 - Dockerfile 빌드 경로 수정 Co-Authored-By: Claude Opus 4.5 --- .github/workflows/dev-cd.yml | 22 +++++++++++----------- .github/workflows/dev-ci.yml | 6 +++--- .github/workflows/prod-cd.yml | 18 +++++++++--------- .github/workflows/prod-ci.yml | 2 +- Dockerfile-dev | 6 +----- Dockerfile-prod | 5 +---- 6 files changed, 26 insertions(+), 33 deletions(-) diff --git a/.github/workflows/dev-cd.yml b/.github/workflows/dev-cd.yml index 2ffbd4af..a2fe1f3f 100644 --- a/.github/workflows/dev-cd.yml +++ b/.github/workflows/dev-cd.yml @@ -36,34 +36,34 @@ jobs: - name: Create application-dev.yml run: | - mkdir -p ./src/main/resources - echo "${{ secrets.PROPERTIES_DEV }}" > ./src/main/resources/application-dev.yml + mkdir -p ./apps/juinjang-api/src/main/resources + echo "${{ secrets.PROPERTIES_DEV }}" > ./apps/juinjang-api/src/main/resources/application-dev.yml shell: bash - name: Create .p8 run: | - echo "${{ secrets.APPLE_AUTH }}" > ./src/main/resources/AUTHKEY_JUINJAG.p8 + echo "${{ secrets.APPLE_AUTH }}" > ./apps/juinjang-api/src/main/resources/AUTHKEY_JUINJAG.p8 shell: bash # APPLE IN_APP 결제 관련 프로세스 시작 - name: Create certs and keys directories run: | - mkdir -p ./src/main/resources/keys + mkdir -p ./apps/juinjang-api/src/main/resources/keys - name: Create IAP .p8 Key run: | - echo "${{ secrets.APPLE_IAP_KEY }}" > ./src/main/resources/keys/SubscriptionKey_Q5646J7W54.p8 - + echo "${{ secrets.APPLE_IAP_KEY }}" > ./apps/juinjang-api/src/main/resources/keys/SubscriptionKey_Q5646J7W54.p8 + # 키 파일 크기 확인 (내용은 로그에 출력하지 않음) - if [ -s "./src/main/resources/keys/SubscriptionKey_Q5646J7W54.p8" ]; then - echo "✅ IAP key file created: $(wc -c < ./src/main/resources/keys/SubscriptionKey_Q5646J7W54.p8) bytes" + if [ -s "./apps/juinjang-api/src/main/resources/keys/SubscriptionKey_Q5646J7W54.p8" ]; then + echo "✅ IAP key file created: $(wc -c < ./apps/juinjang-api/src/main/resources/keys/SubscriptionKey_Q5646J7W54.p8) bytes" else echo "❌ IAP key file is empty!" exit 1 fi - + # PEM 형식 확인 - if grep -q "BEGIN PRIVATE KEY" ./src/main/resources/keys/SubscriptionKey_Q5646J7W54.p8; then + if grep -q "BEGIN PRIVATE KEY" ./apps/juinjang-api/src/main/resources/keys/SubscriptionKey_Q5646J7W54.p8; then echo "✅ IAP key file appears to be in PEM format" else echo "⚠️ IAP key file may not be in PEM format" @@ -72,7 +72,7 @@ jobs: # APPLE IN_APP 결제 관련 프로세스 끝 - name: Build With Gradle - run: ./gradlew build -x test + run: ./gradlew :apps:juinjang-api:build -x test - name: Login to Docker Hub run: | diff --git a/.github/workflows/dev-ci.yml b/.github/workflows/dev-ci.yml index f39b29e0..ede9faa1 100644 --- a/.github/workflows/dev-ci.yml +++ b/.github/workflows/dev-ci.yml @@ -34,9 +34,9 @@ jobs: - name: Create application-dev.yml run: | - mkdir -p ./src/main/resources - echo "${{ secrets.PROPERTIES_DEV }}" > ./src/main/resources/application-dev.yml + mkdir -p ./apps/juinjang-api/src/main/resources + echo "${{ secrets.PROPERTIES_DEV }}" > ./apps/juinjang-api/src/main/resources/application-dev.yml shell: bash - name: Build With Gradle - run: ./gradlew build -x test + run: ./gradlew :apps:juinjang-api:build -x test diff --git a/.github/workflows/prod-cd.yml b/.github/workflows/prod-cd.yml index 57ac2f38..dc3ec097 100644 --- a/.github/workflows/prod-cd.yml +++ b/.github/workflows/prod-cd.yml @@ -36,34 +36,34 @@ jobs: - name: Create application-prod.yml run: | - mkdir -p ./src/main/resources - echo "${{ secrets.PROPERTIES_PROD }}" > ./src/main/resources/application-prod.yml + mkdir -p ./apps/juinjang-api/src/main/resources + echo "${{ secrets.PROPERTIES_PROD }}" > ./apps/juinjang-api/src/main/resources/application-prod.yml shell: bash - name: Create .p8 run: | - echo "${{ secrets.APPLE_AUTH }}" > ./src/main/resources/AUTHKEY_JUINJAG.p8 + echo "${{ secrets.APPLE_AUTH }}" > ./apps/juinjang-api/src/main/resources/AUTHKEY_JUINJAG.p8 shell: bash # APPLE IN_APP 결제 관련 프로세스 시작 - name: Create certs and keys directories run: | - mkdir -p ./src/main/resources/keys + mkdir -p ./apps/juinjang-api/src/main/resources/keys - name: Create IAP .p8 Key run: | - echo "${{ secrets.APPLE_IAP_KEY_PROD }}" > ./src/main/resources/keys/SubscriptionKey_62QGYSCKW2.p8 + echo "${{ secrets.APPLE_IAP_KEY_PROD }}" > ./apps/juinjang-api/src/main/resources/keys/SubscriptionKey_62QGYSCKW2.p8 # 키 파일 크기 확인 (내용은 로그에 출력하지 않음) - if [ -s "./src/main/resources/keys/SubscriptionKey_62QGYSCKW2.p8" ]; then - echo "✅ IAP key file created: $(wc -c < ./src/main/resources/keys/SubscriptionKey_62QGYSCKW2.p8) bytes" + if [ -s "./apps/juinjang-api/src/main/resources/keys/SubscriptionKey_62QGYSCKW2.p8" ]; then + echo "✅ IAP key file created: $(wc -c < ./apps/juinjang-api/src/main/resources/keys/SubscriptionKey_62QGYSCKW2.p8) bytes" else echo "❌ IAP key file is empty!" exit 1 fi # PEM 형식 확인 - if grep -q "BEGIN PRIVATE KEY" ./src/main/resources/keys/SubscriptionKey_62QGYSCKW2.p8; then + if grep -q "BEGIN PRIVATE KEY" ./apps/juinjang-api/src/main/resources/keys/SubscriptionKey_62QGYSCKW2.p8; then echo "✅ IAP key file appears to be in PEM format" else echo "⚠️ IAP key file may not be in PEM format" @@ -72,7 +72,7 @@ jobs: # APPLE IN_APP 결제 관련 프로세스 끝 - name: Build With Gradle - run: ./gradlew build -x test + run: ./gradlew :apps:juinjang-api:build -x test - name: Login to Docker Hub run: | diff --git a/.github/workflows/prod-ci.yml b/.github/workflows/prod-ci.yml index c1269cd2..7752e282 100644 --- a/.github/workflows/prod-ci.yml +++ b/.github/workflows/prod-ci.yml @@ -35,4 +35,4 @@ jobs: run: chmod +x gradlew - name: Build With Gradle - run: ./gradlew build -x test + run: ./gradlew :apps:juinjang-api:build -x test diff --git a/Dockerfile-dev b/Dockerfile-dev index 4f882635..285e7b2e 100644 --- a/Dockerfile-dev +++ b/Dockerfile-dev @@ -1,11 +1,7 @@ FROM eclipse-temurin:17-jdk -ARG JAR_FILE=./build/libs/juinjang-0.0.1-SNAPSHOT.jar +ARG JAR_FILE=./apps/juinjang-api/build/libs/juinjang-api-0.0.1-SNAPSHOT.jar ENV GOOGLE_APPLICATION_CREDENTIALS=/app/config/service-account-key.json COPY ${JAR_FILE} app.jar ENTRYPOINT ["java", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/var/heapdumps/juinjang", "-Dspring.profiles.active=dev", "-jar", "/app.jar"] - - - - diff --git a/Dockerfile-prod b/Dockerfile-prod index 41320eb9..15abc37d 100644 --- a/Dockerfile-prod +++ b/Dockerfile-prod @@ -1,9 +1,6 @@ FROM eclipse-temurin:17-jdk -ARG JAR_FILE=./build/libs/juinjang-0.0.1-SNAPSHOT.jar +ARG JAR_FILE=./apps/juinjang-api/build/libs/juinjang-api-0.0.1-SNAPSHOT.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/var/heapdumps/juinjang", "-Dspring.profiles.active=prod", "-jar", "/app.jar"] - - - From 0c7f5fd9e34768ae457ae8e302b03ee5b3cf3f8b Mon Sep 17 00:00:00 2001 From: essaysir Date: Sun, 1 Feb 2026 23:40:28 +0900 Subject: [PATCH 04/10] =?UTF-8?q?chore:=20EditorConfig=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.5 --- .editorconfig | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..dff746f8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +root = true + +[*.{kt,kts}] +max_line_length=130 +insert_final_newline = true + +ij_kotlin_allow_trailing_comma = true +ij_kotlin_allow_trailing_comma_on_call_site = true +ij_kotlin_name_count_to_use_star_import = 2147483647 +ij_kotlin_name_count_to_use_star_import_for_members = 2147483647 +ij_kotlin_packages_to_use_import_on_demand = unset + +ktlint_code_style = INTELLIJ_IDEA +ktlint_standard_package-name = disabled +ktlint_standard_function-signature = disabled +ktlint_standard_import-ordering = disabled +ktlint_standard_indent = disabled + +[*Test.kt] +max_line_length = off From 9295fb6116bcc1c37e9ea55b1c13c7519cc9c34a Mon Sep 17 00:00:00 2001 From: essaysir Date: Tue, 10 Feb 2026 21:26:08 +0900 Subject: [PATCH 05/10] =?UTF-8?q?build:=20=EB=A3=A8=ED=8A=B8=20=EB=B9=8C?= =?UTF-8?q?=EB=93=9C=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EB=B0=8F=20?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EA=B4=80=EB=A6=AC=20=EC=B2=B4=EA=B3=84=20?= =?UTF-8?q?=EA=B0=9C=ED=8E=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Gradle Kotlin DSL 루트 빌드 스크립트 전면 재작성 (kapt, jacoco, ktlint 통합) - gradle.properties로 버전 중앙 관리 체계 전환 (libs.versions.toml 제거) - settings.gradle.kts로 멀티모듈 includes 및 pluginManagement 구성 - .gitignore에 .claude/, .kotlin/ 추가 Co-Authored-By: Claude Opus 4.6 --- .gitignore | 6 ++ CLAUDE.md | 122 +++++++++++++++++++++++++++++++++++ build.gradle.kts | 132 +++++++++++++++++++++++++++++++------- gradle.properties | 31 +++++++++ gradle/libs.versions.toml | 20 ------ settings.gradle | 3 - settings.gradle.kts | 37 +++++++++++ 7 files changed, 304 insertions(+), 47 deletions(-) create mode 100644 CLAUDE.md create mode 100644 gradle.properties delete mode 100644 gradle/libs.versions.toml delete mode 100644 settings.gradle create mode 100644 settings.gradle.kts diff --git a/.gitignore b/.gitignore index d103fa1a..83151cf1 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,12 @@ out/ /nbdist/ /.nb-gradle/ +### Claude Code ### +.claude/ + +### Kotlin ### +.kotlin/ + ### VS Code ### .vscode/ /application.properties diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..54a0dfc3 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,122 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +**주인장 (Juinjang)** - 부동산 임장 관리 서비스의 Spring Boot 백엔드 애플리케이션 + +## Tech Stack + +- **Language**: Java 17 (primary), Kotlin 2.0.20 (being introduced) +- **Framework**: Spring Boot 3.4.4 +- **Build**: Gradle 8.5 (Kotlin DSL) +- **ORM**: Spring Data JPA + QueryDSL 5.0.0 (jakarta) +- **Database**: MySQL (production), H2 (test) +- **Cache**: Redis +- **Auth**: Spring Security + OAuth2 (Kakao, Apple) + JWT (jjwt 0.11.5) +- **Cloud**: AWS S3, Google Cloud Vision, Apple StoreKit +- **Monitoring**: Prometheus + Micrometer +- **Lint**: ktlint 12.1.2 (IntelliJ IDEA code style) + +## Module Structure + +멀티모듈 Gradle 프로젝트: + +``` +juinjang (root) +└── apps/ + └── juinjang-api/ # API 애플리케이션 모듈 +``` + +소스 코드 위치: `apps/juinjang-api/src/main/java/umc/th/juinjang/` + +### Architecture (Layered) + +``` +api/ → Controllers, Request/Response DTOs, Service interfaces +auth/ → JWT filters, Security config, OAuth2 +domain/ → Entities, Repositories, QueryDSL custom repos +common/ → Status codes, exceptions, validation, Redis config +config/ → Application configuration +event/ → Publisher/Subscriber (event-driven 패턴) +``` + +Kotlin 소스(`src/main/kotlin/`)에 새로운 계층 구조 도입 중: +``` +interfaces/ → API 진입점 +application/ → Facade (유스케이스 조합) +domain/ → 엔티티, 도메인 로직 +infrastructure/ → 외부 연동 +support/ → 공통 지원 +``` + +## Common Commands + +```bash +# 빌드 (테스트 제외) +./gradlew :apps:juinjang-api:build -x test + +# 테스트 실행 +./gradlew :apps:juinjang-api:test + +# 단일 테스트 클래스 실행 +./gradlew :apps:juinjang-api:test --tests "umc.th.juinjang.api.limjang.LimjangControllerTest" + +# 클린 빌드 +./gradlew clean :apps:juinjang-api:build + +# 애플리케이션 실행 (dev 프로필) +./gradlew :apps:juinjang-api:bootRun --args='--spring.profiles.active=dev' + +# QueryDSL Q클래스 생성 +./gradlew :apps:juinjang-api:compileJava + +# ktlint 검사 +./gradlew :apps:juinjang-api:ktlintCheck + +# ktlint 자동 포맷 +./gradlew :apps:juinjang-api:ktlintFormat +``` + +## Configuration + +- `application-dev.yml`, `application-prod.yml`: GitHub Secrets로 관리 (git에 포함되지 않음) +- `application-test.yml`: H2 인메모리 DB (MySQL 모드), 테스트용 더미 값 포함 +- 환경별 logback 설정: `logback-dev.xml`, `logback-prod.xml`, `logback-local.xml` + +## CI/CD + +- **CI**: GitHub Actions — PR to `dev`/`prod` 시 빌드 검증 +- **CD**: GitHub Actions — `dev`/`prod` push 시 Docker 빌드 → Docker Hub → EC2 배포 +- **Docker Base Image**: `eclipse-temurin:17-jdk` +- **JAR 경로**: `apps/juinjang-api/build/libs/juinjang-api-0.0.1-SNAPSHOT.jar` + +## Git Convention + +- **Commit**: `[type : 작업내용 #이슈번호]` (예: `add : 이미지 파일 추가 #223`) +- **Branch**: `type/작업내용` (예: `fix/loginerror`) +- **PR Template**: `[type/#n]작업 내용` +- **Main branches**: `dev` (개발), `prod` (운영) + +| Type | Description | +|------|-------------| +| add | 새로운 파일 추가 | +| feat | 새로운 기능 추가/수정 | +| fix | 버그 수정 | +| build | 빌드 관련 수정 | +| chore | 패키지 매니저, 기타 수정 | +| ci | CI 관련 설정 수정 | +| docs | 문서 수정 | +| style | 코드 스타일, 포매팅 | +| refactor | 코드 리팩터링 | +| test | 테스트 코드 | +| release | 버전 릴리즈 | +| remove | 코드/파일 제거 | + +## Testing + +- **Test Support**: `ControllerTestSupport` (MockMvc 기반), `IntegrationTestSupport` (통합 테스트) +- **Mocking**: SpringMockK, Mockito-Kotlin +- **Fixtures**: Instancio로 테스트 데이터 생성 +- **Test Profile**: `application-test.yml` (H2, Redis localhost:6379) diff --git a/build.gradle.kts b/build.gradle.kts index 58c319d0..ca32fb78 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,17 +1,40 @@ -import io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension +import org.gradle.api.Project.DEFAULT_VERSION +import org.springframework.boot.gradle.tasks.bundling.BootJar + +fun getGitHash(): String { + return runCatching { + providers.exec { + commandLine("git", "rev-parse", "--short", "HEAD") + }.standardOutput.asText.get().trim() + }.getOrElse { "init" } +} plugins { - id("org.springframework.boot") version "3.4.4" apply false - id("io.spring.dependency-management") version "1.1.7" apply false - kotlin("jvm") version "2.0.20" apply false - kotlin("plugin.spring") version "2.0.20" apply false - kotlin("plugin.jpa") version "2.0.20" apply false - id("org.jlleitschuh.gradle.ktlint") version "12.1.2" apply false + kotlin("jvm") + kotlin("kapt") + kotlin("plugin.spring") apply false + id("org.springframework.boot") apply false + id("io.spring.dependency-management") + id("org.jlleitschuh.gradle.ktlint") apply false +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +kotlin { + compilerOptions { + jvmToolchain(17) + freeCompilerArgs.addAll("-Xjsr305=strict") + } } allprojects { - group = "umc.5th" - version = "0.0.1-SNAPSHOT" + val projectGroup: String by project + group = projectGroup + version = if (version == DEFAULT_VERSION) getGitHash() else version repositories { mavenCentral() @@ -19,30 +42,91 @@ allprojects { } subprojects { - apply(plugin = "java") + apply(plugin = "org.jetbrains.kotlin.jvm") + apply(plugin = "org.jetbrains.kotlin.kapt") + apply(plugin = "org.jetbrains.kotlin.plugin.spring") + apply(plugin = "org.springframework.boot") apply(plugin = "io.spring.dependency-management") + apply(plugin = "jacoco") + apply(plugin = "org.jlleitschuh.gradle.ktlint") - configure { - sourceCompatibility = JavaVersion.VERSION_17 + dependencyManagement { + imports { + mavenBom("org.springframework.cloud:spring-cloud-dependencies:${project.properties["springCloudDependenciesVersion"]}") + } } - configurations { - named("compileOnly") { - extendsFrom(configurations.named("annotationProcessor").get()) - } + dependencies { + // Kotlin + implementation("org.jetbrains.kotlin:kotlin-reflect") + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") + // Spring + implementation("org.springframework.boot:spring-boot-starter") + runtimeOnly("org.springframework.boot:spring-boot-starter-validation") + // Serialize + implementation("com.fasterxml.jackson.module:jackson-module-kotlin") + implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310") + // Test + testRuntimeOnly("org.junit.platform:junit-platform-launcher") + testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("org.jetbrains.kotlin:kotlin-test-junit5") + testImplementation("com.ninja-squad:springmockk:${project.properties["springMockkVersion"]}") + testImplementation("org.mockito:mockito-core:${project.properties["mockitoVersion"]}") + testImplementation("org.mockito.kotlin:mockito-kotlin:${project.properties["mockitoKotlinVersion"]}") + testImplementation("org.instancio:instancio-junit:${project.properties["instancioJUnitVersion"]}") } - the().apply { - imports { - mavenBom("org.springframework.cloud:spring-cloud-dependencies:2024.0.1") - } + tasks.withType(Jar::class) { enabled = true } + tasks.withType(BootJar::class) { enabled = false } + + configure(allprojects.filter { it.parent?.name.equals("apps") }) { + tasks.withType(Jar::class) { enabled = false } + tasks.withType(BootJar::class) { enabled = true } } - tasks.withType { + tasks.test { + maxParallelForks = 1 useJUnitPlatform() - testLogging { - events("passed", "skipped", "failed") - showStandardStreams = false + systemProperty("user.timezone", "Asia/Seoul") + systemProperty("spring.profiles.active", "test") + jvmArgs("-Xshare:off") + } + + tasks.withType { + mustRunAfter("test") + executionData(fileTree(layout.buildDirectory.asFile).include("jacoco/*.exec")) + reports { + xml.required = true + csv.required = false + html.required = false + } + afterEvaluate { + classDirectories.setFrom( + files( + classDirectories.files.map { + fileTree(it) + }, + ), + ) } } + + configure { + version.set(properties["ktLintVersion"] as String) + } + + // kapt가 javac의 annotationProcessor 설정을 제거하지 않도록 설정 + // Lombok은 javac AP로, QueryDSL은 kapt로 각각 처리 + kapt { + keepJavacAnnotationProcessors = true + } + + // Java ↔ kapt 태스크 의존성: kapt가 생성한 Q-class를 compileJava가 사용 + tasks.named("compileJava") { + dependsOn(tasks.named("kaptKotlin")) + } } + +project("apps") { tasks.configureEach { enabled = false } } +project("modules") { tasks.configureEach { enabled = false } } +project("supports") { tasks.configureEach { enabled = false } } diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..0eac8862 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,31 @@ +### Project Group ### +projectGroup=umc.th.juinjang + +### Project dependency versions ### +kotlinVersion=2.0.20 + +### Plugin dependency versions ### +ktLintPluginVersion=12.1.2 +ktLintVersion=1.0.1 + +### Spring dependency versions ### +springBootVersion=3.4.4 +springDependencyManagementVersion=1.1.7 +springCloudDependenciesVersion=2024.0.1 + +### Managed version overrides (Spring Boot BOM) ### +mysql.version=8.3.0 + +### Library versions ### +springDocOpenApiVersion=2.7.0 +springMockkVersion=4.0.2 +mockitoVersion=5.14.0 +mockitoKotlinVersion=5.4.0 +instancioJUnitVersion=5.0.2 +queryDslVersion=5.0.0 +jjwtVersion=0.11.5 +springCloudAwsVersion=2.2.6.RELEASE +googleCloudVisionVersion=3.58.0 +appleStoreKitVersion=3.4.0 + +kotlin.daemon.jvmargs=-Xmx1g -XX:MaxMetaspaceSize=512m diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml deleted file mode 100644 index 022208bc..00000000 --- a/gradle/libs.versions.toml +++ /dev/null @@ -1,20 +0,0 @@ -[versions] -# Kotlin -kotlin = "2.0.20" -ktlint-plugin = "12.1.2" -ktlint = "1.0.1" - -# Spring -spring-boot = "3.4.4" -spring-dependency-management = "1.1.7" -spring-cloud-dependencies = "2024.0.1" - -# Library -springdoc-openapi = "2.7.0" -spring-mockk = "4.0.2" -mockito = "5.14.0" -mockito-kotlin = "5.4.0" -instancio-junit = "5.0.2" -slack-appender = "1.6.1" - - diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index d71976a8..00000000 --- a/settings.gradle +++ /dev/null @@ -1,3 +0,0 @@ -rootProject.name = 'juinjang' - -include 'apps:juinjang-api' diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..0e5ea6f4 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,37 @@ +rootProject.name = "juinjang" + +include( + ":apps:juinjang-api", + ":modules:jpa", + ":modules:redis", + ":supports:monitoring", + ":supports:logging", +) + +pluginManagement { + val kotlinVersion: String by settings + val springBootVersion: String by settings + val springDependencyManagementVersion: String by settings + val ktLintPluginVersion: String by settings + + repositories { + mavenCentral() + gradlePluginPortal() + maven { url = uri("https://repo.spring.io/milestone") } + maven { url = uri("https://repo.spring.io/snapshot") } + } + + resolutionStrategy { + eachPlugin { + when (requested.id.id) { + "org.jetbrains.kotlin.jvm" -> useVersion(kotlinVersion) + "org.jetbrains.kotlin.kapt" -> useVersion(kotlinVersion) + "org.jetbrains.kotlin.plugin.spring" -> useVersion(kotlinVersion) + "org.jetbrains.kotlin.plugin.jpa" -> useVersion(kotlinVersion) + "org.springframework.boot" -> useVersion(springBootVersion) + "io.spring.dependency-management" -> useVersion(springDependencyManagementVersion) + "org.jlleitschuh.gradle.ktlint" -> useVersion(ktLintPluginVersion) + } + } + } +} From 5ac35ac3091e6995f1188c8ff33a84296ae5a4b0 Mon Sep 17 00:00:00 2001 From: essaysir Date: Tue, 10 Feb 2026 21:26:20 +0900 Subject: [PATCH 06/10] =?UTF-8?q?refactor:=20=EA=B3=B5=ED=86=B5=20?= =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EB=B6=84=EB=A6=AC=20(jpa,=20redis)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - modules/jpa: BaseEntity, JpaConfig, QueryDslConfig, TestContainers 설정 분리 - modules/redis: RedisConfig 및 프로필별 Redis 설정 분리 - 프로필별 datasource/redis 설정을 각 모듈의 yml로 관리 Co-Authored-By: Claude Opus 4.6 --- modules/jpa/build.gradle.kts | 25 ++++++ .../umc/th/juinjang/config/JpaConfig.java | 9 ++ .../th/juinjang/config/QueryDslConfig.java | 16 ++++ .../th/juinjang/domain/common/BaseEntity.java | 39 +++++++++ modules/jpa/src/main/resources/jpa.yml | 85 +++++++++++++++++++ .../MySqlTestContainersConfig.kt | 31 +++++++ modules/redis/build.gradle.kts | 3 + .../umc/th/juinjang/config/RedisConfig.java | 19 +++++ modules/redis/src/main/resources/redis.yml | 21 +++++ 9 files changed, 248 insertions(+) create mode 100644 modules/jpa/build.gradle.kts create mode 100644 modules/jpa/src/main/java/umc/th/juinjang/config/JpaConfig.java create mode 100644 modules/jpa/src/main/java/umc/th/juinjang/config/QueryDslConfig.java create mode 100644 modules/jpa/src/main/java/umc/th/juinjang/domain/common/BaseEntity.java create mode 100644 modules/jpa/src/main/resources/jpa.yml create mode 100644 modules/jpa/src/testFixtures/kotlin/umc/th/juinjang/testcontainers/MySqlTestContainersConfig.kt create mode 100644 modules/redis/build.gradle.kts create mode 100644 modules/redis/src/main/java/umc/th/juinjang/config/RedisConfig.java create mode 100644 modules/redis/src/main/resources/redis.yml diff --git a/modules/jpa/build.gradle.kts b/modules/jpa/build.gradle.kts new file mode 100644 index 00000000..52e9ce63 --- /dev/null +++ b/modules/jpa/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + id("org.jetbrains.kotlin.plugin.jpa") + `java-test-fixtures` +} + +dependencies { + // JPA + api("org.springframework.boot:spring-boot-starter-data-jpa") + + // QueryDSL + api("com.querydsl:querydsl-jpa:${project.properties["queryDslVersion"]}:jakarta") + kapt("com.querydsl:querydsl-apt:${project.properties["queryDslVersion"]}:jakarta") + + // Lombok (코드 마이그레이션 전까지 유지) + compileOnly("org.projectlombok:lombok") + annotationProcessor("org.projectlombok:lombok") + + // JDBC (버전은 gradle.properties의 mysql.version으로 관리) + runtimeOnly("com.mysql:mysql-connector-j") + + // testFixtures + testFixturesImplementation("org.springframework.boot:spring-boot-starter-data-jpa") + testFixturesImplementation("org.testcontainers:mysql") + testFixturesImplementation("org.testcontainers:junit-jupiter") +} diff --git a/modules/jpa/src/main/java/umc/th/juinjang/config/JpaConfig.java b/modules/jpa/src/main/java/umc/th/juinjang/config/JpaConfig.java new file mode 100644 index 00000000..f7887790 --- /dev/null +++ b/modules/jpa/src/main/java/umc/th/juinjang/config/JpaConfig.java @@ -0,0 +1,9 @@ +package umc.th.juinjang.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +@EnableJpaAuditing +@Configuration +public class JpaConfig { +} diff --git a/modules/jpa/src/main/java/umc/th/juinjang/config/QueryDslConfig.java b/modules/jpa/src/main/java/umc/th/juinjang/config/QueryDslConfig.java new file mode 100644 index 00000000..8306dc7a --- /dev/null +++ b/modules/jpa/src/main/java/umc/th/juinjang/config/QueryDslConfig.java @@ -0,0 +1,16 @@ +package umc.th.juinjang.config; + +import com.querydsl.jpa.JPQLTemplates; +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class QueryDslConfig { + + @Bean + public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) { + return new JPAQueryFactory(JPQLTemplates.DEFAULT, entityManager); + } +} diff --git a/modules/jpa/src/main/java/umc/th/juinjang/domain/common/BaseEntity.java b/modules/jpa/src/main/java/umc/th/juinjang/domain/common/BaseEntity.java new file mode 100644 index 00000000..6a369e09 --- /dev/null +++ b/modules/jpa/src/main/java/umc/th/juinjang/domain/common/BaseEntity.java @@ -0,0 +1,39 @@ +package umc.th.juinjang.domain.common; + +import java.time.LocalDateTime; + +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import jakarta.persistence.PrePersist; +import lombok.Getter; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +@Getter +public abstract class BaseEntity { + + @Column(name = "created_at") + private LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at") + private LocalDateTime updatedAt; + + @PrePersist + public void prePersist() { + if (this.createdAt == null) { + this.createdAt = LocalDateTime.now(); + } + } + + protected void setCreatedAt(LocalDateTime createdAt) { + if (createdAt != null) { + this.createdAt = createdAt; + } + } + +} diff --git a/modules/jpa/src/main/resources/jpa.yml b/modules/jpa/src/main/resources/jpa.yml new file mode 100644 index 00000000..caf86ebe --- /dev/null +++ b/modules/jpa/src/main/resources/jpa.yml @@ -0,0 +1,85 @@ +spring: + jpa: + open-in-view: false + generate-ddl: false + show-sql: false + hibernate: + ddl-auto: none + dialect: org.hibernate.dialect.MySQL8Dialect + use_sql_comments: true + properties: + hibernate: + default_batch_fetch_size: 1000 + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + maximum-pool-size: 40 + minimum-idle: 10 + connection-timeout: 3000 + validation-timeout: 5000 + max-lifetime: 1800000 + +--- +# ===== test 프로필 ===== +# datasource는 Testcontainers(MySqlTestContainersConfig)가 동적으로 주입 +spring: + config: + activate: + on-profile: test + jpa: + hibernate: + ddl-auto: create-drop + show-sql: true + properties: + hibernate: + format_sql: false + datasource: + hikari: + maximum-pool-size: 10 + minimum-idle: 5 + +--- +# ===== local 프로필 ===== +# Docker infra-compose.yml의 MySQL에 연결 +spring: + config: + activate: + on-profile: local + jpa: + show-sql: true + hibernate: + ddl-auto: create + datasource: + url: jdbc:mysql://localhost:3306/juinjang + username: application + password: application + hikari: + maximum-pool-size: 10 + minimum-idle: 5 + +--- +# ===== dev 프로필 ===== +spring: + config: + activate: + on-profile: dev + jpa: + show-sql: true + datasource: + url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/juinjang + username: ${MYSQL_USER} + password: ${MYSQL_PWD} + +--- +# ===== prod 프로필 ===== +spring: + config: + activate: + on-profile: prod + datasource: + url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/juinjang + username: ${MYSQL_USER} + password: ${MYSQL_PWD} + hikari: + maximum-pool-size: 40 + minimum-idle: 30 diff --git a/modules/jpa/src/testFixtures/kotlin/umc/th/juinjang/testcontainers/MySqlTestContainersConfig.kt b/modules/jpa/src/testFixtures/kotlin/umc/th/juinjang/testcontainers/MySqlTestContainersConfig.kt new file mode 100644 index 00000000..1895af71 --- /dev/null +++ b/modules/jpa/src/testFixtures/kotlin/umc/th/juinjang/testcontainers/MySqlTestContainersConfig.kt @@ -0,0 +1,31 @@ +package umc.th.juinjang.testcontainers + +import org.springframework.context.annotation.Configuration +import org.testcontainers.containers.MySQLContainer +import org.testcontainers.utility.DockerImageName + +@Configuration +class MySqlTestContainersConfig { + companion object { + private val mySqlContainer: MySQLContainer<*> = MySQLContainer(DockerImageName.parse("mysql:8.0")) + .apply { + withDatabaseName("juinjang") + withUsername("test") + withPassword("test") + withCommand( + "--character-set-server=utf8mb4", + "--collation-server=utf8mb4_general_ci", + "--skip-character-set-client-handshake", + ) + start() + } + + init { + val mySqlJdbcUrl = mySqlContainer.let { "jdbc:mysql://${it.host}:${it.firstMappedPort}/${it.databaseName}" } + System.setProperty("spring.datasource.driver-class-name", "com.mysql.cj.jdbc.Driver") + System.setProperty("spring.datasource.url", mySqlJdbcUrl) + System.setProperty("spring.datasource.username", mySqlContainer.username) + System.setProperty("spring.datasource.password", mySqlContainer.password) + } + } +} diff --git a/modules/redis/build.gradle.kts b/modules/redis/build.gradle.kts new file mode 100644 index 00000000..d5f9b299 --- /dev/null +++ b/modules/redis/build.gradle.kts @@ -0,0 +1,3 @@ +dependencies { + api("org.springframework.boot:spring-boot-starter-data-redis") +} diff --git a/modules/redis/src/main/java/umc/th/juinjang/config/RedisConfig.java b/modules/redis/src/main/java/umc/th/juinjang/config/RedisConfig.java new file mode 100644 index 00000000..80638375 --- /dev/null +++ b/modules/redis/src/main/java/umc/th/juinjang/config/RedisConfig.java @@ -0,0 +1,19 @@ +package umc.th.juinjang.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@Configuration +public class RedisConfig { + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(factory); + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(new StringRedisSerializer()); + return template; + } +} diff --git a/modules/redis/src/main/resources/redis.yml b/modules/redis/src/main/resources/redis.yml new file mode 100644 index 00000000..4107b6e9 --- /dev/null +++ b/modules/redis/src/main/resources/redis.yml @@ -0,0 +1,21 @@ +# ===== Redis 설정 ===== + +--- +spring: + config: + activate: + on-profile: local, test + data: + redis: + host: localhost + port: 6379 + +--- +spring: + config: + activate: + on-profile: dev, prod + data: + redis: + host: ${REDIS_HOSTNAME:localhost} + port: ${REDIS_PORT:6379} From f56c973deedec05afbab1d78f4f3e6ac83485cc5 Mon Sep 17 00:00:00 2001 From: essaysir Date: Tue, 10 Feb 2026 21:26:30 +0900 Subject: [PATCH 07/10] =?UTF-8?q?refactor:=20=EC=A7=80=EC=9B=90=20?= =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EB=B6=84=EB=A6=AC=20(logging,=20monitorin?= =?UTF-8?q?g)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - supports/logging: logback 설정을 독립 모듈로 분리 (프로필별 파일/콘솔 로깅) - supports/monitoring: Actuator + Micrometer Prometheus 메트릭 모듈 분리 Co-Authored-By: Claude Opus 4.6 --- supports/logging/build.gradle.kts | 2 + .../resources/logback/logback-appender.xml | 69 +++++++++++++++++++ .../src/main/resources/logback/logback.xml | 60 ++++++++++++++++ .../logging/src/main/resources/logging.yml | 2 + supports/monitoring/build.gradle.kts | 4 ++ .../src/main/resources/monitoring.yml | 38 ++++++++++ 6 files changed, 175 insertions(+) create mode 100644 supports/logging/build.gradle.kts create mode 100644 supports/logging/src/main/resources/logback/logback-appender.xml create mode 100644 supports/logging/src/main/resources/logback/logback.xml create mode 100644 supports/logging/src/main/resources/logging.yml create mode 100644 supports/monitoring/build.gradle.kts create mode 100644 supports/monitoring/src/main/resources/monitoring.yml diff --git a/supports/logging/build.gradle.kts b/supports/logging/build.gradle.kts new file mode 100644 index 00000000..88c847a6 --- /dev/null +++ b/supports/logging/build.gradle.kts @@ -0,0 +1,2 @@ +// 리소스 전용 모듈: logging.yml + logback/ 설정만 제공 +// 루트에서 공통 플러그인 적용됨 diff --git a/supports/logging/src/main/resources/logback/logback-appender.xml b/supports/logging/src/main/resources/logback/logback-appender.xml new file mode 100644 index 00000000..b524d949 --- /dev/null +++ b/supports/logging/src/main/resources/logback/logback-appender.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + + ${LOG_PATH}/console/${SERVER_INFO}-console.log + + ${LOG_PATH}/console/${SERVER_INFO}-console-%d{yyyy-MM-dd}.%i.txt + 20MB + 7 + 100MB + + + ${BASE_LOG_PATTERN} + + + + + ${LOG_PATH}/api/${SERVER_INFO}-api.log + + ${LOG_PATH}/api/${SERVER_INFO}-api-%d{yyyy-MM-dd}.%i.txt + 20MB + 7 + 100MB + + + ${FILE_LOG_PATTERN} + + + + + ${LOG_PATH}/sql/sql-${SERVER_INFO}.log + + ${LOG_PATH}/sql/sql-${SERVER_INFO}-%d{yyyy-MM-dd}.%i.txt + 20MB + 7 + 100MB + + + ${FILE_LOG_PATTERN} + + + + + diff --git a/supports/logging/src/main/resources/logback/logback.xml b/supports/logging/src/main/resources/logback/logback.xml new file mode 100644 index 00000000..d2077f57 --- /dev/null +++ b/supports/logging/src/main/resources/logback/logback.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/supports/logging/src/main/resources/logging.yml b/supports/logging/src/main/resources/logging.yml new file mode 100644 index 00000000..a75338c8 --- /dev/null +++ b/supports/logging/src/main/resources/logging.yml @@ -0,0 +1,2 @@ +logging: + config: classpath:logback/logback.xml diff --git a/supports/monitoring/build.gradle.kts b/supports/monitoring/build.gradle.kts new file mode 100644 index 00000000..96f767af --- /dev/null +++ b/supports/monitoring/build.gradle.kts @@ -0,0 +1,4 @@ +dependencies { + implementation("org.springframework.boot:spring-boot-starter-actuator") + implementation("io.micrometer:micrometer-registry-prometheus") +} diff --git a/supports/monitoring/src/main/resources/monitoring.yml b/supports/monitoring/src/main/resources/monitoring.yml new file mode 100644 index 00000000..90a57944 --- /dev/null +++ b/supports/monitoring/src/main/resources/monitoring.yml @@ -0,0 +1,38 @@ +management: + metrics: + distribution: + percentiles-histogram: + http.server.requests: true + tags: + application: ${spring.application.name} + endpoints: + web: + exposure: + include: + - health + - prometheus + endpoint: + health: + probes: + enabled: true + group: + liveness: + show-components: always + include: + - livenessState + readiness: + show-components: always + prometheus: + access: read_only + health: + livenessState: + enabled: true + readinessState: + enabled: true + server: + port: 8081 + observations: + annotations: + enabled: true + key-values: + application: ${spring.application.name} From 573415aed473fb903bdb64b52aa93a3ecc596997 Mon Sep 17 00:00:00 2001 From: essaysir Date: Tue, 10 Feb 2026 21:26:45 +0900 Subject: [PATCH 08/10] =?UTF-8?q?refactor:=20API=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=A0=95=EB=A6=AC=20=EB=B0=8F=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 공통 모듈(jpa, redis)과 지원 모듈(logging, monitoring) 의존성으로 전환 - application.yml에서 config import로 모듈별 설정 통합 - API 모듈에서 이동된 설정 파일 제거 (JpaConfig, RedisConfig, BaseEntity, logback-*.xml) - IntegrationTestSupport에 TestContainers 설정 적용 Co-Authored-By: Claude Opus 4.6 --- apps/juinjang-api/build.gradle.kts | 67 +++++------ .../umc/th/juinjang/config/JpaConfig.java | 9 -- .../umc/th/juinjang/config/RedisConfig.java | 19 ---- .../th/juinjang/domain/common/BaseEntity.java | 39 ------- .../{application-test.yml => application.yml} | 90 ++++++--------- .../src/main/resources/logback-appender.xml | 107 ------------------ .../src/main/resources/logback-dev.xml | 32 ------ .../src/main/resources/logback-local.xml | 31 ----- .../src/main/resources/logback-prod.xml | 30 ----- .../juinjang/api/IntegrationTestSupport.java | 3 + .../umc/th/juinjang/config/TestConfig.java | 11 -- 11 files changed, 73 insertions(+), 365 deletions(-) delete mode 100644 apps/juinjang-api/src/main/java/umc/th/juinjang/config/JpaConfig.java delete mode 100644 apps/juinjang-api/src/main/java/umc/th/juinjang/config/RedisConfig.java delete mode 100644 apps/juinjang-api/src/main/java/umc/th/juinjang/domain/common/BaseEntity.java rename apps/juinjang-api/src/main/resources/{application-test.yml => application.yml} (59%) delete mode 100644 apps/juinjang-api/src/main/resources/logback-appender.xml delete mode 100644 apps/juinjang-api/src/main/resources/logback-dev.xml delete mode 100644 apps/juinjang-api/src/main/resources/logback-local.xml delete mode 100644 apps/juinjang-api/src/main/resources/logback-prod.xml diff --git a/apps/juinjang-api/build.gradle.kts b/apps/juinjang-api/build.gradle.kts index 84a7394d..13d2d002 100644 --- a/apps/juinjang-api/build.gradle.kts +++ b/apps/juinjang-api/build.gradle.kts @@ -1,34 +1,28 @@ plugins { - id("org.springframework.boot") - kotlin("jvm") - kotlin("plugin.spring") - kotlin("plugin.jpa") - id("org.jlleitschuh.gradle.ktlint") -} - -tasks.named("bootJar") { - archiveBaseName.set("juinjang-api") -} - -tasks.named("jar") { enabled = false } - -tasks.withType { - kotlinOptions { - freeCompilerArgs = listOf("-Xjsr305=strict") - jvmTarget = "17" - } + id("org.jetbrains.kotlin.plugin.jpa") } dependencies { - // Kotlin - implementation("org.jetbrains.kotlin:kotlin-reflect") - implementation("com.fasterxml.jackson.module:jackson-module-kotlin") + // Modules + implementation(project(":supports:monitoring")) + implementation(project(":supports:logging")) + implementation(project(":modules:jpa")) + implementation(project(":modules:redis")) + testImplementation(testFixtures(project(":modules:jpa"))) + + // Lombok (코드 마이그레이션 전까지 유지) + compileOnly("org.projectlombok:lombok") + annotationProcessor("org.projectlombok:lombok") + testCompileOnly("org.projectlombok:lombok") + testAnnotationProcessor("org.projectlombok:lombok") // Spring Boot implementation("org.springframework.boot:spring-boot-starter-web") - implementation("org.springframework.boot:spring-boot-starter-data-jpa") - implementation("org.springframework.boot:spring-boot-starter-validation") implementation("org.springframework.boot:spring-boot-starter-aop") + implementation("org.springframework.boot:spring-boot-starter-security") + implementation("org.springframework.boot:spring-boot-starter-webflux") + implementation("org.springframework.boot:spring-boot-starter-oauth2-client") + implementation("org.springframework.boot:spring-boot-starter-actuator") // Spring Cloud implementation("org.springframework.cloud:spring-cloud-starter-openfeign") @@ -36,20 +30,29 @@ dependencies { // Spring Retry implementation("org.springframework.retry:spring-retry") - // Redis - implementation("org.springframework.boot:spring-boot-starter-data-redis") + // QueryDSL (이 모듈 자체 엔티티용 APT) + kapt("com.querydsl:querydsl-apt:${project.properties["queryDslVersion"]}:jakarta") + + // JWT + implementation("io.jsonwebtoken:jjwt-api:${project.properties["jjwtVersion"]}") + runtimeOnly("io.jsonwebtoken:jjwt-impl:${project.properties["jjwtVersion"]}") + runtimeOnly("io.jsonwebtoken:jjwt-jackson:${project.properties["jjwtVersion"]}") + + // AWS S3 + implementation("org.springframework.cloud:spring-cloud-starter-aws:${project.properties["springCloudAwsVersion"]}") + + // Google Cloud Vision + implementation("com.google.cloud:google-cloud-vision:${project.properties["googleCloudVisionVersion"]}") + + // Apple StoreKit + implementation("com.apple.itunes.storekit:app-store-server-library:${project.properties["appleStoreKitVersion"]}") // Documentation - implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0") + implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:${project.properties["springDocOpenApiVersion"]}") // Database - runtimeOnly("com.mysql:mysql-connector-j") runtimeOnly("com.h2database:h2") // Test - testImplementation("org.springframework.boot:spring-boot-starter-test") - testImplementation("com.ninja-squad:springmockk:4.0.2") - testImplementation("org.mockito:mockito-core:5.14.0") - testImplementation("org.mockito.kotlin:mockito-kotlin:5.4.0") - testImplementation("org.instancio:instancio-junit:5.0.2") + testImplementation("org.springframework.security:spring-security-test") } diff --git a/apps/juinjang-api/src/main/java/umc/th/juinjang/config/JpaConfig.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/config/JpaConfig.java deleted file mode 100644 index f7887790..00000000 --- a/apps/juinjang-api/src/main/java/umc/th/juinjang/config/JpaConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package umc.th.juinjang.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; - -@EnableJpaAuditing -@Configuration -public class JpaConfig { -} diff --git a/apps/juinjang-api/src/main/java/umc/th/juinjang/config/RedisConfig.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/config/RedisConfig.java deleted file mode 100644 index 80638375..00000000 --- a/apps/juinjang-api/src/main/java/umc/th/juinjang/config/RedisConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package umc.th.juinjang.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.serializer.StringRedisSerializer; - -@Configuration -public class RedisConfig { - @Bean - public RedisTemplate redisTemplate(RedisConnectionFactory factory) { - RedisTemplate template = new RedisTemplate<>(); - template.setConnectionFactory(factory); - template.setKeySerializer(new StringRedisSerializer()); - template.setValueSerializer(new StringRedisSerializer()); - return template; - } -} diff --git a/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/common/BaseEntity.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/common/BaseEntity.java deleted file mode 100644 index 6a369e09..00000000 --- a/apps/juinjang-api/src/main/java/umc/th/juinjang/domain/common/BaseEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -package umc.th.juinjang.domain.common; - -import java.time.LocalDateTime; - -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import jakarta.persistence.Column; -import jakarta.persistence.EntityListeners; -import jakarta.persistence.MappedSuperclass; -import jakarta.persistence.PrePersist; -import lombok.Getter; - -@MappedSuperclass -@EntityListeners(AuditingEntityListener.class) -@Getter -public abstract class BaseEntity { - - @Column(name = "created_at") - private LocalDateTime createdAt; - - @LastModifiedDate - @Column(name = "updated_at") - private LocalDateTime updatedAt; - - @PrePersist - public void prePersist() { - if (this.createdAt == null) { - this.createdAt = LocalDateTime.now(); - } - } - - protected void setCreatedAt(LocalDateTime createdAt) { - if (createdAt != null) { - this.createdAt = createdAt; - } - } - -} diff --git a/apps/juinjang-api/src/main/resources/application-test.yml b/apps/juinjang-api/src/main/resources/application.yml similarity index 59% rename from apps/juinjang-api/src/main/resources/application-test.yml rename to apps/juinjang-api/src/main/resources/application.yml index bb3aaa1d..73f1320d 100644 --- a/apps/juinjang-api/src/main/resources/application-test.yml +++ b/apps/juinjang-api/src/main/resources/application.yml @@ -1,36 +1,43 @@ +# ===== 공통 설정 (모든 프로필에 적용) ===== +server: + port: 8080 + shutdown: graceful + tomcat: + threads: + max: 200 + min-spare: 10 + connection-timeout: 1m + max-connections: 8192 + accept-count: 100 + keep-alive-timeout: 60s + max-http-request-header-size: 8KB + spring: - jpa: - hibernate: - ddl-auto: create-drop # 테스트마다 스키마 재생성 - dialect: org.hibernate.dialect.H2Dialect # H2 데이터베이스 사용 - use_sql_comments: false - default_batch_fetch_size: 100 - show-sql: true - properties: - hibernate: - format_sql: false - datasource: - driver-class-name: org.h2.Driver - url: jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE - username: sa - password: - h2: - console: - enabled: true - sql: - init: - mode: never + application: + name: juinjang-api + config: + import: + - monitoring.yml + - jpa.yml + - redis.yml + - logging.yml servlet: multipart: enabled: true max-file-size: 10MB max-request-size: 10MB - data: - redis: - host: localhost - port: 6379 -# AWS 설정 - 테스트용 더미 값 +logging: + api: + excluded-paths: /actuator/**,/swagger-ui/** + +--- +# ===== local, test 프로필 공통 (더미 값) ===== +spring: + config: + activate: + on-profile: local, test + cloud: aws: credentials: @@ -45,13 +52,11 @@ cloud: stack: auto: false -# JWT 설정 - 테스트용 jwt: secret: test-secret-key-for-junit-test-environment-minimum-256-bits - access-token-expiration: 3600000 # 1시간 - refresh-token-expiration: 86400000 # 24시간 + access-token-expiration: 3600000 + refresh-token-expiration: 86400000 -# OAuth2 설정 - 테스트용 더미 값 security: oauth2: client: @@ -74,12 +79,10 @@ security: - profile_nickname - account_email -# 앱 버전 app: version: ios: 1.0.0 -# Apple 설정 - 테스트용 apple: iap: enabled: false @@ -103,7 +106,6 @@ apple: id: test-key-id path: -# Discord webhook - 테스트 환경에서는 비활성화 discord: name: discord-feign-client webhook-url: https://discord.com/test @@ -111,25 +113,3 @@ discord: member-create: https://discord.com/test execute-payment: https://discord.com/test -# Management endpoints -management: - endpoints: - prometheus: - enabled: false - web: - exposure: - include: health,info - -# 로깅 설정 -logging: - file: - path: ./test-log - api: - excluded-paths: /actuator/**,/swagger-ui/**,/h2-console/** - level: - org.hibernate.SQL: DEBUG - org.hibernate.orm.jdbc.bind: TRACE - org.springframework.test: INFO - umc.th.juinjang: DEBUG - pattern: - console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n" \ No newline at end of file diff --git a/apps/juinjang-api/src/main/resources/logback-appender.xml b/apps/juinjang-api/src/main/resources/logback-appender.xml deleted file mode 100644 index 43647c9f..00000000 --- a/apps/juinjang-api/src/main/resources/logback-appender.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - - - - - - ${CONSOLE_LOG_PATTERN} - - - - - ${LOG_PATH}/console/info-${SERVER_INFO}-console.log - - INFO - ACCEPT - DENY - - - ${LOG_PATH}/console/info-${SERVER_INFO}-console-%d{yyyy-MM-dd}.%i.txt - 20MB - 7 - 100MB - - - ${BASE_LOG_PATTERN} - - - - - ${LOG_PATH}/console/warn-${SERVER_INFO}-console.log - - WARN - ACCEPT - DENY - - - ${LOG_PATH}/console/warn-${SERVER_INFO}-console-%d{yyyy-MM-dd}.%i.txt - 20MB - 7 - 100MB - - - ${BASE_LOG_PATTERN} - - - - - ${LOG_PATH}/console/error-${SERVER_INFO}-console.log - - ERROR - ACCEPT - DENY - - - ${LOG_PATH}/console/error-${SERVER_INFO}-console-%d{yyyy-MM-dd}.%i.txt - 20MB - 7 - 100MB - - - ${BASE_LOG_PATTERN} - - - - - ${LOG_PATH}/api/${SERVER_INFO}-api.log - - ${LOG_PATH}/api/${SERVER_INFO}-api-%d{yyyy-MM-dd}.%i.txt - 20MB - 7 - 100MB - - - ${FILE_LOG_PATTERN} - - - - - - ${LOG_PATH}/sql/sql-${SERVER_INFO}.log - - ${LOG_PATH}/sql/sql-${SERVER_INFO}-%d{yyyy-MM-dd}.%i.txt - 20MB - 7 - 100MB - - - ${FILE_LOG_PATTERN} - - - - \ No newline at end of file diff --git a/apps/juinjang-api/src/main/resources/logback-dev.xml b/apps/juinjang-api/src/main/resources/logback-dev.xml deleted file mode 100644 index f3f6f6fe..00000000 --- a/apps/juinjang-api/src/main/resources/logback-dev.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/apps/juinjang-api/src/main/resources/logback-local.xml b/apps/juinjang-api/src/main/resources/logback-local.xml deleted file mode 100644 index 53df0253..00000000 --- a/apps/juinjang-api/src/main/resources/logback-local.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/apps/juinjang-api/src/main/resources/logback-prod.xml b/apps/juinjang-api/src/main/resources/logback-prod.xml deleted file mode 100644 index e7f28785..00000000 --- a/apps/juinjang-api/src/main/resources/logback-prod.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/apps/juinjang-api/src/test/java/umc/th/juinjang/api/IntegrationTestSupport.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/IntegrationTestSupport.java index 8ab802e4..11114ef7 100644 --- a/apps/juinjang-api/src/test/java/umc/th/juinjang/api/IntegrationTestSupport.java +++ b/apps/juinjang-api/src/test/java/umc/th/juinjang/api/IntegrationTestSupport.java @@ -1,9 +1,12 @@ package umc.th.juinjang.api; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; import org.springframework.test.context.ActiveProfiles; +import umc.th.juinjang.testcontainers.MySqlTestContainersConfig; @ActiveProfiles("test") @SpringBootTest +@Import(MySqlTestContainersConfig.class) public abstract class IntegrationTestSupport { } diff --git a/apps/juinjang-api/src/test/java/umc/th/juinjang/config/TestConfig.java b/apps/juinjang-api/src/test/java/umc/th/juinjang/config/TestConfig.java index ebcb493c..df0332bf 100644 --- a/apps/juinjang-api/src/test/java/umc/th/juinjang/config/TestConfig.java +++ b/apps/juinjang-api/src/test/java/umc/th/juinjang/config/TestConfig.java @@ -1,18 +1,7 @@ package umc.th.juinjang.config; -import com.querydsl.jpa.impl.JPAQueryFactory; -import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceContext; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TestConfig { - @PersistenceContext - private EntityManager entityManager; - - @Bean - public JPAQueryFactory jpaQueryFactory() { - return new JPAQueryFactory(entityManager); - } } From 02a115c48882948036ec29ffea5a4ef5f0d66d04 Mon Sep 17 00:00:00 2001 From: essaysir Date: Tue, 10 Feb 2026 21:26:52 +0900 Subject: [PATCH 09/10] =?UTF-8?q?fix:=20=ED=83=80=EC=9E=84=EC=A1=B4=20Asia?= =?UTF-8?q?/Seoul=20=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile-dev/prod: TZ 환경변수 및 JVM -Duser.timezone 옵션 추가 - JuinjangApplication: TimeZone.setDefault로 애플리케이션 레벨 타임존 설정 Co-Authored-By: Claude Opus 4.6 --- Dockerfile-dev | 3 ++- Dockerfile-prod | 3 ++- .../src/main/java/umc/th/juinjang/JuinjangApplication.java | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Dockerfile-dev b/Dockerfile-dev index 285e7b2e..cf1dc8a2 100644 --- a/Dockerfile-dev +++ b/Dockerfile-dev @@ -2,6 +2,7 @@ FROM eclipse-temurin:17-jdk ARG JAR_FILE=./apps/juinjang-api/build/libs/juinjang-api-0.0.1-SNAPSHOT.jar ENV GOOGLE_APPLICATION_CREDENTIALS=/app/config/service-account-key.json +ENV TZ=Asia/Seoul COPY ${JAR_FILE} app.jar -ENTRYPOINT ["java", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/var/heapdumps/juinjang", "-Dspring.profiles.active=dev", "-jar", "/app.jar"] +ENTRYPOINT ["java", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/var/heapdumps/juinjang", "-Duser.timezone=Asia/Seoul", "-Dspring.profiles.active=dev", "-jar", "/app.jar"] diff --git a/Dockerfile-prod b/Dockerfile-prod index 15abc37d..20014337 100644 --- a/Dockerfile-prod +++ b/Dockerfile-prod @@ -1,6 +1,7 @@ FROM eclipse-temurin:17-jdk ARG JAR_FILE=./apps/juinjang-api/build/libs/juinjang-api-0.0.1-SNAPSHOT.jar +ENV TZ=Asia/Seoul COPY ${JAR_FILE} app.jar -ENTRYPOINT ["java", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/var/heapdumps/juinjang", "-Dspring.profiles.active=prod", "-jar", "/app.jar"] +ENTRYPOINT ["java", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/var/heapdumps/juinjang", "-Duser.timezone=Asia/Seoul", "-Dspring.profiles.active=prod", "-jar", "/app.jar"] diff --git a/apps/juinjang-api/src/main/java/umc/th/juinjang/JuinjangApplication.java b/apps/juinjang-api/src/main/java/umc/th/juinjang/JuinjangApplication.java index 936dfc2c..d6d67f70 100644 --- a/apps/juinjang-api/src/main/java/umc/th/juinjang/JuinjangApplication.java +++ b/apps/juinjang-api/src/main/java/umc/th/juinjang/JuinjangApplication.java @@ -1,5 +1,7 @@ package umc.th.juinjang; +import java.util.TimeZone; + import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -14,6 +16,7 @@ public class JuinjangApplication { public static void main(String[] args) { + TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul")); SpringApplication.run(JuinjangApplication.class, args); } From b98eb8a2c322c5a569533048f61768402bc12dff Mon Sep 17 00:00:00 2001 From: essaysir Date: Tue, 10 Feb 2026 21:27:00 +0900 Subject: [PATCH 10/10] =?UTF-8?q?chore:=20=EB=A1=9C=EC=BB=AC=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C=20Docker=20Compose=20=ED=99=98=EA=B2=BD=20=EA=B5=AC?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MySQL 8.0, Redis 7.0 로컬 개발용 Docker Compose 설정 추가 - 개발 환경 구성 가이드 README 추가 Co-Authored-By: Claude Opus 4.6 --- docker/README.md | 49 ++++++++++++++++++++++++++++++++++++++++ docker/infra-compose.yml | 43 +++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 docker/README.md create mode 100644 docker/infra-compose.yml diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 00000000..fde328b3 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,49 @@ +# Docker Infrastructure + +로컬 개발 환경용 인프라 컨테이너 구성. + +## 실행 + +```bash +# 시작 +docker compose -f docker/infra-compose.yml up -d + +# 중지 +docker compose -f docker/infra-compose.yml down + +# 볼륨 포함 완전 삭제 +docker compose -f docker/infra-compose.yml down -v +``` + +## 구성 + +| 서비스 | 이미지 | 포트 | 용도 | +|--------|--------|------|------| +| mysql | mysql:8.0 | 3306 | 메인 데이터베이스 | +| redis | redis:7.0 | 6379 | 캐시 / 세션 스토어 | + +## 접속 정보 + +### MySQL + +| 항목 | 값 | +|------|-----| +| Host | localhost:3306 | +| Database | juinjang | +| Root Password | root | +| User | application | +| Password | application | +| Charset | utf8mb4 | + +### Redis + +| 항목 | 값 | +|------|-----| +| Host | localhost:6379 | +| AOF 영속성 | 활성화 | + +## 참고 + +- 데이터는 Docker named volume에 저장되어 컨테이너 재시작 시에도 유지됨 +- 볼륨까지 삭제하려면 `down -v` 사용 +- 운영 환경에서는 이 compose 파일을 사용하지 않음 (AWS RDS, ElastiCache 등 사용) diff --git a/docker/infra-compose.yml b/docker/infra-compose.yml new file mode 100644 index 00000000..557c91d8 --- /dev/null +++ b/docker/infra-compose.yml @@ -0,0 +1,43 @@ +version: '3' +services: + mysql: + image: mysql:8.0 + ports: + - "3306:3306" + environment: + - MYSQL_ROOT_PASSWORD=root + - MYSQL_USER=application + - MYSQL_PASSWORD=application + - MYSQL_DATABASE=juinjang + - MYSQL_CHARACTER_SET=utf8mb4 + - MYSQL_COLLATE=utf8mb4_general_ci + volumes: + - mysql-8-data:/var/lib/mysql + + redis: + image: redis:7.0 + container_name: redis + ports: + - "6379:6379" + volumes: + - redis_data:/data + command: + [ + "redis-server", + "--appendonly", "yes", + "--save", "", + "--latency-monitor-threshold", "100", + ] + healthcheck: + test: ["CMD", "redis-cli", "-p", "6379", "PING"] + interval: 5s + timeout: 2s + retries: 10 + +volumes: + mysql-8-data: + redis_data: + +networks: + default: + driver: bridge