처음 서버 run 하고 google, naver, keycloak 전부 처음에는 아이디, 비밀번호를 입력하는 사용자입력이 필수적인데, 한번 로그인하고 나서는 웹어플리케이션 서버를 종료하고 다시 시작해도 구글, 네이버, keycloak 계정으로 로그인하는 과정이 필요없이 바로 인증이 됩니다. 왜이런건가요? 로그아웃했으면 당연히 다시 로그인하는 과정이 필요한데 이러면 잘못된거 아닌가요?
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요! Persistence Layer에서 @Mock 대신 @SpringBootTest를 사용해 단위 테스트를 진행하는 이유가 궁금합니다! 리소스가 더 사용되면서 테스트가 오래걸리는 단점이 있지 않나요? 같은 이유로, Business Layer에서 @Mock과 @InjectionMocks으로 단위테스트를 진행하는 대신, @SpringBootTest로 통합테스트를 선호하시는 이유가 무엇인가요? @SpringBootTest를 사용해도 큰 단점은 없는걸까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] test2.mv 도 만들고 h2버전 build.gradle에 입력두 해봤는데 해결이 안되네요 ㅠㅠ
안녕하세요 이번에 전자정부프레임워크를 사용하는 회사로 이직하게 된 2년차 직장인입니다. 이전에는 Python 위주로 개발을 했었어서, 전자정부프레임워크는 이번에 처음 경험하게 되었는데요 (전자정부프레임워크는 아니고, Spring Boot를 이용한 게시판 구현 정도로 개인 프로젝트로 진행한 적이 있습니다.) 회사에서는 솔루션별로 3.10.0 버전과 4.1버전 2개를 사용중더라고요. 3.10.0은 Spring이고, 톰캣 띄워서 실행시키는 방식이고, 4.1은 Spring Boot로 메인 클래스에서(@SpringBootApplication) main 함수 실행시키는 방식으로 실행시키는 방식이었습니다. 기존 강의와 신규 강의 2개 모두 듣기에는 시간이 아무래도 너무 소요될 것 같아서, 하나를 정독하고 싶은데 전자정부프레임워크의 기초부터 단단히 배우고 싶다는 생각을 가졌을 때, 기존 강의와 신규 강의 중 어떤걸 들으면 좋을 지 추천해주실 수 있을까요? (제 개인적인 생각으로는 3.10이 3.7과 유사할 것이고, 편리성은 떨어지겠지만 Spring의 원리를 깊게 알 수 있을거라 생각되어 3.7을 사용하는 기존 강의를 결제했습니다.) (+ 이메일로 쿠폰 요청 드렸습니다!)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] MemberAppzmf래스에서 MemberService memberService = appconfig.memberService(); 여기서 appconfig.memberService()을 호출합니다 public MemberService memberService(){ return new MemberServiceImpl(new MemoryMemberRepository()); } 여기서MemberServiceImpl로가서 그다음에 어떻게해서 MemoryMemberRepository()가 어떻게 실행되느건가요? public MemberServiceImpl(MemberRepository memberRepository){ this.memberRepository = memberRepository; } MemberServiceImpl(MemberRepository memberRepository)->MemberServiceImpl() 괄호안에 new MemoryMemberRepository()이 코드가 들어가는건가요?
[질문 내용] assertThat()메소드의 도큐먼트에서는 assertThat(실젯값).isEqualTo(기댓값)이라고 정의되어 있지만, 5분 13초 쯤에 김영한 강사님께서 회원가입() 메소드를 테스트하는 과정에서 assertThat() 메소드를 작성하실때 assertThat(member.getName()).isEqualTo(findMember.getName()); 라고 하셨는데 실제로는 assertThat(findMember.getName()).isEqualTo(member.getName()); 이렇게 정의하는게 맞지 않나요? 확인부탁드립니다!
안녕하세요, 강의에서 궁금한 점이 있어 질문 드립니다. 응답으로 엔티티를 그대로 반환하는 것이 아닌, DTO 를 반환하는 이유 중 하나가 엔티티 변경 시, API 스펙에도 영향이 가는 것을 방지하기 위함이라고 이해했습니다. 그렇다면, 4:35 분 경, OrderQueryDto 를 구성할 때, Entity 에서, 해당 값들을 받아올 때, 1) Address 와 같은 값 타입이나, OrderStatus 와 같은 enum 들도, 별도의 Dto 로 만들어서 반환해야 되는것인지, 2) 그게 아니라면, 값 타입이나, Enum 값은 변경이 별로 없다는 것을 전제로 하고, 그대로 내려줘도 되는 것일지 3) 둘 다 이유가 될 경우, 최종적으로는, 회사 별 코드 스타일대로 따르면 될지 질문드려요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 회원가입하고 회원목록 조회할때 이런에러가 나옵니다 member 안에들어있는 값을 불러오지 못하는거같습니다
메이븐 프로젝트 구성하려는데 이렇게 뜨네요 .. ownloaded [90m from [0mcentral [90m: https://repo.maven.apache.org/maven2/ [0marchetype-catalog.xml [90m (16 MB at 6.9 MB/s) [0m [WARNING] Archetype not found in any catalog. Falling back to central repository. [WARNING] Add a repository with id 'archetype' in your settings.xml if archetype's repository is elsewhere. [INFO] [1m------------------------------------------------------------------------ [m [INFO] [1;31mBUILD FAILURE [m [INFO] [1m------------------------------------------------------------------------ [m [INFO] Total time: 4.579 s [INFO] Finished at: 2024-10-13T09:22:50+09:00 [INFO] [1m------------------------------------------------------------------------ [m [ERROR] Failed to execute goal [32morg.apache.maven.plugins:maven-archetype-plugin:3.3.0:generate [m [1m(default-cli) [m on project [36mstandalone-pom [m: [1;31mThe desired archetype does not exist (com.nexacro.archetype:uiadapter-spring-sample-archetype:1.0.1-20220603.053230-4) [m -> [1m[Help 1] [m [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the [1m-e [m switch. [ERROR] Re-run Maven using the [1m-X [m switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [1m[Help 1] [m http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
application.yml에서 마지막에 web : static-path-pattern : /static/** 이걸 안하면 static 폴더 아래에 있는 정적 리소스 파일이 html파일에 적용이 안되는데 왜이런건가요? 이전에는 해당 코드가 yml에 없었어도 제대로 됐었던것같은데 이유가 뭔가요? 그리고 정적 리소스 파일의 디폴트값은 원래 /static 아닌가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] OrderApp 이나 MemberApp실행 시 로그가 출력되지 않는 경우는 logback.xml 파일 추가해서 해결하였지만, logback 설정을 하지 않더라고 CoreApplication 실행 시에는 debug 레벨로 로그가 찍히는 이유가 궁금합니다.
클라이언트가 인가서버로부터 인가를 받으면 authorizedClient가 생성되는데, 이 생성된 authorizedClient는 세션에 저장돼서 다음 요청일때 이 세션에서 객체를 가져와 인가처리된 클라이언트인지 아닌지 확인하는건가요? 마치 인증완료후 authentication 객체가 securityContext에 저장되고, 이 컨텍스트가 세션에 저장되는것처럼 작동하는건가요?
package hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.order.Order; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; public class OrderApp { public static void main(String[] args) { OrderService orderService = new OrderServiceImpl(); MemberService memberService = new MemberServiceImpl(); Long id=10L; Member member = new Member(id, "aaa", Grade.VIP); memberService.join(member); System.out.println(member.getName()+" "+" "+member.getId()+" "+" "+member.getGrade()); Order order = orderService.createOrder(id,"XBOX",100000); // // System.out.println("order = " + order); } } 멤버의 정보까지는 정상적으로 불러와지는데 주문정보를 호출하는 과정부터 멤버 정보를 받아오지 못하는거 같습니다. public interface OrderService { Order createOrder(Long id, String itemName, int itemPrice) throws IllegalStateException; } public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository = new MemoryMemberRepository();//회원 정보 찾기 private final DiscountPolicy discountPolicy = new FixDiscountPolicy();//할인 금액 @Override public Order createOrder(Long id, String itemName, int itemPrice) { Member member = memberRepository.findById(id); if(id ==null){ throw new IllegalStateException("유효하지 않은 아이디 입니다" + id); } int discountPrice = discountPolicy.discount(member, itemPrice); return new Order(id, itemName, itemPrice,discountPrice); } } public class Order { private Long id; private String itemName; private int itemPrice; private int discountPrice; public Order(Long id, String itemName, int itemPrice, int discountPrice) { this.id = id; this.itemName = itemName; this.itemPrice = itemPrice; this.discountPrice = discountPrice; } public int calculatePrice(){ return itemPrice - discountPrice; //비지니스 로직 } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getItemName() { return itemName; } public void setItemName(String itemName) { this.itemName = itemName; } public int getItemPrice() { return itemPrice; } public void setItemPrice(int itemPrice) { this.itemPrice = itemPrice; } @Override public String toString() { return "Order{" + "id=" + id + ", itemName='" + itemName + '\'' + ", itemPrice=" + itemPrice + ", discountPrice=" + discountPrice + '}'; } } order 패키지 쪽 소스 인데 수정해야 될부분이 있을까요 Exception in thread "main" java.lang.NullPointerException: Cannot invoke "hello.core.member.Member.getGrade()" because "member" is null at hello.core.discount.FixDiscountPolicy.discount(FixDiscountPolicy.java:10) at hello.core.order.OrderServiceImpl.createOrder(OrderServiceImpl.java:20) at hello.core.OrderApp.main(OrderApp.java:22) 에러는 이와같이 발생합니다 도와주셔서 감사합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강사님이 보시는 문서 볼 수 있는 곳이 있나요?
컨트롤러에서 직접 사용자 인증처리를 구현하는데 마지막에 Oauth2AuthenticationToken을 SecurityContextHolder를 사용해 securityContext에 저장하는데, 이 처리는 이번 요청이 끝나면 securityContext가 초기화되므로 securityContext를 세션에도 저장해줘야 하는거 아닌가요?