묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
예외처리 질문
안녕하십니까, 현재 섹션3까지 수강하였는데 예외처리에 대해 궁금한 점이 생겨 질문드립니다.아직 예외상황 발생시 백엔드와 프론트엔드에서 무엇을 해야할 지 잘 모르겠는데 예외가 발생했을때 백엔드에서는 어떤 정보를 넘겨줘야하나요? 강의에서처럼 상태코드와 메시지만 넘겨주면 백엔드에서 할 일은 끝인가요?마찬가지로 프론트에서도 어떻게 대처하는지 궁금합니다.
-
미해결백엔드 개발자 성능 개선 초석 다지기
EhCacheManagerFactoryBean
그레이들 추가후 EhCacheConfig 만들때 EhCacheManagerFactoryBean를 죽어도 못찼네요(Cannot resolve symbol 'EhCacheManagerFactoryBean')invalicache , rebuild , clean build 등등 해봤지만 소용이 없는데 혹시 다른데 더 체크해야할 부분이 있을까요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
섹션1 빌드하고 실행하기
강의자료 보면서 윈도우로 cmd에서 빌드하는 법 보면서 하려고 하는데 이렇게 됩니다. 도움 부탁드립니다.그리고 강사님이 ll이라는 명령어를 쓰시는데 저는 그것도 입력하면 위랑 똑같이 나와서 그 명령어에 대해서도 설명 부탁드립니다. 윈도우는 다른 명령어를 쓰는 걸까요..? 그리고 1분 45초 부분에서 "꺼볼게요" 하고 끄시는데 끄는 방법 자세히 알려주시면 감사하겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 필드 순서에 대해 질문드립니다.
@Entity @Table(name = "orders") @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) // @ManyToOne @JoinColumn(name = "member_id") private Member member; @JsonIgnore @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); @JsonIgnore @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) // @OneToOne @JoinColumn(name = "delivery_id") private Delivery delivery; private LocalDateTime orderDate; //주문시간 @Enumerated(EnumType.STRING) private OrderStatus status; //주문상태 [ORDER, CANCEL] 이렇게 작성하면 보면 h2에서 필드에 작성한대로 id ||member || delivery 이렇게 나와야 하는데저는 member || delivery ||id 이렇게 나 순서가 보장되지 않게 나옵니다.인터넷에 찾아보니 엔티티 필드 순서가 데이터베이스의 컬럼 순서를 결정하지 않기 때문에 schema-generation.scripts.create-target을 주어야 한다고 나와있는데 해당 강의 코드를 보아도 저런 걸 설정하지 않았는데 강의에서는 어떻게 필드가 순서가 보장이 되었나요?1번답변을 https://www.inflearn.com/questions/17359/hbm2ddl-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%83%9D%EC%84%B1%EC%8B%9C-%EC%BB%AC%EB%9F%BC-%EC%88%9C%EC%84%9C-%EC%88%98%EC%A0%95-%EB%B0%A9%EB%B2%95여기서 찾았는데요. 실무에서는 ddl을 직접입력하라는건데요. 그런데 궁금한점이 실무에서는 fechjoin이나 joincolum을 안쓰나요? ddl을 입력하는거면 joincolum(외래키)까지 같이입력하는거 아닌가요? 2. @ManyToOne 컬럼에서 조인할 때 데이터 테이블명을 기준으로 조인하고 OneToMany는 mappedBy 할 때 클래스명을 기준으로 하는것처럼 보입니다. 혹시 이유 좀 알 수 있나요? OneToMany에서 자기 자신을 바라봐서 mapped by여도 참조는 둘다 똑같이 클래스로 들어가거나 테이블명으로 들어가야 하는거 아닌가요?3.엔티티 설계시 주의점 24분에서 질문이있습니다. 아래처럼 연관관계 메소드는 중심이 되는지점에 입력하라고 하셨는데요. member 메소드에는 왜 getOrders() 에서 add()이고 orderItem은 왜 그냥 add(orderItem);만 붙나요? 저는 orders가 리스트라서 getOrders로 붙이는 줄 알았는데 orderItems도 리스트라서요. 그리고 orderItem에서 가르키는 this는 무엇인가요? 매소드 내에서 this가 없어요. this 우선순위가 메소드 내부에 this가 있을 때 this를 지칭하고 나머지는 클래스를 지칭하는건가요?// setMember 메서드는 Order 객체에 Member 객체를 연결하고, 역방향으로도 Member의 주문 목록에 이 Order를 추가합니다. public void setMember(Member member) { // 현재 Order 객체의 member 필드에 매개변수로 받은 Member 객체를 할당합니다. this.member = member; // Member 객체의 getOrders 메서드를 호출해 주문 목록을 가져온 뒤, 현재 Order 객체(this)를 그 목록에 추가합니다. // 이는 Member 객체 내부의 주문 목록에도 현재 Order 객체가 포함되도록 하는 역방향 연결을 설정합니다. member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 설계시 주의점에대해서 질문있습니다.
class Order {@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)public class Member { @JsonIgnore @OneToMany(mappedBy = "member") private List<Order> orders = new ArrayList<>();엔티티 설계시 주의점 20분에서 21분사이에서 아래처럼 진행되기 때문에 cascade = CascadeType.ALL가 필요하다고 하셨는데요.persistence(orderitema)persistence(orderitemb)persistence(orderitemc)persistence(order)Member 도 @OneToMany인데 cascade를 왜 안하시나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew.bat build 오류
cmd 에 dir 하면 gradlew.bat이 있는데 빌드가 안됩니다.환경변수설정도 하고 JDK도 다시 깔았는데 안됩니다.
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
섹션 8 .. API서버에서 사용자 정보 추출하기(2) 질문입니다.
accessToken을 넘기는데 undefined가 떠서 컨트롤러에 오지 못하는 거 같습니다. socialcontroller 입니다. 리액트 kakaoAPI.js 입니다. accessToken을 쿼리스트링으로 잘 보내고받는 코드는 맞는거 같은데 왜 undefined가 뜨는지 모르겠습니다...
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
섹션1 프로젝트 생성의 13분 23초 부분
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]스프링 입문의 섹션 1 '프로젝트 생성' 강의 부분을 따라가고 있는데 막혀서 질문드립니다.자바 21을 설치하고 환경변수 설정하고 강의를 따라 13분 23초에 나온대로 일단 실행해보는 부분을 하려는데 자꾸만 빨간 글씨로 에러 메세지가 나와서 다음으로 넘어갈 수가 없습니다. 다른 질문들 찾아보고 구글링 해봐도 잘 모르겠습니다. 도움주시면 감사하겠습니다...!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
assertThat 윈도우 작동안됨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]assertThat은 작동이 안되는 것으로 나옵니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
kafka 와 redis pub/sub 비교
Redis 자체에 pub/sub 이라는 기능이 있는 걸로 알고있습니다.이 기능은 kafka 랑 동일한 동작을 하지 않을까 하는 생각이 들었는데요.. 현재 프로젝트에 kafka 대신 redis의 pub/sub 을 사용해서 부하를 줄일 수도 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
item엔티티에 질문있습ㄴ디ㅏ.
Item엔티티도 OrderItem과 (아이템기준)onetomany인데 왜 private List<OrderItem> orderItems = new ArrayList<>(); item에 이런문구를안넣어주나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
서비스 코드 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. > 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.7/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 6s3 actionable tasks: 1 executed, 2 up-to-date 이런 오류가 뜹니다.코드보다 설정 문제인 것 같은데 혹시 뭐가 문제일까요?
-
미해결토비의 스프링 부트 - 이해와 원리
다음 강의 오픈 일정 알 수 있을까요?
늦으면 4월이라고 하신 답변을 본 것 같은데 기다리고 있습니다!!
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
useParam() 사용 질문
학습을 하던 중 코드에 궁금중이 생겨 질문드립니다.현재 modifyPage.js를 보면 인자에 tno를 받아와 사용하고 있습니다.그리고 readPage.js에서는 useParam()을 이용해 tno 값을 받아와 사용하고있는걸 확인하고 readPage에서도 ModifyPage 에서 처럼 useParam()을 사용하지 않고 인자로 받아와 사용하는 방식으로 해보았는데 오류가 나는데 왜그런걸까요?위의 코드를이렇게 바꾸면 오류가 납니다.
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
MVC vs API
아 아까 MVC와 API의 차이에 대해 질문했었는데요...제가 그럼 프론트엔드 기술 (react, vue 등)을 모르는데 혼자 화면까지 나오는 프로젝트를 진행하고 싶다면 SSR인 템플릿 엔진을 이용한 MVC패턴으로 개발하는 게 더 나을까요??그러기엔 템플릿 엔진을 사용하더라도 JS나 css는 기본적으로 할 줄 알아야 할 거 같은데 ㅜㅜ혼자서는 무리겠죠??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
generate에 getter sectter이 없어요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이게 다예요alt + insert 도 눌러보고 마우스 우클릭하고 접근해봐도 게터섹터가 없네요
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
AuthenticationManager에 초기화에 대해 질문있습니다
@Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception { return configuration.getAuthenticationManager(); }위 처럼 Bean 으로 등록하게되면내부 메서드에서 Bean으로 등록된Builder를 통해 등록하는거 까지는 이해했는데요.근데 여기서 setShareObject와 같은게 없는데 return http.build();빌드하게되면 HttpSecurity 메서드의 @Override protected void beforeConfigure() throws Exception { if (this.authenticationManager != null) { setSharedObject(AuthenticationManager.class, this.authenticationManager); } else { ObservationRegistry registry = getObservationRegistry(); AuthenticationManager manager = getAuthenticationRegistry().build(); if (!registry.isNoop() && manager != null) { setSharedObject(AuthenticationManager.class, new ObservationAuthenticationManager(registry, manager)); } else { setSharedObject(AuthenticationManager.class, manager); } } } 가 호출되어 여기서else 조건을 타 getSharedObject 로 AuthenticationManagerBuilder 빌더 클래스를 다시 꺼내와서 빌드를 하는데 이렇게 되면 http.build 과정의 인증관리자와스프링컨테이너에 있는 인증관리자는서로 다른건가요? 같다면 우리가 등록한 Bean이 build 과정에서 나올것같은데못찾겠습니다 ㅠㅠ..
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
post userId 매칭
안녕하세요 강사님 좋은 강의 감사드립니다.post를 insert 할 때 user의 id가 post 의 user_id로 어떻게 매핑이 되어 db에 insert가 되는건지 궁금합니다.컬럼명을 따로 지정해준 것도 아닌데 어떻게 이렇게 매핑이 자동(?)으로 매핑이 되는 건가요?post 엔티티에서 setUser할 때 알아서 되는것일까요?확인해주시고 답변 주시면 감사드리겠습니다 !
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO 초기화 관련 질문드립니다.
@Data public class MemberSessionDto { private Long id; private String email; private String password; private String name; private Address address = new Address(); private List<Post> posts; } DTO의 필드 중 데이터가 들어있지 않은 필드가 존재할 수도 있을텐데요, 이럴 때는 new Address()와 같이 초기화를 해주는 것이 좋을까요, 아니면 타임리프에서 th:if="${findMember.address != null}"와 같이 null 처리를 해주는 것이 좋을까요? 도움이 되실까 해서 엔티티 코드도 추가로 첨부하겠습니다.package com.myproject.jpaboard.domain; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PUBLIC) public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String email; private String password; private String name; @Embedded private Address address; @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List<Post> posts = new ArrayList<>(); @Override public String toString() { return "Member{" + "address=" + address + ", name='" + name + '\'' + ", password='" + password + '\'' + ", email='" + email + '\'' + ", id=" + id + '}'; } }
-
해결됨스프링 시큐리티 완전 정복 [6.x 개정판]
SecurityContextHolderStrategy 설명해주신 부분에서 기존 방식 변경 방식에 대한 질문입니다.
안녕하세요, 24:00 에 말씀해주시는 SecurityContextHolderStrategy 사용하기부분에 기본방식과 변경방식 설명해주시는 부분에서 이해가 안되는 부분이 생겨 질문드립니다.기존방식과 변경방식의 구현된 소스코드를 보니 내부에서(SecurityContextHolder.crateEmptyContext() 내부) 도 결론적으로는 strategy.createEmptyContext() 를 delegate 하는 방식으로 호출 되는것을 보았습니다. 6.x, 5.x, 4.x 모두 동일한듯합니다. /** * Allows retrieval of the context strategy. See SEC-1188. * @return the configured strategy for storing the security context. */ public static SecurityContextHolderStrategy getContextHolderStrategy() { return strategy; } /** * Delegates the creation of a new, empty context to the configured strategy. */ public static SecurityContext createEmptyContext() { return strategy.createEmptyContext(); } AbstractAuthenticationProcessingFilter 쪽에서 successfulAuthentication 쪽에 로직dl 6.x, 5.7 이하 버전 대가 다른단것은 확인했는데 /** * Puts the <code>Authentication</code> instance returned by the authentication * manager into the secure context. */ protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) throws IOException, ServletException { this.logger.debug(LogMessage.format("Authentication success: %s", authResult)); SecurityContext context = this.securityContextHolderStrategy.createEmptyContext(); context.setAuthentication(authResult); this.securityContextHolderStrategy.setContext(context); this.securityContextRepository.saveContext(context, request, response); if (this.eventPublisher != null) { this.eventPublisher.publishEvent(new InteractiveAuthenticationSuccessEvent(authResult, this.getClass())); } if (this.authenticationSuccessHandler != null) { this.authenticationSuccessHandler.onAuthenticationSuccess(request, response, authResult); } }/** * Puts the <code>Authentication</code> instance returned by the authentication * manager into the secure context. */ protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) throws IOException, ServletException { if (logger.isDebugEnabled()) { logger.debug("Authentication success: " + authResult); } SecurityContextHolder.getContext().setAuthentication(authResult); // Fire event if (this.eventPublisher != null) { eventPublisher.publishEvent(new InteractiveAuthenticationSuccessEvent( authResult, this.getClass())); } if (authenticationSuccessHandler != null) { authenticationSuccessHandler.onAuthenticationSuccess(request, response, authResult); } }추측건데 strategy 쪽을 세팅할수있는 부분이 추가됨에따라 달라진 부분이라 생각이 되어 이부분도 말씀하신 의도와는 다를듯하여 /** * Sets the {@link SecurityContextHolderStrategy} to use. The default action is to use * the {@link SecurityContextHolderStrategy} stored in {@link SecurityContextHolder}. * * @since 5.8 */ public void setSecurityContextHolderStrategy(SecurityContextHolderStrategy securityContextHolderStrategy) { Assert.notNull(securityContextHolderStrategy, "securityContextHolderStrategy cannot be null"); this.securityContextHolderStrategy = securityContextHolderStrategy; } 경쟁조건 때문이라고 설명하신 부분에서 말씀하시는 의도를 다시 한번 알수있을까요.