묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
세션 질문입니다.
사용자가 웹에 접속하고 로그인도 안했는데 세션이 왜 생기는건가요? 지금까지 이전 강의에서는 로그인 인증에 성공하면 그때 서버에서 세션을 생성하고 저장한다고 배웠던거 같은데 그냥 접속만 해도 서버에서 클라이언트에 왜 세션을 주는건지 모르겠습니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
스프링 추상화 질문(exTranslator.translate)
안녕하세요 김영한 강사님. 질문 있습니다!질문: JDBC 기술 외에 어떻게 스프링 예외 추상화를 적용시킬 수 있는지. exTranslator.translate를 통해서 스프링 예외로 변환하는 것은 편한 것 같습니다. 그런데 MyBatis나 JPA 같은 기술을 사용할 땐 어떻게 사용해야할 지 감이 안오네요JPA는 제가 잘 모르지만 SQL문을 JDBC 처럼 직접 작성해서 pstmt를 통해 보낼 것 같진 않고, MyBatis는 Mapper.xml를 통해 SQL문을 작성하게 되는데 어떻게 스프링 예외 추상화를 적용 시킬 수 있을지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
값 타입의 필드들에 final
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]값 타입의 클래스에 setter를 제공하지 않아도 변경 불가능하도록 할 수 있지만, 필드들에 final을 붙이는 것 또한 괜찮지 않을까요?대신 기본생성자도 만들 기 위해서 @NoArgsConstructor 옵션을 사용 할 수 있을 것 같습니다.최종 형태입니다@Embeddable @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED, force = true) @RequiredArgsConstructor public class Address { private final String city; private final String street; private final String zipCode; }이런식으로 만들어도 될까요? 또 force 옵션을 쓰게 되면 리플랙션/프록시 기술에 영향을 주어서 쓰면 안되는 형태일지 궁금합니다
-
미해결실전! 스프링 데이터 JPA
단순 조인과 페치 조인에 대한 추가 질문입니다.
안녕하세요.강의 항상 잘 보고 있습니다. 아래 두 질문 보고 이해가 안 되는 부분이 있어 질문 드립니다. https://www.inflearn.com/community/questions/33719/fetch-join-vs-joinhttps://www.inflearn.com/community/questions/1364411/%EB%8B%A8%EC%88%9C-%EC%A1%B0%EC%9D%B8%EA%B3%BC-%ED%8E%98%EC%B9%98-%EC%A1%B0%EC%9D%B8%EC%97%90-%EB%8C%80%ED%95%B4-%EC%A7%88%EB%AC%B8-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4아래처럼 페치조인 사용하지 않고 member와 team을 select해서 가져올 경우에는 lazy 쿼리가 발생할 수 있다고 이해했습니다.@Query("select m, t from Member m join m.team t") List<Member> findInnerJoin(); team을 select하면 영속성 컨텍스트에도 team의 모든 pk가 저장되면서 lazy 쿼리가 발생하지 못하는 것은 아닌가요? 첫번째 링크 질문의 "이번 예제가 좀 특수한 경우고, 일반적으로 team이 영속성 컨텍스트에 미리 존재하는 경우는 드물기 때문에" 라는 답변에서 어떻게 team이 미리 존재하지 않는 경우가 생길 수 있는지 궁금합니다...
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 수정시 기존값이 그대로 유지되어 나타나요
[질문 내용]saveItem에 @Transactional 어노테이션이 선언되어있고, updateItemForm의 Id 값을 hidden으로 설정 되어있는데상품 수정시 기존 값이 그대로 유지되면서 화면에 보여집니다ㅠㅠ뭐가 잘못된걸까요...? 관련 코드도 댓글로 첨부 하겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
BindingResult관련 문의 사항
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 1. Item에 binding된 결과가 BindingResult에 담기다고 하셨는데 정확히 어떤 의미 인지 모르습니다.2. BindingResult에 오류 정보를 설정할때 objectName과 field명을 기재하는데 BindingResult의 순서가 중요한 이유가 뭔가요?3. th:field="*{itemName}"은 controller의 th:object="${item}"을 이용하여 @ModelAttribute로 설정한("item", Item)에 Item의 속성 값에 접근하는 것 같은데 th:errors="*{itemName}" 은 org.springframework.validation.BindingResult.item에 접근하는 것이 맞나요?혹시 맞다면 th:object="${item}", th:object="${item}"에 다른 이름으로 설정하여도 th:errors="*{itemName}"은 관계없이 동작하게 되나요?
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
cqrs에 관하여
안녕하세요. 지식공유자님!데이터베이스 연결 강의를 보고 질문 드립니다.서비스를 command와 query로 분리하고 있는데요.이것을 cqrs 패턴으로 부른다고 알고 있습니다.이게 좋다고는 들었는데, 정확히 왜 그런지는 잘 모릅니다.만약, 면접관이 "cqrs에 대해서 아느냐? 왜 이렇게 구현했느냐?" 라고 묻는다면, 지식공유자님께서는 어떻게 답변하시겠습니까?감사합니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
DriverManagerDataSource import가 안돼요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]사진 첨부합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ScriptAssert 실행 시 오류
Item 클래스에 @ScriptAssert(lang = "javascript", script = "_this.price * _this.quantity >= 10000") 를 추가하고 프로젝트를 실행하고 입력 폼에 값을 입력 후 저장을 눌렀더니org.hibernate.validator.spi.scripting.ScriptEvaluatorNotFoundException: HV000232: No JSR 223 script engine found for language "javascript".이런 에러가 떴는데 검색해본 결과JDK가 지원하는 스크립트 엔진이 달라 발생한 오류입니다.JDK 8부터 14까지는 JavaScript를 지원하는 Nashorn 엔진을 쓰지만, JDK 14 이후부터는 JavaScript가 지원되지 않는 GraalVM을 사용하기 때문그래서 저는 build.grable 의 dependencies {} 안에 implementation 'org.openjdk.nashorn:nashorn-core:15.3'를 추가 했더니 해결 됬습니다.한번 공유 해봅니다
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
provider가 선택되는 정확한 기준을 잘 모르겠습니다
두번째 방식이 CustomProvider에 의해 처리가 되는 것이 이해가 되지 않습니다.첫번째 방식과 단지 CustomProvider를 추가한 것만 다르다고 생각하는데 이로 인해 해당 CustomProvider가 선택된것인가요?아니면 Dao방식은 parent에 존제하기 때문에 현재 list에 존제하는 custom방식이 채택된거라고 이해하면 될까요?
-
미해결서버개발자 과제전형 완벽가이드 - 1편
멀티모듈 문의드립니다.
아래링크 문의에 대한 추가 질문입니다.https://www.inflearn.com/questions/1385202버전과 동일한 소스코드 동일한 것으로 확인됩니다. 또한, restart 후에도 동일한 현상 확인되어 추가문의드립니다. 혹시, intellij community 버전이라 그런건지 문의드리며 해결방법 확인부탁드립니다!!
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
강의 20분13초 내용 질문입니다.
requestMatchers("/login").permitAll()로 /login에 대한 요청은 인증이 필요없게 설정했는데, .formLogin()을 설정하고 나서 "/login" 요청이 formLogin 방식의 필터에 걸리는 건가요?formLogin() 설정을 해도 이미 위에서 equestMatchers("/login").permitAll() 로 /login 에 대한 요청은 인증이 필요없으므로 필터에 걸리지 않고 바로 컨트롤러 PostMapping("/login")으로 가야되는거 아닌가요?
-
미해결토비의 스프링 부트 - 이해와 원리
프로퍼티 빈의 후처리기 도입 AnnotationUtils의 사용
강의 도중 AnnotationUtils를 사용하여 애노테이션의 정보를 얻어오는 부분이 있습니다.MyConfigurationProperties annotation = AnnotationUtils .findAnnotation(bean.getClass(), MyConfigurationProperties.class); if (annotation == null) return bean; Map<String, Object> attributes = AnnotationUtils.getAnnotationAttributes(annotation); String prefix = (String) attributes.get("prefix"); return Binder.get(env).bindOrCreate(prefix, bean.getClass()); 여기에서 attributes를 가져오지 않고 annotation.prefix() 를 사용해서 정보를 가지고 올 수도 있다고 생각됩니다만 AnnotationUtils를 사용할 때의 다른 이점이 있는 것인가요??MyConfigurationProperties annotation = AnnotationUtils .findAnnotation(bean.getClass(), MyConfigurationProperties.class); if (annotation == null) return bean; return Binder.get(env).bindOrCreate(annotation.prefix(), bean.getClass());
-
미해결Practical Testing: 실용적인 테스트 가이드
테스트 코드 createOrderWithStock 로그에 관하여
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 강사님. 테스트코드의 @Transactional은 마지막에 rollback을 하기 때문에 dirty checking을 하지 않고, 이로 인하여 update쿼리가 전송되지 않을것이라 생각했습니다.하지만 로그에는 update stock set created_date_time=?, modified_date_time=?, product_number=?, quantity=? where id=? Hibernate: update stock set created_date_time=?, modified_date_time=?, product_number=?, quantity=? where id=?이처럼 quantity를 변경한것에 대한 update쿼리가 전송되었습니다.이 부분에 대해서 찾아본 결과 "테스트 코드 마지막에서 stockRepository.findAll() 을 통해 stock을 전체 조회할때, select쿼리가 db에 직접 날라가기 때문에 select쿼리가 수행되기전 flush()로 인하여 update쿼리가 날아갔다." 라고 이해했습니다. 제가 이해한 내용이 맞을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@RequestBody에서 ObjectError를 사용할수는 없는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@RequestBody에서 @Validated를 통해서 검증하는 방법을 찾아보니까 BindingResult를 파라미터로 같이 받으면 MethodArgumentNotValidException 예외가 터지질 않는다고 해서 BindingResult를 파라미터에서 빼고 있는데 제가 만약 ObjectError를 넣고싶어서 reject()를 사용하고 싶으면 bindingResult.hasErrors()를 통해서 제가 직접 if문으로 예외를 던지는게 맞는건가요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
클라이언트마다 별도의 쓰레드 할당 질문입니다.
클라이언트마다 별도의 쓰레드가 할당되고 각 쓰레드별로 쓰레드로컬을 가지고있어 여기에 인증객체를 가진 SecurityContext가 저장된다고 설명해주셨습니다. 근데 제가 알기로 같은 사용자더라도 서버에 요청할때마다 다른 쓰레드가 할당되는걸로 아는데 아닌가요? 맞다면 같은 사용자이더라도 요청할때마다 별도의 쓰레드가 할당되므로, 이전 요청에서 로그인인증을 통해 저장했던 SecurityContext는 사용하지 못하는거 아닌가요?
-
해결됨스프링 핵심 원리 - 기본편
스프링 핵심원리 기본편 프로그램 Source Down 문의
안녕하세요..스프링핵심원리 기본편 학습중 입니다.강의자료에 PDF 파일은 제공이 되는데 프로그램 Source 는 제공이 되지 않나요 ?프로그램 Source 는 다운 받을수 없나요 ? 확인 부탁드려요.감사합니다.
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
클린한 아키텍쳐에 관하여
안녕하세요.API 서버 구현 - 1 의 내용에 대해서 질문 드립니다. package com.library.service; import com.library.controller.response.PageResult; import com.library.controller.response.SearchResponse; import문을 보면 BookQueryService 와 BookRepository 가 controller 패키지의 DTO들을 의존하고 있습니다. 3-tier architecture 에서는 한 방향으로 의존 관계가 흘러야 한다고 알고 있는데, 아키텍쳐 부분에 대해서 의견을 듣고 싶습니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Member테이블에 insert가 안돼요
[질문 내용]Create 테이블은 잘 되는데 insert가 안되서요 강의처럼 @Rollback(false) 넣었는데 insert 가 안뜹니다
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
인텔리제이 gradle 질문드립니다..
복습하려고 다시 프로젝트 처음부터 진행중인데, 이렇게 콘솔에 찍히면서 프로그램이 중단되어버립니다..구글에 찾아봐도 정보가 없고 gradle을 refresh하면,Could not create parent directory for lock file 이런식으로 나옵니다...그래서 https://memodayoungee.tistory.com/m/55이대로 진행해봐도 안되고 인텔리제이 캐시도 삭제해봤는데도 해결이안되서.. 너무 답답해서 질문드립니다..