묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Vue 강의 끝판왕 : Nuxt 3 완벽 마스터
메타 태그 질문입니다.
안녕하세요Nuxt3를 이용해서 서비스를 개발중인 수강생입니다. 저는 middleware단에 useSeoMeta를 사용해서, 각 페이지별로 메타태그가 들어가게 해놓고,일부 페이지는 axios 모듈로 api 서버에 request하고 response받은 값을 useHead()를 통해 meta태그로 설정하려고 하고 있습니다. 빌드해서 확인해보니, 콘솔에는 해당 페이지에 사용하고자 하는 메타태그가 잘 찍히는데, 막상 페이스북 공유하기 버튼이나 카카오톡에 링크를 붙여넣는등의 행위를 할때 이미지나 타이틀등이 안보입니다. 미들웨어에서 페이지의 메타태그를 한번 씌워놓으면 해당 pages 폴더의 vue파일에서 다시 메타태그 설정이 안되는지 궁금하고, api response값을 메타태그에 사용하려면 어떻게 하는지 궁금합니다. 크롬 개발자도구에서 head 부분을 보면, 메타 태그는 잘 들어가 있는걸 확인할 수 있었습니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
섹션6 04-05 몽구스 부분 수강중입니다.
backend 폴더 통합 터미널에서 mongoose를 설치하고,docker-compose build를 했는데 이런 에러가 계속해서 뜹니다.해결해보려고 에러 메세지를 읽어보니, mongoose와 my-backend 도커에 설치되는 node가 버전이 안맞는다는 것 같은데, 괜히 손댔다가 문제가 더욱 복잡해질까봐 섣부르게 건드리질 못하겠네요 ㅜㅜ 04-02 강의에서, backend 도커에 coolsms 가 설치되지 않았다고 하여 Dockerfile에개인적으로 이 코드를 추가해준 걸 제외하면 04-04까지 수강하는데 문제는 없었습니다.RUN yarn add coolsms-node-sdk어떻게 해야될까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
model역할에 대해 궁금한점이 있습니다.
@GetMapping("/add") public String addForm(Model model) { model.addAttribute("item", new Item()); return "validation/v1/addForm"; }위에 코드는 mvc2 강의 v1controller 코드 중 일부이고 아래는 mvc1 강의 마지막 챕터 코드 중 일부입니다.public class BasicItemController { @GetMapping("/add") public String addForm() { return "basic/addForm"; } 궁금한점이 있는데. v1controller 코드에서 mvc1처럼 코드를 입력하게 되면 add 사이트로 이동시 서버 에러가 뜹니다.Model 객체는 뷰에 전달할 데이터를 담는 컨테이너 역할을 합니다. 라고 하는데 그렇다면 mvc1에서 model없이 어떻게 작동이 되는건가요?model이 view와 controller사이에서 사다리 역할하는건가요? 데이터 저장소가 아니라요?@GetMapping("/add") public String addForm() { return "validation/v1/addForm"; }
-
해결됨김영한의 실전 자바 - 중급 1편
11분 12초 강의자료 오타 찾았습니다
11분 12초에Car 클래스는 엔진에 필요한 메서들을 제공해야 한다.메서 -> 메서드 로 수정해야 할 꺼같습니다! pdf 파일은 7.중첩 클래스, 내부 클래스1.pdf파일이며19/21 페이지입니다 !
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
백엔드 과정을 수강 중인 학생입니다.
잘 몰라서 아는 지인에게 궁금해서 물어봤더니 도커라는 것을 받아서 거기에 리눅스 이미지로 올려서 쓰는게 있다고 하는데 그렇게 해서 수강해도 문제가 없을까요 ?또는 유튜브에 WSL2 Ubuntu 설치하는 방법도 있던데 이걸로 해도 수강에 문제 없을까요? 답변 부탁드립니다 ㅠㅠ
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
13:48경에 나오는 헤더 파일의 클래스 안에 ":" 키워드는 "="과 같다고 보면 되나요?
uint32 bUseControllerRotationYaw : 1이런 거요.
-
미해결맛집 지도앱 만들기 (React Native + NestJS)
pressed? 적용 후 버튼 클릭해도 색상이 변하지 않는 경우 [해결 방법]
프로젝트 재실행하면 되네요!! 참고하시길...npx react-native start --reset-cache
-
미해결Next + React Query로 SNS 서비스 만들기
useQuery 오류가 발생합니다
"use client"; import { useQuery } from "@tanstack/react-query"; import { getPostRecommends } from "@/app/(afterLogin)/home/_lib/getPostRecommends"; import Post from "@/app/(afterLogin)/_component/Post"; import { Post as IPost } from "@/model/Post"; export default function PostRecommends() { const { data, error, isLoading } = useQuery<IPost[]>({ queryKey: ["posts", "recommends"], queryFn: getPostRecommends, // gcTime은 staleTime보다 길어야한다 staleTime: 5 * 1000, // 새로 가져온 데이터를 몇 초 후에 fresh에서 stale로 바꿀 것인지 gcTime: 300 * 1000, }); if (isLoading) { return <div>Loading...</div>; } if (error) { return <div>Failed to load posts</div>; } return data?.map((post) => <Post key={post.postId} post={post} />); } react query에서 에러가 발생합니다 이유는 모르겠지만 useQuery부분에서 에러가 발생하는 것 같습니다getPostRecommend.ts는 이렇게 작성한 상태입니다export async function getPostRecommends() { const res = await fetch(`http://localhost:9090/api/postRecommends`, { next: { tags: ["posts", "recommends"], }, //캐시를 저장하라고 지정하는 태그 // 너무 강력하게 캐싱을 하면 새로운 데이터가 안불러와 질 수 있다 // 이런 일을 방지하기위해 새로고침을 해야하는 이때 tags를 사용한다 }); // The return value is *not* serialized // You can return Date, Map, Set, etc. if (!res.ok) { // This will activate the closest `error.js` Error Boundary throw new Error("Failed to fetch data"); } // 이렇게 하면 recommends를 키로 가지고 있는 서버에 있는 캐시가 날아감 // revalidateTag("recommends") // home으로 온 요청이 왔을때 페이지 전체의 캐시를 새로고침한다 // revalidatePath('/home') return res.json(); }근데 getPostRecoomed.ts가 잘못된거 같지는 않은것이처음 작동하는 queryClient.prefetchQuery는 잘 작동합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 도메인 개발-주문 기능 테스트(OrderServiceTest) 오류 문의!!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]<문의사항>3가지 테스트코드부분 모두 어떻게 고치면 좋을지 문의드려요!<상황설명>다음 사진 3장은 OrderServiceTest.java 전체 코드입니다.이 테스트를 Run하면 3 failed, 0 passed가 나옵니다.(1)상품주문_재고수량초과(2)상품주문(3)주문취소에서 에러가 나는데요.에러 메시지가 짧은 (2), (3) 먼저 에러가 어떻게 나는지 첨부합니다.(2) 상품주문-에러메시지(3) 주문취소-에러메시지(1) 상품주문_재고수량초과-에러메시지<전체 에러 메시지>https://drive.google.com/file/d/1KO2cRf7BYzk3khbQRF7pw7Bw1Gz1X8hv/view?usp=sharing
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
RequestParamServlet 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. RequestParamServlet 을 맞게 입력 한 것 같은데 마지막 for 문에서 오류가 납니다.그리고 실행 시 서버 연결 문제 때문인 것 같지만 로그 및 웹페이지 localhost:8080 으로 조회되지 않는 문제도 있습니다. 프로그램 파일 구글 링크로 첨부 드리오니 확인 부탁 드립니다. 감사합니다.https://drive.google.com/file/d/1AjEA2r-RYQt_q7RdA0zLmyAqdUNnbvcr/view?usp=sharing
-
미해결자바 코딩테스트 - it 대기업 유제
최대 길이 연속수열 질문
정답의 경우 아래와 같이 되어있습니다.public int solution(int[] nums){ int answer = 0; HashSet<Integer> set = new HashSet<>(); for(int x : nums) set.add(x); for(int x : set){ if(set.contains(x - 1)) continue; int cnt = 0; while(set.contains(x)){ cnt++; x++; } answer = Math.max(answer, cnt); } return answer; }제가 푼 방식 : set으로 중복되지 않은수만 우선순위 큐(pQ)에 넣어 계산.물론 풀이에서의 코드가 간결하고 사용하는 자료형도 적으니 좋은 코드같습니다만은 이렇게 풀었을때 시간 복잡도 면에서도 많이 불리한지 피드백 부탁드립니다. public int solution(int[] nums){ int answer = 1 , cnt=1; PriorityQueue<Integer> pQ= new PriorityQueue<>(); HashSet<Integer> set = new HashSet<>(); for(int i : nums){ if(!set.contains(i)) pQ.offer(i);// set.add(i); } int N = pQ.poll(); while ( !pQ.isEmpty() ){ int nextN = pQ.poll(); if( N+1 == nextN ){ cnt++; N = nextN; } else if( N+1 != nextN ) { cnt = 1; N = nextN; } answer=Math.max(answer,cnt); } return answer; }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문취소시 재고 늘어나야함 오류현상
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]https://drive.google.com/file/d/1pI1pZ0tfY6RpJTQPUSY5V6boziC41aAC/view안녕하세요!주문취소시 주문한 수량만큼 재고가 다시 늘어나야한다 부분에서 에러가 계속 생겨서 어디서 코드가 잘못된건지 확인부탁드립니다 ㅜ!! 계속 시도해도 실제값이 2로 나와서요 !
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문취소시 재고 늘어남 오류현상
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]https://drive.google.com/file/d/1pI1pZ0tfY6RpJTQPUSY5V6boziC41aAC/view?usp=sharing안녕하세요! 주문기능 테스트에서 "주문취소"부분에서 에러가 두번째주문취소시 재고가 주문한 수만큼 다시 늘어나야함에서 생깁니다. 어디서 코드가 잘못된건지 확인부탁드립니다ㅜㅜ!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
memberForm 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 컨트롤러에서 html으로 보내줄 때 memberForm 객체도 같이 넘어가게 되는데, 여기서 memberForm이 dto 개념과 같다고 봐도 될까요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
안녕하세요 오늘 수강 시작했어요 강의자료부탁드려요
완강하겠습니다~!sue03sue@naver.com 입니다
-
미해결실습으로 배우는 OAuth 2.0 개념 원리, 그리고 해킹과 보안
기능 에러 문제
강의에 나온 비트나미 설정은 모두 완료한 상태입니다. 이상하게 위 사진과 같이 oauth.friends와 friends 페이지는 상단의 네브바가 정상적으로 출력이 되지만wgw 페이지의 경우 상단바가 깨지는 현상이 발생합니다.코드를 분석해보니 둘다 동일하게 menu.php라는 파일을 불러오는 역할을 하고설정을 3개로 나눠서 하는거면 몰라도 php.ini파일에서 공통적으로 설정된 값을 통해서불러와지는건데 무엇이 문제일까요?근데 이 문제는 네브바에 버튼을 통해 변경되는 페이지를 직접 url에서 입력만 해주면 되기 때문에큰 문제는 되지 않습니다. wgw 로그인 페이지에서 Friends로 로그인 하기 버튼을 누르게 되면강의에서는 정해진 url로 리디렉션이 진행됩니다.하지만 저는 Friends로 로그인 하기를 누를 시에 wgw 인덱스 페이지로 리디렉션이 되어서마찬가지로 코드를 확인해보니 이렇게 되어있더군요.friends_auth_url 에 대한 변수를 가지고 리디렉션이 되는 구조여서해당 변수의 값을 직접 url에 입력해봐도 인덱스 페이지로 리디렉션이 될 뿐인데.. 이렇게 구현이 되어있더라고여 authorize.php 파일에 뭔가 문제가 있는건지, 저같은 문제가 없었는지 의아하네요..
-
해결됨개발자를 위한 쉬운 도커
leafy backend에서 db연결이 잘 되지 않습니다...
안녕하세요 leafy back-end 부분에서 db 연결이 안되서 실행이 안되는 오류가 발생합니다docker run -d -p 8080:8080 -e DB_URL=leafy-postgres --name leafy --network leafy-network starlightpizza/leafy-backend:1.0.0 명령어를 사용하여 컨테이너를 실행시키면 db 연결을 못해서 오류가 발생하는데요docker file은 위 와 같이 설정 되어있고postgresql은 아래와 같이 정상적으로 동작이 되는걸 확인했습니다.어떤 부분에서 문제가 발생하는지 잘 모르겠어서 질문드립니다..
-
미해결김영한의 실전 자바 - 기본편
자바 메모리 구조 강의를 들으면서 질문 있습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요! 제가 알고 있는게 정확한지 알고 싶어서 질문 드립니다! 힙 영역에는 new 키워드를 통해 동적으로 생성된 인스턴스가 존재하는 지역이라고 설명해주셨는데클래스 로더에 의해 바이트 코드를 통해 메서드 영역에 생성자, 메서드 등 정보가 저장되고, 힙 영역에 클래스 타입의 인스턴스도 생성되지 않나요??
-
해결됨코드로 배우는 React with 스프링부트 API서버
/api/member/login 404 에러 질문 드립니다.
시큐리티까지 강의를 듣고 혼자 실습 예제 만들어서 회원가입부터 진행하고 있습니다. 강의 따라서 진행할 때에는 잘 됐는데, 지금은 섹션6 시큐리티 부터 따라했는데 /api/member/login 으로 포스트맨이나 웹 브라우저로 접속하면 해당 경로를 찾을 수 없다는 404 에러가 발생하게 됐습니다. ㅠㅠ http.formLogin(config -> config.loginPage("/api/member/login"));강의 따라 진행할 때에도 /api/member/login 컨트롤러는 별도로 없었는데, 지금 왜 갑자기 에러가 발생하는지 궁금합니다 ㅜㅜ
-
미해결실전! 스프링 데이터 JPA
LazyInitializationException에 대해 질문드립니다!
배운것을 바탕으로 개인적으로 게시판을 만들어보는 중입니다. 게시물을 추가할 때 다음과 같은 에러가 발생해서 몇시간째 애를 먹고있는 중입니다.org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.myproject.jpaboard.domain.Member.posts: could not initialize proxy - no Session아무래도 Post(게시물) 엔티티의 연관관계 편의 메서드에서 문제가 발생하는 것 같습니다. 서비스 계층에 @Transactional도 붙여줬음에도 계속해서 문제가 발생해서 질문 남깁니다. 유일한 해결책은 Member의 posts에 EAGER을 붙이는 방법이었습니다. 하지만 이는 적절치 않아보입니다. 어떻게 해야 해결할 수 있을까요.핵심이 되는 코드들을 아래에 추가했습니다. package com.myproject.jpaboard.web.controller; import com.myproject.jpaboard.domain.Member; import com.myproject.jpaboard.domain.Post; import com.myproject.jpaboard.web.SessionConst; import com.myproject.jpaboard.web.form.PostForm; import com.myproject.jpaboard.web.repository.BoardRepository; import com.myproject.jpaboard.web.service.BoardService; import com.myproject.jpaboard.web.service.PostService; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @Controller @RequestMapping("/post") @RequiredArgsConstructor @Slf4j public class PostController { private final BoardService boardService; private final BoardRepository boardRepository; private final PostService postService; /** * 게시물 추가 */ @PostMapping("/new") public String addPost(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, @Validated PostForm postForm, BindingResult bindingResult) { log.info("postForm={}", postForm); if (bindingResult.hasErrors()) { log.info("errors={}", bindingResult); return "newPost"; } postService.addPost(postForm, loginMember); return "redirect:/board/list"; } } // Post.java @Entity @Getter @Setter public class Post { @Id @GeneratedValue @Column(name = "post_id") private Long id; private String title; private String writer; @Lob @Column(columnDefinition="LONGTEXT") private String content; @Column(updatable = false) private LocalDateTime createdTime; private LocalDateTime lastModifiedTime; private Long viewCount; @ManyToOne(fetch = FetchType.LAZY) // 다쪽이 연관관계의 주인 @JoinColumn(name = "member_id") private Member member; @Enumerated(EnumType.STRING) private CategoryType category; @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true) private List<Comment> comments = new ArrayList<>(); public Post() {} // 연관관계 편의 메서드 public void setMember(Member member) { this.member = member; member.getPosts().add(this); } @Override public String toString() { return "Post{" + "id=" + id + ", title='" + title + '\'' + ", writer='" + writer + '\'' + ", content='" + content + '\'' + ", createdTime=" + createdTime + ", lastModifiedTime=" + lastModifiedTime + ", viewCount=" + viewCount + ", category=" + category + '}'; } } // Member.java @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String email; private String password; private String name; @Embedded private Address address; @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) private List<Post> posts = new ArrayList<>(); /** * POST 추가 로직 (도메인 모델 패턴) */ // public void addPost(Post post) { // // // } @Override public String toString() { return "Member{" + "address=" + address + ", name='" + name + '\'' + ", password='" + password + '\'' + ", email='" + email + '\'' + ", id=" + id + '}'; } } // PostService.java @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class PostService { private final BoardRepository boardRepository; private final PostRepository postRepository; /** * 게시물 추가 */ @Transactional public void addPost(PostForm postForm, Member loginMember) { Post post = new Post(); postForm.setCreatedTime(LocalDateTime.now()); // setter로 세팅 post.setTitle(postForm.getTitle()); post.setWriter(postForm.getWriter()); post.setContent(postForm.getContent()); post.setCreatedTime(postForm.getCreatedTime()); post.setCategory(postForm.getCategory()); post.setViewCount(0L); post.setWriter(loginMember.getName()); post.setMember(loginMember); postRepository.save(post); } }