묻고 답해요
139만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결코드로 배우는 React with 스프링부트 API서버
6장 상품 등록을 이미지 없이 등록 후 getList 할 때 질문
안녕하세요 6장 상품 등록을 이미지 없이 등록을 해봤는데요 예를 들어 상품번호가 17번이면product_image_list 테이블에 17번(product_pno)이등록되지 않아서 left join이 걸리지 않아 리스트를 호출시 해당 번호의 상품만 호출이 안되더라구요이럴 경우에는 어떠한 방법으로 해결할 수 있을지 궁금하여 질문드립니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
AWS EC2 Launch Template 생성 문의 - 빈즈토크 배포 이슈
안녕하세요. 한가지 문의 드립니다.부록_AWS 빈즈톡, RDS, S3 자료.pdf 를 보고 있습니다.7 (/ 45) 페이지에서 보면 정상적으로 환경 구성이 완료되면 configurations 결과 화면이 잘 출력됩니다.헌데 일부 계정 아마도 최근에 생성한 aws 계정은 이게 정상적으로 진행이 안되고 아래와 같은 메시지가 나옵니다.Creating Auto Scaling launch configuration failed Reason: Resource handler returned message: "The Launch Configuration creation operation is not available in your account. Use launch templates to create configuration templates for your Auto Scaling groups. (Service: AutoScaling, Status Code: 400, Request ID: 850290f7-96b3-4229-81dc-966dbee4d735)" (RequestToken: 44311bf6-616a-3270-9235-5c2d1993a1b7, HandlerErrorCode: GeneralServiceException) AWS EC2 Launch Template을 반드시 생성해야 7 (/ 45) 페이지에서 보이는 환경 구성이 정상적으로 완료가 되고 그 결과 configurations 화면이 잘 출력되는 것으로 최근 변경 된 것 같습니다.문제는 이 AWS EC2 Launch Template 생성에 대한 부분에서 벽에 막힌 상태입니다.어떻게 하면 좋은지 요청 드려 봅니다.감사합니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
리액트 코드 스플리팅
맨 처음 리액트 코드스플리팅 에서 막히는데요,,,ㅠㅠ강의 내용이랑 똑같이 했는데 막히는데 한번봐주실수있으실까요??그리고 코드를 작성하고 리액트화면을 그냥 새로고침하면 코드가적용이되는게 맞죠? 제가하면 지금 mainPage div만 나오고 나머지는 나오지않아서요 import { Suspense, lazy } from "react"; import { createBrowserRouter } from "react-router-dom"; // require 대신 import로 수정 const Loading = <div>Loading...</div>; const Main = lazy(() => import("../pages/mainPage")); // lazy 게으르다 -> 코드 스플리팅 const About = lazy(() => import("../pages/about")); // lazy 게으르다 -> 코드 스플리팅 const root = createBrowserRouter([ { path: '', element: <Suspense fallback={Loading}><Main /></Suspense> }, { path: 'about', element: <Suspense fallback={Loading}><About /></Suspense> } ]); export default root; import React from 'react' import { Link } from 'react-router-dom' const mainPage = () => { return ( <div className = 'text-3xl'> <div className={'flex'}> <Link to ={'/about'}>About</Link> </div> <div>mainPage</div> </div> ) } export default mainPage import React from 'react' import { Link } from 'react-router-dom' const about = () => { return ( <div className={'text-3xl'}> <div className={'flex'}> <Link to ={'/about'}>About</Link> </div> <div>About page</div> </div> ) } export default about import React from 'react' import { RouterProvider } from 'react-router-dom' import root from './router/root' const App = () => { return ( <RouterProvider router={root} /> ) } export default App
-
미해결코드로 배우는 React with 스프링부트 API서버
API 구축시 인텔리제이
안녕하세요 이제 시작해보려구하는데 ㅎㅎAPI 구축시 인텔리제이 사용해도 문제없나요??
-
미해결코드로 배우는 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 로 반환됩니다. 어떤부분이 문제 일까요...?