Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

스프링 부트 버전을 2.7.15로 올린다. #565

Closed
Tracked by #528
woowahan-pjs opened this issue Jul 14, 2022 · 5 comments
Closed
Tracked by #528

스프링 부트 버전을 2.7.15로 올린다. #565

woowahan-pjs opened this issue Jul 14, 2022 · 5 comments
Assignees
Labels
기능 New feature or request

Comments

@woowahan-pjs
Copy link
Contributor

woowahan-pjs commented Jul 14, 2022

관련 이슈: woowacourse-projects/nextstep#938 #563 #529

@woowahan-pjs woowahan-pjs added the 기능 New feature or request label Aug 8, 2022
@woowahan-pjs woowahan-pjs changed the title 스프링 부트 버전을 2.7.1로 올린다. 스프링 부트 버전을 2.7.14로 올린다. Aug 2, 2023
@woowahan-pjs woowahan-pjs changed the title 스프링 부트 버전을 2.7.14로 올린다. 스프링 부트 버전을 2.7.15로 올린다. Aug 31, 2023
@woowahan-pjs
Copy link
Contributor Author

woowahan-pjs commented Sep 3, 2023

2.4.x

현재 서비스에 영향을 준 것만 나열했으므로 추가 정보를 원하면 아래 참고 자료를 읽어 보시기 바랍니다.

  • 버전 뒤의 'RELEASE' 제거 (e.g. 2.4.0.RELEASE -> 2.4.0)
  • org.springframework.boot:spring-boot-starter-test에서 JUnit 5의 빈티지 엔진(org.junit.vintage:junit-vintage-engine)을 제거
  • 프로퍼티 파일을 처리하는 방식이 실행 환경 기반 선언에서 기능 중심의 모듈식 선언으로 변경되었다.
    • 각 기능에 대한 프로퍼티를 모아서 실행 환경에 필요한 모듈을 그룹화하는 방법이라고 생각하면 좋을 것 같다.
    • 프로필별 파일(profile specific resource)에서 spring.profiles.include를 더 이상 사용할 수 없다.
    • spring.config.use-legacy-processing을 추가하면 이전 방식으로 처리할 수 있다.
  • 인메모리 모드의 데이터베이스만 임베디드 데이터베이스가 있는 것으로 간주하므로 파일(로컬) 모드 및 서버 모드에는 다음과 같은 변경 사항이 적용된다.
    • spring.datasource.usernamesa로 자동 설정되지 않으므로 수동으로 설정해야 한다.
    • schema.sql, data.sql을 사용하여 시작 시 초기화하려면 spring.datasource.initialization-mode를 설정해야 한다.
  • MockMvc DSL에서 isOk 등 기존 자바 클래스 StatusResultMatchers에서 제공하는 함수를 StatusResultMatchersDsl을 통해 제공한다.
    • StatusResultMatchers는 자바 클래스이므로 프로퍼티 호출과 함수 호출 모두 가능하였는데, 함수로 호출하도록 통일하였다.
    • https://github.com/spring-projects/spring-framework/issues/24103
    • MockMvc DSL에서 isOkisOk()로 변경해야 하지 않을까?

참고 자료

14:01:30.602 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property 'spring.profiles.include' imported from location 'class path resource [application-local.properties]' is invalid in a profile specific resource [origin: class path resource [application-local.properties] - 11:25]
	at org.springframework.boot.context.config.InvalidConfigDataPropertyException.lambda$throwOrWarn$1(InvalidConfigDataPropertyException.java:125)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at java.base/java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1085)
	at org.springframework.boot.context.config.InvalidConfigDataPropertyException.throwOrWarn(InvalidConfigDataPropertyException.java:122)
	at org.springframework.boot.context.config.ConfigDataEnvironment.checkForInvalidProperties(ConfigDataEnvironment.java:361)
	at org.springframework.boot.context.config.ConfigDataEnvironment.applyToEnvironment(ConfigDataEnvironment.java:325)
	at org.springframework.boot.context.config.ConfigDataEnvironment.processAndApply(ConfigDataEnvironment.java:233)
	at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:102)
	at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:94)
	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEnvironmentPreparedEvent(EnvironmentPostProcessorApplicationListener.java:100)
	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEvent(EnvironmentPostProcessorApplicationListener.java:86)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:82)
	at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:63)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117)
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:111)
	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:62)
	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:375)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:333)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1318)
	at apply.ApplicationKt.main(Application.kt:17)

