묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결코드로 배우는 React with 스프링부트 API서버
중간에 나와있는 1분 미만 수업
로그인 페이지 설정 다음에 나온 저 두 가지 강의는 어떤 내용인걸까요??해당 수업 두 개 때문에 수료기준 미달로 떠서요 ㅠㅠ확인 부탁드립니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
안녕하세요. 공부하다가 막히는 부분이 있어서 질문드리는데 질문 내용이 ...
안녕하세요. 이 강의를 마치고 비동기 spring boot를 공부 하고 있습니다. Reactor이라고 부르던데 mvc와 크게 다른거 같지 않는거 같은데 코딩이 생각 보다 어렵네요....mvc랑 코딩 자체가 틀림 ... 솔직히 질문드리기가 너무 죄송합니다. 근데 답변 해줄 분이 안계셔서 ..여기에 질문 드리네요...... 질문 내용은 @Aspect 이딴걸 왜 하는거냐 입니다. class A아래 함수에 주석을 원래 하는거지만 주석을 제거 하려면 이걸 Aspect를 해야한다고 하네요....@GetMapping("/test/mdc") suspend fun testRequestTxid() { // withContext(MDCContext()) { logger.debug { "start MDC TxId" } delay(100) service.mdc() logger.debug { "end MDC TxId" } // } }이과정이 꽤나 복잡합니다. class B처럼요 class BMapping을 대신할 어노 테이션을 만드는거 내용이라고 생각 됩니다.classA에 @GetMapping을 하면 아래 class의 hindMdcContext를 사용하게끔 하는거 같아요...질문 드릴껀 이 과정이 왜 필요한거죠???의도가 잘 파악이 안되서요...trance id를 생성하고 class A가 완전히 처리 될때까지 블러킹 하기 위해서 그런거 같은데 이렇게 까지 해야되나 싶네요... 내용은 아직도 파악 중입니다. ^^ 현제 ProceedingJoinPoint가 뭔지 파악 중에 있고요 ... @Aspect class AspectConfig { @Around(""" @annotation(org.springframework.web.bind.annotation.GetMapping) """) fun hindMdcContext(jp: ProceedingJoinPoint): Any? { return if(jp.hasSuspendFunction) { val continuation = jp.args.last() as Continuation<*> val newContext = continuation.context + MDCContext() val newContinuation = Continuation(newContext) { continuation.resumeWith(it)} val newArgs = jp.args.dropLast(1) + newContinuation jp.proceed(newArgs.toTypedArray()) } else { jp.proceed() } } private val ProceedingJoinPoint.hasSuspendFunction: Boolean get() { val method = (this.signature as MethodSignature).method return KotlinDetector.isSuspendingFunction(method) } }빨리 비동기 강의좀 내주세요 ㅠ.ㅠ 수없는 인강을 들었지만 강사님 만큼 강의 잘하는 강의 못봤어요 ㅠ.ㅠ
-
미해결코드로 배우는 React with 스프링부트 API서버
6장 질문
6장 실습중 이미지가 안보이는 이유가 무엇일까요?빠른 답변 좀 부탁드립니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
여기까지 하고나니 Product가 깨집니다.
해당 회차까지 하고 나니 Product도 확인해 볼겸 들어가보니 사진도 안나오고 pname도 undefied로 나오네요 server 쪽에서 Authorization 의 값이 null이라고 뜨는게 이유 인거 같은데 제가 잘못 한게 있을까요? 아니면 뒤의 회차에서 해결하는 방법이 제시가 되는건가요??
-
미해결코드로 배우는 React with 스프링부트 API서버
개발 툴에 질문드립니다.
일단 수강 신청은 해놨는데 ...vscode ,intellij 쓰는 줄 알았는데 아닌거 같아서요 ...혹시 수업진행할 때 쓰는 툴이 구체적으로 어떻게 쓰는 건지알수 있을까요 ? vscode로만 다 하나요 ?
-
미해결코드로 배우는 React with 스프링부트 API서버
moveToList를 만들때 질문이 있습니다.
const moveToList = () => { navigate({ pathname: "../list", search: queryDefault }); };이걸 했을때 어떻게 http://localhost:3000/todo/read/13이주소에서 http://localhost:3000/todo/list로 바뀌는 건가요?..을 지워버리니까 http://localhost:3000/list로 바뀌어서 에러가 나더라고요 ../를 디렉토리처럼 한단계 전으로 돌아가는 걸로 이해하려고 해도 13의 한단계 전이나까 그럼 http://localhost:3000/todo/read/list 이게 되어야 하는것 같은데 ../가 어떤 뜻이길래 http://localhost:3000/todo/read/13로 제대로 나오는 건가요?
-
미해결코드로 배우는 React with 스프링부트 API서버
register 할때 formatter가 언제 적용이 되는 건가요?
json으로 date 파라미터를 보낼때 자동으로 변환 되서 들어간다는 건가요??
-
미해결코드로 배우는 React with 스프링부트 API서버
testUpdate를 하실때 질문이 있습니다.
강의에서는 명시적으로 todoRepository.save(todo);를 해주셨는데 어떤 강의에서는 더티체킹으로 업데이트를 하는게 좋다고 하는 말을 들었습니다. 보통 실무에서는 어떤 방식을 더 선호하나요?
-
미해결코드로 배우는 React with 스프링부트 API서버
업로드된 파일명 이상함
안녕하세요. 질문이 있습니다. "섹션 5 - 상품 API 서버 구성하기 - 파일 업로드 설정과 확인"에서 문의 드립니다.파일 업로드 테스트는 잘 실행 되지만 아래 그림처럼 업로드된 첨부파일 명이 이상합니다.강사님의 경우 UUID 값뒤에 OriginalFilename이 붙어있는데요, 제 경우에는 붙질 않습니다.아래 그림처럼 로그에도 이상히 값이 찍히질 않습니다.포스트 맨으로 테스트한 결과는 아래 그림과 같습니다.여기서 한가지 강사님이 실행하고 나서의 화면과 제가 실행하고나서의 화면은 차이가 좀 나는거 같습니다. 추축하자면 포스트맨으로 첨부파일이 제대로 첨부가 안된것으로도 보입니다. 아래 좀더 크게 캡춰해 보았습니다.분명히 파일을 선택해서 첨부를 했는데 위와 같은 화면으로 나옵니다.그결과 실제 업로된 파일들은 제대로 복사가 된 상태가 아닙니다. 디렉토리에 생성된 파일들은 아래와 같이 0 kb입니다.여기까지 작성된 소스는 강사님께서 진행하신 모든 내용을 다 반영하였습니다.제가 어떤걸 놓친게 있을까요? ------------------------------------------------------------------------------위를 다른 포스트맨 확장 프로그램으로 실행하니 잘 되네요. 감사합니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
url 주소에 값을 받아오지 못합니다
Request URL:http://localhost:3000/todo/read/$%7Bprefix%7D/$%7Btno%7D게시물 번호값인 tno를 int 로 받아오지 못하고 있습니다 어떻게 해야할까요?
-
미해결코드로 배우는 React with 스프링부트 API서버
완강 했어요 ^^
드디어 완강 하였네요.. 이 강의 난의도가 초급이라던데 어려운 부분도 많긴 했어요. 이제 중급 실력되는건가요? ^^;;; 스프링은 모든 내용이 이해가되긴한데 React 쪽이 어렵네요... 아마도 문법이 다양하고 오류 잡기도 어려워서 그렇겠죠? ㅎㅎㅎㅎ intelij 도 만기가 끝나가네요... visual studio code, intelij community학습 목적엔 위 2개로 개발 연습해도 되나요??다음으로 학습해야될 스프링 학습은 어떤걸 해야될까요? 잡 사이트 보니깐 코틀린 + 스프링은 쓰는 곳이 없네요... 인기가 없나... 진짜 매력적인 언어인데.
-
미해결코드로 배우는 React with 스프링부트 API서버
PageResponseDto 를 제네릭 타입으로 만드는 이유가 뭔가요?
dto 만들떄 제네릭 타입으로 만드는 특별한 이유가 있나요?
-
미해결코드로 배우는 React with 스프링부트 API서버
서비스계층 만들기 11분 10초 PageRequestDTO 에 Builder 설정 왜 하는 거에요?
package org.zerock.apiserver.dto; import lombok.Builder; import lombok.experimental.SuperBuilder; @SuperBuilder public class PageRequestDTO { @Builder.Default private int page = 1; @Builder.Default private int size = 10; }
-
미해결코드로 배우는 React with 스프링부트 API서버
섹션 4 리액트와 API서버 통신 조회기능 구현 화면 차이 문의 건
안녕하세요. 질문이 있습니다.섹션 4 리액트와 API서버 통신에서 조회기능 구현을 실행하였습니다.강사님 화면과 달리 저의 화면은 아래와 같이 나옵니다.위 부분중 차이 나는 부분을 아래 다시 캡춰했습니다.현재 스프링 부트는 아래와 같이 실행되고 있습니다.조금 확대해서 다시 아래 다시 캡춰했습니다.강사님은 한 화면에서 두개가 나오는 거 같은데요.제가 어떤걸 수정해야 하는지 알고 싶습니다.위 섹션 4 리액트와 API서버 통신에서 조회기능 구현에서 최초 연결 확인하는 부분까지 코드는 강의에 나온데로 진행하였습니다.부탁드립니다. 감사합니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
AccessDeniedHandler가 작동하지않습니다
@Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { try { 생략... SecurityContextHolder.getContextHolderStrategy().getContext().setAuthentication(token); filterChain.doFilter(request, response); } catch (Exception e) { log.info("---------------JWT ERROR!------------"); log.info(e); log.info(e.getMessage()); ObjectMapper mapper = new ObjectMapper(); String jsonStr = mapper.writeValueAsString(Map.of("error", "ERROR_ACCESS_TOKEN")); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); writer.println(jsonStr); writer.close(); } }강의의 JWT와 @PreAuthorize 이용하기 파트 후반부에 강의처럼 USER권한만 가진 사용자로 ADMIN권한이 필요한 메소드에 접근하니 포스트맨에서 AccessDenied exception이 뜨지않고 catch (Exception e)가 예외를 잡아버려서 { "error": "ERROR_ACCESS_TOKEN" }결과가 이렇게 나옵니다 이미 AccessDenied 핸들러도 시큐리티에 등록 시킨후 입니다ADMIN권한을 가진 사용자 토큰으로 요청을 보내면 원하는 데이터도 잘 나옵니다 catch로 잡아서 예외를 던질까 시도해봤는데 이유는 모르겠지만 Exception에서만 예외가 잡힙니다ㅠ그래서 여러가지 해결책을 알아봤는데첫번째catch (RuntimeException e) { log.info("---------------JWT ERROR!------------"); log.info(e); log.info(e.getMessage()); ObjectMapper mapper = new ObjectMapper(); String jsonStr = mapper.writeValueAsString(Map.of("error", "ERROR_ACCESS_TOKEN")); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); writer.println(jsonStr); writer.close(); }이렇게 RuntimeException으로하면{ "error": "ERROR_ACCESSDENIED" }AccessDenied 핸들러가 잘 작동하구요 두번째SecurityContextHolder.getContextHolderStrategy().getContext().setAuthentication(token); } catch (Exception e) { log.info("---------------JWT ERROR!------------"); log.info(e); log.info(e.getMessage()); ObjectMapper mapper = new ObjectMapper(); String jsonStr = mapper.writeValueAsString(Map.of("error", "ERROR_ACCESS_TOKEN")); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); writer.println(jsonStr); writer.close(); } filterChain.doFilter(request, response);doFilter를 try catch 밖에 두어도 AccessDenied 핸들러가 잘 작동합니다세번째@ExceptionHandler(AccessDeniedException.class) public ResponseEntity<?> notAuthorized(AccessDeniedException e) { return ResponseEntity.status(HttpStatus.FORBIDDEN).body(e.getMessage()); }RestControllerAdvice로 하면 핸들러가 작동안하긴해도 예외처리가 가능했습니다근데 문제는 왜 원래코드에서 영상처럼 작동을 안하는지 이유를 모르겠습니다 제가 빠트린부분이 있을까요?스프링부트 버전도 똑같이 맞춰보기도 했습니다
-
해결됨코드로 배우는 React with 스프링부트 API서버
로그인 성공과 실패 처리 강의중 에러 발생하여 문의드립니다.
안녕하세요.user(1~9)@aaa.com 계정 생성 후 postman 으로 /api/member/login 호출하여 로그인 성공 후, ApiLoginSuccessHandler 으로 빠지는 부분을 확인 하려는 참입니다. 그런데 postman 으로 호출시 loadUserByUsername 에서 return 이후 successHandler 가는 도중 실패가 뜹니다. Failed to process authentication requestorg.springframework.security.authentication.BadCredentialsException: 자격 증명에 실패하였습니다. DB에 있는 패스워드와 1111을 매칭해봐도 true 로 반환됩니다. 어떤부분이 문제 일까요...?
-
미해결코드로 배우는 React with 스프링부트 API서버
엔티티 클래스 만들기 챕터에서 테이블 왜 두개 만들어진 건가요?
엔티티 클래스 만들기 챕터에서 테이블 왜 두개 만들어진 건가요? 엔티티 클래스 만들기 챕터 8분 36초에서 테이블이 왜 두개 만들어 졌나요?
-
미해결코드로 배우는 React with 스프링부트 API서버
세션 10번 완성 소스가 잘못올라온거 같아요
세션 10번 강의 보면서 따라가고 있는데 org.springframework.dao.DataIntegrityViolationException: could not execute statement [(conn=335) Cannot add or update a child row: a foreign key constraint fails (`apidb`.`tbl_cart_item`, CONSTRAINT FKs7vg62w3nq7igdxgssq1u0biw FOREIGN KEY (`product_pno`) REFERENCES tbl_product (`pno`))] [insert into tbl_cart_item (cart_cno,product_pno,qty) values (?,?,?) returning cino]; SQL [insert into tbl_cart_item (cart_cno,product_pno,qty) values (?,?,?) returning cino]; constraint [null] 에러가 나오더라구요..그래서 제가 세션 10 완성 소스 보면서 잘못된 곳을 찾아 보려는데 ... 올라건 소스가 잘못된거 같아요... 세션 10의 소스가 아닙니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
LocalDateFormatter에 대해서 궁금한 점이 있습니다.
public ResponseEntity searchLinkOrderNumberOutput( @ApiParam("주문 번호") @RequestParam(required = false) List<String> orderNumbers, @ApiParam(name = "startDate", value = "yyyyMMdd", required = true) @RequestParam String startDate, @ApiParam(name = "endDate", value = "yyyyMMdd", required = true) @RequestParam String endDate, @ApiParam(name ="confirmationStatus", value="확정여부(Y/N)") @RequestParam String confirmationStatus, @ApiParam(name = "pageSize", value = "한 페이지에 보여줄 주문 개수 (미 입력시 기본값 20)") @RequestParam(defaultValue = "20") int pageSize, @ApiParam(name = "pageNumber", value = "데이터를 조회 할 페이지 숫자 (미 입력시 기본값 1)") @RequestParam(defaultValue = "1") int pageNumber) {궁금한 점이 있습니다 선생님 만일 controller에서 string으로 날짜값을 받으면 이제 별도의 파싱작업을 거쳐서 LocalDateTime 형식으로 변환해 줘야하는데 LocalDateFormatter을 사용하면 해당 작업을 생략할 수 있는건가요???
-
미해결코드로 배우는 React with 스프링부트 API서버
ProductSearchImpl 관련 질문드립니다.
@Override public PageResponseDTO<ProductDTO> searchList(PageRequestDTO pageRequestDTO) { log.info("----------------------searchList-------------------------"); Pageable pageable = PageRequest.of( pageRequestDTO.getPage() -1, pageRequestDTO.getSize(), Sort.by("pno").descending()); QProduct product = QProduct.product; QProductImage productImage = QProductImage.productImage; // from 절 JPQLQuery<Product> query = from(product); // join // @ElementCollection을 join 할때는 아래와 같이 사용해야합니다. // product.imageList를 productImage로 사용하겠다. query.leftJoin(product.imageList, productImage); query.where(productImage.ord.eq(0)); Objects.requireNonNull(getQuerydsl()).applyPagination(pageable,query); List<Tuple> productList = query.select(product,productImage).fetch(); // 쿼리를 실행시키기 위함. long count = query.fetchCount(); log.info("======================="); log.info(productList); return null; }이 코드에서 return 값을 넘기고 싶어서 수정하는데 어떻게 해야 값이 넘어가는지를 잘 모르겠습니다...TodoSearchImpl에서는 new PageImpl<>() 사용하셔서 넘기셨는데 여기서는 어떻게 처리해야 될까요??2. ProductServiceImpl의 getList() 메서드와 동일한 역할인거같은데, ProductSearchImpl 에서는 querydsl을 사용하셔서 보여주신거고 ProductServiceImpl에서는 jpa를 사용하는 방법을 보여주신게 맞는지 궁금합니다!