묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기
실 서비스 환경 문의
채팅 실서비스 환경 관련 문의 드립니다. 웹소켓은 커넥션을 유지하는데 서비스가 인기가 있어 동시접속자가 많아지면 커넥션 고갈이 생길 것 같습니다. 이런 문제를 방지하기 위해 실 운영 환경에서는 어떻게 모니터링하고 대응하는지 궁금합니다.실 운영 환경에선 멀티 서버 멀티 인스턴스로 동작하게 해야 할 것 같은데 이런 경우에도 @SendTo 애노테이션을 활용할 수 있나요? 없을 것 같아 질문드립니다.실 운영환경에선 엔진엑스같은 웹서버를 거쳐 들어올 것 같은데 이럴 때 주의해야할 사항이 있을까요?
-
해결됨스프링 시큐리티 완전 정복 [6.x 개정판]
RoleHierarchyImpl 관련 deprecated 이슈로 인한 수정 코드 기록
Spring security 6.3.3 버전에서 setHierarchy와 생성자인 RoleHierarchyImpl()가 deprecated 되어 공식문서 권장 방법으로 수정한 코드를 남깁니다.전) 이전 방식@Bean public RoleHierarchy roleHierarchy() { RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl(); roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_DB\n" + "ROLE_DB > ROLE_USER\n" + "ROLE_USER > ROLE_ANONYMOUS"); return roleHierarchy; } 후) 정적 메소드 fromHierarchy 사용@Bean public RoleHierarchy roleHierarchy() { return fromHierarchy("ROLE_ADMIN > ROLE_DB\n" + "ROLE_DB > ROLE_USER\n" + "ROLE_USER > ROLE_ANONYMOUS"); }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew build failed 와 Unable to load class 'org.gradle.api.plugins.MavenPlugin'. 오류 해결 방법
저의 경우에는, Unable to load class 'org.gradle.api.plugins.MavenPlugin'.This is an unexpected error. Please file a bug containing the idea.log file.오류의 이유와 gradlew build failed빌드에 실패하는 이유가 동일했습니다. 해결 방법 아래 주소에 적어두었으니, 참고하세요 !💡 https://blog.naver.com/bkmij/223594375357 도움이 되었으면 좋겠습니다.모두 남은 학습 열심히 화이팅하세요 : ) ! ☺☺ https://www.inflearn.com/community/questions/1333084/build-gradle-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98-unable-to-load-class-x27-org-gradle-api-plugins-mavenplugin?srsltid=AfmBOopJ4VA4YBT1JxsR3YjKEGdr1qYs0Y1QQgxTYQcBfdS2WYsBTeqa↑댓글을 참고하여 해결하였습니다.
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
세션 질문입니다.
사용자가 웹에 접속하고 로그인도 안했는데 세션이 왜 생기는건가요? 지금까지 이전 강의에서는 로그인 인증에 성공하면 그때 서버에서 세션을 생성하고 저장한다고 배웠던거 같은데 그냥 접속만 해도 서버에서 클라이언트에 왜 세션을 주는건지 모르겠습니다.
-
미해결실전! 스프링 부트와 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으로 설정 되어있는데상품 수정시 기존 값이 그대로 유지되면서 화면에 보여집니다ㅠㅠ뭐가 잘못된걸까요...? 관련 코드도 댓글로 첨부 하겠습니다.
-
미해결GraphQL - REST API를 대체할 기술
graphql 이미지 처리
안녕하세요! 강의 정말 잘 듣고 있습니다!개인적인 플젝에서 야매?로 graphql 쓰고 있었는데 이렇게 강의를 통해 개념을 제대로 알아가는 중입니다 ㅎㅎ강의에는 없지만 java-springboot에서 graphql을 통해서 이미지를 받을 수는 없는지 궁금합니다!가능하시다면 관련된 라이브러리나 블로그? 알려주시면 감사하겠습니다!!
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
cqrs에 관하여
안녕하세요. 지식공유자님!데이터베이스 연결 강의를 보고 질문 드립니다.서비스를 command와 query로 분리하고 있는데요.이것을 cqrs 패턴으로 부른다고 알고 있습니다.이게 좋다고는 들었는데, 정확히 왜 그런지는 잘 모릅니다.만약, 면접관이 "cqrs에 대해서 아느냐? 왜 이렇게 구현했느냐?" 라고 묻는다면, 지식공유자님께서는 어떻게 답변하시겠습니까?감사합니다.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
예외처리쪽 관련 질문있습니다.
예외처리의 부모격인 Exception.class 와 UserNotFoundException.class 2개 모두 제시된 상황으로 이해했습니다.질문 : 요청에 의해 핸들러처리시 UserNotFoundException 클래스를 사용해야할 때 Exception.class를 거치고 UserNotFoundException.class가 사용되는 것인지 아니면 바로 UserNotFoundException 클래스로 가는지에 대한 의문이 생겨 문의드립니다!
-
미해결스프링 시큐리티 완전 정복 [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());
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
클라이언트마다 별도의 쓰레드 할당 질문입니다.
클라이언트마다 별도의 쓰레드가 할당되고 각 쓰레드별로 쓰레드로컬을 가지고있어 여기에 인증객체를 가진 SecurityContext가 저장된다고 설명해주셨습니다. 근데 제가 알기로 같은 사용자더라도 서버에 요청할때마다 다른 쓰레드가 할당되는걸로 아는데 아닌가요? 맞다면 같은 사용자이더라도 요청할때마다 별도의 쓰레드가 할당되므로, 이전 요청에서 로그인인증을 통해 저장했던 SecurityContext는 사용하지 못하는거 아닌가요?
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
엔티티가 바로 응답으로 나가도 되나요??
이번 수업 코드를 보면 @Entity 붙은 클래스에서 @JsonIgnore 를 사용해 json 필터링을 하고있는데요.. 보통 entity 외에 따로 dto 만들어서 응답하지 않나요??
-
해결됨서버개발자 과제전형 완벽가이드 - 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 가 안뜹니다
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Window에서 Vue.js 설정
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.안녕하세요 호돌맨님 .. 영상 잘보고 있습니다.저는 Window 에서 영상보면서 공부를 하고있습니다. 근데 Vue 부분 부터 영상대로 따라 만들어보려고 우분투 설치 등 GPT 한테도 물어보면서 하려고했지만도저히 못따라할거 같습니다 혹시 Window 로 하는 사람들은 어떤걸 참조하면서 하면 될까요?? 기존의 React 사용을 해봐서 Vue도 한번 따라해보고싶어서 따라 하는중입니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
orderList 페이지 div크기 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.html코드는 같은데 입력창의 배치가 form-inline으로 안 나오는 이유가 있나요?<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head th:replace="fragments/header :: header"/> <body> <div class="container"> <div th:replace="fragments/bodyHeader :: bodyHeader"/> <div> <div> <form th:object="${orderSearch}" class="form-inline"> <div class="form-group mb-2"> <input type="text" th:field="*{memberName}" class="formcontrol" placeholder="회원명"/> </div> <div class="form-group mx-sm-1 mb-2"> <select th:field="*{orderStatus}" class="form-control"> <option value="">주문상태</option> <option th:each= "status : ${T(jpabook.jpashop.domain.OrderStatus).values()}" th:value="${status}" th:text="${status}">option </option> </select> </div> <button type="submit" class="btn btn-primary mb-2">검색</button> </form> </div> <table class="table table-striped"> <thead> <tr> <th>#</th> <th>회원명</th> <th>대표상품 이름</th> <th>대표상품 주문가격</th> <th>대표상품 주문수량</th> <th>상태</th> <th>일시</th> <th></th> </tr> </thead> <tbody> <tr th:each="item : ${orders}"> <td th:text="${item.id}"></td> <td th:text="${item.member.name}"></td> <td th:text="${item.orderItems[0].item.name}"></td> <td th:text="${item.orderItems[0].orderPrice}"></td> <td th:text="${item.orderItems[0].count}"></td> <td th:text="${item.status}"></td> <td th:text="${item.orderDate}"></td> <td> <a th:if="${item.status.name() == 'ORDER'}" href="#" th:href="'javascript:cancel('+${item.id}+')'" class="btn btn-danger">CANCEL</a> </td> </tr> </tbody> </table> </div> <div th:replace="fragments/footer :: footer"/> </div> <!-- /container --> </body> <script> function cancel(id) { var form = document.createElement("form"); form.setAttribute("method", "post"); form.setAttribute("action", "/orders/" + id + "/cancel"); document.body.appendChild(form); form.submit(); } </script> </html>