@woowahan-pjs
Copy link
Contributor Author

2.5.x

현재 서비스에 영향을 준 것만 나열했으므로 추가 정보를 원하면 아래 참고 자료를 읽어 보시기 바랍니다.

  • getOne() -> getById()
    • 인터페이스에 선언된 getById()는 확장 함수보다 호출 우선순위가 높으므로 기존 확장 함수 getById()의 이름을 변경해야 한다.
      • https://github.com/spring-projects/spring-data-jpa/issues/1697
    • 이후 버전에서는 getById()getReferenceById()로 다시 변경된다. 이렇게 할 거라면 함수 이름을 조금 더 신중하게 변경했다면 어땠을까?
      • https://github.com/spring-projects/spring-data-jpa/issues/2232
  • SQL 스크립트 기반 데이터 초기화 작동 방식 변경

참고 자료


getOrThrow()

  • 기존 확장 함수 getById()의 이름을 바꾸기 위해 여러 함수 이름이 제안되었다. 실제 클라이언트에서 사용할 코드를 기준으로 함수 이름 후보는 아래와 같았다.
    1. recruitmentRepository[id]
    2. recruitmentRepository.get(id)
    3. recruitmentRepository.getOrThrow(id)
    4. recruitmentRepository.getByIdOrThrow(id)
    5. recruitmentRepository.findByIdOrThrow(id)
    6. recruitmentRepository.retrieveById(id)
    7. recruitmentRepository.fetchById(id)
    8. recruitmentRepository.loadById(id)
  • 그 결과 getOrThrow()가 선택되었으며 이유는 아래와 같다.
    1. 'retrieve', 'fetch', 'load'와 같은 좋은 동사를 추천받았지만, Spring Data에서 지원하는 것과 최대한 유사한 키워드를 사용하고 싶었다.
    2. 'find'로 Optional과 nullable 타입을, 'get'으로 non-null 타입을 표현하고 싶었다. (https://tuhrig.de/find-vs-get)
    3. 그래서 처음에는 get()을 선택했지만,
      • 연산자 오버로딩은 자바 코딩에 익숙한 개발자들에게는 꺼려지는 것 같았다.
      • 연산자 오버로딩 없이 get()을 사용하려고 했을 때 MockK가 이미 get()을 선점하고 있었기 때문에 테스트 코드에서 get()을 스텁하는 데 어려움을 겪었다.
    4. 또한 ChatGPT도 예외가 발생할 가능성을 더 정확하게 반영하는 함수 이름(retrieveById(), getOrThrow())을 권장했다.
    5. grep.app에서도 검색해 보니 retrieveById()보다 getOrThrow()가 훨씬 많이 사용되는 것으로 나타났다.

@woowahan-pjs
Copy link
Contributor Author

woowahan-pjs commented Sep 3, 2023

2.6.x

현재 서비스에 영향을 준 것만 나열했으므로 추가 정보를 원하면 아래 참고 자료를 읽어 보시기 바랍니다.

  • 요청 경로를 핸들러 매핑에 일치시키는 기본 전략이 AntPathMatcher에서 PathPatternParser로 변경되었다.
    • 예를 들어, 더 정확하게 일치시키려면 authorizeRequests.mvcMatchers("hello").permitAll()에서 authorizeRequests.mvcMatchers("/hello").permitAll()로 변경해야 한다. (앞의 /에 유의)
  • Flyway 버전이 7.x에서 8.0.5로 변경되었다.
  • Resources를 직접 주입하는 것은 더 이상 작동하지 않으므로 필요한 경우 WebProperties를 주입해야 한다.
    • https://github.com/spring-projects/spring-boot/issues/28762
    • 이 부분에서 Vaadin에 문제가 있었고, 정적 리소스를 찾을 수 없는 문제가 발생했다.
      • https://github.com/vaadin/spring/issues/941
      • https://github.com/vaadin/spring/issues/953
      • Vaadin 버전을 14.3.3에서 14.8.20으로 변경한다.

참고 자료

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.license.FlywayEditionUpgradeRequiredException: Flyway Teams Edition or MySQL upgrade required: MySQL 5.7 is no longer supported by Flyway Community Edition, but still supported by Flyway Teams Edition.
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1156)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:910)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:745)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:423)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1317)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
	at apply.ApplicationKt.main(Application.kt:17)
