[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 에러 메시지 내용은 org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : jpabook.jpashop.domain.Order.member -> jpabook.jpashop.domain.Member; 입니다. Member와 Order 클래스의 영속성 전이 문제인 것 같아서 각각 cascade = CascadeType. ALL 을 추가해주면 에러메시지는 사라지지만 주문내역에서 회원명이 나오지 않습니다ㅠㅠ 또 회원목록에서 등록하지 않은 회원이 생성됩니다. 그래서 일단 cascade 추가 전 Order 클래스와 Member 클래스의 코드 첨부합니다. 구글 드라이브 주소입니다. https://drive.google.com/file/d/1j0oevd3vhsXt8e1LwuuVgS7fu6RLY8yN/view?usp=sharing
이번 강의를 들으면서 H2데이터베이스가 아닌 MySQL에 적용을 해보고 싶어서 시도를 해봤는데요, 도커에 MySQL을 띄우고 실행을 하였는데 궁금증이 생겨 질문 드립니다. 스프링 부트의 application.properties에 적는 MySQL환경 설정과 docker-compose.yml에 적는 MySQL환경 설정을 둘다 입력해 줘야 하나요?? 한곳만 입력해줘도 괜찮은가요? 좋은 강의 감사합니다 ㅎㅎ
안녕하세요. 너무 잘보고있는데요. 한가지 DNS서버에 조회 해서 웹브라우저에 받아오는 일련의 과정이 조금 헷갈려서 질문드립니다. 1.웹브라우저에서 구글서버로 접속하기위해 1) 먼저 DNS에 접속하여 IP주소와 port정보를 찾아냅니다. 2)그후에 DNS서버로부터 받아온 정보로 HTTP요청 메시지를 생성하는데요. 그럼 https://www.google.com:443/ 까지는 웹브라우저에서 DNS서버를 가서 조회를 해서 IP주소와 port 정보를 조회하여 그 정보만 요청한 웹 브라우저로 넘겨주게되고, 웹브라우저는 다시 DNS서버로 부터 받은 IP주소와port정보를 포함하여 HTTP요청 메시지를 만드는데 그 안에는 path뒤 부터인 /search?q=hello&hl=ko가 구글 서버에 접속해서 관련 정보를 받아온다고 생각하면되는게 맞나요? 그런데 이게 맞다면 1분11초 HTTP메시지에 Host는 www.google.com이고, 또 따로 패킷에 받아온 구글 IP주소 를 to에다가 200.200.200.2로 보내는게 맞는지가 궁금합니다. (제가 생각했을때는 DNS서버로 부터 받아온 IP주소를 Host에다가 200.200.200.2라고 적으면 된다고 생각했었는데, 다시 www.google.com이라고 적어놓으셔서 그럼 HTTP요청 메시지 패킷을 전송할때는 www.google.com와 IP주소 200.200.200.2가 모두 필요한걸까? 라는 의문이 들어서요.) 2. search가 path인데요. 그럼 예를들어 구글 서버 자체에 serarch라는 디렉토리가 있는건가요? 그래서 그 serarch안에 q=hello&hl=ko의 해당정보가 들어있는건가요?... 3. DNS서버도 따로 존재? 한다고 들었는데, 이게 또 SK, LG, KT 등 통신사에 등록이 되어있다고 들었습니다. 혹시 SK의 경우 DNS서버홈페이지같은거는 어디서 알 수 있을까요? 한 번 들어가서 구경하고 싶은데.. 검색해도 안나와서요. 3-1 또 DNS서버로 요청할때도 3way handshake로 동작해서 패킷단위로 던져지는게 맞나요? 4. 제가 생각했을때 http https ftp smtp 마다 호칭을 HTTP요청메시지 or HTTPS요청메시지 or FTP요청메시지 or SMTP요청메시지 이런식으로 각각 따로 불려야 될 것 같은데.. 이거를 그냥 어떤 프로토콜을 사용하던지 'HTTP요청메시지' 라고 통용해서 사용하는 건가요? 5. 1분49초 시작부터 , 이해가 잘 가지않는데요. 그럼 지금 이 HTTP메시지 전송과정 전에 이미 DNS서버를 가서 IP주소랑 port번호를 찾아 온후! 진행되는 과정이라는 가정하에 IP주소랑 port번호를 찾았다고 말씀하시는거죠? 그리고 1)소켓라이브러리를 통해서 먼저 찾은IP주소와port번호로 2)syn- syn ack - ack 해서 (가상)구글 서버와 연결을 한 후 3) OS계층인 TCP/IP 로 전달을 합니다. 그다음 패킷을 씌운후 인터넷망으로 던져진다! 순서과정을 이렇게 이해하면 될까요?
[질문 내용] 아래 스크린샷과 같이 intellij 에서 @Service @Repository 어노테이션을 달지 않았음에도 Controller에서 에러를 표시하지 않습니다.. 실행시에는 에러를 잡아내서 강의 진행에는 무리가 없으나, 혹시 이유를 알고싶어서 질문합니다... 1. 아직 @Service 를 추가하기 전이나, 2. intellij가 error 경고를 띄우지 않음 3. 실행시에는 에러를 잘 잡아냅니다.
안녕하세요. 커리큘럼 관련되서 질문드리고자 이렇게 글 올립니다. 저는 일단 C++을 사용하는데 있어 큰 무리없이 사용하는 편입니다. (modern c++포함) 반면 C#은 거의 모르는 상태인데요, 강사님 커리큘럼중에 C#을 이용해서 MMORPG를 만드는 커리큘럼도 있던데 아래처럼 병행해서 커리큘럼을 짜도 될지 궁금해서 문의 드립니다. [C#과 유니티로 만드는 MMORPG게임 개발시리즈] Part1, Part3, Part7, Part9 만 듣고, [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4 이렇게 들어서 일단 Unreal 로 연동하는 강의가 나올때까지, 유니티 2D게임을 C++게임서버에 연동해보고 싶은데요, 굳이 C# 게임서버 제작 강의를 들어야할 필요가 있을까요?? C#으로 게임서버를 만들어야겠다는 생각이 들면 듣겠지만, 지금은 우선 게임 클라이언트 자체를 서버에 연동시키는것(구체적으로 맵을 어떻게 서버에서 처리하고, 스킬이나 hit 판정을 어떤식으로 하는지에 대한 것들)을 목표로 하고 있는데, C#게임서버 강의랑 C++ 게임서버 강의가 겹치는 부분이 많아서 C#게임서버 강의를 통해 들어야할지 고민이 됩니다. 결론으로 C# 강의 Part1, Part3, Part7, Part9 와 C++강의 Part4 이렇게 병행하는데, 무리 없이 커리큘럼을 수행할 수 있는지 궁금합니다. 긴글 읽어주셔서 감사드리며, 항상 좋은 강의 올려주셔서 감사합니다.!!!
안녕하세요 영한(god)님 질문이 하나있습니다. 지금 changeTeam 을 이용하여 Member의 Team을 바꿔주시는데 이게 em.flush ,clear 하고 조회를 해오면 더티체킹으로 Member의 Team이 잘 바뀌어서(update) 조회됩니다. 근데 문제는 자바 컬렉션에서의 문제입니다 team.getMembers().add( this ) ; 이 결과로 (팀)양쪽에 같은 맴버가 생기는거 같습니다.
수강자 분들이 헷갈리시는 분이 있어서 질문글에 남겨드립니다. spring boot 프로파일 설정중에 spring.profiles.include = myprofile 이 부분에서 에러가 많이 나고 저도 똑같은 경험을 해서 찾아보다가 spring boot 2,4버전 이후부터는 다음과 같이 기술한다고 합니다. spring.profiles.group."myprofile"
안녕하세요! 다른 분들도 이 부분에 대해서 질문을 하셨고 답변을 봤지만, 여전히 이해가 안돼서 다시 한번 질문을 드립니다. ㅠㅠ 1 em.persist(member) ; 2 3 em.flush(); 4 em.clear(); 5 6 em.getReference(Member.class, member.getId()); 7 8 System.out.println("findMember.id = " + findMember.getId()); em.clear()를 하면 1차 캐시가 전부 비워지고, GeneratedValue로 생성된 id값은 DB에 저장되어 있습니다. em.getReference(id)를 하는 시점에 가짜 프록시 객체가 영속성 컨텍스트에서 관리가 된다고 하셨는데, 여기서 가짜 프록시 객체는 id값을 어떻게 1로 가지고 있는 건가요?? 결국 1이라는 값을 알기 위해서는 DB에서 가져와야 하는게 아닌가요?? 아니라면 혹시 자동으로 SEQUENCE 전략으로 변경되어 메모리에 디폴트로 50까지 가지고 있기 때문에 1을 출력해주는 것일까요?
안녕하세요 영한님 항상 좋은 강의 감사드립니다 :) 다름이 아니라 DNS를 공부하면서 의문이 드는 점이 있어 질문드리려고 합니다. 우리가 통상적으로 브라우저에 도메인 이름을 입력하면, DNS에 요청이 들어가고 DNS에서 응답이 오면 반환된 IP를 이용하여 서버로 접속요청을 한다... 라는 맥락으로 강의 내용을 이해했습니다. 그런데 종종 도메인 이름이 아니라 IP를 직접 입력하여 접속을 하는 경우도 있습니다(192.168.0.1)이나 공유기 아이피 접속... 여러가지가 있겠습니다. 질문 요지는 이렇습니다 DNS에 굳이 접속하지 않아도 되는 이런 IP로 접속했을때는 DNS서버로 요청을 보내지 않을 것 같습니다. 그렇다면 DNS로 요청을 보낼지 말지 결정하는 주체는 브라우저인지,,, 누가 결정하는 것인지 궁금합니다. 감사합니다!
NotEnoughStockException에서 오버라이드를 해서 그냥 놔두는 이유를 조금만 더 명확하게 설명 부탁드려도 될까요? 그리고 5개를 오버라이드를 했는데 오버라이드를 할 수 있는 메소드들은 많이 있는데 그중에 어떤 메소드들을 오버라이드를 하는지, 그리고 그 메서드들을 오버라이드를 하는 이유와 마지막 한개는 필요가 없는 이유를 조금만 더 명확하게 알고 싶습니다.
API가 뭔지는 알겠습니다. "객체(DTO)에 있는 값들을 JSON으로 반환하는 컨트롤러" 근데 이것을 왜 쓰는지는 감이 안옵니다. 만약 조회의 결과를 JSON으로 클라이언트에 반환한다 치면, 조회값이 엄청 많으니까 JSON으로 "축약"해서 보낸다는 느낌으로 이해 했는데 맞나요..? 클라이언트에서 서버로 왜 JSON으로 보내는지, 반대의 경우는 왜 그러는지 감이 안잡힙니다.
cascade를 사용하는곳이 FK 가 없는곳이라고 생각하면 맞을까요? FK가 없는곳이면 부모Entity라고 생각을 하면 될 것 같은데. 여기서 부모라고하면 변경되는 주체(?)를 표현한 것인데. 예를들어 게시판과 첨부파일 테이블이 있다고 한다면 게시판이 부모Entity이고, 첨부파일이 자식Entity라고 생각했을때(게시글을 지우면 첨부파일도 같이 지워지는 구조이기 때문에.. 첨부파일을 지운다고 해서 게시글이 같이 지워진다는 보장은 없으니까요) 이럴 경우에는 게시판Entity에 cascade를 설정하는게 맞는 것 같은데 제가 이해하고 있는게 맞는걸까요?
테이블을 생성할 때 설명중 객체는 타입이 있어서 명확하게 member.id를 구분할 수 있는데 테이블에서는 구분하기가 어렵고 조인등의 쿼리를 짤 때도 불편하다고 해서 member_id로 잡아주신다고 하셨는데.. 이런 내용이 PK나 FK 에만 해당이 되는건지 궁금합니다. 예를들어 member라는 테이블에 member_id, name이라는 필드가 있고, item이라는 테이블에도 item_id, name이라는 필드가 있을경우 name이라는 필드명이 겹치는데 이럴 경우에는 테이블 구조를 짤 때 그냥 name으로만 하시는지 아니면 member_name, item_name으로 하시는지 궁금합니다. 강의를 쭉~~ 들으면서 드는 생각은 PK, FK와 관계되는것들(다른 테이블과 직접적인 연관관계를 맺고있기 때문에)만 구분을 하기 위해서 member_id, item_id로 만드는 것 같은데 제가 이해한대로 실무에 적용을 해도 문제가 없는지 궁금합니다.
미로의 최단거리(BFS)문제에서 dis[7][7]이 (7,7)에 도착하는 최소 거리라는 보장이 되나요?? 먼저 12번째로 (7,7)에 도착하고 이후에 다른경로로도 (7,7)에 도착할탠데 이때 dis[7][7]이 오버라이딩되서 더 큰 수로 바뀔수도 있는거 아닌가 궁금해서 질문 드렸습니다!!
안녕하세요. 김영한강사님. 수업이 너무 유익하여 감사히 잘 듣고 있습니답. 다름이 아니라 강의를 듣다가 강사님께서 TCP에는 손을 못대고 자기가 직접 최적화 하고 싶은것은 애플리케이션 레벨에서 UDP에다가 내가 원하는걸 만들어 내면 된다고 하셨는데 이미지를 보면 UDP는 전송계층이라고 되어있는데 왜 UDP라는 곳에 내가 원하는 데이터를 담을때 애플리케이션 레벨에서 담는다고 표현을 하신걸까요..?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. 영항님! 좋은 강의 잘 듣고 있습니다. 강의를 듣고 토이 프로젝트를 진행하는 와중에 궁금한 점이 생겨 질문글을 올리게 되었습니다. 저는 Board라는 Entity를 다음과 같이 선언하였습니다. @Id @GeneratedValue (strategy = GenerationType. IDENTITY ) @Column (name = "board_id" ) private Long id ; private String title ; private String topic ; private String content ; @Enumerated (EnumType. STRING ) private StudyState studyState ; @Enumerated (EnumType. STRING ) private RecruitState recruitState ; private Long headCount ; @ManyToOne (fetch = FetchType. LAZY ) @JoinColumn (name = "member_id" ) private Member member ; 그리고 저는 프론트에서부터 전달받은 Dto로 실제 Board Entity를 저장하려고 했습니다. 그래서 저는 Dto로 부터 Entity를 만들 수 있는 메소드 toEntity를 다음과 같이 구성하였습니다. @Data @NoArgsConstructor @AllArgsConstructor public class BoardCreateRequestDto { private Long memberId ; private String title ; private String topic ; private String content ; private Long headCount ; private StudyState studyState ; private RecruitState recruitState ; public Board toEntity () { return Board. builder () .title( this . title ) .topic( this . topic ) .content( this . content ) .studyState( this . studyState ) .recruitState( this . recruitState ) .headCount( this . headCount ) .member( new Member( this . memberId )) .build() ; } } Board board = boardRepository .save(requestDto.toEntity()) ; 실제로 저장을 할 시에 Board Entity에는 Member를 넣어 저장하나, 실제 DB에서는 Board 객체에서의 Id만을 외래키로 저장하기에 다음과 같이 저장해도 무방하다는 것을 알게 되었습니다. 저는 이 방법이 MemberId를 통해 Member 객체를 찾지 않고 저장할 수 있기에 쿼리 1번을 덜 날릴 수 있어 비용적인 측면에서 조금의 이득이 생긴다고 생각하여 다음과 같이 구성해보았습니다. 이러한 방법이 문제가 있는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 현재 계속되는 상품주문 클릭시 발생되는 에러를 해결하던도중 이러한 에러가 뜨게 되어서 해결하다 도저히 안되서 질문드리게 되었습니다. 관련 파일을 계속 PDF랑 비교해봤는데 틀린것이 없어 막혀버렸습니다. Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sun Dec 05 15:37:26 KST 2021 There was an unexpected error (type=Internal Server Error, status=500). An error happened during template parsing (template: "class path resource [templates/order/orderList.html]") org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/order/orderList.html]") at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072) at org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:366) at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:190) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1400) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1145) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1084) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:831) Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "T(jpabook.jpashop.domain.OrderStatus).values()" (template: "order/orderList" - line 18, col 16) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393) at org.attoparser.MarkupParser.parse(MarkupParser.java:257) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230) ... 48 more Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "T(jpabook.jpashop.domain.OrderStatus).values()" (template: "order/orderList" - line 18, col 16) at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:292) at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:166) at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:125) at org.thymeleaf.standard.processor.StandardEachTagProcessor.doProcess(StandardEachTagProcessor.java:73) at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314) at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleOpenElementEnd(TemplateHandlerAdapterMarkupHandler.java:304) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:278) at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleOpenElementEnd(OutputExpressionInlinePreProcessorHandler.java:186) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:124) at org.attoparser.HtmlElement.handleOpenElementEnd(HtmlElement.java:109) at org.attoparser.HtmlMarkupHandler.handleOpenElementEnd(HtmlMarkupHandler.java:297) at org.attoparser.MarkupEventProcessorHandler.handleOpenElementEnd(MarkupEventProcessorHandler.java:402) at org.attoparser.ParsingElementMarkupUtil.parseOpenElement(ParsingElementMarkupUtil.java:159) at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:710) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301) ... 50 more Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1005E: Type cannot be found 'jpabook.jpashop.domain.OrderStatus' at org.springframework.expression.spel.support.StandardTypeLocator.findType(StandardTypeLocator.java:117) at org.springframework.expression.spel.ExpressionState.findType(ExpressionState.java:155) at org.springframework.expression.spel.ast.TypeReference.getValueInternal(TypeReference.java:69) at org.springframework.expression.spel.ast.CompoundExpression.getValueRef(CompoundExpression.java:55) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:91) at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:112) at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:337) at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:265) ... 70 more