묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Practical Testing: 실용적인 테스트 가이드
자바 익셉션 종류도 외우시나요??
안녕하세요.강의를 수강하다가 문득 의문이 들었는데, 테스트 코드를 작성하실때 어떤 exception을 던질지도 다 알고 계신것 같더라구요! 예를들어, 아메리카노를 0개 주문할때는 IllegalArgumentException을 던진다거나요.... 혹시 이런 익셉션의 종류들도 전부 시간을 들여 외워야 할까요??? 아니면 자연스레 체득되길 기다릴까요??
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
AuthenticationManager가 부모 AuthenticationManager를 가지는 이유를 모르겠어요
AuthenticationManager가 부모 AuthenticationManager를 가지는 이유를 모르겠습니다. 매니저는 프로바이더를 여러 개 가질 수 있는데, 굳이 부모 매니저를 추가로 가질 수 있도록 해서 부모의 프로바이더를 사용해야할 이유가 있을까요? 그리고 그렇게 사용하는 적절한 예시가 있을까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트레이드오프시 DI, OCP를 지킨다는말
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]JPA 사용시 중간계층으로 JpaItemRepositovy 를 거쳐서 SpringDataJpaItem의 인터페이스를 구현함으로써 구조가 복잡해지기때문에 중간단계인 JpaItemRepositovy 없이 직접 SpringDataJpaItem를 주입해줌으로써 좀더 간단한 구조가 된다고설명해주셨는데, 단점으로는 DI 와 OCP를 지키지 못한다라고 하셨는데 아래 스크린샷처럼 수업을 듣다가 헷갈려서 찾아봤습니다. DI 와 DIP의 차이를 알아보고 SOLID원칙을 지킨다라는건 DI를 어긴다보단 DIP를 어긴다가 맞는거 같아 이부분에 대한 설명을 DIP를 DI로 추상적으로 설명했다고 이해해야할까요? 정확히는 DIP를 지키기위해 DI를 넣는건데 SpringDataJpaItem를 주입한다고할때 솔직히 이것도 DI로 넣는것도 같고 DIP도 인터페이스(추상화)에 의존하기때문에 지킨거고 오히려 OCP만 어기는 구조가 아닌가해서요 정리하자면DI를 어긴다는말보단 DIP를 어긴다 라고해야되는게 맞는지해당 코드 트레이드오프 설명시 DIP는 지키되 OCP를 지키지 못하는게 아닌지
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
LettureLockStockFacadeTest에서 오류가 발생합니다.
package com.example.stock.repository; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.time.Duration; @Component public class RedisLockRepository { private RedisTemplate<String, String> redisTemplate; public RedisLockRepository(RedisTemplate<String, String> redisTemplate) { this.redisTemplate = redisTemplate; } public Boolean lock(Long key) { return redisTemplate .opsForValue() .setIfAbsent(generateKey(key), "lock", Duration.ofMillis(3_000)); } public void unlock(Long key) { redisTemplate.delete(generateKey(key)); } private String generateKey(Long key) { return key.toString(); } } package com.example.stock.facade; import com.example.stock.repository.RedisLockRepository; import com.example.stock.service.StockService; import org.springframework.stereotype.Component; @Component public class LettuceLockStockFacade { private final RedisLockRepository redisLockRepository; private final StockService stockService; public LettuceLockStockFacade(RedisLockRepository redisLockRepository, StockService stockService) { this.redisLockRepository = redisLockRepository; this.stockService = stockService; } public void decrease(Long key, Long quantity) throws InterruptedException { while(!redisLockRepository.lock(key)){ Thread.sleep(100); } try{ stockService.decrease(key, quantity); }finally { redisLockRepository.unlock(key); } } } package com.example.stock.facade; import com.example.stock.domain.Stock; import com.example.stock.repository.StockRepository; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest class LettuceLockStockFacadeTest { @Autowired private LettuceLockStockFacade lettuceLockStockFacade; @Autowired private StockRepository stockRepository; @BeforeEach public void before(){ stockRepository.saveAndFlush(new Stock(1L, 100L)); } @AfterEach public void after(){ stockRepository.deleteAll(); } @Test public void 동시에_100개의_요청() throws InterruptedException { int threadCount = 100; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for(int i = 0; i < threadCount; i++){ executorService.submit(() -> { try{ lettuceLockStockFacade.decrease(1L, 1L); } catch (InterruptedException e) { throw new RuntimeException(e); } finally { latch.countDown(); } }); } latch.await(); Stock stock = stockRepository.findById(1L).orElseThrow(); assertEquals(0, stock.getQuantity()); } }이렇게 코딩했고 dockre에 redis를 설치하고 window Shell에서 데이터가 남아 있을까봐 1번 key 값을 삭제해서 돌렸는데도 오류가 발생했습니다.또한 레디스가 실행이 되지 않은 채 했을까봐 ping을 입력했는데 pong이라는 응답을 받았습니다. Hibernate: drop table if exists stock 2024-11-03T22:08:40.414+09:00 DEBUG 17108 --- [ Test worker] org.hibernate.SQL : create table stock (id bigint not null auto_increment, product_id bigint, quantity bigint, version bigint, primary key (id)) engine=InnoDB Hibernate: create table stock (id bigint not null auto_increment, product_id bigint, quantity bigint, version bigint, primary key (id)) engine=InnoDB 2024-11-03T22:08:40.439+09:00 INFO 17108 --- [ Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2024-11-03T22:08:41.136+09:00 INFO 17108 --- [ Test worker] o.s.d.j.r.query.QueryEnhancerFactory : Hibernate is in classpath; If applicable, HQL parser will be used. 2024-11-03T22:08:42.092+09:00 WARN 17108 --- [ 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 2024-11-03T22:08:42.990+09:00 INFO 17108 --- [ Test worker] c.e.s.facade.LettuceLockStockFacadeTest : Started LettuceLockStockFacadeTest in 6.21 seconds (process running for 7.345) 2024-11-03T22:08:43.504+09:00 DEBUG 17108 --- [ Test worker] org.hibernate.SQL : insert into stock (product_id,quantity,version) values (?,?,?) Hibernate: insert into stock (product_id,quantity,version) values (?,?,?) 2024-11-03T22:08:44.203+09:00 DEBUG 17108 --- [ Test worker] org.hibernate.SQL : select s1_0.id,s1_0.product_id,s1_0.quantity,s1_0.version from stock s1_0 where s1_0.id=? Hibernate: select s1_0.id,s1_0.product_id,s1_0.quantity,s1_0.version from stock s1_0 where s1_0.id=? 2024-11-03T22:08:44.245+09:00 DEBUG 17108 --- [ Test worker] org.hibernate.SQL : select s1_0.id,s1_0.product_id,s1_0.quantity,s1_0.version from stock s1_0 Hibernate: select s1_0.id,s1_0.product_id,s1_0.quantity,s1_0.version from stock s1_0 2024-11-03T22:08:44.252+09:00 DEBUG 17108 --- [ Test worker] org.hibernate.SQL : delete from stock where id=? and version=? Hibernate: delete from stock where id=? and version=? Expected :0 Actual :100 <Click to see difference> org.opentest4j.AssertionFailedError: expected: <0> but was: <100> at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182) at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177) at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:639) at com.example.stock.facade.LettuceLockStockFacadeTest.동시에_100개의_요청(LettuceLockStockFacadeTest.java:55) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 어디를 더 수정해야 하는지 모르겠습니다..
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@RequestParam 의 메서드 구분이해
@RequestParam 개념을 공부중인데 제가 이해한게 맞는지 여쭤보고 싶어서요 메서드의 파라미터 자리에 작성하는 애노테이션이다.파라미터의 이름과 같읕 메서드를 찾아 값을 바인딩 한다.void String event(@RequestParam (value=“abc”) String abc){ ~ }이라는 코드가 있을 때 abc의 값을 파라미터 abc의 값으로 저장해준다.이름이 같을 경우에는 void String event(@RequestParam String abc){ ~ } 으로 생략 가능하다. 이게 맞을까요?
-
미해결스프링 핵심 원리 - 기본편
컨테이너에 등록된 모든 빈 조회 질문
ROLE_ APPLICATION으로 등록한 빈만 출력했는데 ROLE_INFRASTRUCTURE 의 결과가 나옵니다김영한 강사님은 bean에 직접등록한 아래 5줄만 출력이 됩니다. 저는 왜 추가로 위에 5줄이 뜨는건지 궁금합니다ㅠㅠ
-
미해결토비의 스프링 6 - 이해와 원리
NoSQL의 PlatformTransactionManager adapter 는 없는건가요?
안녕하세요. 우선 토비님의 강의 너무 잘 듣고 있습니다. 강의 제작해주셔서 무한 감사드려요.Transaction manager 추상화 부분 강의를 들으면서 NoSQL의 트랜잭션을 지원하는 어댑터는 없는건가 궁금해서 질문드립니다.감사합니다.
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
비즈니스 로직 담당 서비스
비즈니스 로직만을 담당하는 BookApplicationService 를 두는게 새롭고 좋은 구조 아닐까 생각이 들어서 제 생각이 맞는지 궁금해서 여쭙습니다. Query 이름의 서비스는 조회만을Command 는 등록, 수정, 삭제 담당하는 것이고 또한 이런 서비스 구조가 순환참조 발생 가능성도 줄일 수 있겠죠? p.s 강의 잘 듣고 있습니다. 처음 겪어보는 내용들이 많아서 재밌고 배울게 많네요. 강의 빨리 더 내주십시오.
-
미해결스프링 핵심 원리 - 기본편
충돌문제 강의실습과 다른 결과가 나타납니다.
06:03 부터 @SpringBootApplication어노테이션으로 스프링구동을 진행함으로서앞서 AutoAppConfigTest 를 했을 때 replace되어 정상구동되는 현상과 반대되는 결과를 보여주시고 계십니다. 스프링부트는 오류를 발생시키는 것을 저도 똑같이 확인하기 위해 실습을 했는데요. 결과메세지가 달랐습니다. Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined in file [C:\Users\eh\Desktop\Source\core\out\production\classes\hello\core\member\MemoryMemberRepository.class] - memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class]강의에서는 AutoAppConfig에 작성한 수동빈과 @Compoent로 등록된 자동빈의 충돌을 다뤘으나, 저의 경우 AppConfig가 등장했습니다. 강사님도 AppConfig를 건들지 않으신것으로 알고있습니다. 다음과 같습니다.@Configuration public class AppConfig { public AppConfig() { System.out.println("AppConfig 생성자호출"); } // 서비스단 @Bean public MemberService memberService(){ System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService(){ System.out.println("call AppConfig.orderService"); return new OrderServiceImpl( memberRepository(), discountPolicy()); } // Repository @Bean public MemberRepository memberRepository(){ System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy(){ System.out.println("call AppConfig.discountPolicy"); return new RateDiscountPolicy();//return new FixDiscountPolicy(); } } 다음은 자동구성입니다.@ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { public AutoAppConfig() { System.out.println("AutoAppConfig의 생성자호출"); } // [수동빈등록] // 자동등록 된 빈과 충돌이 발생하지 않으며 아래 수동등록 빈으로 덮어써짐 @Bean(name = "memoryMemberRepository") public MemberRepository memberRepository() { return new MemoryMemberRepository(); } }@Component public class MemoryMemberRepository implements MemberRepository{...} 총 3개의 코드가 충돌을 일으킬 후보를 추려봤습니다.AppConfig의 MemberRepository 수동등록 코드(name = "memberRepository")AutoAppConfig의 MemberRepository 수동등록 코드(name = "memoryMemberRepository")MemoryMemberRepository 자동등록 코드(name = "memoryMemberRepository") 강사님은 2,3이 충돌했는데저는 왜 1,3이 충돌한 걸까요ㅠㅠ
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
findByItemNameLikeAndPriceLessThanEqual 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]스프링 데이터 JPA 적용1 강의에서findByItemNameLikeAndPriceLessThanEqual 라는 쿼리메서드는'select i from Item where i.price<= ?' 라는 JPQL이 실행된다 라고했는데 'select i from Item i where i.itemName like :itemName and i.price <= :price'가 맞는거 아닌가해서요LikeAnd가 붙었는데 기존과 동일하다고 설명되어있길래 질문드려요
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
강의 관련
강의를 새로 구매하기에는 비용이 부담되어 현재 수강중인 것 기간만료 후 연장하고 싶은데, 방법이 있을까요?비용을 조금 추가하는 방법이라도 좋으니, 2주정도만 연장하고 싶습니다. 양해 부탁드립니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
ItemMapper.xml 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]ItemMapper.xml에 <insert> 코드가 강사님 코드하고 한 자도 안 틀리고 똑같은데 테스트에서 sql syntax 에러가 나서 강사님 코드를 붙여넣었는데 테스트가 정상으로 작동했습니다. 이상해서 코드를 한 줄씩 Ctrl + C, V 해가면서 테스트가 제대로 작동하는지 확인했는데 그래도 계속 syntax 에러가 났습니다. 코드 전체를 복사하고 붙였더니 테스트가 정상 작동했구요. 이런 경우가 가끔식 있는지 이건 어떤 경우인지 궁금해서 질문 남깁니다.
-
미해결스프링 핵심 원리 - 기본편
코드 파일
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.해당 강의 프로젝트 코드 파일은 없나요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
BeanPropertyRowMapper 관련해서 질문 있습니다.
안녕하세요. 모든 필드가 final인 클래스에 BeanPropertyRowMapper는 사용 못하는건가요?? 빈 생성자는 생성하지 못해서 각 필드의 기본값으로 초기화 해주는 생성자를 만들었는데모든 필드가 final이라서 값이 변경이 되지 않아서 그런지 기본값으로 나오더라고요 코드는 아래와 같이 작성했습니다 그냥 RowMapper를 직접 만들어서 사용하는게 최선일까요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Ajax request url 에러
My페이지를 개발하고 있습니다 (세션있음 id, 가입일 등등)Delete 쿼리만 ajax로 요청한 url이 콘솔창로 보면 제가 넣지않은 uri가 추가되어 나오고 404에러가 뜨는데 어떡하나요eclipse에서는 403에러로 뜹니다분명 컨트롤러 Postmapping 어노테이션 url과 전혀 다른게 없었습니다Delete 쿼리만 안되네요아니면 f12에서 원인 찾는법 알려주시면 감사하겠습니다
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 git bash로 빌드하고 실행할때 뜨는 에러(자바경로 위치관련에러)
ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.Please set the JAVA_HOME variable in your environment to match thelocation of your Java installation. 라고 뜨는데 따로 인텔리제이 설치하며 자바는 따로 설치 안했어요어떻게 하면 좋을까요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
데이터베이스연동문제
해당 오류들이 나오면서 h2베이스에 연동이 되지 않습니다 ㅠㅠ 해결하는 방법이 있을까요?2024-11-01T15:11:48.474+09:00 ERROR 84212 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Property 'jpabook.jpshop.domain.Delivery.status' is annotated '@Enumerated' but its type 'jpabook.jpshop.domain.DeliveryStatus' is not an enum2024-11-01T15:11:48.475+09:00 WARN 84212 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Property 'jpabook.jpshop.domain.Delivery.status' is annotated '@Enumerated' but its type 'jpabook.jpshop.domain.DeliveryStatus' is not an enum2024-11-01T15:11:48.480+09:00 INFO 84212 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...2024-11-01T15:11:48.495+09:00 INFO 84212 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.2024-11-01T15:11:48.506+09:00 INFO 84212 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat]2024-11-01T15:11:48.548+09:00 INFO 84212 --- [ restartedMain] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.2024-11-01T15:11:48.627+09:00 ERROR 84212 --- [ restartedMain] o.s.boot.SpringApplication : Application run failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Property 'jpabook.jpshop.domain.Delivery.status' is annotated '@Enumerated' but its type 'jpabook.jpshop.domain.DeliveryStatus' is not an enum at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1775) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1173) ~[spring-context-6.1.1.jar:6.1.1] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:936) ~[spring-context-6.1.1.jar:6.1.1] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:616) ~[spring-context-6.1.1.jar:6.1.1] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.0.jar:3.2.0] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) ~[spring-boot-3.2.0.jar:3.2.0] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) ~[spring-boot-3.2.0.jar:3.2.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) ~[spring-boot-3.2.0.jar:3.2.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1342) ~[spring-boot-3.2.0.jar:3.2.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1331) ~[spring-boot-3.2.0.jar:3.2.0] at jpabook.jpshop.JpashopApplication.main(JpashopApplication.java:10) ~[main/:na] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.2.0.jar:3.2.0]Caused by: org.hibernate.AnnotationException: Property 'jpabook.jpshop.domain.Delivery.status' is annotated '@Enumerated' but its type 'jpabook.jpshop.domain.DeliveryStatus' is not an enum at org.hibernate.boot.model.internal.BasicValueBinder.prepareBasicAttribute(BasicValueBinder.java:805) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.BasicValueBinder.setType(BasicValueBinder.java:374) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.makePropertyAndValue(PropertyBinder.java:261) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:297) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.createBasicBinder(PropertyBinder.java:1169) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.bindBasic(PropertyBinder.java:1071) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.bindProperty(PropertyBinder.java:890) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.buildProperty(PropertyBinder.java:788) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.PropertyBinder.processElementAnnotations(PropertyBinder.java:709) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.EntityBinder.processIdPropertiesIfNotAlready(EntityBinder.java:977) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.EntityBinder.handleIdentifier(EntityBinder.java:305) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.EntityBinder.bindEntityClass(EntityBinder.java:231) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.internal.AnnotationBinder.bindClass(AnnotationBinder.java:422) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:255) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:278) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:321) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1432) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1503) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) ~[spring-orm-6.1.1.jar:6.1.1] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[spring-orm-6.1.1.jar:6.1.1] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.1.1.jar:6.1.1] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.1.1.jar:6.1.1] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[spring-orm-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1822) ~[spring-beans-6.1.1.jar:6.1.1] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1771) ~[spring-beans-6.1.1.jar:6.1.1] ... 19 common frames omittedDisconnected from the target VM, address: '127.0.0.1:55744', transport: 'socket'Process finished with exit code 0
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
index.html
안녕하세요? 강의 잘 보고 있습니다.html 코드가 없어 커뮤니티에 와보니 없는게 맞는거군요.강사님과 같은 화면을 만드려면 직접 html 태그 넣어서 만듦강사님이 보내주는 코드를 넣음두가지 방법인거죠?
-
미해결Practical Testing: 실용적인 테스트 가이드
private 메서드를 public으로 바꾸면 어떤가요?
안녕하세요, 우빈님 강의 정말 잘 듣고 있습니다! 한가지 의문점이 드는 것은 private 메서드는 테스트를 하지 않고 그냐 유지하되, 필요 시에 따로 클래스를 분리하여 객체를 만드신다고 했는데요, 그냥 간편히 private 메서드를 public 메서드로 변환해서 내부 호출하는 방법은 별로 고려되지 않은 것 같은데 따로 이유가 있을까요? 혹시 createNextProductNumber()가 ProductService 클래스의 성격과는 맞지 않아서 분리하는 경우인지, createNextProductNumber()가 결국 다른 곳에서 사용 될 수 있이므로 별도의 파일로 관리하는지 궁금합니다
-
미해결스프링 프레임워크 입문
인텔리제이로 해야하나요? 아니면 스프링부트?
제목이 곧 내용입니다~