묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
한번만 질문 봐주십쇼..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 검증 부분을 수강하고 프로젝트에 적용하는데 잘 모르겠는 부분이 생겨서 질문드립니다@PostMapping("/blog/post") public String addOrUpdate(@ModelAttribute RequestPost requestPost, BindingResult bindingResult, Model model){ requestPostValidation.validate(requestPost,bindingResult); if(bindingResult.hasErrors()){ System.out.println(bindingResult); model.addAttribute("post",requestPost); return "addOrUpdate"; } if(requestPost.getId()==null){ postService.savePost(requestPost.toPost()); return "redirect:/blog"; } else{ postService.updatePost(requestPost); ResponsePost post = new ResponsePost(postService.findById(requestPost.getId())); model.addAttribute("post",post); return "redirect:/blog/post/"+post.getId(); } }이게 컨트롤러부분이고 @Component public class RequestPostValidation implements Validator { @Override public boolean supports(Class<?> clazz) { return RequestPost.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { RequestPost requestPost = (RequestPost)target; if(!StringUtils.hasText(requestPost.getTitle())){ errors.rejectValue("title","noTitle"); } if(!StringUtils.hasText(requestPost.getContent())){ errors.rejectValue("content","noContent"); } } }이게 검증하는 클래스입니다noTitle.requestPost.title=제목은 필수입니다. noContent.requestPost.content=내용은 필수입니다.에러 메시지는 이렇게 만들어 줬구요<form action="/blog/post" method="POST" th:object="${post}"> <input type="text" th:value="${post.id}" name="id" style="visibility: hidden;"> <h3>제목</h3> <input th:if="${post.id==null}" type="text" placeholder="제목 입력하시오" th:value="${post.title}" name="title"> <input th:if="${post.id!=null}" type="text" th:value="${post.title}" name="title"> <div th:errors="*{title}"> 제목 오류 </div> <h3>내용</h3> <textarea th:if="${post.id==null}" placeholder="내용 입력하시오" th:text="${post.content}" name="content"></textarea> <textarea th:if="${post.id!=null}" th:text="${post.content}" name="content"></textarea> <div th:errors="*{content}"> 내용 오류 </div> <br> <div class="center"> <input th:if="${post.id==null}" type="submit" value="등록"> <input th:if="${post.id!=null}" type="submit" value="수정"> <input th:if="${post.id==null}" type="button" th:onclick="|location.href='@{/blog}'|" value="취소"> <input th:if="${post.id!=null}" type="button" th:onclick="|location.href='@{/blog/post/{id}(id=${post.id})}'|" value="취소"> </div> </form> 이게 뷰 부분입니다1.컨트롤러에서 @ModelAttribute RequestPost requestPost 를 통해서 form 정보를 받는데 @ModelAttribute니까 Model에 requestPost 객체가 저장된다고 알고 있습니다 2.그런데 뷰 에서 form이 th:object="${post}"로 되어있어서 model.addAttribute("post",requestPost)로 post이름으로 requestPost 객체를 넣었습니다 3.그럼 제 생각에는 Model에 post이름으로 requestPost 객체가 있으니까 th:object="${post}" 매핑되어서 th:errors="*{title}" 를 통해 title필드가 문제가 있으면 오류메시지가 출력될거라 생각했는데 안됩니다. 4.여러가지를 시도를 해봤는데 model.addAttribute("post",requestPost) 를 하지 않고 @ModelAttribute("post")RequestPost requestPost 를 하고 메시지를 noTitle.post.title=제목은 필수입니다. 로 바꾸니까 그제서야 출력이 되더라고요 5.이게 BindingResult랑 Model에 저장된 객체의 이름이 달라서 이런 일이 발생하는 건가요? 제 생각으로는 model.addAttribute("post",requestPost) 하면 Model에 이름이 post로 저장이 되서 th:object="${post}"랑 매핑은 되는데 th:errors="*{title}"이거는 post 이름으로 BindingResult에서 객체이름을 찾는데 제가 올린코드에서는 requestPost로 저장되어 있어서 못찾는 건가요? 질문을 깔끔하게 하려고 여러번 지웠다 썻다 하는데도 난잡해서 죄송합니다. 제일 궁금한건 컨트롤러에서 @ModelAttribute RequestPost requestPost,BindingResult bindingResult 이렇게 인자를 받고 model.addAttribute("post",requestPost) 해서 뷰로 넘겼을때 th:object="${post}"를 하면 post이름으로 객체를 찾아서 requestPost랑 매핑은 되는데 th:errors="*{title}"를 통해서 오류를 검사할때는 BindingResult에서 post이름으로 객체를 찾아서 오류 출력하는데 현재 BindingResult에는 requestPost로 객체이름이 저장되어 있으니까 출력하지 못하는 걸까요? 한번만 봐주시면 감사하겠습니다..
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
강의자료 부탁드립니다.
강의자료 부탁드립니다. someday3502@naver.com
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
8000번 포트 404에러 & 유레카 등록된 인스턴스
유레카에 등록된 게이트웨이 서비스의 인스턴스 아이디도 따로 설정을 해줘야하는지 문의드립니다. 자꾸 저렇게 뜨네요.. 포트 8000번으로 요청시에 404 에러가 뜹니다. 어떤 부분을 수정해야할까요? <사용자 조회시> <로그인시>
-
해결됨팝스타 공식 뮤비 제작 & 유튜브 2천만 뷰 크리에이터의 애니메이트 X 이모티콘 클래스
밑그림&드로잉 파일 문의
안녕하세요. 열심히 배우고있는 학생입니다.다름 아니라 열심히 찾았는데 못찾겠어서 질의드립니다.밑그림이랑 드로잉 완료 파일은 어디서 다운 받을 수 있나요?ㅠㅠ기본적인 질문 죄송합니다!!!!
-
미해결실전! 스프링 데이터 JPA
JPA join 관련 질문
안녕하세요 JPA 학습중 join 관련하여 질문 드립니다. public class Score{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long scoreId; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "game_id") private Game game; }Score라는 클래스가 있고, Game 엔티티와 ManyToOne 연관관계가 있을 때 public interface ScoreRepository extends JpaRepository<Score,Long>{ @Query("select s from Score s join s.game g left join s.member m left join m.profileImg p " + "where g.gameId=:gameId and (p.type = 'PROFILE' OR p IS NULL) order by s.totalScore desc") Slice<Score> findByGameId(@Param("gameId") Long gameId, Pageable pageable); } Game별 Score를 가져올 경우 해당 게임에 등록된 스코어가 없는 경우 결과가 반환되지 않아서 Game 엔티티의 게임명이나 게임타입 같은 게임정보를 가져올수가 없습니다. right join을 사용해보려 했는데 리턴값이 Slice<Score>라서 그런지 형변환 오류가 발생하는 것 같구요..이럴경우에는 Game 엔티티에서 @OneToMany 연관관계를 사용해서 결과를 가져와야하나요?? 그럴 경우 페이징은 어떻게 해결해야하는지 잘모르겠습니다..
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
안녕하세요. spring boot 에서 하는중인데 질문 드립니다.!
spring boot 로 프로젝트 만들고 하는중이라서 부트에서 테스트 하고 있는데요. 구글링 해서 테스트 세팅하고 modelAndView 까지 했는데 view 값은 가져오는데 model 값이 안가져와지네요.... @MockBean 으로 Service 를 bean 등록 시키고 Service 에서 getList 할때 뭔가 잘안되는거 같은데 혹시 어떤게 잘못됬는지 확인 가능하신가요 ?? ControllerService testController testConstroller test 결과
-
해결됨초보자를 위한 BigQuery(SQL) 입문
수강 다짐
강의 목적💡 이 강의를 통해서 얻고 싶은 3가지는?여러 테이블이 존재하는 상황에서 불편하지 않게 데이터를 추출할 수 있다.실제 데이터 추출에서 이런 SQL 쿼리를 쓰면 되겠다라고 판단이 들고 싶다.실제 프로젝트에서 이제 어떻게 쿼리문을 작성하면 되겠다라고 판단이 들고 싶다. 💡 그걸 위해 내가 할 노력은?생각의 흐름을 먼저 정리하고 → 쿼리 문으로 옮기기47문제 중에서 상,중,하로 판단하여 어려웠던 쿼리 문만 모아서 2회독 하기47문제 중에서 자주 쓰이고 필요한 SQL 치트 시트 표 만들기💡 수강한 이후 내가 생각하는 나의 변화는?2회독을 하여, 여러 테이블이 존재하는 상황에서 어떻게 쿼리문을 작성할 수 있는 능력이 되었으면 좋겠습니다. (chat gpt없이)
-
해결됨시스템엔지니어가 알려주는 리눅스 기초편 Bash Shell Script
기초편 교안 실행 안될 경우 참고사항.
우분투 22.04에서 clone 받아서, ./main.sh 를 실행시 아무것도 안뜹니다. 1보니까 main.sh를 실행하면 select 파일이 생성됩니다. (같은 경로)>> 사용자가 선택한 메뉴 번호 또는 에러 등을 로깅하는 것으로 보입니다. 해당 파일을 cat, vi 등을 통해 확인해보면 dialog가 없다고 나옵니다.그러면 sudo apt install dialog 해준 후, 다시 실행해보면 아마 정상적으로 될겁니다! 2dialog 메뉴 떴을 때, 아무것도 선택안하고 OK 선택하면 종료됩니다.space 키 또는 마우스를 활용해서 듣고자 하는 강의 목차를 선택한 후 OK 누르시면 됩니다! 파일을 열어서 분석해보면 금방 파악이 되는 것이지만,혹시나 리눅스 입문한지 얼마 안되어서 잘 모르시는 분들도 계실까봐 작성하였습니다.
-
미해결AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)
RDS service-connect
안녕하세요. 강사님RDS를 express-app과 연결해보려고 하는데요.두 서비스간 통신은 설명해주신 구조와 유사하게 private network를 통해서 하려고합니다. 그러면 express-app을 만들때,service-connect를 client and server로 설정을 하면 되나요?아니면 로드밸런서를 따로 둔 다음 security group을 설정해야할까요?
-
미해결
윈도우 cmd에서 gradlew bulid 시 오류관련
안녕하세요.김영한님 스프링 입문 하는 중에, cmd에서 gradlew build시 "Please set the JAVA_HOME variable in your environment to match thelocation of your Java installation." 에러가 뜨는데,구글링이랑 인프런 질문 참고해도 안되네요.. 원인을 모르겠어요. jdk 경로시스템 환경변수ㅠㅠ
-
미해결Next + React Query로 SNS 서비스 만들기
use server를 클라이언트 컴포넌트에서 사용시 에러
안녕하세요 섹션3의 3번째 강의 server action을 보고 있는데요const submit에서 에러가 발생해서 질문합니다.const submit에서 서버액션을 사용하기 위해 "use server"를 넣었는데 다음과 같은 에러가 발생합니다../src/app/(beforeLogin)/_component/SignupModal.tsx Error: × It is not allowed to define inline "use server" annotated Server Actions in Client Components. │ To use Server Actions in a Client Component, you can either export them from a separate file with "use server" at the top, or pass them down through props from a Server Component. │ │ Read more: https://nextjs.org/docs/app/api-reference/functions/server-actions#with-client-components │ ╭─[/home/tpark/SNS/z-com/src/app/(beforeLogin)/_component/SignupModal.tsx:3:1] 3 │ import { redirect } from "next/navigation"; 4 │ 5 │ export default function SignupModal() { 6 │ ╭─▶ const submit = async (formData: FormData) => { 7 │ │ "use server"; 8 │ │ if (!formData.get("id")) { 9 │ │ return "아이디를 입력하세요."; 10 │ │ } 11 │ │ if (!formData.get("name")) { 12 │ │ return "닉네임을 입력하세요."; 13 │ │ } 14 │ │ if (!formData.get("password")) { 15 │ │ return "비밀번호를 입력하세요."; 16 │ │ } 17 │ │ if (!formData.get("image")) { 18 │ │ return "이미지를 업로드하세요."; 19 │ │ } 20 │ │ if (!formData.get("id")) { 21 │ │ return "이미 사용 중인 아이디입니다."; 22 │ │ } 23 │ │ 24 │ │ let shouldRedirect = false; 25 │ │ try { 26 │ │ const response = await fetch( 27 │ │ `${process.env.NEXT_PUBLIC_BASE_URL}/api/users`, 28 │ │ { 29 │ │ method: "post", 30 │ │ body: formData, 31 │ │ credentials: "include", 32 │ │ } 33 │ │ ); 34 │ │ console.log(response.status); 35 │ │ if (response.status === 403) { 36 │ │ return { message: "user_exists" }; 37 │ │ } 38 │ │ console.log(await response.json()); 39 │ │ shouldRedirect = true; 40 │ │ } catch (err) { 41 │ │ console.error(err); 42 │ │ } 43 │ │ if (shouldRedirect) { 44 │ │ redirect("/home"); 45 │ │ } 46 │ ╰─▶ }; 47 │ return ( 48 │ <> 49 │ <div className={style.modalBackground}> ╰────서버 액션부분을 다른 컴포넌트로 분리해서 사용해야 하는거 같은데 강의 내용에서는 바로 진행이 되서 제가 어느부분이 잘못되었는지 잘 모르겠습니다.그리고 혹시 최상단에 "use client"를 작성하지 않았기에 이건 서버컴포넌트인줄 알았는데 에러메세지에 클라이언트 컴포넌트에서 사용할 수 없다는건 현재 컴포넌트가 클라이언트 컴포넌트인건가요...? 아래는 제가 작성한 코드입니다. import style from "./signup.module.css"; import BackButton from "./BackButton"; import { redirect } from "next/navigation"; export default function SignupModal() { const submit = async (formData: FormData) => { "use server"; if (!formData.get("id")) { return "아이디를 입력하세요."; } if (!formData.get("name")) { return "닉네임을 입력하세요."; } if (!formData.get("password")) { return "비밀번호를 입력하세요."; } if (!formData.get("image")) { return "이미지를 업로드하세요."; } if (!formData.get("id")) { return "이미 사용 중인 아이디입니다."; } let shouldRedirect = false; try { const response = await fetch( `${process.env.NEXT_PUBLIC_BASE_URL}/api/users`, { method: "post", body: formData, credentials: "include", } ); console.log(response.status); if (response.status === 403) { return { message: "user_exists" }; } console.log(await response.json()); shouldRedirect = true; } catch (err) { console.error(err); } if (shouldRedirect) { redirect("/home"); } }; return ( <> <div className={style.modalBackground}> <div className={style.modal}> <div className={style.modalHeader}> <BackButton /> <div>계정을 생성하세요.</div> </div> <form action={submit}> <div className={style.modalBody}> <div className={style.inputDiv}> <label className={style.inputLabel} htmlFor="id"> 아이디 </label> <input id="id" name="id" className={style.input} type="text" placeholder="" required /> </div> <div className={style.inputDiv}> <label className={style.inputLabel} htmlFor="name"> 닉네임 </label> <input id="name" name="name" className={style.input} type="text" placeholder="" required /> </div> <div className={style.inputDiv}> <label className={style.inputLabel} htmlFor="password"> 비밀번호 </label> <input id="password" name="password" className={style.input} type="password" placeholder="" required /> </div> <div className={style.inputDiv}> <label className={style.inputLabel} htmlFor="image"> 프로필 </label> <input id="image" name="image" className={style.input} type="file" accept="image/*" required /> </div> </div> <div className={style.modalFooter}> <button type="submit" className={style.actionButton}> 가입하기 </button> </div> </form> </div> </div> </> ); }
-
해결됨개발자를 위한 쉬운 도커
docker compose 사용시 프론트엔드에서 백엔드 연결
프론트엔드를 nextjs를 사용하고, 백엔드는 nestjs를 사용중입니다. nextjs에서 .env파일에 backend_url을 입력해놓고, nextjs에서 process.env.backend_url 을 통해서 사용중입니다. docker compose를 사용하여 백엔드와 프론트엔드를 실행 시키면 같은 docker network에 붙어있고compose의 프론트엔드에 environment에 backend_url을 backend이름으로 적었을 경우backend url이 아닌 현재 url을 불러옵니다. 어디가 문제일까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
빅데이터분석기사 기출 3회 작업형1
다른 문제집 질문도 가능 할까요? 문제 풀이 하던 중 답이 다르게 나와 질문드리고 싶어 일단 이렇게 글 올립니🥲강의 다 듣고 빅분기 문제집에 있는 기출 문제를 풀이 하던 중에 기출 3회 작업형1 2번 문제에서 강의에서 해주신 풀이 대로 풀어 보았는데 책에 있는 답이랑 달라서 질문드려요😢 해설에는 76이 나오는데 방법2 처럼 풀이하면 71이 나오네요😭 두개 다른 점이 있나요?? 봤을때 같은 답 구하는게 맞는거 같은데 왜 다른 값이 나오는지 이상해서요다음은 국가별 연도별 인구 10만명당 결핵 유병률 데이터 세트이다. 2000년도의 국가별 결핵 유병률 데이터세트에서 2000년도의 평균값보다 더 큰 유병률값을 가진 국가의 수를 계산하시오.!git clone https://github.com/AnalyticsKnight/yemoonsaBigdata/ # 데이터 불러오기 import pandas as pd df = pd.read_csv("/content/yemoonsaBigdata/datasets/Part3/302_worlddata.csv") df.head() # 방법1(해설) df_2000 = df[df['year']== 2000].drop('year', axis =1) df_2000.index = ['value'] df_2000_T = df_2000.T # print(df_2000_T['value'].mean()) rst_df = df_2000_T[df_2000_T['value'] > df_2000_T['value'].mean()] print(len(rst_df)) # 방법2 df = df.T df.head() m = df[1].mean() print(sum(df[1] > m))
-
미해결프로젝트로 배우는 Python 챗봇 & RAG - LangChain, Gradio 활용
text-splitters 설치 중 권한문제
langchain-text-splitters 설치 중 사진과 같이 액세스 거부 코드가 되었는데 조치방법을 알수 있을까요? 관리자권한으로 powershell을 실행했음에도 이렇게뜨네여ㅜㅜ
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
픽셀아트 적용 하는방법
안녕하세요나중에 출시 할때 리소스는 사용 금지 라고하셨는데만약 픽셀이나 다른거 적용할때애니메이션은 변경하거나 뼈대같은거 사용못하면 어떻게 해야할지 ㅠㅠ 이미지 변경하면 호환하는방법 알수있나요...?? 어떻게 내 게임을 만들어야할지 막막해서질문해봤습니다 ㅠ
-
미해결Do it! Node.js 프로그래밍 입문
delete 부분에서 13:28 질문있습니다
13:28 delete 부분에서 강의를 보면 const contact = await Contact.findById(id);를 통해서 정보를 contact 변수에 할당하고막상 deleteOne함수는 Contact에서 합니다 contact에서 deleteOne을 사용하면 안되나요?Contact에서와 contact에서 deleteOne을 사용했을 때의 차이가 궁금하고 Contact에서 delete를 할 것이면 왜 굳이 새로운 변수에 할당을 해주는 것인지 궁금합니다
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
불리언 선언
14:00 부분에서 uint32 크기로 불리언을 선언하셨는데 uint8로 선언하는 것과 차이점이 무엇인가요? uint8로 수정하여 실행해도 기능은 동일하게 작동되는 것을 보고 궁금증이 생겨 질문드립니다.
-
미해결IT인을 위한 ELK 통합로그시스템 구축과 활용
Elasticsearch 설치전 java설치 관련건
안녕하세요docker에 Elasticsearch를 설치할 경우 Java설치는 어다에 하는지docker hoster(우분투)에 하는지 아니면 docker container에 설치 하는지 궁금합니다
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Mvc구조에서 뷰를 반환하지 않고 json을 반환하려면 어디서 구조 변경이 일어나나요?
스프링 Mvc구조를 설명해주실때 4번 핸들러 호출 이후 5번 ModelAndView를 반환한다고 되어 있는데 모델과 뷰애서 모델은 ssr에서 사용할 데이터들이 담겨 있는 모델에서 데이터를 꺼내어서 타임리프나 jsp 에서 사용할 수 있도록 데이터가 담긴 박스를 반환해주는 것이고 뷰는(타임리프를 사용한다고 할 때) 어떤 html에 모델을 넘겨줄것인지 결정해주는 부분으로 이해하였습니다. 이 방법은 앱 클라이언트처럼 json형식으로 데이터를 반환해야 하는 클라이언트를 이용할 때는 사용하지 못하는 방법으로 이해가 되는데 (json데이터를 요구하는 클라이언트에게는 뷰를 반환하여도 의미가 없는 데이터 이기 때문에) 어디서 구조를 변경해야 json 데이터를 반환해 줄 수 있는건가요?
-
미해결실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(25년 Update)
네이버 유입 검색어 및 이전 검색어 이벤트 세팅
선생님 안녕하세요,알찬 GA4 수업 감사합니다!다름이 아니라, GA4와 태그매니저에서 자사몰로 유입된 네이버 검색어 및 이전 검색어에 대한 이벤트 세팅을 하고 결과를 보고서로 보고 싶은데, 여러 글들을 보면서 따라해보았지만(주로 글들은 유니버셜 애널리틱스 기준) 계속 실패하고 있습니다ㅜ 어떻게 하면 좋을지 조언 좀 부탁드리겠습니다. 제가 참고했던 링크)https://ogaeng.com/googleanalytics-previous-query/