Repository: InnerCircle-ICD3/o2o-BE
Pull request #28: H2를 설정합니다.
Author: login: wonjun3991
Created: 2025-05-13T11:47:21Z | Merged: 2025-05-14T00:16:29Z

postgresql로 설정하였습니다.

gradlew clean build가 되지않아서 일부 수정했는데 문제있는 부분 있는지 확인 부탁드립니다.
해당 PR 통과 이후에 github action으로 테스트 자동화까지 추가할 예정입니다.

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **새로운 기능**
    - eatngo-customer-api 및 eatngo-store-owner-api 모듈에 H2 인메모리 데이터베이스가 런타임 전용으로 추가되었습니다.
    - 각 서비스의 설정 파일에 H2 데이터베이스 연결 및 JPA, Hibernate, SQL 로그 레벨, H2 콘솔 활성화 등 개발 및 테스트에 유용한 환경 구성이 반영되었습니다.

- **빌드/설정**
    - 여러 모듈에서 Spring Boot 실행 JAR 대신 일반 JAR 파일이 생성되도록 빌드 설정이 변경되었습니다.
    - 모든 서브프로젝트의 자바 및 코틀린 컴파일 타겟 버전이 21로 통일되었습니다.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/build.gradle.kts b/build.gradle.kts
index 3167875a6..8afc5a5f9 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -21,7 +21,7 @@ subprojects {
 
     // 실행 모듈 목록
     val executableModules = listOf("eatngo-customer-api", "eatngo-store-owner-api")
-    val enableJarModules = listOf("swagger", "common-test")
+    val enableJarModules = listOf("common")
 
     if (name in executableModules) {
         // 실행 모듈: jar, bootJar, bootRun 모두 활성화
@@ -39,6 +39,16 @@ subprojects {
         tasks.withType<org.springframework.boot.gradle.tasks.bundling.BootJar> { enabled = false }
         tasks.withType<org.springframework.boot.gradle.tasks.run.BootRun> { enabled = false }
     }
+    tasks.withType<JavaCompile>().configureEach {
+        sourceCompatibility = "21"
+        targetCompatibility = "21"
+    }
+
+    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
+        kotlinOptions {
+            jvmTarget = "21"
+        }
+    }
 
     tasks.withType<Test> {
         useJUnitPlatform()
diff --git a/eatngo-common/logging/build.gradle.kts b/eatngo-common/logging/build.gradle.kts
index 22a7a1fb2..ab2b0d80b 100644
--- a/eatngo-common/logging/build.gradle.kts
+++ b/eatngo-common/logging/build.gradle.kts
@@ -1,4 +1,17 @@
+plugins {
+   id("org.springframework.boot")
+}
+
 dependencies {
    implementation("org.springframework.boot:spring-boot-starter-logging")
    implementation("net.logstash.logback:logstash-logback-encoder:7.3")
-}
\ No newline at end of file
+}
+
+tasks.bootJar{
+   enabled = false
+}
+
+tasks.jar {
+   enabled = true
+   archiveFileName.set("${project.name}.jar")
+}
diff --git a/eatngo-common/p6spy/build.gradle.kts b/eatngo-common/p6spy/build.gradle.kts
index 30d8d7104..2fc0627a0 100644
--- a/eatngo-common/p6spy/build.gradle.kts
+++ b/eatngo-common/p6spy/build.gradle.kts
@@ -6,4 +6,13 @@ plugins {
 dependencies {
     implementation ("com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0")
     implementation("org.springframework.boot:spring-boot-starter-data-jpa")
+}
+
+tasks.bootJar{
+    enabled = false
+}
+
+tasks.jar {
+    enabled = true
+    archiveFileName.set("${project.name}.jar")
 }
\ No newline at end of file
diff --git a/eatngo-common/swagger/build.gradle.kts b/eatngo-common/swagger/build.gradle.kts
index c1019c20e..a8d9d7b7f 100644
--- a/eatngo-common/swagger/build.gradle.kts
+++ b/eatngo-common/swagger/build.gradle.kts
@@ -6,4 +6,9 @@ dependencies {
     // API 문서화
     implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.5")    // Swagger UI
     implementation("org.springdoc:springdoc-openapi-starter-common:2.8.5")       // Swagger 공통 기능
+}
+
+tasks.jar {
+    enabled = true
+    archiveFileName.set("${project.name}.jar")
 }
\ No newline at end of file
diff --git a/eatngo-customer-api/build.gradle.kts b/eatngo-customer-api/build.gradle.kts
index c99404dae..e75da4015 100644
--- a/eatngo-customer-api/build.gradle.kts
+++ b/eatngo-customer-api/build.gradle.kts
@@ -28,4 +28,7 @@ dependencies {
     testImplementation("io.kotest.extensions:kotest-extensions-spring:1.1.2")
     testImplementation("io.mockk:mockk:1.13.10")                        // mockk
     testImplementation("com.appmattus.fixture:fixture:1.2.0")           // Kotlin-fixture
+
+    // h2
+    runtimeOnly("com.h2database:h2")
 }
\ No newline at end of file
diff --git a/eatngo-customer-api/src/main/resources/application.yml b/eatngo-customer-api/src/main/resources/application.yml
index ff719ade0..f5f4e5332 100644
--- a/eatngo-customer-api/src/main/resources/application.yml
+++ b/eatngo-customer-api/src/main/resources/application.yml
@@ -4,6 +4,25 @@ server:
 spring:
   application:
     name: eatngo-customer-api
+  datasource:
+    # H2 메모리 DB를 PostgreSQL 모드로 실행
+    url: jdbc:h2:mem:eatngo;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=TRUE
+    username: sa
+    password: sa
+    driverClassName: org.h2.Driver
+  jpa:
+    open-in-view: false
+    # Hibernate가 PostgreSQL 방언을 사용하도록 설정
+    database-platform: org.hibernate.dialect.PostgreSQLDialect
+    hibernate:
+      ddl-auto: create
+    properties:
+      hibernate:
+        format_sql: true
+        highlight_sql: true
+  h2:
+    console:
+      enabled: true
 
 springdoc:
   swagger-ui:
@@ -14,4 +33,9 @@ springdoc:
 swagger:
   title: "EatNGo 사용자 API"
   description: "EatNGo 서비스의 사용자용 API 문서"
-  version: "v1.0.0"
\ No newline at end of file
+  version: "v1.0.0"
+
+logging:
+  level:
+    org.hibernate.SQL: debug
+    org.hibernate.orm.jdbc.bind: trace
diff --git a/eatngo-store-owner-api/build.gradle.kts b/eatngo-store-owner-api/build.gradle.kts
index 07f81dc6d..dfd04f5b6 100644
--- a/eatngo-store-owner-api/build.gradle.kts
+++ b/eatngo-store-owner-api/build.gradle.kts
@@ -22,4 +22,7 @@ dependencies {
     testImplementation("org.springframework.boot:spring-boot-starter-test")
     testImplementation("io.mockk:mockk:1.13.10")                        // mockk
     testImplementation("com.appmattus.fixture:fixture:1.2.0")           // Kotlin-fixture
+
+    // h2
+    runtimeOnly("com.h2database:h2")
 }
\ No newline at end of file
diff --git a/eatngo-store-owner-api/src/main/resources/application.yml b/eatngo-store-owner-api/src/main/resources/application.yml
index 7841cad42..fbed367f1 100644
--- a/eatngo-store-owner-api/src/main/resources/application.yml
+++ b/eatngo-store-owner-api/src/main/resources/application.yml
@@ -4,6 +4,25 @@ server:
 spring:
   application:
     name: eatngo-store-owner-api
+  datasource:
+    # H2 메모리 DB를 PostgreSQL 모드로 실행
+    url: jdbc:h2:mem:eatngo;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=TRUE
+    username: sa
+    password: sa
+    driverClassName: org.h2.Driver
+  jpa:
+    open-in-view: false
+    # Hibernate가 PostgreSQL 방언을 사용하도록 설정
+    database-platform: org.hibernate.dialect.PostgreSQLDialect
+    hibernate:
+      ddl-auto: create
+    properties:
+      hibernate:
+        format_sql: true
+        highlight_sql: true
+  h2:
+    console:
+      enabled: true
 
 springdoc:
   swagger-ui:
@@ -14,4 +33,9 @@ springdoc:
 swagger:
   title: "EatNGo 점주 API"
   description: "EatNGo 서비스의 점주용 API 문서"
-  version: "v1.0.0"
\ No newline at end of file
+  version: "v1.0.0"
+
+logging:
+  level:
+    org.hibernate.SQL: debug
+    org.hibernate.orm.jdbc.bind: trace


Reviews:
user: login: wonjun3991
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-13T11:52:25Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 4**

<details>
<summary>🧹 Nitpick comments (9)</summary><blockquote>

<details>
<summary>eatngo-store-owner-api/build.gradle.kts (1)</summary><blockquote>

`25-27`: **H2 의존성 추가 검토**  
H2 데이터베이스를 `runtimeOnly` 스코프로 추가한 것은 인메모리 DB용으로 적절합니다. 다만, 테스트나 개발 환경에서만 사용한다면 `testImplementation` 으로 제한하거나, 프로파일별로 관리하는 것을 고려해 보세요.

</blockquote></details>
<details>
<summary>eatngo-store-owner-api/src/main/resources/application.yml (2)</summary><blockquote>

`36-36`: **Swagger 문서 버전 관리**  
`version: "v1.0.0"` 으로 설정하신 부분은 API 변경에 따라 지속적으로 업데이트되어야 합니다. 릴리스 태그나 CI 파이프라인에서 자동으로 동기화하는 방안을 고려하면 관리 편의성이 높아집니다.

---

`38-41`: **Hibernate SQL 로깅 레벨 검토**  
개발 중에는 `debug`/`trace` 로깅이 유용하지만, 테스트나 CI 환경에서는 로그가 과도해질 수 있습니다. 프로파일별로 로깅 레벨을 조정하거나, 별도의 로깅 설정 파일을 분리하는 것을 추천드립니다.

</blockquote></details>
<details>
<summary>eatngo-common/logging/build.gradle.kts (1)</summary><blockquote>

`10-12`: **`bootRun` 태스크도 비활성화 고려**  
공통 모듈은 실행 가능한 애플리케이션으로 동작하지 않으므로, `bootJar`와 함께 `bootRun` 태스크도 비활성화해 모듈이 standalone 앱처럼 실행되지 않도록 설정하는 것을 권장합니다.

</blockquote></details>
<details>
<summary>eatngo-customer-api/src/main/resources/application.yml (5)</summary><blockquote>

`7-12`: **H2 설정을 프로파일 별로 분리 고려**  
`application.yml`에 기본 H2 설정이 포함되어 있어 운영 환경에서도 적용될 수 있습니다. `application-dev.yml` 같은 프로파일 전용 설정으로 분리하고, 활성화할 때만 로드되도록 구성하는 것을 권장합니다.

---

`13-22`: **Hibernate 방언(dialect) 설정 검토**  
H2를 PostgreSQL 모드로 실행하면서 `org.hibernate.dialect.PostgreSQLDialect`를 사용 중입니다. H2 전용 방언(`org.hibernate.dialect.H2Dialect`)을 사용하거나 방언 설정을 제거해 Spring Boot의 자동 감지를 활용하는 편이 호환성 측면에서 더 안전할 수 있습니다.

---

`23-25`: **H2 콘솔 보안 설정 강화**  
`spring.h2.console.enabled: true`로 콘솔이 공용에 노출될 수 있습니다. 운영 환경에서는 보안 리스크가 있으므로, 특정 IP/경로 제한 또는 프로파일 분리 방안으로 접근을 통제해 주세요.

---

`36-36`: **Swagger 문서 버전 자동화 검토**  
`swagger.version`을 수동으로 `"v1.0.0"`으로 지정했습니다. 프로젝트 버전과 일치하지 않을 경우 관리가 번거로우므로, Gradle `project.version`이나 프로퍼티를 활용해 자동으로 연동하는 방식을 추천합니다.

---

`38-41`: **Hibernate 및 JDBC 로깅 레벨 프로파일 별 관리**  
`org.hibernate.SQL: debug`, `org.hibernate.orm.jdbc.bind: trace` 설정은 로그가 매우 방대해질 수 있습니다. 개발 환경 전용으로 제한하고 운영에서는 상위 레벨로 설정하도록 프로파일 분리를 적용하는 것을 제안합니다.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 92b71152e987377708f394d7d8063a19c46ee282 and 9e96c984684495a5f278ffbd465e29407ee5a1e0.

</details>

<details>
<summary>📒 Files selected for processing (8)</summary>

* `build.gradle.kts` (2 hunks)
* `eatngo-common/logging/build.gradle.kts` (1 hunks)
* `eatngo-common/p6spy/build.gradle.kts` (1 hunks)
* `eatngo-common/swagger/build.gradle.kts` (1 hunks)
* `eatngo-customer-api/build.gradle.kts` (1 hunks)
* `eatngo-customer-api/src/main/resources/application.yml` (2 hunks)
* `eatngo-store-owner-api/build.gradle.kts` (1 hunks)
* `eatngo-store-owner-api/src/main/resources/application.yml` (2 hunks)

</details>

<details>
<summary>🔇 Additional comments (8)</summary><blockquote>

<details>
<summary>build.gradle.kts (3)</summary>

`23-25`: **Plain JAR 활성화 모듈 검증 요청**  
`enableJarModules = listOf("common")` 로 변경하셨는데, 실제 서브프로젝트 이름(예: `swagger`, `logging`, `p6spy`, `common-test` 등)과 일치하는지 확인이 필요합니다. 설정이 모듈 이름과 정확히 매칭되지 않으면 의도한 plain JAR이 생성되지 않을 수 있습니다.

---

`42-45`: **Java 컴파일 타겟 버전 통일**  
`sourceCompatibility` 및 `targetCompatibility` 를 모두 `"21"`로 설정한 것은 멀티모듈 전반의 호환성을 보장하기 위함으로 적절합니다.

---

`47-51`: **Kotlin JVM 타겟 설정 통일**  
`kotlinOptions.jvmTarget = "21"` 설정이 모든 서브프로젝트에 적용되어 일관성을 확보했습니다.

</details>
<details>
<summary>eatngo-common/swagger/build.gradle.kts (1)</summary>

`9-14`: **Plain JAR 생성 설정 확인**  
`tasks.jar { enabled = true; archiveFileName.set("${project.name}.jar") }` 으로 plain JAR 생성이 명시되었습니다. Spring Boot 플러그인이 적용되지 않아 `bootJar`가 없으므로, 필요한 설정만 포함하고 있어 깔끔합니다.

</details>
<details>
<summary>eatngo-common/p6spy/build.gradle.kts (2)</summary>

`11-13`: **bootJar 비활성화 적절**  
Spring Boot 실행 JAR을 비활성화(`enabled = false`)한 것은 공통 라이브러리 모듈로서 plain JAR을 생성하기 위함으로 적절합니다.

---

`15-17`: **Plain JAR 생성 설정 적절**  
`tasks.jar` 활성화 및 아카이브 이름 지정이 올바르게 적용되었습니다.

</details>
<details>
<summary>eatngo-common/logging/build.gradle.kts (2)</summary>

`1-3`: **Spring Boot 플러그인 버전 관리 확인**  
`plugins { id("org.springframework.boot") }`에서 플러그인 버전이 명시되어 있지 않습니다. `settings.gradle.kts` 또는 `pluginManagement`에서 해당 플러그인의 버전이 올바르게 관리되고 있는지 검증해 주세요.

---

`14-17`: **JAR 아카이브 이름에 버전 포함 여부 확인**  
`archiveFileName.set("${project.name}.jar")`로 버전을 제외하고 있습니다. 아티팩트 네이밍 정책 상 파일 이름에 버전을 포함하거나, 의도적으로 제외한 것인지 확인해 주세요.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-13T11:52:28Z
user: login: ktae23
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-13T12:40:34Z
user: login: hj4645
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-13T12:47:12Z
user: login: ktae23
body: 고생하셨습니다~! 감사합니다 👍🏻 
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-13T13:04:14Z
user: login: hj4645
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-13T22:47:08Z

Review comments:
diff_hunk: @@ -39,6 +39,16 @@ subprojects {
         tasks.withType<org.springframework.boot.gradle.tasks.bundling.BootJar> { enabled = false }
         tasks.withType<org.springframework.boot.gradle.tasks.run.BootRun> { enabled = false }
     }
+    tasks.withType<JavaCompile>().configureEach {
+        sourceCompatibility = "21"
+        targetCompatibility = "21"
+    }
+
+    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
+        kotlinOptions {
+            jvmTarget = "21"
+        }
+    }
path: build.gradle.kts
user: login: wonjun3991
body: 제 컴퓨터에서 gradlew clean build가 계속 실패해서 추가하였습니다.
github action 추가하는데 도움이 될거라고 믿고있습니다만 잘아시는분 조언주시면 감사하겠습니다.
created_at: 2025-05-13T11:52:25Z
author_association: COLLABORATOR
diff_hunk: @@ -4,6 +4,25 @@ server:
 spring:
   application:
     name: eatngo-store-owner-api
+  datasource:
+    # H2 메모리 DB를 PostgreSQL 모드로 실행
+    url: jdbc:h2:mem:eatngo;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=TRUE
+    username: sa
+    password: sa
+    driverClassName: org.h2.Driver
+  jpa:
path: eatngo-store-owner-api/src/main/resources/application.yml
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**인메모리 H2 설정의 프로파일 분리 필요**  
현재 `spring.datasource` 설정이 기본 프로파일에 포함되어 있어, 프로덕션 환경에서도 H2가 사용될 수 있습니다. `application-dev.yml` 혹은 `application-test.yml` 같은 프로파일별 설정 파일로 분리하고 `spring.profiles.active` 를 통해 개발/테스트 환경에서만 적용되도록 강제하는 것을 권장합니다.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-05-13T11:52:28Z
author_association: NONE
diff_hunk: @@ -4,6 +4,25 @@ server:
 spring:
   application:
     name: eatngo-store-owner-api
+  datasource:
+    # H2 메모리 DB를 PostgreSQL 모드로 실행
+    url: jdbc:h2:mem:eatngo;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=TRUE
+    username: sa
+    password: sa
+    driverClassName: org.h2.Driver
+  jpa:
+    open-in-view: false
+    # Hibernate가 PostgreSQL 방언을 사용하도록 설정
+    database-platform: org.hibernate.dialect.PostgreSQLDialect
+    hibernate:
+      ddl-auto: create
+    properties:
+      hibernate:
+        format_sql: true
+        highlight_sql: true
+  h2:
+    console:
+      enabled: true
 
path: eatngo-store-owner-api/src/main/resources/application.yml
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**H2 콘솔 접근 제어**  
H2 콘솔을 전역에서 활성화하면 보안 위험이 있습니다. 개발 환경에 한정하고, `spring.h2.console.settings.web-allow-others=false` 등 접근 제어 설정을 추가하는 것을 권장합니다.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-05-13T11:52:28Z
author_association: NONE
diff_hunk: @@ -4,6 +4,25 @@ server:
 spring:
   application:
     name: eatngo-store-owner-api
+  datasource:
+    # H2 메모리 DB를 PostgreSQL 모드로 실행
+    url: jdbc:h2:mem:eatngo;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=TRUE
+    username: sa
+    password: sa
+    driverClassName: org.h2.Driver
+  jpa:
+    open-in-view: false
+    # Hibernate가 PostgreSQL 방언을 사용하도록 설정
+    database-platform: org.hibernate.dialect.PostgreSQLDialect
+    hibernate:
+      ddl-auto: create
+    properties:
+      hibernate:
+        format_sql: true
+        highlight_sql: true
+  h2:
path: eatngo-store-owner-api/src/main/resources/application.yml
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Hibernate DDL 자동 생성 주의**  
`ddl-auto: create` 설정은 매번 스키마를 초기화하므로 기존 데이터가 모두 삭제됩니다. 개발/테스트 전용으로 유지하거나, 검증 데이터베이스 자동 마이그레이션 도구(e.g. Flyway, Liquibase) 사용을 고려하세요.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-05-13T11:52:28Z
author_association: NONE
diff_hunk: @@ -28,4 +28,7 @@ dependencies {
     testImplementation("io.kotest.extensions:kotest-extensions-spring:1.1.2")
     testImplementation("io.mockk:mockk:1.13.10")                        // mockk
     testImplementation("com.appmattus.fixture:fixture:1.2.0")           // Kotlin-fixture
+
+    // h2
+    runtimeOnly("com.h2database:h2")
path: eatngo-customer-api/build.gradle.kts
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**PostgreSQL JDBC 드라이버 의존성 누락**  
현재 H2 드라이버만 선언되어 있어, 실제 PostgreSQL 연결용 드라이버가 없습니다. 프로덕션 환경에서 PostgreSQL을 사용하려면 아래 의존성을 추가해야 합니다.  
```kotlin
runtimeOnly("org.postgresql:postgresql")
```

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-05-13T11:52:28Z
author_association: NONE
diff_hunk: @@ -39,6 +39,16 @@ subprojects {
         tasks.withType<org.springframework.boot.gradle.tasks.bundling.BootJar> { enabled = false }
         tasks.withType<org.springframework.boot.gradle.tasks.run.BootRun> { enabled = false }
     }
+    tasks.withType<JavaCompile>().configureEach {
+        sourceCompatibility = "21"
+        targetCompatibility = "21"
+    }
+
+    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
+        kotlinOptions {
+            jvmTarget = "21"
+        }
+    }
path: build.gradle.kts
user: login: ktae23
body: @wonjun3991혹시 빌드 실패하는 이유가 logging 모듈 때문은 아니었나요~?
저는 그 부분이 계속 실패해서 logging모듈 build.gradle.kts에 plugin 블럭으로 java 버전 명시해주니까 빌드가 되긴 했었습니다.
모듈별로 버전이 다를 이유가 없으니 원준님이 해주신대로 해결이 되는 것이 좋아보이네요~! 👍🏻 
created_at: 2025-05-13T12:40:34Z
author_association: COLLABORATOR
diff_hunk: @@ -39,6 +39,16 @@ subprojects {
         tasks.withType<org.springframework.boot.gradle.tasks.bundling.BootJar> { enabled = false }
         tasks.withType<org.springframework.boot.gradle.tasks.run.BootRun> { enabled = false }
     }
+    tasks.withType<JavaCompile>().configureEach {
+        sourceCompatibility = "21"
+        targetCompatibility = "21"
+    }
+
+    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
+        kotlinOptions {
+            jvmTarget = "21"
+        }
+    }
path: build.gradle.kts
user: login: hj4645
body: @wonjun3991 로깅 모듈 때문에 발생한 오류라면, 저는 프로젝트 설정에서 버젼 21로 설정해줬더니 빌드 오류가 해결됐었습니다!
아예 명시해주는 방향도 좋은 것 같습니다😄
created_at: 2025-05-13T12:47:11Z
author_association: COLLABORATOR

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-05-13T11:47:29Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough

