강의 소스 그대로 참고하여 현재 진행중인 프로젝트에 CustomUserDetailsService, CustomAuthenticaionProvider, SecurityConfigure 모두 작성하였습니다. 그런데 CustomAuthenticaionProvider의 UserDetailsService와 PasswordEncoder의 @Autowired 부분에서 빨간 줄이 그어져 진행이 불가능합니다. 혹시 스프링 부트 버전차이 때문에 그러는 걸까요?? 현재 2.7.1 사용중입니다. 실습한 코드 사진 첨부하도록 하겠습니다. configure context customUserDetailsService customAuthenticationProvider
강의대로 했는데 안되네요. 우선 깃 링크로 접속하여 코드 다운로드받은뒤 압축풀어서 intellij 로 open 하여 해당 강의처럼 maven -> compile 더블클릭 했는데, 잘 돌던중 에러한줄이 뜹니다. /Users/jjeoV/Desktop/jjeoV/인프런/keesun/studyolle-master 2/target/classes/static/node_modules/.bin/jdenticon jdenticon 파일이 없는건가요? 그냥 딸랑 경로하나뜨니까 뭔지 잘 몰르겠네요. 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 생성 메서드를 만드는 경우는 본인이 정하는 걸까요 .. ? item 생성 할 때처럼 간단한 경우는 생성메서드를 만들지 않고 orderItem 생성 시와 같이 복잡한 코드의 경우에만 미리 생성 메서드를 만들어 놓는건지 어떤 경우에 생성 메서드를 만들어 놓는지 강의를 봐도 감이 안 잡혀서요 .. 어떤 경우에 생성 메서드를 사용하는 것이 좋은 경우인지 설명해주실 수 있을까용 .. 추가로 orderitem을 생성하는 createOrderItem 메서드를 만들고 createOrder시에 createOrderItem으로 생성한 orderItem을 사용하는 걸까요 ? 혹 뒷부분 강의에 해당 내용이 나온다면 이 부분은 답변 생략해주셔도 됩니다 .!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. https://drive.google.com/file/d/1nLOWIWG70W2LLqY0cjC4kcInxZn-bHD2/view?usp=sharing 압축 파일 올렸습니다. 초기에 실행했을 때는 문제 없이 잘 실행되다가 특정 시점 이후부터는 계속 "java.lang.IllegalStateException: Failed to load ApplicationContext" 이 에러가 발생하면서 실행이 되지 않습니다...
SpringBoot를 초기화하는 클래스를 살펴보면 BeanPostProcessor 이후 톰캣을 생성하고 톰캣의 dispatcherServlet에 AnnotationApllicationContext를 주입하는 것을 볼 수 있었습니다. 그리고 스프링 부트를 사용한 이후에는 빈을 주입 받을 필요가 있는 필터에 대해서 이제는 DelegatingFilterProxy를 사용 할 필요가 없고 필터 또한 빈으로 등록이 가능하다는 것을 볼 수 있었는데요. 개인적인 추론으로는 DispatcherServlet이 이미 초기화가 완료된 ApplicationContext를 알고 있고 이에 따라 Filter 등록 시 다음과 같은 과정이 가능해진건지... 제 기억상으로는 웹 요청-> WAS -> 서블릿 컨테이너 -> 필터 순서로 기억을 하고 있는데 스프링 부트 애플리케이션 내부로 WAS가 들어오게 되면서 이러한 일들이 가능해진걸까요??
안녕하세요. 좋은 강의 잘 보고 있습니다. 토비님이 저술하신 토비의 스프링 3.1의 내용을 보면 BeanFactoryPostProcessor를 구현한PropertySourcesPlaceholderConfigure를 Bean으로 등록할 때는 static 메소드를 통해 등록해야 한다고 봤었습니다. 현재 보고 있는 스프링 부트 강의에서는 이를 일반 메소드로 등록하셔서 사용하시던데, 스프링 부트에서는 static 메소드로 등록하지 않아도 문제가 없을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] MemberRepository /** * JPA Hint */ @QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true")) Member findReadOnlyByUsername(String username); test @Test @Rollback(false) void findReadOnlyByUsername() { // given memberRepository.save(new Member("member1", 10)); em.flush(); em.clear(); // when Member member = memberRepository.findReadOnlyByUsername("member1"); // 쿼리힌트로 readonly 설정 member.setUsername("member2"); em.flush(); // update 쿼리가 나가지 않음 em.clear(); System.out.println("member.getUsername() = " + member.getUsername()); } 영한님이 설명해주신대로 update 쿼리가 나가지 않아서 실제 DB 상에는 member2 가 아닌 member1 이 들어가있음을 확인했습니다 그리고 em.clear() 로 영속성컨텍스트를 초기화 한 후, member 의 username 을 찍어봤는데 member2 가 찍히더라구요 저는 영속성 컨텍스트를 초기화했으므로, member 조회 시 DB 에서 가져오므로 member1 이 찍힐 것이라고 생각했는데 제 생각이 틀린 건가요? 아래는 출력로그 입니다 2023-08-14 17:17:17.797 INFO 15063 --- [ main] p6spy : 23.08.14 17:17:17 | OperationTime 4 ms | statement | connection 3 select member0_.member_id as member_i1_0_, member0_.age as age2_0_, member0_.team_id as team_id4_0_, member0_.username as username3_0_ from member member0_ where member0_.username='member1' member.getUsername() = member2
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. MemberApiController 수정시 /** * 수정 */ @PutMapping("/api/v2/members/{id}") public UpdateMemberResponse updateMemberV2(@PathVariable("id") Long id, @RequestBody @Valid UpdateMemberRequest request) { memberService.update(id, request.getName()); Member findMember = memberService.findOne(id); return new UpdateMemberResponse(findMember.getName(), findMember.getId()); } @Data static class UpdateMemberRequest{ private String name; } @Data @AllArgsConstructor static class UpdateMemberResponse{ private String name; private Long id; } 수정할때 PathVariable로 url주소에서 맵핑하셨는데 그냥 @PutMapping(""/api/v2/members/")로 하고, UpdateMemberRequest 클래스에서 id를 필드로 추가한 후 @PutMapping("/api/v2/members") public UpdateMemberResponse updateMemberV2( @RequestBody @Valid UpdateMemberRequest request) { memberService.update(request.getId(), request.getName()); Member findMember = memberService.findOne(request.getId()); return new UpdateMemberResponse(findMember.getName(), findMember.getId()); } memberService.update(id, request.getName()); 가 아닌 memberService.update(request.getId(), request.getName()); id를 PathVariable로 받지말고, request에서 받아서 설계해도 될까요? PathVariable을 사용하는 이유가 궁금합니다.
강의에서는 아래와 같이 select 쿼리를 이용해 업데이트 된 회원을 조회후 response로 전달해 주었는데 @PutMapping("/api/v2/members/{id}") public UpdateMemberResponse updateMemberV2(@PathVariable("id") Long id, @RequestBody @Valid UpdateMemberRequest request) { memberService.update(id,request.getName()); Member findMember = memberService.findOne(id); return new UpdateMemberResponse(findMember.getId(), findMember.getName()); } 아래와 같이 하지 않은 이유가 있을까요?? @PutMapping("/api/v2/members/{id}") public UpdateMemberResponse updateMemberV2(@PathVariable("id") Long id, @RequestBody @Valid UpdateMemberRequest request) { memberService.update(id, request.getName()); return new UpdateMemberResponse(id, request.getName()); }
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요? 어제부터 계속 시도해보는데 해결되지 않아 질문 드립니다.. JPA와 DB 설정, 동작 확인 강의에서, Test를 실행하려는데 아래와 같은 에러가 발생합니다. 에러를 해결해보기 위해 여기 질문게시판을 찾아보았으나, 저와 상관 없는 사유였거나 해당 솔루션으로 해결되지 않았습니다... H2 실행한 상태이고, jpashop.mv .db도 생성된 상태입니다. Junit 4이고, 원래는 5였는데 선생님께서 진행하신 버전이 4라서 다시 삭제하고 재생성하여 진행하였습니다. H2 버전 2.1.214로 낮춰보라는 글도 있어 전부 삭제 후 다시 설치하여 db 다시 생성해보았기도 했는데 실패하였습니다.. 아래는 에러코드 전문이며, 제 코드는 Google Drive에 올려 URL로 달아두었습니다.. 도와주시면 감사하겠습니다. Google Drive: https://drive.google.com/drive/folders/1ZKGI6dlldF4RAEfNdmaRrFlmBxTatQww?usp=sharing <에러코드> java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@79fd6f95 testClass = jpabook.jpashop.MemberRepositoryTest, locations = [], classes = [jpabook.jpashop.JpashopApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties .PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@3f197a46, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@50b472aa, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4facf68f, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@243c4f91, org.springframework.boot.test.context.SpringBootTestAnnotation@83724131], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext( DefaultCacheAwareContextLoaderDelegate.java:143 ) at org.springframework.test.context.support .DefaultTestContext.getApplicationContext( DefaultTestContext.java:127 ) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary( ServletTestExecutionListener.java:191 ) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance( ServletTestExecutionListener.java:130 ) at org.springframework.test.context.TestContextManager.prepareTestInstance( TestContextManager.java:241 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest( SpringJUnit4ClassRunner.java:228 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall( SpringJUnit4ClassRunner.java:289 ) at org.junit.internal.runners.model.ReflectiveCallable.run ( ReflectiveCallable.java:12 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock( SpringJUnit4ClassRunner.java:291 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild( SpringJUnit4ClassRunner.java:247 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild( SpringJUnit4ClassRunner.java:97 ) at org.junit.runners.ParentRunner$4.run( ParentRunner.java:331 ) at org.junit.runners.ParentRunner$1.schedule( ParentRunner.java:79 ) at org.junit.runners.ParentRunner.runChildren( ParentRunner.java:329 ) at org.junit.runners.ParentRunner.access$100( ParentRunner.java:66 ) at org.junit.runners.ParentRunner$2.evaluate( ParentRunner.java:293 ) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate( RunBeforeTestClassCallbacks.java:61 ) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate( RunAfterTestClassCallbacks.java:70 ) at org.junit.runners.ParentRunner$3.evaluate( ParentRunner.java:306 ) at org.junit.runners.ParentRunner.run ( ParentRunner.java:413 ) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run ( SpringJUnit4ClassRunner.java:191 ) at org.junit.runner.JUnitCore.run ( JUnitCore.java:137 ) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs( JUnit4IdeaTestRunner.java:69 ) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute( IdeaTestRunner.java:38 ) at com.intellij.rt.execution.junit.TestsRepeater.repeat( TestsRepeater.java:11 ) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs( IdeaTestRunner.java:35 ) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart( JUnitStarter.java:235 ) at com.intellij.rt.junit.JUnitStarter.main( JUnitStarter.java:54 ) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberRepository': Injection of persistence dependencies failed at org.springframework.orm.jpa.support .PersistenceAnnotationBeanPostProcessor.postProcessProperties( PersistenceAnnotationBeanPostProcessor.java:388 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.populateBean( AbstractAutowireCapableBeanFactory.java:1416 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.doCreateBean( AbstractAutowireCapableBeanFactory.java:597 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBean( AbstractAutowireCapableBeanFactory.java:520 ) at org.springframework.beans.factory.support .AbstractBeanFactory.lambda$doGetBean$0( AbstractBeanFactory.java:326 ) at org.springframework.beans.factory.support .DefaultSingletonBeanRegistry.getSingleton( DefaultSingletonBeanRegistry.java:234 ) at org.springframework.beans.factory.support .AbstractBeanFactory.doGetBean( AbstractBeanFactory.java:324 ) at org.springframework.beans.factory.support .AbstractBeanFactory.getBean( AbstractBeanFactory.java:200 ) at org.springframework.beans.factory.support .DefaultListableBeanFactory.preInstantiateSingletons( DefaultListableBeanFactory.java:973 ) at org.springframework.context.support .AbstractApplicationContext.finishBeanFactoryInitialization( AbstractApplicationContext.java:942 ) at org.springframework.context.support .AbstractApplicationContext.refresh( AbstractApplicationContext.java:608 ) at org.springframework.boot.SpringApplication.refresh( SpringApplication.java:734 ) at org.springframework.boot.SpringApplication.refreshContext( SpringApplication.java:436 ) at org.springframework.boot.SpringApplication.run ( SpringApplication.java:312 ) at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3( SpringBootContextLoader.java:137 ) at org.springframework.util.function.ThrowingSupplier.get( ThrowingSupplier.java:58 ) at org.springframework.util.function.ThrowingSupplier.get( ThrowingSupplier.java:46 ) at org.springframework.boot.SpringApplication.withHook( SpringApplication.java:1406 ) at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run( SpringBootContextLoader.java:545 ) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext( SpringBootContextLoader.java:137 ) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext( SpringBootContextLoader.java:108 ) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal( DefaultCacheAwareContextLoaderDelegate.java:187 ) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext( DefaultCacheAwareContextLoaderDelegate.java:119 ) ... 27 more Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'jakarta.persistence.EntityManagerFactory' available at org.springframework.beans.factory.support .DefaultListableBeanFactory.resolveNamedBean( DefaultListableBeanFactory.java:1247 ) at org.springframework.orm.jpa.support .PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory( PersistenceAnnotationBeanPostProcessor.java:593 ) at org.springframework.orm.jpa.support .PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory( PersistenceAnnotationBeanPostProcessor.java:557 ) at org.springframework.orm.jpa.support .PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager( PersistenceAnnotationBeanPostProcessor.java:724 ) at org.springframework.orm.jpa.support .PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject( PersistenceAnnotationBeanPostProcessor.java:697 ) at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject( InjectionMetadata.java:270 ) at org.springframework.beans.factory.annotation.InjectionMetadata.inject( InjectionMetadata.java:145 ) at org.springframework.orm.jpa.support .PersistenceAnnotationBeanPostProcessor.postProcessProperties( PersistenceAnnotationBeanPostProcessor.java:385 ) ... 49 more
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 다름이 아니라 강의를 전부 다 보고 궁금한 점이 있어서 질문드립니다. 기존에는 MemoryMemberRepository 에 대한 unit test 를 진행 했는데 Jpa로 변경한 후에는 각각에 대해 어떤식으로 unit test 를 진행 해야되는지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] header.html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head th:fragment="header"> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink- to-fit=no"> <!-- <!– Bootstrap CSS –>--> <!-- <link rel="stylesheet" href="/css/bootstrap.min.css" integrity="sha384- --> <!-- ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"--> <!-- crossorigin="anonymous">--> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/5.3.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">> <!-- Custom styles for this template --> <link href="/css/jumbotron-narrow.css" rel="stylesheet"> <title>Hello, world!</title> </head> 현재 header.html 파일 코드는 이렇게 되어 있습니다. 부트스트랩 버전이 강의와 다르면 점보트론 적용이 잘 안 된다는 이야기가 있어서 호환을 위해 기존 코드는 주석 처리 하고 <!-- <!– Bootstrap CSS –>--> <!-- <link rel="stylesheet" href="/css/bootstrap.min.css" integrity="sha384- --> <!-- ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"--> <!-- crossorigin="anonymous">--> 새로운 코드를 붙여넣었습니다. <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/5.3.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">> 가운데 정렬이 안 되는 이유가 뭔지 알고 싶습니다..
Page 방식에서 api response 를 줄 때 엔티티-> DTO 변환은 Page 인터페이스에서 지원하는 map 을 이용하는 것이라고 이해했습니다. Slice 인터페이스의 스펙에는 map 함수가 없던데 Slice 를 사용할 때 엔티티-> DTO 변환은 어떻게 해야 하나요?