묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
SecurityFilterChain 서블릿 매핑 오류 관련...
@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{return http.authorizeHttpRequests().requestMatchers("/auth/login").permitAll() .anyRequest().authenticated() .and().csrf(AbstractHttpConfigurer::disable) .build(); }기존의 강의에 나온 위 코드를 실행하게 되면, This is because there is more than one mappable servlet in your servlet context: {org.springframework.web.servlet.DispatcherServlet=[/], org.h2.server.web.JakartaWebServlet=[/h2-console/*]}.위와 같은 DispatcherServlet과 h2-console의 서블릿이 하나 이상 매핑되어 나는 오류라고 나옵니다.@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http, HandlerMappingIntrospector introspector) throws Exception{ http.authorizeHttpRequests((authz) -> { try { authz .requestMatchers(new MvcRequestMatcher(introspector,"/auth/login")).permitAll() //애는 권한 없이도 허용 .anyRequest().authenticated() //나머지는 인증해 .and() //csrf쪽으로는 builder가 이어지지 않기 때문에 and로 이어준다. .csrf(AbstractHttpConfigurer::disable); } catch (Exception e) { throw new RuntimeException(e); } }); return http.build(); }그래서 검색 결과 위와 같이 작성하게 되면 정상적으로 실행되게 됩니다.- 질문제가 코드를 기존에 SecurityFilterChain 외 잘못 작성한 부분이 존재해서 위와 같이 코드를 작성해야 하는 것인지, 아니면 그 사이에 이렇게 작성되도록 변경된 것인지 앞으로도 지속적으로 검색해보겠지만... 현재까진 답을 찾지 못해 질문드립니다.2. h2-console의 경우 데이터베이스 관련 서블릿이고, DispatcherServlet은 웹 애플리케이션의 컨트롤러 역할을 하는 서블릿인걸로 알고 있는데 용도가 다른 두 서블릿의 매핑 혼동이 일어나는 이유가 궁금합니다...*무지한 한 생명체의 질문은 천천히 쾌차하시고 삶의 여유를 되찾으신 다음 답변해주시면 감사하겠습니다!
-
미해결스프링 시큐리티
3) 어노테이션 권한 설정 - @PreAuthorize, @PostAuthorize, @Secured, @RolesAllowed 강의 브랜치 오류
안녕하세요강의명-소스브랜치 정리한 엑셀 파일에서3) 어노테이션 권한 설정 - @PreAuthorize, @PostAuthorize, @Secured, @RolesAllowed 강의의 브랜치명이 ch05-9가 아니라 ch05-8인것 같습니다. Account 클래스의 userRoles에 붙은 어노테이션이 8에서 9로 넘어갈때 달라져서 강의 내용이 재연이 안됩니다.확인 부탁드립니다.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
이미지 경로 저장, 로직 문의
profileImage 를 저장할때 엄청 긴 값을 저장 시키는데막상 DB를 보면 이런값이 있는데이건 스프링 부트가 알아서 변환 시켜주는건가요 ?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
autocomplete 질문
질문 1 안녕하세요 강의 재밌게 잘 보고있습니다.ajax 하실때 저 부분은 왜 넣어주신건가요 ? autocomplete: {enabled: true,rightKey: true,}, 이코드는 무슨 이유 때문에 쓰신건지 궁금합니다 ! 혹시 ajax 부분이 아니라 여기에 추가 시키는게 아닌가요 ?!? 질문 2설정 해주신 부분중에application.properties 에는 spring.profiles.active=local를 추가시켜주셨고 인텔리제이 기능으로 Actice profiles : dev 를 주셨는데 한쪽은 local 로 세팅다른 한쪽은 dev 최종 dev가 적용이 된거같은데그럼 인텔리제이 에서 세팅(Edit Configuration Settings)한 부분이 더 우선 순위가 높다고 생각하면 되는건가요?
-
미해결스프링 부트 - 핵심 원리와 활용
사이드 프로젝트를 만드려고 하는데 어느편까지 봐야할까요?
사이드 프로젝트를 만드려고 하는데 어느편까지 보고 만드는게 좋을까요?강의를 다 듣고 사이드 하기에는 좀 늦을 것 같아서...
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
lombok 관련 오류입니다
BookService에서 @RequiredArgsConstructor을 설정하면책 대출, 책 반납 등 BookRepository를 사용하는 코드에서 에러가 발생합니다. 오류 메시지는 "this.bookRepository" is null입니다. BookService에서 bookRepository가 받아오지 못하는 것 같습니다.또한, 해당 어노테이션을 지운 후 생성자로 변경하면, 코드는 정상적으로 돌아가게 됩니다. Lombok의 문제인 건지, 코드의 특정 부분을 설정하면 되는 것인지 궁금합니다.
-
미해결토비의 스프링 부트 - 이해와 원리
스프링 검색 유입 경로 pc or 모바일 구분 방법 문의 드립니다
안녕하세요~ 토비님 참여중인 프로젝트가 현재 포탈 사이트 성격입니다 해당프로젝트에서 커뮤니티 기능이 있는데커뮤니티 기능 중에 접속 유입 경로를 따져통계 조회를 해야 하는 기능이 있습니다 개발하는 커뮤니티에 pc 로 접속 할 수 있고 모바일로 접속 할 수 있습니다 PC or 모바일 중어느 기기를 통해서 해당 포탈 커뮤니티에 접속해서 검색했는지따질려면 스프링의 어느 기술 라이브러리를이용해서 따지면 되는지 문의 드립니다감사합니다 수고하세요. 김동희 드림 #sping#스프링#pc#모바일#접속 #구분
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
38강 Cannot load driver class: org.h2.driver
안녕하십니까. 다름이 아니라 profile을 local로 실행 시 오류가 나서 질문을 드립니다. 인텔리제이 Community 버전이라서VM option 추가 후, -Dspring.profiles.active=local를 입력헀습니다. 실행을 할때 local 프로필이 활성화가 되었다고 하지만 오류가 발생합니다. VM option이 잘못된건가 싶어서-Dspring.profiles.active=dev로 설정 시 MySQL이 정상적으로 작동합니다.즉 h2관련 코드를 제가 잘못작성했거나 아니면 다른이유로 오류가 발생한다는건데 문제점을 제대로 파악을 하기가 힘들어서 질문을 드립니다. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: org.h2.driverCaused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: org.h2.driverCaused by: java.lang.IllegalStateException: Cannot load driver class: org.h2.driverExecution failed for task ':LibraryAppApplication.main()'.> Process 'command 'C:/Program Files/Java/jdk-17/bin/java.exe'' finished with non-zero exit value 1* 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.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
in 최적화에서 궁금한 점
new 오퍼레이션을 써서 List<OrderItemQueryDto>을jpql로 가져온 부분에서 말인데요..첫 번 째에서 in :여기서 띄우고 값을 넣으면 매개 값을 인식을 못 하는 거 같더라구요 두 번째는 쿼리가 잘 나가구요 혹시 정확한 이유를 알 수 있을까요?where oi.order.id in : orderIdswhere oi.order.id in :orderIds
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
31:04 부분 "select o from Order o" 만 했을 경우 결과값
2023-10-09T19:14:55.542+09:00 INFO 2455 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2023-10-09T19:14:55.542+09:00 INFO 2455 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2023-10-09T19:14:55.542+09:00 INFO 2455 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms 2023-10-09T19:14:55.660+09:00 DEBUG 2455 --- [nio-8080-exec-1] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 offset ? rows fetch first ? rows only 2023-10-09T19:14:55.662+09:00 INFO 2455 --- [nio-8080-exec-1] p6spy : #1696846495662 | took 0ms | statement | connection 7| url jdbc:h2:tcp://localhost/~/jpanew select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 offset ? rows fetch first ? rows only select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 offset 0 rows fetch first 100 rows only; 2023-10-09T19:14:55.668+09:00 DEBUG 2455 --- [nio-8080-exec-1] org.hibernate.SQL : select m1_0.member_id, m1_0.city, m1_0.street, m1_0.zipcode, m1_0.name from member m1_0 where array_contains(?,m1_0.member_id) 2023-10-09T19:14:55.672+09:00 INFO 2455 --- [nio-8080-exec-1] p6spy : #1696846495672 | took 0ms | statement | connection 7| url jdbc:h2:tcp://localhost/~/jpanew select m1_0.member_id,m1_0.city,m1_0.street,m1_0.zipcode,m1_0.name from member m1_0 where array_contains(?,m1_0.member_id) select m1_0.member_id,m1_0.city,m1_0.street,m1_0.zipcode,m1_0.name from member m1_0 where array_contains('ar0: ARRAY [CAST(1 AS BIGINT), CAST(2 AS BIGINT)]',m1_0.member_id); 2023-10-09T19:14:55.674+09:00 DEBUG 2455 --- [nio-8080-exec-1] org.hibernate.SQL : select d1_0.id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status from delivery d1_0 where array_contains(?,d1_0.id) 2023-10-09T19:14:55.674+09:00 INFO 2455 --- [nio-8080-exec-1] p6spy : #1696846495674 | took 0ms | statement | connection 7| url jdbc:h2:tcp://localhost/~/jpanew select d1_0.id,d1_0.city,d1_0.street,d1_0.zipcode,d1_0.status from delivery d1_0 where array_contains(?,d1_0.id) select d1_0.id,d1_0.city,d1_0.street,d1_0.zipcode,d1_0.status from delivery d1_0 where array_contains('ar1: ARRAY [CAST(1 AS BIGINT), CAST(2 AS BIGINT)]',d1_0.id); 2023-10-09T19:14:55.676+09:00 DEBUG 2455 --- [nio-8080-exec-1] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=? 2023-10-09T19:14:55.677+09:00 INFO 2455 --- [nio-8080-exec-1] p6spy : #1696846495677 | took 0ms | statement | connection 7| url jdbc:h2:tcp://localhost/~/jpanew select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=? select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=1; 2023-10-09T19:14:55.677+09:00 DEBUG 2455 --- [nio-8080-exec-1] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=? 2023-10-09T19:14:55.678+09:00 INFO 2455 --- [nio-8080-exec-1] p6spy : #1696846495678 | took 0ms | statement | connection 7| url jdbc:h2:tcp://localhost/~/jpanew select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=? select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=2; 2023-10-09T19:14:55.680+09:00 DEBUG 2455 --- [nio-8080-exec-1] org.hibernate.SQL : select o1_0.order_id, o1_0.order_item_id, o1_0.count, o1_0.item_id, o1_0.order_price from order_item o1_0 where array_contains(?,o1_0.order_id) 2023-10-09T19:14:55.686+09:00 INFO 2455 --- [nio-8080-exec-1] p6spy : #1696846495686 | took 5ms | statement | connection 7| url jdbc:h2:tcp://localhost/~/jpanew select o1_0.order_id,o1_0.order_item_id,o1_0.count,o1_0.item_id,o1_0.order_price from order_item o1_0 where array_contains(?,o1_0.order_id) select o1_0.order_id,o1_0.order_item_id,o1_0.count,o1_0.item_id,o1_0.order_price from order_item o1_0 where array_contains('ar2: ARRAY [CAST(1 AS BIGINT), CAST(2 AS BIGINT), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL]',o1_0.order_id); 2023-10-09T19:14:55.687+09:00 DEBUG 2455 --- [nio-8080-exec-1] org.hibernate.SQL : select i1_0.item_id, i1_0.dtype, i1_0.name, i1_0.price, i1_0.stock_quantity, i1_0.artist, i1_0.etc, i1_0.author, i1_0.isbn, i1_0.actor, i1_0.director from item i1_0 where array_contains(?,i1_0.item_id) 2023-10-09T19:14:55.688+09:00 INFO 2455 --- [nio-8080-exec-1] p6spy : #1696846495688 | took 0ms | statement | connection 7| url jdbc:h2:tcp://localhost/~/jpanew select i1_0.item_id,i1_0.dtype,i1_0.name,i1_0.price,i1_0.stock_quantity,i1_0.artist,i1_0.etc,i1_0.author,i1_0.isbn,i1_0.actor,i1_0.director from item i1_0 where array_contains(?,i1_0.item_id) select i1_0.item_id,i1_0.dtype,i1_0.name,i1_0.price,i1_0.stock_quantity,i1_0.artist,i1_0.etc,i1_0.author,i1_0.isbn,i1_0.actor,i1_0.director from item i1_0 where array_contains('ar3: ARRAY [CAST(1 AS BIGINT), CAST(2 AS BIGINT), CAST(3 AS BIGINT), CAST(4 AS BIGINT)]',i1_0.item_id); 이 결과값에서 강의랑 다른 부분이 있어서 질문 드립니다하이버네이트 6.2 라서 array_contains 인거 아는데 아래 부분이 이해가 안됩니다. select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=? 2023-10-09T19:14:55.677+09:00 INFO 2455 --- [nio-8080-exec-1] p6spy : #1696846495677 | took 0ms | statement | connection 7| url jdbc:h2:tcp://localhost/~/jpanew select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=? select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=1; 2023-10-09T19:14:55.677+09:00 DEBUG 2455 --- [nio-8080-exec-1] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=? 2023-10-09T19:14:55.678+09:00 INFO 2455 --- [nio-8080-exec-1] p6spy : #1696846495678 | took 0ms | statement | connection 7| url jdbc:h2:tcp://localhost/~/jpanew select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=? select o1_0.order_id,o1_0.delivery_id,o1_0.member_id,o1_0.order_date,o1_0.status from orders o1_0 where o1_0.delivery_id=2;orders 를 처음에 조회하고 나서 또 추가적으로 o1_0.delivery_id=?이걸로 조회하는 결과가 왜 생기는걸까요?..(배치사이즈도 강의랑 똑같이 100입니다) OrderApiController.java@GetMapping("/api/v3.1/orders") public List<OrderDto> ordersV3_page(@RequestParam(value ="offset",defaultValue = "0") int offset, @RequestParam(value ="limit",defaultValue = "100") int limit) { List<Order> orders = orderRepository.findAllWithMemberDelivery(offset,limit); List<OrderDto> result = orders.stream() .map(o -> new OrderDto(o)) .collect(Collectors.toList()); return result; } OrderRepository.java public List<Order> findAllWithMemberDelivery(int offset, int limit) { return em.createQuery( "select o from Order o" , Order.class ).setFirstResult(offset) .setMaxResults(limit) .getResultList(); }이렇게 바꾸고 난 이후에 일어난 결과입니당..강의랑 In말고도 추가적으로 다른 부분이 있어서 질문드립니다일단 제 스프링부트 버전은 3.1.3 입니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JPA 내부 동작 vs JPQL 또는 QueryDSL 내부 동작
JPQL는 데이터베이스에 SQL을 날려 데이터를 가져오지만 영속성 컨텍스트에 동일한 값이 있다면 DB에서 가져온 값을 버리게 되는데, QueryDSL은 내부적으로 JPQL을 사용하기 때문에, JPQL 처럼 DB 먼저 조회한 후 영속성 컨텍스트에 동일한 값이 있다면 DB에서 가져온 값을 버리게 되나요?1번과 같이 조회 상황이 아닌 수정, 삭제, 추가하는 경우에도 JPQL의 경우, 영속성 컨텍스트에 먼저 데이터를 수정, 삭제, 추가 하기 보다 DB에 먼저 쿼리를 날린 후에 영속성 컨텍스트에 반영하는건가요?JPA는 영속성 컨텍스트를 먼저 확인하는 거와 달리, JPQL은 DB 조회 부터 하는데, 어떤 이유 때문에 둘이 다르게 동작하는 걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
영속성 컨텍스트의 엔티티 동일성 보장
만약, 동일한 식별자로 엔티티를 조회하면, 조회할 때마다 동일한 인스턴스가 조회되어, 영속성 컨텍스트는 엔티티 동일성을 보장해준다고 하는데, 같은 트랜잭션이 아니더라도, 동일한 영속성 컨텍스트여도 동일성이 보장되나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Kafka 동기화 문제에 대해 질문이 있습니다.
항상 좋은 강의 감사합니다. 궁금한 점이 있어 질문을 남깁니다. Kafka를 이용해서 멀티 서버에서 하나의 DB를 사용하여 동시성 문제를 해결하는 것을 이해했습니다. 상품 제고가 0이 되면 더 이상 주문을 못하도록 하게 하고 싶습니다. 하지만 Kafka 요청을 통해 비동기로 주문을 하기 때문에 주문을 신청한 순간에는 재고가 있어 주문이 되었지만 Kafka의 모든 처리를 하고 나니 재고가 0이 되어 사실 주문할 수 없는 상황이었습니다. 이런 상황이 발생할 수도 있지 않나요??이럴 때는 어떻게 대처를 해야 하나요??쓰기 작업과 읽기 작업에서 동기화 문제는 어떻게 처리할 수 있나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
ip주소 질문
안녕하세요 강사님!현재 Users Microservice - JPA 부분을 들으면서 user등록까지 잘 해서 테이블에도 잘 나온 상태입니다.저는 client -> api gateway -> 유레카 -> user서비스이렇게 이해하고 있습니다.그리고 현재 집에 같은 와이파이로 연결된 데스크탑으로 (api gateway 역할을 하고 있다고 이해해도 될지 모르겠지만) discovery service를 올려놓았고요.노트북으로 user-service를 만들었습니다.노트북 브라우저로 유레카를 접근하고자 할 때에는 데스크탑 아이피 주소를 입력해서 접근했습니다. 여기까지는 이해가 잘 되었습니다. 그리고 이제 user를 등록하기 위해 postman의 ip주소를 입력하려고 유레카에서 user-service의 포트를 확인하기 위해 클릭하니 노트북 주소와 랜덤 포트가 나오더라고요! 그리고 그 주소로 api를 요청하니 잘 되었습니다. 여기서 질문입니다.모든 서비스는 api gateway를 거치는 것 아닌가요? 그렇다면 api gateway가 동작하고 있는 데스크탑 ip주소를 요청해야하는거 아닌가요? 추가질문으로 환경설정에서 0을 해서 포트가 랜덤으로 설정하게 하시는 이유가 궁금합니다!자세하고 쉽게 설명해주시기 위해 강의 준비해주셔서 감사합니다:)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
주문 조회 최적화 테스트 중 트랜잭션에 관하여 질문
지금 주문 조회 최적화 테스트에서 @트랜잭션 어노테이션을 안붙히고 사용 중인데조회 최적화만 해서 안붙힌건가요? 만약에 insert 나 update 테스트를 했더라면 commit을 해줘야 하기 때문에 @트랙잭션을붙혀야 되는거죠.?
-
미해결스프링 시큐리티 OAuth2
keycloak 연동 (클라이언트 앱 시작하기 - application.yml)
아래 사진과 같이 yml 파일을 작성했는데, keycloak 로그인 폼이 적용이 안되고 기존 로그인 폼이 나옵니다.(프로그램 실행 시 기존처럼 비밀번호가 출력되고 해당 비밀번호로 id pw 입력하여 로그인하면 index 화면이 나오는 상황입니다.)keycloak과 연동 문제인 듯 한데, keycloak 인가서버 도메인과 관련되어있는 것 일까요?혹은, keycloak 연동을 위해 build.gradle 같은 곳에 추가 설정해 줘야 하는 부분이 있을 까요? 참고로 build.gradle은 아래 사진과 같고,종속성 'org.springframework.boot:spring-boot-starter-oauth2-client' 추가해 준 상태 입니다.
-
해결됨스프링 부트 웹 개발 입문 - 따라하며 배우기
DB 생성시 발생 에러 관련! "Can't create table" "Error No 150. "Foreign key constraint is incorrectly formed")
선생님께서 올려주신 SQL 문 기준으로 확인해보니 하기와 같습니다.SQL 문에서 order_list 테이블에는 VARCHAR(100) 타입의 cust_id 열이 있으며, 이것은 cust_info 테이블의 cust_id 열을 참조하려고 합니다. 이 cust_id 열도 VARCHAR(100) 타입입니다. 따라서 데이터 유형이 일치하므로 이건 패스...그러나 외래 키에는 기본적인 규칙이 있고, 해당 규칙은: 참조하려는 열(상위 테이블의)은 고유 제약 조건을 가져야 하거나 기본 키여야 합니다. cust_info 테이블에서 cust_id 열은 고유 제약 조건이 없습니다.이 문제를 해결하려면 cust_info 테이블의 cust_id 열에 고유 제약 조건을 추가해야 합니다. 다음과 같이 할 수 있습니다:ALTER TABLE cust_info ADD UNIQUE (cust_id);위의 문장을 실행한 후 외래 키를 추가하기 위해 ALTER TABLE 문을 실행할 수 있습니다:ALTER TABLE order_list ADD CONSTRAINT fk_cust_id FOREIGN KEY (cust_id) REFERENCES cust_info(cust_id);이 단계를 거치면 해당 제약 조건에 대한 "Foreign key constraint is incorrectly formed" 오류를 더 이상 만나지 않아야 합니다. 즉 cust_info의 cust_id를 유니크 상태로 만들고 나서 늦부장님께서 올려주신 DB작성하면 해결 됩니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Hibernate5Module 관련 질문
Hibernate5Module 애가 빈으로 등록되어 있기 때문에아래 코드에서 프록시 객체인 상태를 getUsername()로 프록시 초기화 시켜 바로 api로 반환 가능한건가요? List<Order> all = orderRepository.findAllByCriteria(new OrderSearch()); for (Order order : all) { order.getMember().getUsername(); } return all; }
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
@ConfigurationProperties 사용 시 질문 드립니다.
제가 아직 초보 개발자라 막연히 setter 사용은 지양하는게 좋다고 배워서 실무에서는 다른지 궁금합니다.setter 를 열어두면 빈으로 등록된 AppConfig 의 불변성을 보장할 수 없게 되는게 아닌가 해서 질문드립니다.https://mangkyu.tistory.com/189위 블로그를 보면 @ConfigurationProperties 를 setter 없이 생성자로 할 수도 있는것 같아서요.혹시 제가 너무 setter 사용을 지양하라는 말에 매몰돼있는건 아닐까 고민도 되네요.
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
int i = menuService.doInsert(coffee,kind,price); 이 코드 질문있어요
혹시 변수타입이 왜 int인지 알 수 있을까요?