이 변경사항은 여러 모듈의 Gradle 빌드 스크립트와 애플리케이션 설정 파일을 수정하여, 공통적으로 Java/Kotlin 컴파일 타겟을 21로 통일하고, 일부 모듈의 JAR 생성 방식을 Spring Boot fat JAR에서 일반 JAR로 전환했습니다. 또한, 고객 및 점주 API 모듈에 H2 인메모리 데이터베이스와 관련된 의존성 및 설정이 추가되었습니다.

## Changes

| 파일/경로 그룹                                                      | 변경 요약                                                                                                                     |
|---------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
| build.gradle.kts                                                    | plain JAR 활성화 대상 모듈을 `["swagger", "common-test"]`에서 `["common"]`으로 변경, Java/Kotlin 컴파일 타겟을 21로 통일 설정. |
| eatngo-common/logging/build.gradle.kts<br>eatngo-common/p6spy/build.gradle.kts | Spring Boot fat JAR 비활성화, 일반 JAR 생성으로 전환, JAR 파일명 프로젝트명으로 지정.                                         |
| eatngo-common/swagger/build.gradle.kts                              | `jar` 태스크 명시적 활성화 및 출력 파일명 프로젝트명으로 지정.                                                                |
| eatngo-customer-api/build.gradle.kts<br>eatngo-store-owner-api/build.gradle.kts | H2 데이터베이스 의존성(runtimeOnly) 추가.                                                                                    |
| eatngo-customer-api/src/main/resources/application.yml<br>eatngo-store-owner-api/src/main/resources/application.yml | H2 인메모리 DB 및 PostgreSQL 호환 모드 설정, JPA 및 Hibernate 상세 설정, SQL 로그 레벨 조정, H2 콘솔 활성화.                |

<!-- walkthrough_end -->

<!-- announcements_start -->

> [!TIP]
> <details>
> <summary>⚡️ Faster reviews with caching</summary>
> 
> - CodeRabbit now supports caching for code and dependencies, helping speed up reviews. This means quicker feedback, reduced wait times, and a smoother review experience overall. Cached data is encrypted and stored securely. This feature will be automatically enabled for all accounts on May 16th. To opt out, configure `Review - Disable Cache` at either the organization or repository level. If you prefer to disable all data retention across your organization, simply turn off the `Data Retention` setting under your Organization Settings.
> 
> Enjoy the performance boost—your workflow just got faster.
> 
> </details>

<!-- announcements_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=InnerCircle-ICD3/o2o-BE&utm_content=28):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai explain this code block.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and explain its main purpose.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: hj4645
created_at: 2025-05-13T22:47:25Z
body: 고생하셨습니다 감사합니다!! 
author_association: COLLABORATOR