Caused by: org.flywaydb.core.internal.license.FlywayEditionUpgradeRequiredException: Flyway Teams Edition or MySQL upgrade required: MySQL 5.7 is no longer supported by Flyway Community Edition, but still supported by Flyway Teams Edition.
	at org.flywaydb.core.internal.database.base.Database.ensureDatabaseNotOlderThanOtherwiseRecommendUpgradeToFlywayEdition(Database.java:126)
	at org.flywaydb.core.internal.database.mysql.MySQLDatabase.ensureSupported(MySQLDatabase.java:251)
	at org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:188)
	at org.flywaydb.core.Flyway.migrate(Flyway.java:124)
	at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
	... 18 common frames omitted

Vaadin 14.8.20

  • Vaddin 14의 최신 버전은 14.10.6이지만 14.8.20을 선택하였다.
  • Vaddin 14.8.20에는 Vaadin Flow 2.7.23이 포함되어 있으며, Vaddin 14.9.0부터는 Vaadin Flow 2.8.0이 포함되어 있다.
    • 모듈 간 버전이 매우 헷갈리는데 다행히 Vaadin 23부터는 Flow의 메이저 버전과 마이너 버전이 플랫폼 버전과 일치한다.
  • Vaadin Flow 2.8.0부터 tsconfig.json, types.d.ts 파일 생성 여부를 결정하는 로직이 변경되어 현재 프로젝트에서는 무조건 해당 파일이 생성된다.
    • 현재 프로젝트의 디렉터리 구조로 인해 타입스크립트 기반 클라이언트 코드에도 영향을 미치기 때문에 자동으로 생성되지 않는 Vaddin 14.8.20을 사용한다.
    • 문제를 찾는 것이 매우 어려웠다. 왜 따로 해결하지 않고 다른 문제를 해결하는 PR에 포함했을까?
      • https://github.com/vaadin/flow/issues/14733
      • https://github.com/vaadin/flow/pull/14871

참고 자료

Vaadin Flow 2.8.0

TaskGenerateTsFiles.java#L54-L61

/**
 * Generate typescript config if it doesn't exist.
 *
 * @return if typescript config file should be created
 */
protected boolean shouldGenerate() {
    return !new File(npmFolder, TSCONFIG_JSON).exists();
}

Vaadin Flow 2.7.23

TaskGenerateTsFiles.java#L57-L65

/**
 * Only generate if there exists typescript modules in the project.
 *
 * @return if we have modules for typescript files
 */
