기선님 안녕하세요.. 제가 java class 파일(WebAppInit.java, WebSecurityConfig.java )로 되어 있던 설정을 web.xml, security-context.xml방식으로 바꾸어보았는데요.. 바꾸고 나서 서버를 재시작 해보니까 classnotfoundexception이 뜨면서 Caused by: java.lang.NoClassDefFoundError: com/legalcounsel/javaprj/config/WebSecurityConfig at com.legalcounsel.javaprj.config.WebAppInit.getRootConfigClasses( WebAppInit.java:22 ) 이런 오류가 발생하는데요.. 왜 그런걸까요??? 원래 서버 시작하면 톰켓이 -> web.xml가서 먼저 읽고 그다음 -> dispatcher-servlet.xml 읽는거 아닌가요'?? spring security까지 추가해 놓을 경우 web.xml 후에 filter가 먼저 실행되고, dispatcher servlet.xml이 그다음 실행되고 그 후에interceptor실행된 후 controller 실행되는 걸로 아는데요... 처음부터 xml로 가지 않고 왜 기존에 설정되어 있던 자바클래스(webAppInit.java랑 WebSecurityConfig.java) 지웠냐고 에러가 발생하는데.. 당연히 xml방식으로 바꾸면 xml로 대체할 수 있는 거 아닌가요?? ㅜㅜ
안녕하세요. 강사님. Level Order Of BinaryTree 강좌 내용중 궁금한 내용이 있어서요. 맨 처음 아래 코드를 통해 Queue 에 TreeNode 객체를 추가하면 Queue < TreeNode > queue = new LinkedList <>(); queue . offer ( root ); 강좌에 있는 아래의 모양으로 셋팅되는 부분은 이해가 되는데요. 아래 코드의 중간 부분 for 영역에서 가로로 돌아가는지 이해가 되질 않습니다. while (! queue . isEmpty ()) { int size = queue . size (); List < Integer > list = new LinkedList <>(); for ( int i = 0 ; i < size ; i ++) { TreeNode node = queue . poll (); list . add ( node . val ); if ( node . left != null ) { queue . offer ( node . left ); } if ( node . right != null ) { queue . offer ( node . right ); } } result . add ( list ); } Q1. 어떻게 가로로 순차로 돌아가는 것인지.. 왜 queue.size = 3 이 나오는지도요. i=0, 3 i=1, 4 -> 5 i=2, 6 -> 7 Q2. node.left 와 node.right 를 다시 queue.offer 해주고 있는데 이 부분이 어떻게 처리되는지.. 번거로우시겠지만 그림으로 설명을 부탁드려도 될까요?
안녕하세요 John 선생님, 몇일동안 수업에 빠져서 너무 재미있게 완강했습니다. 뒤로 갈수록 이해하기보다는 따라치기 바빴지만요 ㅠㅠ 마지막 auth 강의를 듣고, 로그인 로그아웃 등을 잘 되는데 userData를 받아오질 못합니다. 아래와 같이 redux devtool에서 에러를 표시해줍니다. 어느 부분을 살펴봐야 할까요?? 아래와 같은 에러가 나오기 때문에 제 생각에는 로그인한 상태로 랜딩페이지로 가더라도, 로그인이나 레지스터 페이지로 이동이 가능합니다. { user: { userData: { message: 'Request failed with status code 500', name: 'Error', stack: 'Error: Request failed with status code 500\n at createError (http://localhost:3000/static/js/vendors~main.chunk.js:1062:15)\n at settle (http://localhost:3000/static/js/vendors~main.chunk.js:1296:12)\n at XMLHttpRequest.handleLoad (http://localhost:3000/static/js/vendors~main.chunk.js:536:7)', config: { url: '/api/users/auth', method: 'get', headers: { Accept: 'application/json, text/plain, */*' }, transformRequest: [ null ], transformResponse: [ null ], timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1 } }, loginSuccess: { loginSuccess: true, userId: '605ad46405176912111c70bb' } } }
현재 infrastructure.aws에 접속하면 강의와 같은 페이지가 나오지 않습니다. 그래서 열심히 검색해보았더니 아래의 링크를 발견했습니다. 해당 링크가 검증된 사이트가 맞나요? https://m.kaon.com/c/aw https://apps.kaonadn.net/5181491956940800/index.html
안녕하세요 영한님! 강의 재밌고 유익하게 잘 보고 있습니다. 토이 프로젝트를 진행하면서 Batch SIze 와 Limit 에 대한 궁금증이 생겨서 질문 드리게 되었습니다. # 명세 도메인을 대략적으로 설명 드리면 한 명의 사용자는 여러 게시글을 작성할 수 있고 각 게시글에는 여러 개의 댓글이 달릴 수 있습니다. 사용자 (Member) 1 -> 게시글 (Post) N -> 댓글 (Comment) M 제가 뽑고자 하는 데이터는 여러 사용자가 작성한 게시글과 댓글인데, 여기서 페이징을 적용하기 위해 limit 을 사용하려고 합니다. 여러 Member 가 작성한 Post 를 5 개만 뽑고 각 Post 에 달린 Comment 는 3 개만 뽑는 로직을 짜려고 합니다. default_batch_fetch_size 는 1000 으로 설정했습니다. # 질문 1. 먼저 Post 를 5 개 뽑아야 하는데 이런 경우 쿼리 자체에 Limit 을 거는 게 좋을까요? // (1) 직접 순회 List<Member> members = memberRepository.findAll(); // 편의를 위해 findAll 로 했습니다. 실제로는 조건이 있음!! List<Post> posts = members.stream() .map(Member::getPosts) .flatMap(Collection::stream) .limit(5L) .collect(Collectors.toList()); // (2) Repository 메서드의 IN + Limit 쿼리 사용 List<Member> members = memberRepository.findAll(); // 편의를 위해 findAll 로 했습니다. 실제로는 조건이 있음!! List<Post> posts = postRepository.findTop5ByMemberIn(members); (1) 번으로 할 때 배치 사이즈 설정이 적용되어 1 + N 문제는 발생하진 않지만 모든 Post 데이터를 다 끌어오게 됩니다. Fetch Join 도 Limit 쿼리가 제대로 적용되지 않아서 OutOfMemory 발생 위험이 있기 때문에 안쓰는 걸로 알고 있는데 (2) 번으로 하는 게 맞을까요? (2) 번으로 했을 시 우려되는 점은 만약 members 의 사이즈가 1000 이 넘어가면 IN 쿼리의 성능이 굉장히 떨어지지 않을까 걱정됩니다. Limit 를 걸어두었으니 괜찮을지 아니면 개발자가 직접 사이즈를 쪼개서 나누어서 IN 쿼리를 호출해야 할지.. 어느 방법이 맞을까요 2. 1번과 비슷한 질문인데 5 개의 Post 를 순회하면서 3 개의 Comment 씩 뽑으려고 할 때도 @OneToMany 컬렉션을 호출하는 것보다 쿼리를 직접 호출하는게 좋을까요? 1 번 질문의 답에 따라서 조금 다를 것 같은데 만약 쿼리를 직접 호출해야 한다면 Post -> Dto 구하는 과정에 넣지 말고 Service 에서 쿼리를 호출한 후 직접 넣어줘야 할까요? public class PostDto { // ... 자잘한 field 생략 public static PostDto of(Post post) { return PostDto.builder() .comment(post.getComments().stream().limit(3L)...) .build(); } } 현재는 위와 같이 Post Entity 만을 넘겨줘서 Dto 로 변환시켜 주고 있는데 만약 쿼리를 직접 호출하는게 좋다면 Service 로 옮겨서 작성하는지 아니면 BatchSize 와 Limit 을 동시에 사용하는 꿀팁이 있는지 궁금합니다 ! 3. 마지막으로 위의 Post, Comment 와 같이 데이터가 무한히 많아질 가능성이 있는 테이블을 다룰 때는 Batch Size 가 아닌 다른 방법을 사용하기도 할까요?
강의 그대로 진행하는 도중에 에러입니다ㅜㅜ 인텔리제이 유료버전 사용중이며 에러는 해결했는데, 뭔가 jsp안에 자바코드 자동완성 같은 것이 안됩니다...뭔가 찝찝한 부분인데 자바코드로 작성하면 부분적으로 색이 들어가있는데 제 코드를 보시면 자바코드 부분이 그냥 흰색으로만 쭉 적혀져 있는데 뭔가 설정을 해야하는 건지 궁금합니다ㅠㅠ
<link rel="stylesheet" href="style.css" type="text/css"> 이렇게 적는 경우도 있던데 type="text/css"이 무엇인지, 적는 경우와 적지 않는 경우의 차이가 궁금합니다. 또 여기서는 <link>가 아니라 <style>태그 옆에 적은 이유가 뭔지 궁금해요.