묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
mise도 사용하시나요?
안녕하세요, 토비님.5강 개발 환경 구성(2)에서 sdk man을 소개해주셨는데요,저는 처음 보는 서비스라 찾아보니 최근에는 편의성 등을 이유로 mise를 많이들 사용하는 것 같더라구요. 강의에서는 mise 대신 sdk man을 사용하신 이유가 궁금합니다, 아무래도 java만 다루는 강의다보니 sdk man을 선택하신 걸까요?토비님께서도 실무나 개인적으로는 mise를 사용하시는지 혹은 다른 서비스를 사용하시는지도 궁금합니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
`Objects.requireNonNull()`을 계속 사용하시는 이유가 궁금합니다.
15강에서 스프링의 @NonNull 지원과 SpotBugs를 통해서 null 안정성을 확보하신 내용을 봤습니다. 그런데 계속해서 Objects.requireNonNull() 을 사용하시는 것을 보고 의문이 들었습니다. 이미 Member 객체의 null 안정성은 확보된 것이 아닌가요?굳이 Objects.requireNonNull() 을 계속 남기시는 이유를 생각해봤는데, 애노테이션+도구의 조합과 함께 코드적으로 null 안정성을 확보하고 싶으신 것으로 이해했습니다. (해당 도구가 사라져도 코드 수준의 안정성은 남아있기 때문에, 코드를 수정할 필요는 없어지니까요!) null 검증에 대해서만큼은 코드가 장황해지는 비용보다 추후의 변경에 대한 비용이 더 크다고 생각하시는 것 같은데, 제 이해가 맞을까요?
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberRepositoryTest 중 Member table이 생성이 안됨
토비님 지금 강의 '엔티티 식별자와 JPA 엔티티' 섹션을 수강하던 중 MemberRepositoryTest에서 맴버 생성 테스트를 진행하는데 저는 Member 테이블이 생성이 안되어서 오류가 터지네요![Table "MEMBER" not found (this database is empty)토비님께서는 별 다른 설정 안하시고 해도 성공적으로 돌아갔는데 이유를 알 수 있을까요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
세타조인은 실무에서
내부조인과 외부조인이 아닌,join절을 사용하지않고 where절을 사용하는 세타조인도 실무에서 사용하나요? 성능적으로 안좋을거같은데, 혹시 어느 경우에 사용하는것일까요?
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
compose.yml 파일 질문
안녕하세요 토비님처음 프로젝트를 실행하면 compose.yml 파일이services: mysql: image: 'mysql:latest' environment: - 'MYSQL_DATABASE=mydatabase' - 'MYSQL_PASSWORD=secret' - 'MYSQL_ROOT_PASSWORD=verysecret' - 'MYSQL_USER=myuser' ports: - '3306' 이렇게 설정되어있는데 저기서 데이터베이스 이름이나 user 정보를 변경하면 빌드가 되지않습니다.저 상태 그대로 놔두면 빌드는 되는데 인텔리제이의 데이터베이스 탭을 이용해서 접근해보면 splearn(제경우에는 이름을 변경하지 못했으니 아마 mydatabase) 데이터베이스가 생성되지 않고 Server Objects라는 폴더 하나만 존재합니다
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
iterm 설정 문의
안녕하세요. 강의 잘 보고 있습니다.다름이 아니라 cat .sdkmanrc로 file을 출력할 때 줄 번호와 같이 이쁘게 정돈되어 출력되는 것을 보고 기능을 찾아보고 있는데 무엇인지 잘 모르겠어서 질문 글에서 여쭤봅니다.
-
해결됨실전! Querydsl
count 쿼리 관련 질문입니다!
[질문 내용]안녕하세요 영한님! 강의 잘 듣고 있습니다.수강 중 궁금한 점이 생겨 질문드립니다!스프링 데이터 페이징 활용1 - Querydsl 페이징 연동-> 이 강좌 수강 중에 생긴 궁금증입니다 count 쿼리 같은 경우는 아래와 같이 long 타입의 변수를 통해 저장되고 있습니다.long count = queryFactory .select(member.count()) .from(member) .leftJoin(member.team, team) .where( usernameEq(condition.getUsername()), teamNameEq(condition.getTeamName()), ageGoe(condition.getAgeGoe()), ageLoe(condition.getAgeLoe()) ) .fetchOne();위 조건은 저희가 쿼리를 통해 조회하는 데이터의 총 개수를 반환하는데, 그렇다면 아래와 같은 방식으로 총 개수를 구하면, count 쿼리를 굳이 사용할 필요 없이 1회의 쿼리만으로 PageImpl 객체를 반환할 수 있지 않을까? 라는 생각이 들었습니다. long size = result.size();이 size 기반 방식이 데이터 수가 적을 때 채용해볼 만한 방식인지, 아니면 count 쿼리를 사용했을 때,쿼리를 한 번 더 날릴 정도의 이점이 있는지 궁금합니다! 제 개인적인 생각입니다만 데이터 수가 특정 수치를 넘어가면 성능에 차이가 생기는 걸까요..?
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
추가 강의 해주실수 있나요?
강의 맘에 듭니다 아직 뒤에는 못봤지만 스웨거와 querydsl를 이용한 강의도 오픈 해주셨으면 해요
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
데이터베이스 테이블이 중복 생성 되는 오류
영상 52분에서 로그인이 성공되는 반면 저는 로그인이 계속 실패나와서 무엇이 문제인지 확인하는데 데이터베이스 테이블이 두 개가 생성된 것을 확인했습니다. 기존에 있던 테이블은 USER_MEMBER 인데, Entity 객체를 만들고 나서 user_member 테이블이 생성되었고 애플리케이션 실행 후 다시 가입을 하면 user_member 데이터베이스에 저장되며 기존 기능들은 에러 없이 정상 작동이 됩니다.. 궁금한 것은 데이터베이스 테이블이 저렇게 두 개 생성된건데 제가 무엇을 잘못해서 만들어졌는지 또 이대로 사용하는데 문제는 없는지 궁금합니다.. 코드는 선생님 코드랑 다른 부분이 없습니다 ㅠ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
[JPA] 스프링 환경에서 EntityManager와 영속성 컨텍스트의 N:1 관계 이해 질문
[질문 내용]안녕하세요! 쉽게 잘 설명해주셔서 강의 잘 듣고 있습니다~ 스프링 프레임워크 같은 컨테이너 환경에서는 엔티티 매니저와 영속성 컨테스트가 N:1 이라고 하셨는데 그러면 트랜잭션별로 엔티티 매니저가 생성되고 영속성 컨텍스트가 하나가 생성되어 공유되어 사용된다고 이해하면 될까요?
-
해결됨치킨값으로 시작하는 Spring CRUD (With Kotlin)
MySQL 연결 문제
안녕하세요! 강의를 보면 콘솔 창에 DB 연결된 부분이 나오는데 처는 아래처럼 나오는데 어떻게 해결하면 좋을까요? 이 부분부터 막히니 다음으로 넘어갈 수가 없습니다 답변 기다리겠습니다! 감사합니다 Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] Database driver: undefined/unknown Database version: 8.0.42 Autocommit mode: undefined/unknown Isolation level: undefined/unknown Minimum pool size: undefined/unknown Maximum pool size: undefined/unknown
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Junit4 에러 (org.junit.Test;)
Junit4 org.junt.Test 어노테이션을 사용하면 작동하지 않는 것 같습니다. 아래는 에러입니다.No matching tests found in any candidate test task. Requested tests: Test pattern jpabook.jpashop.service.MemberServiceTest in task :test * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.11.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 493ms 5 actionable tasks: 1 executed, 4 up-to-date
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
@SpringBootTest class MemberServiceTest { @Autoworied lateinit var memberService: MembersService @Test fun get() { memberService.get(1L) } }@Service class MemberService( private val txManager: PlatformTransactionManager, ) { @Transactional(readOnly = true) fun get(id: Long) { val tx = txManager.getTransaction(DefaultTransactionAttribute()) println("isCurrentTransactionReadOnly()=${TransactionSynchronizationManager.isCurrentTransactionReadOnly()}") println("isActualTransactionActive()=${TransactionSynchronizationManager.isActualTransactionActive()}") println("isNewTransaction()=${tx.isNewTransaction()}") // get } } 제가 기대한건isNewTransaction = true인데요 -> 가장 처음 호출된 @Transactional이 있는 service 메서드이기 때문에 그런데테스트 코드로 실행해도 그렇고, API로 get 메서드가 호출되도록 해봐도 그렇고모두 isNewTransaction = false 로 나옵니다. 내부 트랜잭션이 아니라 외부 트랜잭션이라고 생각했는데 왜 false일까요.... 09:54:40.059 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Creating new transaction with name [com.application.service.member.MemberService.get]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly 09:54:40.062 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Opened new EntityManager [SessionImpl(16208286<open>)] for JPA transaction 09:54:40.075 [Test worker] DEBUG o.h.e.t.i.TransactionImpl - On TransactionImpl creation, JpaCompliance#isJpaTransactionComplianceEnabled == false 09:54:40.075 [Test worker] DEBUG o.h.e.t.i.TransactionImpl - begin 09:54:40.081 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Exposing JPA transaction as JDBC [org.springframework.orm.jpa.member.HibernateJpaDialect$HibernateConnectionHandle@486e4af6] 09:54:40.083 [Test worker] TRACE o.s.t.i.TransactionInterceptor - Getting transaction for [com.application.service.member.MemberService.get] 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Found thread-bound EntityManager [SessionImpl(16208286<open>)] for JPA transaction 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Participating in existing transaction TransactionSynchronizationManager.isCurrentTransactionReadOnly()=true TransactionSynchronizationManager.isActualTransactionActive()=true outer.isNewTransaction()=falseCreating new transaction with name이 나오는데 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Participating in existing transaction 이 로그도 나옵니다,,
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
데이터베이스 테이블 생성 안됨
로그는 잘 나가는 것 같은데 데이터베이스를 확인해보면 테이블이랑 데이터가 안 들어가는 것 같습니다 ㅠ 그리고 ddl-auto 모드도 none 으로 바꿔봐도 계속 같은 로그가 나옵니다.(테이블 생성 및 drop) 로그 첨부할게요.> Task :compileJava UP-TO-DATE > Task :processResources UP-TO-DATE > Task :classes UP-TO-DATE > Task :compileTestJava UP-TO-DATE > Task :processTestResources UP-TO-DATE > Task :testClasses UP-TO-DATE 19:41:14.516 [Test worker] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [jpabook.jpashop.MemberRepositoryTest]: MemberRepositoryTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. 19:41:14.568 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration jpabook.jpashop.JpashopApplication for test class jpabook.jpashop.MemberRepositoryTest 19:41:14.668 [Test worker] INFO org.springframework.boot.devtools.restart.RestartApplicationListener -- Restart disabled due to context in which it is running . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.4.0) 2025-06-16T19:41:14.814+09:00 INFO 56122 --- [ Test worker] jpabook.jpashop.MemberRepositoryTest : Starting MemberRepositoryTest using Java 20.0.1 with PID 56122 (started by sungwoo in /Users/sungwoo/Documents/dev/study/online-lecture/inflearn/jpa/2.jpa-application) 2025-06-16T19:41:14.815+09:00 INFO 56122 --- [ Test worker] jpabook.jpashop.MemberRepositoryTest : No active profile set, falling back to 1 default profile: "default" 2025-06-16T19:41:15.139+09:00 INFO 56122 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2025-06-16T19:41:15.150+09:00 INFO 56122 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 6 ms. Found 0 JPA repository interfaces. 2025-06-16T19:41:15.337+09:00 INFO 56122 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2025-06-16T19:41:15.435+09:00 INFO 56122 --- [ Test worker] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:cb23765c-56b9-40bc-ba72-8f1435f049ba user=SA 2025-06-16T19:41:15.436+09:00 INFO 56122 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2025-06-16T19:41:15.470+09:00 INFO 56122 --- [ Test worker] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2025-06-16T19:41:15.500+09:00 INFO 56122 --- [ Test worker] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.2.Final 2025-06-16T19:41:15.517+09:00 INFO 56122 --- [ Test worker] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled 2025-06-16T19:41:15.661+09:00 INFO 56122 --- [ Test worker] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer 2025-06-16T19:41:15.706+09:00 INFO 56122 --- [ Test worker] org.hibernate.orm.connections.pooling : HHH10001005: Database info: Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] Database driver: undefined/unknown Database version: 2.3.232 Autocommit mode: undefined/unknown Isolation level: undefined/unknown Minimum pool size: undefined/unknown Maximum pool size: undefined/unknown 2025-06-16T19:41:16.066+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : create global temporary table HTE_member(rn_ integer not null, id bigint, username varchar(255), primary key (rn_)) TRANSACTIONAL 2025-06-16T19:41:16.126+09:00 INFO 56122 --- [ Test worker] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) 2025-06-16T19:41:16.132+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : drop table if exists member cascade 2025-06-16T19:41:16.133+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : drop sequence if exists member_seq 2025-06-16T19:41:16.135+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : create sequence member_seq start with 1 increment by 50 2025-06-16T19:41:16.137+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : create table member (id bigint not null, username varchar(255), primary key (id)) 2025-06-16T19:41:16.140+09:00 INFO 56122 --- [ Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2025-06-16T19:41:16.239+09:00 WARN 56122 --- [ Test worker] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2025-06-16T19:41:16.368+09:00 WARN 56122 --- [ Test worker] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) 2025-06-16T19:41:16.431+09:00 INFO 56122 --- [ Test worker] jpabook.jpashop.MemberRepositoryTest : Started MemberRepositoryTest in 1.764 seconds (process running for 2.307) 2025-06-16T19:41:16.749+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : select next value for member_seq 2025-06-16T19:41:16.808+09:00 DEBUG 56122 --- [ Test worker] org.hibernate.SQL : insert into member (username,id) values (?,?) Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 2025-06-16T19:41:16.819+09:00 INFO 56122 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2025-06-16T19:41:16.819+09:00 DEBUG 56122 --- [ionShutdownHook] org.hibernate.SQL : drop table if exists member cascade 2025-06-16T19:41:16.820+09:00 DEBUG 56122 --- [ionShutdownHook] org.hibernate.SQL : drop sequence if exists member_seq 2025-06-16T19:41:16.821+09:00 INFO 56122 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2025-06-16T19:41:16.822+09:00 INFO 56122 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. > Task :test [Incubating] Problems report is available at: file:///Users/sungwoo/Documents/dev/study/online-lecture/inflearn/jpa/2.jpa-application/build/reports/problems/problems-report.html Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.11.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD SUCCESSFUL in 3s 5 actionable tasks: 1 executed, 4 up-to-date 오후 7:41:16: Execution finished ':test --tests "jpabook.jpashop.MemberRepositoryTest"'.
-
미해결스프링 부트와 리액트로 구현하는 소셜 로그인
db연결 질문있습니다!
제가 아직 기본이 부족한 상태여서 여쭤봅니다! mysql의 스키마 설정을 따라해서 되긴 했는데spring과 mysql의 연결이 spring코드의 어떤 부분에서 자동으로 되는건지 자세히 여쭤볼 수 있을까요??
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
mysql 설치파일
저는 맥북을 사용하고 있는데요 맥북 사용자들을 위한 거는 전혀 없는데 그런것도 고려해서 해주셔야 할거 같은데요 지금 mysql 설치 할려고 하는데 이거 맥북에 설치 가능한거에요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
updateMemberResponse 반환 값
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. @PutMapping("/api/v2/members/{id}") public updateMemberResponse updateMemberV2( @PathVariable("id") Long id, @RequestBody @Valid updateMemberRequest request) { memberService.update(id, request.getName(), request.getAddress()); // Member findMember = memberService.findOne(id); return new updateMemberResponse(id, request.getName(), request.getAddress()); }return에 requst의 값을 넣어서 반환 받는 건 안 좋은 방법일까요?findMember로 꺼내서 return 하면 request로 바로 하는 것 보다 어떤 이점이 있는건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
DB에 데이터 persist 안됨
insert 쿼리는 나가는데 왜 DB에 저장되지 않는지 잘 모르겠습니다. try { Member member = new Member(); member.setAge(10); member.setUsername("USER"); em.persist(member); em.flush(); em.clear(); Member singleResult = em.createQuery("Member.findByUsername", Member.class) .setParameter("username", "USER") .getSingleResult(); System.out.println("singleResult = " + singleResult); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); emf.close(); }
-
미해결스프링 부트와 리액트로 구현하는 소셜 로그인
강의자료
안녕하세요 혹시 해당 강의에 GitHub 주소나 자료가 따로 없을까요..?
-
미해결스프링 부트와 리액트로 구현하는 소셜 로그인
리엑트 페이지 랜더링
안녕하세요,강사님 리엑트 코드와 똑같이 만들었지만페이지가 이상하게 나옵니다. 요런 식으로 나오는데 추가적으로 만져야 할 게 있을까요?제 패키지 파일 공유드립니다.{ "name": "login_react", "private": true, "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "vite build", "lint": "eslint .", "preview": "vite preview" }, "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", "@mui/icons-material": "^7.1.1", "@mui/material": "^7.1.1", "react": "^19.1.0", "react-dom": "^19.1.0", "react-router-dom": "^7.6.2" }, "devDependencies": { "@eslint/js": "^9.25.0", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", "@vitejs/plugin-react": "^4.4.1", "eslint": "^9.25.0", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.19", "globals": "^16.0.0", "vite": "^6.3.5" } }