학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. cannot reslove method가 뜨면서 계속 오류라고 뜨는데 왜 저는 attributeValue가 저절로 생성이 안되는지 모르겠습니다 ㅠ
안녕하세요. 항상 좋은 강의, 답변 주셔서 감사합니다. 이번에 여쭤보고 싶은 것은 @BatchSize가 동작하지 않는 부분에 대해서입니다. <Order의 OrderItems> BatchSize 100 설정 @BatchSize(size = 100 ) @OneToMany (mappedBy = "order" , fetch = FetchType. LAZY , cascade = CascadeType. ALL ) // order 가 만들어지면 orderItem 이 만들어지기 때문에 영속성 전이한다 . private List<OrderItem> orderItems = new ArrayList<>() ; <OrderItems의 Item> BatchSize100 설정 @BatchSize (size = 100 ) @ManyToOne (fetch = FetchType. LAZY ) @JoinColumn (name = "item_id" ) private Item item ; 위와 같이 설정을 했는데, 실제로 배치가 적용되는 것은 아래 쿼리를 확인하시면 아시겠지만 OrderItems에만 적용이 됩니다. item는 배치 사이즈가 적용이 되지 않아 총 4번이 나가게 되고, OrderItem은 배치 사이즈가 적용되어 1번의 쿼리만 나갑니다. 다른 엔티티에도 적용해보니 정황상 ManyToOne, OneToOne 관계에서 배치 사이즈가 안 먹는거 같은데.. 혹시 item 같은 ManyToOne에는 어떻게 배치 사이즈를 적용하는지 알려주시면 감사하겠습니다 참고 :글로벌 배치 사이즈는 잘 먹습니다!
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
젤 어려운 부분인것 같습니다. ㅠ 1. 피호출자 callee 2. 게임에서의 Manager 3. 이벤트 Publisher 이것들이 다 같은 위치에 있는 개념으로 정리하면 될까요 마지막으로 델리게이트는 type이라고 하셨는데 이벤트를 어떻게 이해해야 할까요. 비슷하게 메소드를 담는 그릇일까요
강의 1분 15초 부근에 설명하신 것처럼 Pin 프리펩 전체를 "Pin" 태그로 설정하면 Pin을 던지자마자 게임오버가 됩니다. (Pin과 Pin이 만나지 않아도 게임오버됨) 제 경우엔 Pin 프리펩의 Square 오브젝트는 "Pin" 태그로 설정하지 않아야 게임이 정상적으로 진행됩니다. 고박사님이 알려주신대로 따라 했는데 제가 무엇을 놓쳤는지 모르겠습니다. 어디가 잘못 된 걸까요?
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 해야되는 모든 것들을 다 따라하고 이제 설레는 마음으로 Vivado & 를 쳤는데 실행은 안되고 오류가 발생했습니다 ㅠㅠㅠㅠ
안녕하세요..! 영한님 강의 즐겁게 듣고 있는 학생입니다..! @Inheritance 로 조인전략 채택 시, 슈퍼타입을 조회하여도 EAGER Fetch가 적용되고 서브타입을 조회하여도 EAGER Fetch가 적용되어 Lazy Fetch를 적용할 수 없는가 싶어 구글링을 5시간정도 하다가 해당 글을 발견하였습니다. https://sodocumentation.net/hibernate/topic/2326/performance-tuning 위 포스팅처럼 조인전략 물리모델에서 LAZY Fetch 를 적용하려면 @Inheritance의 도움을 받지 않고 @OneToOne 등으로 직접 모델링하는 수 밖에 없을까요...? 강의에서 실무에서 영한 선생님도 조인전략을 많이 사용하신다고 말씀하셨는데, @Inheritance 어노테이션으로 구현하시는지, 해당 어노테이션으로 구현하신다면 EAGER Fetch는 어떻게 핸들링하시는지 궁금합니다..!
package com.junyharang.jwtstudy.config.jwt ; import com.fasterxml.jackson.databind.ObjectMapper ; import com.junyharang.jwtstudy.auth.PrincipalDetails ; import com.junyharang.jwtstudy.model.Member ; import lombok. RequiredArgsConstructor ; import org.springframework.security.authentication. AuthenticationManager ; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken ; import org.springframework.security.core. Authentication ; import org.springframework.security.core. AuthenticationException ; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter ; import javax.servlet.http. HttpServletRequest ; import javax.servlet.http. HttpServletResponse ; import java.io.IOException ; // 스프링 시큐리티에 UsernamePasswordAuthenticationFilter 가 있다 . // /login 이 요청 오면 username, password 를 전송하면 (Post 로 ) // UsernamePasswordAuthenticationFilter 가 동작한다 . // 현재는 SecurityConfig 에서 FormLogin 을 disable 을 시켜서 동작하지 않는다 . @RequiredArgsConstructor public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { private final AuthenticationManager authenticationManager ; @Override // /login 요청이 들어오면 로그인 시도를 위해 실행되는 Method public Authentication attemptAuthentication( HttpServletRequest request , HttpServletResponse response ) throws AuthenticationException { System . out . println( "JwtAuthenticationFilter : 로그인 시도 중 입니다 !" ) ; // 1. username, password 를 받는다 . try { // BufferedReader reader = request.getReader(); // // String input = null; // // while ((input = reader.readLine()) != null) { // System.out.println(input); // } // while 문 끝 // JSON 으로 전달된 값을 Parsing 할수 있게 해주는 객체 생성 ObjectMapper om = new ObjectMapper() ; Member member = om . readValue( request . getInputStream() , Member .class ) ; System . out . println( member ) ; // Token 생성 ( 회원의 이름과 Password 를 통해 ) UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( member . getUsername() , member . getPassword()) ; // PrincipalDetailsService 의 loadUserByUsername() 이 실행 된다 . // authenticationManager 에 Token 을 넣어 호출한다 . // authentication 변수에는 Login 정보가 담긴다 . Authentication authentication = authenticationManager . authenticate( authenticationToken ) ; // authentication 객체가 Session 영역에 저장된다 . PrincipalDetails principal = ( PrincipalDetails ) authentication . getPrincipal() ; // 출력이 된다면 Login 이 되었다는 의미 System . out . println( principal . getMember() . getUsername()) ; return authentication ; } catch ( IOException e ) { e . printStackTrace() ; } // try-cache 문 끝 System . out . println( "===========================================" ) ; // 2. authenticationManager 로 정상 인지 로그인 시도하면 PrincipalDetailsService 가 호출된다 . // 해당 Class 안에 loadUserByUsername() 가 자동 호출 // 3. PrincipalDetails 를 Session 에 담는다 . // Session 에 해당 내용을 담는 이유는 담지 않으면 권한에 대한 처리를 할 수 없기 때문이다 . // 4. JWT 를 만들어서 응답해 준다 . return null ; } // attemptAuthentication(HttpServletRequest request, HttpServletResponse response) 끝 } // class 끝 안녕하세요? 25강에 해당 부분을 하다가 DB에 회원값이 들어가 있는 걸 보고, 회원가입 로직이 누락 되었다는 부분을 찾기 위해 Controller를 보고 아래 내용을 추가 하였습니다. @PostMapping( " join " ) public String join(@RequestBody Member member ) { member . setPassword( bCryptPasswordEncoder . encode( member . getPassword())) ; member . setRolse( "ROLE_USER" ) ; memberRepository . save( member ) ; return " 회원가입완료 " ; } 그리고 나서 SecurityConfig에 아래 내용을 추가 하였구요. @Autowired private MemberRepository memberRepository ; @Autowired private CorsConfig corsConfig ; @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder() ; } // passwordEncoder() 끝 private final CorsFilter corsFilter ; 근데 아래와 같은 Error가 발생 합니다. Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2022-01-19 00:25:02.184 ERROR 17752 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Parameter 1 of constructor in com.junyharang.jwtstudy.controller.RestAPIController required a bean of type 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' that could not be found. Action: Consider defining a bean of type 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' in your configuration.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 안녕하세요. 세션에 대한 질문이지만 다소 장황한 질문이 될 것 같습니다. 양해 부탁드립니다. 저는 중복로그인 방지 혹은 블락된 회원의 로그아웃처리를 위한 부분을 구현하고자 하였습니다. 중복 로그인을 방지하기 위해서는 세션을 두 개 가진 회원에 대하여 하나를 삭제해야 하며, 블락된 회원의 경우 즉각적으로 로그아웃을 시키려면 해당 회원의 세션을 서버에서 삭제해야 합니다. 이러한 고민을 통해 코드를 구현하는 과정에서 몇 가지 의문이 생겼습니다. 1. 세션 구현체(bean)이 Map을 가지는데, 이 부분은 Stateful 한 구현이 아닌가요? 김영한 선생님이 구현한 SessionManager를 보면, 회원들의 데이터를 `private Map<string, object> sessionStore = new ConcurrentHashMap<>();` 의 형태로 구현하였습니다. 저는 bean과 스프링 컨테이너를 생성함에 있어서 상태값이 존재하면 안된다는 것을 일종의 금과옥조로 여기며 구현해왔습니다. 만약 상태값이 필요로 하다면 final 을 사용했습니다. 가능하면 properties, enum을 사용하는 등 stateless 를 지키기 위하여 노력했습니다. 그런데 생각해보면, 필드에 map을 사용하는 것이, 어떤 스레드의 동작 결과로서 데이터가 남아서, 다른 스레드의 로직에 영향을 미칠 일은 없을 것 같습니다. 그렇게 생각하니, 로직만 잘 짠다면 빈을 설계할 때 항상 stateless 하게 설계할 필요가 없겠다는 생각이 듭니다. stateful bean 의 구현과 관련하여 제 나름의 정리가 필요했습니다. 그래서 자료를 찾기 위해 노력했지만, 검색 능력이 딸려서인지 관련한 블로그나 자료를 찾을 수 없었습니다. 그래서 이렇게 질문을 올립니다. 혹시 관련하여 현업에서 빈을 구현할 때, stateful 한 구현을 하는지, 만약 한다면 어느 수준과 어떤 규칙으로 구현하는지 궁금합니다. 만약 관련한 좋은 자료가 있다면 공유 부탁드려도 되는지 궁금합니다. 2. jsessionId로 세션 저장소에 접근 가능한가요? 특정 회원을 블락하고, 블락한 회원의 세션을 종료시킨다고 하면, 가장 좋은 방법은 톰캣에 있는 세션저장소의 세션을 즉각적으로 삭제하는 것이라 생각합니다. 모든 세션에는 jsessionId가 부여됩니다. 저는 세션저장소의 값을 jsessionId를 key로 하여 꺼내고 조작할 수 있는 방법이 있을 것이라 생각했고, 그 방법을 찾기 위하여 노력했습니다. 하지만 실패하고 말았습니다ㅠ. 세션 저장소에서 세션을 바로 삭제할 수 없기 때문에, 해당 세션을 가진 클라이언트가 접근할 때까지 기다리는 방법을 선택할 수밖에 없었습니다. 어드민이 특정 회원을 블락한 경우, 해당 회원의 데이터도 변경하고 동시에 DB에 블락회원리스트를 만들어 삽입합니다. 그리고 모든 회원이 웹 어플리케이션에 접근할 때, 해당 리스트에 자신이 있는지를 확인하였습니다(그 내용은 아래의 소스와 같습니다). 블락된 회원이 세션이 있는 상태로 웹 어플리케이션에 접근하면, 그때 세션을 조작하는 방식입니다. 회원 정보와 관련한 전체 테이블을 조회하는 것보다는, 블락된 회원 리스트를 조회하는 것이 그나마 리소스를 덜 쓴다고 생각하지만, 이것 또한 많은 리소스를 쓴다고 생각합니다. 그래서 다시금 질문을 드리자면, 세션 저장소에 jsessionId를 가지고 직접 조작하는 방법이 없을까요? 회원이 로그인을 하면 로그인시 사용한 jsessionId를 수집합니다. 해당 회원을 블락할 경우, 해당 jsessionId를 가지고 바로 session. invalidate()를 하면 제일 빠르고 적은 리소스를 사용할 것 같습니다. 만약 그러한 방법을 사용하지 못한다면, 보통 어떤 식으로 현업에서 특정 회원의 세션을 조작하는지 궁금합니다. 감사합니다. @GetMapping("/access") @ResponseBody public String access(HttpServletRequest request, HttpServletResponse response) { blockedUserService.clearExcpectedExpiredSession(sec); // 세션 유효기간을 초과한 웨이팅 리스트는 삭제한다. HttpSession session = request.getSession(); UserEntity userInSession = (UserEntity) session.getAttribute("user"); if(userInSession!=null) { String id = userInSession.getId(); if(blockedUserService.isBlocked(id)) { session.invalidate(); // 세션 삭제 blockedUserService.pop(id); log.info("블락된 회원. 세션 삭제 : {}", session.getId()); return "블락된 회원입니다. 세션이 남아있습니다. 세션이 삭제됩니다."; } } // ... 후략... } 마지막으로 데이타 다루는 기술 관련한 차후 강의는 언제 열리나요? 무척 기대하고 있습니다~~
안녕하세요. " Vue.js 끝장내기 - 실무에 필요한 모든 것" 강의에 이어 "Vue.js + TypeScript 완벽 가이드" 강의도 재미있게 잘 보고 있습니다. 다음 챕터 수강을 위해 vue-advanced 레포에 대한 권한 요청드립니다. 유익한 강의 항상 감사드립니다. github : chessive@gmail.com
여기에 질문 내용을 남겨주세요. 안녕하세요 김영한 개발자님. 강의를 듣다가 궁금한 점이 생겨서 질문 남겨요. ApplicationContextBasicFindTest에서 빈 이름으로 조회 / 이름 없이 타입만으로 조회 등등의 부분에서 MemberService.class를 사용하는 이유가 있는건가요 아님 OrderService와 같은 클래스도 사용할 수 있는데 임의로 정하신건가요? 빈이 등록되어만 있다면 클래스 상관없이 조회할 수 있는걸까요? 항상 좋은 강의 감사합니다!
리눅스 환경 즉 서버에서 npm run build를 할때 대문자를 소문자로 바꿔야하는 이슈가 있다면 처음 개발할때부터 소문자로 파일명을 지어서 프로젝트를 만들면 되는걸까요? 아니면 npm run build를 해놓고 서버에서 git pull만 한다면 상관은 없을 거같은데 빌드 커밋을 해줘야 하는 문제가 있는것 같고 제로초님은 현업에서 1. 파일명을 소문자로 지어서 개발한다, 2. build된 결과물을 push하고 pull 받는다. 어떠한 방식으로 하시는지 궁금합니다.
안녕하세요. 항상 양질의 강의 감사드립니다. Selective Search된 Region을 Feature Map에 맵핑시킨 뒤 SPP를 진행한다고 하셨는데, 그렇다면 RCNN과 같이 Selective Search로 나온 2000개의 Region을 모두 Feature Map에 맵핑시키는 것인가요??
안녕하세요, 강의를 듣다가 헷갈리는 개념이 있어 질문드립니다. Java는 100% 객체 지향 프로그래밍 방식만 지원한다고 말씀주셨는데, Java 람다,익명class에서 일급 객체,순수함수,고차함수를 지원하는 것은 함수형 프로그래밍 처럼 사용할 수 있게 해주는 것이고, 결국에 class안에 작성해야함으로 함수형 프로그래밍 방식을 지원하지 않는다고 보는게 맞을까요? 제가 함수형 프로그래밍 방식에 대해 완전히 이해를 못해서 문의드립니다.