묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 데이터 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); } }
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Spring Cloud Gateway - Load Balancer 1강 보완 요청
일단 제 환경은 윈도우구요apigateway-service 내의 application.yml 파일의 url를 일반 ip 어드레스가 아닌 loadbalancer 방식으로 변경하여 테스트하면 진행되지 않습니다;트러블슈팅에 장시간이 걸렸는데 혹시나 해서 제 피씨 네임을 인식하지 못하나 해서 hosts 파일에 본인 pc 네임과 127.0.0.1을 추가해주면 됩니다. 만약 네 pc가 '뽀로로'인 경우뽀로로 127.0.0.1을 'C:\Windows\System32\drivers\etc'의 파일에 추가해줍니다.
-
미해결Next + React Query로 SNS 서비스 만들기
하이드레이션 에러
Unhandled Runtime ErrorError: Hydration failed because the initial UI does not match what was rendered on the server. Warning: Did not expect server HTML to contain a <a> in <div>. See more info here: https://nextjs.org/docs/messages/react-hydration-error이런 에러가 발생하는데초반 랜더링과 뭐가 다르거나 랜덤 데이터를 사용하면 오류가 나온다는 것 같아서 혹시 faker를 사용해서 생긴느 에러인지 궁금합니다"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 } = useQuery<IPost[]>({ queryKey: ["posts", "recommends"], queryFn: getPostRecommends, // gcTime은 staleTime보다 길어야한다 staleTime: 60 * 1000, // 새로 가져온 데이터를 몇 초 후에 fresh에서 stale로 바꿀 것인지 }); return data?.map((post) => <Post key={post.postId} post={post} />); }여기에서 queryFn: getPostRecommends이 부분을 지워도 정상 작동하는데 queryFn: getPostRecommends 이것이 하는 기능이 무엇인가요?또 여기에서 Retech와 invalidate를 눌러도 트윗이 변하지 않습니다 혹시 위 에러와 관련이 있나요?
-
해결됨쉽게 따라하는 빅데이터 논문 작성법 with ChatGPT (빅카인즈 기사 LDA&감성분석)
원하는 결과를 얻기위한 데이터 전처리 기법
여기서 "하는"은 하다로 바꾸시고 "있는"은 있다로 바꾸시지 않았으셨는데, 이유가 있을까요? 얻고자 하는 데이터 값에 따라 단어를 바꿀 수도 있고 삭제할 수도 있지만 보편적으로 좋은 값을 얻기 위한 삭제 또는 변경 기준이 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-H 질문있습니다
안녕하세요.마지막 출력값인 하나의 벽을 제거하였을 경우 얻을 수 있는 가장 넓은 방의 크기를 dfs를 이용해서 풀어봤는데요.계속 '틀렸습니다'가 나오는데 뭐가 문제인지 모르겠습니다.http://boj.kr/3f53f0669cec483f9a0ff04af2b9f4f9
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
소스코드 다운이 불가능합니다..
소스코드가 다운로드 되지 않아, 링크로 접속하려 했는데링크 또한 접속이 불가능합니다 ㅠㅠ
-
해결됨쉽게 따라하는 빅데이터 논문 작성법 with ChatGPT (빅카인즈 기사 LDA&감성분석)
LDAvis를 이용한 토픽 모델링 시각화 기법
바로 전 글과 유사하게 저도 문제가 있습니다. 저는 사진과 같이 시각화가 되지 않고 글로 결과가 나옵니다.
-
미해결스프링 시큐리티 OAuth2
ID_TOKEN 은 많은 사이들들에서 지원을 안한다고 보면될까요?
ID_TOKEN 은 많은 사이트들에서 지원을 안한다고 보면될까요?대부분의 사이트들은 Authorization Code Grant Type 방식만 지원하는 것 같습니다.
-
미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
데몬스레드 설명
주로 백그라운드 무한 대기 이벤트 발생 실행하는 부분 담당이란 말이 정확하게 무슨뜻인가요?
-
미해결
Coding App 개발 과외/튜터/멘토 찾습니다!
안녕하세요 , 저희는 미국 대입을 전문으로 하는 강남구 신사동에 위치한 유학원 입니다. 5월 중순 부터 미국 대학 입시를 준비하고 있는 고등학생을 대상으로 5주에 걸친 앱개발 프로젝트를 맡아서 지도해주실 개발자 분을 찾고 있습니다. 1주 당 2 - 3회(1시간30분-2시간) 정도씩 총 5~6주간의 프로젝트입니다.앱은 사실 상용화를 위한 것이 아닌 대학 입시 포트폴리오로 사용할 용도이기 때문에 6주정도 가이드안에서 만들어 낼 수 있는 간단한 앱을 만드는 것을 목표로 합니다.시간은 최대한 저녁시간을 활용할 계획이고 온라인 zoom을통해 진행할 예정이기 때문에 직장인들도 사이드잡으로 충분히 해내실 수 있습니다. 자세한 스케줄 및 급여는 신청자에 한해서 알려드리도록 하겠습니다. 지원을 희망하시는 분은 아래의 신청서 작성 부탁드립니다.https://forms.gle/Hv8xn3m35TekkcgaA
-
미해결맛집 지도앱 만들기 (React Native + NestJS)
marker.d.ts 관련
강의에 나오는것처럼 진행했을때 import {LatLng, MapMarkerProps} from 'react-native-maps'; declare module 'react-native-maps' { export interface MyMapMarkerProps extends MapMarkerProps { coordinate?: LatLng; } } 'MyMapMarkerProps' 인터페이스가 'MapMarkerProps' 인터페이스를 잘못 확장합니다.'MyMapMarkerProps' 형식은 '{ anchor?: Point | undefined; calloutAnchor?: Point | undefined; calloutOffset?: Point | undefined; centerOffset?: Point | undefined; coordinate: LatLng; ... 22 more ...; zIndex?: number | undefined; }' 형식에 할당할 수 없습니다.'coordinate' 속성의 형식이 호환되지 않습니다.'LatLng | undefined' 형식은 'LatLng' 형식에 할당할 수 없습니다.'undefined' 형식은 'LatLng' 형식에 할당할 수 없습니다.ts(2430)⚠ Error (TS2430) | MyMapMarkerProps 인터페이스가 MapMarkerProps 인터페이스를 잘못 확장합니다. MyMapMarkerProps 형식은 { anchor?: Point | undefined; calloutAnchor?: Point | undefined; calloutOffset?: Point | undefined; centerOffset?: Point | undefined; coordinate: LatLng; ... 22 more ...; zIndex?: number | undefined; } 형식에 할당할 수 없습니다.동일하게 ?을 넣을 수없는 에러가 생겨서 import {LatLng, MapMarkerProps} from 'react-native-maps'; declare module 'react-native-maps' { export interface MyMapMarkerProps extends Partial<MapMarkerProps> { coordinate?: LatLng; } } 우선 아래와 같이 처리해 보았습니다만 CustomMarker.tsx에서 MyMapMarkerProps를 못불러오는 문제가 있습니다.
-
해결됨스프링 시큐리티 완전 정복 [6.x 개정판]
AuthenticationManager 사용방법에 대해 질문있습니다.
안녕하세요 강의 잘 보고 있습니다.다름이 아니라 강의를 보며 궁금한 점이 생겨 이렇게 질문드립니다.영상및 강의자료에서는 Authentication Manager를 사용할때 CustomFilter를 다루는 부분이 나옵니다. 이때 첫번째 방법(HttpSecurity 사용)은 필터를 Bean으로 등록하는 것이 아닌 직접 필터 객체를 생성하고 Authentication ManagerBuilder를 통해 직접 build한 Authentication Manager에 등록하고 두번째 방법(직접 생성)은 필터를 빈으로 등록하고 Authentication Manager관련 프로세스는 스프링 시큐리티에 위임한다는 느낌을 받았습니다. 이때 이 두가지 방법의 차이는 어떤 것이 있을까요? Authenticaion Manager를 직접 생성하기에 세밀한 설정이 가능하다는 차이가 있고 없고인가요?스프링 시큐리티의 버전이 변경되면서 필터를 Bean으로 등록해 사용하도록 권장하고 있다고 알고 있습니다. 이러한 관점에서 보았을때는 두번째 방법이 스프링 시큐리티 측에서 권장하는 방법으로 이해해도 될까요?
-
미해결[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
투두 리스트 렌더링하기
안녕하세요. 강의 따라서 실습을 잘 하던 중에 List 컴포넌트에 프룹스로 todos를 넘겨주고 map 함수를 통해 리스트로 렌더링 하는 과정에서 강사님처럼 넣어두었던 데이터들이 렌더링 되지 않아서요. <App.jsx><List.jsx><렌더링 화면>
-
미해결원고 생성기 프로그램 개발 강의 (Chatgpt api)
궁금한 부분이 있습니다.
import openai api_key = " " openai.api_key = api_key def ask_gpt(system, prompt, model="gpt-3.5-turbo"): completion = openai.ChatCompletion.create( model=model, messages=[ {"role": "system", "content": system}, {"role": "user", "content": prompt} ], stream=True ) result = "" for chunk in completion: delta_data = chunk.choices[0].delta if 'role' in delta_data: continue elif 'content' in delta_data: r_text = delta_data['content'] result += r_text print(r_text, end="",flust=True) ask_gpt(system="you are a helpful assistant." , prompt="사과에 관한 글을 써줘") 해당 부분이 작동이 되지 않아서 확인 요청드립니다. api_key 값은 일단 빼두었습니다.
-
미해결웹 프론트엔드를 위한 자바스크립트 첫걸음
HTML, CSS에 대한 선수 지식은 어느 정도로 필요한가요?
HTML이랑 CSS 아는 게 얼마 없는데 이 상태로 공부하면 하다가 막힐까요? 그리고 출판사에서 전자책 출간 일자 답변은 아직인지요..ㅠㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
연결리스트 구현연습 강의에 질문이있어요
11분 39초에 AddLast함수를 구현하는것중에 궁금한것이 생겨서 질문 남겨요 AddLast함수에 반환값이 왜 newRoom인지를 모르겠어요 AddLast함수는 마지막방만 추가하고 갱신하면 되는 함수라 굳이 어떤것을 반환 할 필요가 있을지 궁금하네요 원래 LinkedList의 AddLast함수를 호출하면 LinkedListnode<T>라는 형으로 반환값이 있기는 했지만 왜 그런지를 모르니 이해가 잘 안되고 외우는 식으로 되어버리네요..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
큰돌님 vscode 폰트색상
안녕하세요 큰돌님! vscode 폰트색상이 맘에드는데 어떻게 적용하는지 알 수 있을까요?!?!
-
미해결[Lv.1] 누구나 할 수 있는 - SwiftUI Basic with iOS 17
ScrollView에서 질문 있습니다.
강의자료에 있는 파일에는 에러가 발생하지 않는데 새로 만든 파일에선 ForEach 구문에 'Argument passed to call that takes no arguments' 라고 뜨네요...해결 방법을 모르겠어서 질문 남깁니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
원핫 인코딩을 실행하면 0과 1로 변환되지 않습니다.
위의 사진처럼 전부터 계속 원핫인코딩을 하면 0과 1로 바뀌지 않고 전부 True나 False로 뜹니다 ㅠ.제가 코딩을 잘못한걸까요.? 계속 코드를 확인해보긴 했는데.. 어디가 문제인지 잘몰라서 여쭤봅니다.!
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
46분에 커스텀 구조체에 대한 GetTypeHash()에 대한 질문이 있습니다.
GetTypeHash()는 FStudentData 구조체를 입력으로 받아서 해당 구조체의 Order 멤버 변수를 기반으로 해시 값을 생성한다고 이해하면 되나요? 즉, return GetTypeHash(InStudentData.Order);이 부분은 FStudentData의 구조체의 Order 멤버 변수를 입력으로 받아서해당 값을 해싱한 결과를 반환하는 것이라고 이해하면 될까요? 또한, TSet에 저장된 FStudentData객체의 멤버변수 Name은 중복이 될 수 있지만, Order는 중복이 될 수 없는 거로 이해했는데 잘 이해한 건가요?