묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Practical Testing: 실용적인 테스트 가이드
카페키오스크 클래스 문의 ,,
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. CafeKiosk 클래스 의 add를 아래처럼 구성 했습니다.public void add(Beverage beverage, int count) { if(count <= 0){ throw new IllegalArgumentException("음료는 1잔 이상 주문 하실 수 있습니다."); } for(int i = 0; i<count; i++){ beverages.add(beverage); } } 3:54 초에 add에 americano 변수 1개만 들어 가는데 강의에는 오류가 안나네요..?저는 count 값도 입력하라고 나옵니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
Rest docs 문서용 테스트코드를 따로 작성해야 되나요?
ProductControllerDocsTest 를 따로 작성하지 않고 기존에 작성했던 ProductControllerTest 에 Rest Docs 용 코드를 얹어서 작성해도 상관없나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
jpa 책 질문있습니다.
강의에서 2015년에 나왔다고 하셨던거 같은데지금 책 구매해서 봐도 괜찮나요?에러라던가 버전이라던가 아니면 jpa 방식이 변했다던가 그런부분은 거의 없나요 ?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
application.yaml 에 redis 정보
redis 분산락을 사용할때,application.yaml 에 아래와 같은 redis 정보가 없어도 정상동작하는 이유가 궁금합니다 !!! spring: data: redis: host: localhost port: 6379
-
미해결스프링 핵심 원리 - 기본편
AutoAppConfig의 스프링 빈 등록
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);AnnotationConfigApplicationContext 에 파라미터로 넘긴 값은 스프링 빈으로 등록 -> 그래서 AppConfig 도 스프링 빈이 됨 @Configuration 에는 @Component 애노테이션이 붙어있기 때문에 @Configuration 이 붙어있는 설정 정보AppConfig는 컴포넌트 스캔의 대상임>> 그럼 여기서 컴포넌트스캔, ApplicationContext의 인자 둘 다 AppConfig를 스프링 빈으로 등록할 수 있는 방법인건가요? 둘 중 한 가지 방법으로 랜덤하게 등록이 되는건지, 아니면 결국 같은 맥락을 이야기하는건지 궁금합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿 필터 - 인증 체크 로직 AND가 아닌 OR인 이유?
1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] if (session == null || session.getAttribute(SessionConst.LOGIN_MEMBER) == null) { log.info("미인증 사용자 요청 {}", requestURI); //로그인으로 redirect httpResponse.sendRedirect("/login?redirectURL=" + requestURI); }안녕하세요! 선생님!~ 강의듣다가 질문이 있는데요 if 조건문에서요 session이 있기만 하다면 인증 사용자로 식별되잖아요 그런데 만약 도용된 session이라고 가정하면 null에 포함되지 않으니 인증 사용자로 식별되어 페이지를 들어갈 위험은 없을까요? if (session == null && session.getAttribute(SessionConst.LOGIN_MEMBER) == null)OR가 아니라 AND 조건문이어야 할 것 같아서 질문드립니다. 제가 잘못 생각하고 있다면 말씀 부탁드립니다!
-
미해결Practical Testing: 실용적인 테스트 가이드
테스트 코드에서 필요한 생성자
안녕하세요 좋은 강의 감사합니다. 잘 듣고 있습니다. 두 가지 궁금한 것이 있습니다.테스트 코드에서만 필요한 생성자가 있다면, 그 생성자를 위해서 해당 객체나 엔티티에 생성자를 추가하는 과정이 옳은 것일까요? 아니면 애초에 그런 생성자가 필요한 상황 자체가 잘못된 것일까요? (프로덕션 코드를 테스트하는 것이 목적이니, 프로덕션 코드에서 이미 사용되고 있는 생성자를 쓰면 되지 않냐..) 모 회사에서는 @Builder 패턴은 무조건 restdocs 를 생성하는 경우에만(fixtures) 사용하라고 해서 프로덕션 코드에서는 무조건 생성자만 사용한 경우가 있었는데 @Builder 패턴의 사용 범위? 그런 것들은 어떻게 생각하시나요!? 강사님의 의견이 궁금합니다. 좋은 강의 감사합니다.
-
미해결스프링 시큐리티 OAuth2
OAuth2AuthorizedClient 이해 및 활용 강의 내용 질문
1 의문 ................................................강의 내용중에서oauth2Login(Customizer.withDefaults())없이oauth2Client(Customizer.withDefaults())만 사용한 경우에는 인가 처리만 하기 때문에 따로 인증 처리를 해주는 과정을 보여주셨는데 2 배경지식 ................................................oauth2Client 와 oauth2Login 의 차이는 1단계 처리 필터 : OAuth2AuthorizationRequestRedirectFilter 로 동일2단계 를 처리필터: OAuth2LoginAuthenticationFilter 대신 여기선 OAuth2AuthorizationCodeGrantFilter 사용 즉OAuth2LoginAuthenticationFilter 를 거치지않아OAuth2LoginAuthenticationFilter에서 사용하는OidcAuthorizationCodeAuthenticationProvider에서IdToken 을 추출해OidcIdToken를 만들고 OidcUser 를 로드하는 부분의 유무가 핵심적인 차이라고 생각이드는데요 그리고 OAuth2User는 인가 개념만 있지 인증 개념은 없다고 들었습니다 3 질문 ....................................................... 단순히 OAuth2User를 만들어 OAuth2AuthenticationToken을 SecurityContextHolder에 수동 저장한다고 해서 "인증된 사용자"로 간주되는 않아서로그아웃도 제대로 동작하지 않습니다 .물론 스프링 시큐리티 자체에서 세션,쿠키,SecurityContextHolder에 강제로 저장한 Authentication 없애기를 통해 일부는 처리는 되지만질문1 : keycloak 에서의 실제 세션은 로그아웃을 못하지않나요 ?@GetMapping("/logout") public String logout( HttpServletRequest request, HttpServletResponse response){ Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // 로그아웃 처리 SecurityContextLogoutHandler logoutHandler = new SecurityContextLogoutHandler(); logoutHandler.logout(request, response, authentication); // 로그아웃 요청을 위한 Keycloak 로그아웃 URL String logoutUrl = "http://localhost:8080/realms/oauth2/protocol/openid-connect/logout"; // 로그아웃 후 리디렉션할 URI String redirectUri = "http://localhost:8081/login"; // 로그아웃 후 돌아올 URL // 실제 ID Token을 가져오는 코드 // 로그아웃 URL에 필요한 파라미터들을 추가 String logoutRequestUrl = logoutUrl + "?id_token_hint=" + idTokenHint + "&post_logout_redirect_uri=" + redirectUri; // 로그아웃 요청을 Keycloak으로 리디렉션 return "redirect:" + logoutRequestUrl; }이런식으로 강제로 형식 만들려고 해도 mvc 에서 id_token을 참조할 수 있는 방법이없습니다 .디버깅으로 확인해보니scope 에 openId 를 추가해서 id_token이 있을거라고 생각했는데OAuth2AuthorizationCodeGrantFilter의 OAuth2AuthorizationCodeGrantFilter에서 authenticationResult 에 additionalParameters = {HashMap@7785} size = 4 "id_token" -> "ㅁㄴㅇㄹㄴㅇㅁㄻㄴㅇㅁㄴㅇㄹ" "session_state" -> "7a3b7dbb-ec62-4a07-8ef8-f67b17b2f3ac" "refresh_expires_in" -> {Integer@7818} 1800 "not-before-policy" -> {Integer@7820} 1746349855이런식으로 있긴하지만 사용하지않고 authenticationResult로부터 authenticationResult.getClientRegistration() 추출해서 OAuth2AuthorizedClient 만들어서 저장하고 끝내내요 private void processAuthorizationResponse(HttpServletRequest request, HttpServletResponse response) throws IOException { OAuth2AuthorizationRequest authorizationRequest = this.authorizationRequestRepository.removeAuthorizationRequest(request, response); String registrationId = (String)authorizationRequest.getAttribute("registration_id"); ClientRegistration clientRegistration = this.clientRegistrationRepository.findByRegistrationId(registrationId); MultiValueMap<String, String> params = OAuth2AuthorizationResponseUtils.toMultiMap(request.getParameterMap()); String redirectUri = UrlUtils.buildFullRequestUrl(request); OAuth2AuthorizationResponse authorizationResponse = OAuth2AuthorizationResponseUtils.convert(params, redirectUri); OAuth2AuthorizationCodeAuthenticationToken authenticationRequest = new OAuth2AuthorizationCodeAuthenticationToken(clientRegistration, new OAuth2AuthorizationExchange(authorizationRequest, authorizationResponse)); authenticationRequest.setDetails(this.authenticationDetailsSource.buildDetails(request)); OAuth2AuthorizationCodeAuthenticationToken authenticationResult; try { authenticationResult = (OAuth2AuthorizationCodeAuthenticationToken)this.authenticationManager.authenticate(authenticationRequest); } catch (OAuth2AuthorizationException var16) { OAuth2AuthorizationException ex = var16; OAuth2Error error = ex.getError(); UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString(authorizationRequest.getRedirectUri()).queryParam("error", new Object[]{error.getErrorCode()}); if (StringUtils.hasLength(error.getDescription())) { uriBuilder.queryParam("error_description", new Object[]{error.getDescription()}); } if (StringUtils.hasLength(error.getUri())) { uriBuilder.queryParam("error_uri", new Object[]{error.getUri()}); } this.redirectStrategy.sendRedirect(request, response, uriBuilder.build().encode().toString()); return; } Authentication currentAuthentication = this.securityContextHolderStrategy.getContext().getAuthentication(); String principalName = currentAuthentication != null ? currentAuthentication.getName() : "anonymousUser"; OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(authenticationResult.getClientRegistration(), principalName, authenticationResult.getAccessToken(), authenticationResult.getRefreshToken()); this.authorizedClientRepository.saveAuthorizedClient(authorizedClient, currentAuthentication, request, response); String redirectUrl = authorizationRequest.getRedirectUri(); SavedRequest savedRequest = this.requestCache.getRequest(request, response); if (savedRequest != null) { redirectUrl = savedRequest.getRedirectUrl(); this.requestCache.removeRequest(request, response); } this.redirectStrategy.sendRedirect(request, response, redirectUrl); }질문 2 : 강의(OAuth2AuthorizedClient 이해 및 활용)에서는OAuth2User를 만들어 OAuth2AuthenticationToken 을 저장하는 식으로 처리하셨는데 수업을 듣다 보니 이렇게 처리한 이유가 궁금해 질문 드립니다 .
-
미해결3. 웹개발 코스 [Enterprise Architecture(EA) X 전자정부프레임워크]
jdk-17로 해도 상관없나요?
자바 버전 jdk-17로 진행해도 문제 없나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderService의 .cancel() 메서드에 대해 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이 부분 관련해서 반복적으로 학습중인데 이해가 잘 되지 않아 질문드립니다! /* 취소 */ @Transactional public void cancelOrder(Long orderId) { //주문 엔티티 조회 Order order = orderRepository.findOne(orderId); //주문취소 order.cancel(); }이 부분에서 orderId"주문 PK" 를 인자로 받아 주문에 대한 데이터 order 를 조회해왔습니다.그다음 order.cancel(); 메서드를 호출하는데해당 메서드에는 파라미터로 아무것도 넣지 않았습니다. //==비즈니스 로직==// /** * 주문 취소 */ public void cancel(){ if (delivery.getStatus() == DeliveryStatus.COMP) { throw new IllegalStateException("이미 배송완료된 상품은 취소가 불가능합니다."); } this.setStatus(OrderStatus.CANCEL); for (OrderItem orderItem : orderItems) { orderItem.cancel(); } }그 다음 위의 Order 엔티티의 cancel 메서드가 호출이 되는데예외처리 부분을 지나 이제"해당 주문에 포함된(저장된) 주문품목(OrderItem) 의 addStock() 하는 메서드까지 연결이 됩니다.OrderService > Order > OrderItem > Item 까지의 순차적인 cancel 및 addStock() 메서드까지 실행이 완료되면OrderService의 cancelOrder메서드의 트랜잭션이 종료가 되어 flush가 발생/DB 쿼리가 날라감까지 제가 이해를 하고 있습니다.혹시 틀린 부분이 있다면 말씀부탁드리겠습니다!가장 헷갈리는 부분이 이건데,Order order.cancel() 이 부분에서order 라는 Order 엔티티 객체에 바로 cancel() 메서드를 사용했는데 /** * 주문 취소 */ public void cancel(){ if (delivery.getStatus() == DeliveryStatus.COMP) { throw new IllegalStateException("이미 배송완료된 상품은 취소가 불가능합니다."); } this.setStatus(OrderStatus.CANCEL); for (OrderItem orderItem : orderItems) { orderItem.cancel(); } }조회한 데이터는 Order 뿐인데 다음 코드가delivery.getStatus() 입니다.갑자기 delivery가 어디서 나온건지.. 모르겠습니다.예외처리가 끝나면 나오는 orderItem 또한 갑자기 무슨 데이터를 가지고 반복문을 돌리는지 모르겠습니다.제 짧은 지식의 추측상예외처리시에 delivery.getStatus() 는 Order엔티티와 1:1 관계이기에 delivery가 사용하게 될 때 지연로딩을 이용하여 delivery 데이터를 조회하여 사용하고OrderItem 또한 Order와 일대다관계이기에for (OrderItem orderItem : orderItems) { orderItem.cancel(); }이렇게 사용될 때 지연로딩을 이용하여Order pk를 가진 OrderItem 의 데이터를 가지고와 반복문을 돌리게 되는건가요??너무 헷갈리네요.. 제가 이해하고 있는게 맞나요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
AWS 환경 인프라 도표에서 private 서브넷 질문 드립니다 !
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 2챕터/5강 수강중입니다. 여기까지 이해하신 내용은 무엇인가요? 도커와 모니터링에 대해 전반적인 틀을 이해했습니다.질문 설명에서는 private subnet2에 데이터 베이스 서버를 배포 한다고 하셨는데 아래 도표에서 public서브넷으로 표기 되어있어서 혼동이 있습니다 ! private 서브넷이 맞는건가요 ?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
2주차 성능테스트 관련 질문입니다.
상황 :같은 테스트를 진행했는데 저는 성능이 너무 안나와서 고민입니다.문제 :이전 개인 프로젝트에서도 클라우드상에서 기본 API 응답 시간이 2초 가량 소요됐었는데, 그 때 당시에는 비지니스 로직이 무거워서 그랬나보나 싶었는데이번 실습에서도 이렇게나 느린 걸 보면 개인 PC의 성능이 안좋은 것 같습니다.(게임도 잘 돌아가고 네트워크도 절대 느린 편이 아닌데 말이죠...)질문 : 이력서에 성능 시간에 관해 쓸 때 잘 만들어진 코드임에도 이렇게 느리면 담당관 입장에서는 "이렇게 느린데 무슨 성능 향상을 했다는거야?" 하는 생각이 들 것 같습니다.실제로 http_reqs가 1.036077/s로 1초에 1명밖에 받지 못하고 있는데, 이 상태로는 이력서에 쓰는게 의미가 없을 거 같아서 어떤 식으로 테스트를 하는 게 좋을지 궁금합니다.아 참고로 이 테스트는 Bad Test 입니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 gradlew build 실패
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. 전부 해봤습니다. gradlew.bat 을 직접 폴더 내에서 눌러서 실행해보면 오류 코드고 뭐고 아무것도 확인할 수도 없이 바로 꺼져버립니다.jdk 24입니다. 그리고 커맨드를 열어서 cd 로 폴더 연결 후이대로 해보려고 해도 첫번째 사진처럼만 뜹니다. 다른 질문들을 다 찾아봐도 gradlew.bat 을 누르자마자 뭔가 보이기도 전에 꺼져버리는 케이스는 없어서 너무 고통스럽습니다. 도움을 주실 분 안 계실까요? https://drive.google.com/drive/folders/1r2uKWeNTWgDPhZMBnix_aDlhLFZClxPO?usp=sharing 파일 드라이브입니다
-
미해결스프링 핵심 원리 - 기본편
스프링의 싱글톤 패턴 설계 철학과 유지보수성
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요, 항상 좋은 강의 감사드립니다.스프링 공부시 설계철학은 유념하며 공부하려고 합니다.스프링이 싱글톤 패턴으로 채택한 이유는 웹애플리케이션에서 주로 쓰이기 때문에 고객 요청을 올때마다 객체 생성을 피하기 위해메모리 절약 목적으로 설계되었고, 또한 객체가 하나만 생성되니까 객체의 변경이 발생할 경우 하나만 수정하면 되므로 유지보수성이라고 이해하면 될까요?즉 설계철학은 객체지향적으로 설계하여 유지보수성을 늘리는 것이고 싱글톤 컨테이너는 객체가 하나만 생성되어 유지보수성을 높혀준다 라고 이해하면 될까요?
-
미해결코드로 배우는 스프링 웹 프로젝트 - Intermediate
@AuthenticationPrincipal
@AuthenticationPrincipal MemberVO memberVO이게 MemberVo 로 뽑을수 있는 이유가MemberVO implements UserDetails MemberVO 가 UserDetails를 구현했기때문에시큐리티컨텍스트에 MemberVO값이저장되어있기 떄문이라고 생각하면 될까요 ?
-
미해결스프링 시큐리티 OAuth2
UserInfo 엔드포인트 요청 실습
scope 을 openId 하나만 설정하더라도 OidcUserService의 loadUser() 함수 안의 분기문에서 DefaultOAuth2UserService 를 계속 호출하길래 확인해보니 keycloak 에서 "scope": "openid profile email"형태로 리턴이 와서 항상 if 문에 걸리네요 keycloak 정책이 바뀐건지는 몰라도 내부적으로 저절로 추가하는 거 같습니다 버전도 강의와 동일한 19.0.1 버전입니다
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
해결 방법?에 대한 고민
안녕하세요! 3주차 강의 중 3-9까지 수강하던 중 궁금한 점이 생겨 질문드립니다. 강의에서는 새로운 테이블을 만들고 배치를 적용하여 쿼리 실행 속도를 향상시키는 방법을 설명해주셨는데, 제가 듣기로 이직 준비를 하면서 "A안과 B안이 있었는데, 그 중 B안이 더 적합한 이유는 ~였다"는 식으로 여러 해결책을 비교하고 선택한 근거를 설명하는 것이 좋다는 조언을 자주 접했습니다. 그런데 이외에도 쿼리 성능을 튜닝하는 방법은 더 많을 거 같은데, 실무에서 그 방법들을 모두 비교한 뒤 선택하는 것이 현실적으로 쉽지 않을 것 같다는 생각이 들어서요.. 정리하자면 면접 자리에서 "왜 다른 방법은 고려하지 않았나요?"라고 질문이 들어올 수 있는데 이를 어떻게 준비해야 할지 궁금합니다.실무나 면접에서 성능 개선 경험을 어필할 때, 모든 방안을 다 시도해본 것처럼 설명해야 할까요?아니면, 제가 시도한 A안 중심으로 왜 그 방식이 효과적이었는지를 설명하고, 다른 방식도 있었다는 정도만 언급해도 괜찮을까요? 앞으로 성능 개선을 학습하고 경험을 쌓아갈 때 어떤 관점에서 문제를 접근하고 정리하면 좋을지도 함께 조언 주시면 감사하겠습니다.
-
해결됨스프링 핵심 원리 - 기본편
XmlBeanDefinitionStoreException 예외 발생하는 분들 참고하세요.
pdf에 있는 xml 코드를 그대로 복사해서 넣으면 줄바꿈되어 있는 부분으로 인해서 url이 제대로 인식되지 않아서 오류가 발생할 수 있습니다.아래 xml 코드를 복사해서 사용하시면 정상적으로 작동합니다.<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="memberService" class="hello.core.member.MemberServiceImpl"> <constructor-arg name="memberRepository" ref="memberRepository" /> </bean> <bean id="memberRepository" class="hello.core.member.MemoryMemberRepository" /> <bean id="orderService" class="hello.core.order.OrderServiceImpl"> <constructor-arg name="memberRepository" ref="memberRepository" /> <constructor-arg name="discountPolicy" ref="discountPolicy" /> </bean> <bean id="discountPolicy" class="hello.core.discount.RateDiscountPolicy" /> </beans>
-
해결됨스프링 핵심 원리 - 고급편
저장 순서
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.강의에서 sleep을 주석 처리하고나서실행결과가 처음엔 B -> A로 나오더라고요재실행했을 땐 A -> B 순서로 잘 나옵니다그래서 주석을 다시 풀고 실행한 뒤다시 주석 적용하고 실행시키니까처음만 B -> A 순서로 나오고그 뒤로는 A -> B 로 나오더라고요신기해서 질문남겨봅니다
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
테스트를 위한 코드
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 테스트를 위한 코드로 보이는 fun fixture 라는 생성자 만드는 코드를 엔티티 안에 생성해주셨는데테스트가 아니면 따로 사용되지 않을 것 같은 코드를 엔티티 단 안에 작성해도 괜찮나요?