protected boolean shouldGenerate() {
    return modules.stream().filter(file -> file.endsWith(".ts"))
            .count() >= 1;
}
2023-08-24 16:52:14.259 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts
2023-08-24 16:52:14.259 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts(14,37)
2023-08-24 16:52:14.259 ERROR 15593 --- [        webpack] dev-webpack                              :       TS2344: Type '"email" | "password"' does not satisfy the constraint '"id" | "name" | "email"'.
2023-08-24 16:52:14.259 ERROR 15593 --- [        webpack] dev-webpack                              :   Type '"password"' is not assignable to type '"id" | "name" | "email"'.
2023-08-24 16:52:14.259 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts
2023-08-24 16:52:14.259 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts(18,44)
2023-08-24 16:52:14.259 ERROR 15593 --- [        webpack] dev-webpack                              :       TS2344: Type '"name" | "email" | "password" | "birthday"' does not satisfy the constraint '"id" | "name" | "email"'.
2023-08-24 16:52:14.259 ERROR 15593 --- [        webpack] dev-webpack                              :   Type '"password"' is not assignable to type '"id" | "name" | "email"'.
2023-08-24 16:52:14.259 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts(52,3)
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              :       TS2339: Property 'phoneNumber' does not exist on type 'FetchRegisterRequest'.
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts(53,3)
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              :       TS2339: Property 'gender' does not exist on type 'FetchRegisterRequest'.
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts(54,3)
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              :       TS2339: Property 'birthday' does not exist on type 'FetchRegisterRequest'.
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts(55,3)
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              :       TS2339: Property 'password' does not exist on type 'FetchRegisterRequest'.
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/api/user.ts(77,26)
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              :       TS2345: Argument of type 'unknown' is not assignable to parameter of type 'Date'.
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/hooks/useRecruitList.ts
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/hooks/useRecruitList.ts(2,35)
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              :       TS7016: Could not find a declaration file for module './useRecruitmentContext'. '/Users/jaesung/Dev/woowabros/service-apply/frontend/src/hooks/useRecruitmentContext.js' implicitly has an 'any' type.
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/mock/autoGradeHandler.ts
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/mock/autoGradeHandler.ts(7,58)
2023-08-24 16:52:14.260 ERROR 15593 --- [        webpack] dev-webpack                              :       TS6133: 'req' is declared but its value is never read.
2023-08-24 16:52:14.261 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/mock/autoGradeHandler.ts
2023-08-24 16:52:14.261 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/mock/autoGradeHandler.ts(10,50)
2023-08-24 16:52:14.261 ERROR 15593 --- [        webpack] dev-webpack                              :       TS6133: 'req' is declared but its value is never read.
2023-08-24 16:52:14.261 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/mock/autoGradeHandler.ts
2023-08-24 16:52:14.261 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/mock/autoGradeHandler.ts(20,6)
2023-08-24 16:52:14.261 ERROR 15593 --- [        webpack] dev-webpack                              :       TS6133: 'req' is declared but its value is never read.
2023-08-24 16:52:14.261 ERROR 15593 --- [        webpack] dev-webpack                              : ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/mock/autoGradeHandler.ts
2023-08-24 16:52:14.261 ERROR 15593 --- [        webpack] dev-webpack                              : [tsl] ERROR in /Users/jaesung/Dev/woowabros/service-apply/frontend/src/mock/autoGradeHandler.ts(28,6)
2023-08-24 16:52:14.261 ERROR 15593 --- [        webpack] dev-webpack                              :       TS6133: 'req' is declared but its value is never read.

@woowahan-pjs
Copy link
Contributor Author

문제

Vaadin 14.8.20에서 DateTimePickerLocalDateTime 변환에서 마이크로초가 생략되어 테스트가 실패한다.

data class diff for apply.application.RecruitmentData
├ startDateTime: expected:<2022-08-28T18:35:18.520409> but was:<2022-08-28T18:35:18.520>
└ endDateTime: expected:<2024-08-28T18:35:18.520447> but was:<2024-08-28T18:35:18.520>

해결 방법

  1. 확인할 값(expected)에서 마이크로초를 자른다.
  2. Vaadin 버전을 14.7.1 이상으로 올리지 않는다.

원인

  • Vaadin 14.7.1 이상에서 DateTimePicker의 시간 정밀도가 밀리초로 변경되었다.
    • https://github.com/vaadin/flow-components/pull/2099
    • https://github.com/vaadin/flow-components/issues/1428

@woowahan-pjs
Copy link
Contributor Author

woowahan-pjs commented Sep 4, 2023

2.7.x

현재 서비스에 영향을 준 것만 나열했으므로 추가 정보를 원하면 아래 참고 자료를 읽어 보시기 바랍니다.

참고 자료


H2 2.1.120

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
기능 New feature or request
Projects
Status: Done
Development

No branches or pull requests

2 participants