묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 초기화 부분에 대해서 이해가 되지않아 추가질문드립니다..
강의를 들어본 후, 다른 질문들도 참고를 해보았는데요. 프록시 초기화(프록시객체의 초기화) : 프록시 객체의 target필드에 실제 엔티티 객체의 참조를 설정하는것.1. <프록시 초기화 과정>em.getReference()를 하게되면, 프록시 객체가 영속성컨텍스트(1차캐시)에 저장된다. 프록시는 내부에 Member target;이라는 멤버변수(필드)를 가지고 있다.member.getName()을 호출한다.프록시가 아직 초기화되지않은 상태이므로, JPA는 영속성 컨텍스트에 초기화 요청을 한다. 영속성컨텍스트가 db조회를 해서 실제 엔티티객체를 생성하고 프록시 객체 내부의 target필드에 실제 엔티티객체의 참조를 설정한다.초기화된 필드를 통해 실제 객체의 메서드를 호출한다.---------------------------------------------------------------------2. em.getReference()를 하게되면, 프록시 객체가 영속성컨텍스트(1차캐시)에 저장된다. 초기화를 해도 실제 객체는 1차캐시에 저장되지않는다. 프록시 객체가 실제 객체의 참조를 가지고있기 때문에 프록시 객체를 통해 실제 객체를 사용할 수 있다. 즉 실제 객체가 1차캐시에 등록되는건 아니고 프록시 객체가 실제 객체의 참조를 가지고 있기 때문에 실제 객체가 1차 캐시에 등록되어 있는 것처럼 사용할 수 있다.==> 프록시 객체만 영속성컨텍스트에 저장되고 실제 엔티티객체는 영속성컨텍스트에 저장되지않는다.---------------------------------------------------------------------3. JPA는 동일한 트랜잭션안에서 동일한 PK에 대해 처음에 em.getReference()를 사용하면 프록시 객체를 반환하고, em.find()를 사용해도 프록시 객체를 반환한다. 이때 프록시 객체가 영속성컨텍스트(1차캐시)에 저장된다. 이후 em.find()를 사용해도 이미 1차캐시에 프록시가 존재하므로 프록시가 반환된다.반대의 경우 동일한 트랜잭션안에서 처음에 em.find()를 사용하면 실제 엔티티가 반환되고, em.getReference()를 사용해도 실제 엔티티를 반환한다. 이때 실제 엔티티가 영속성컨텍스트(1차캐시)에 저장된다. 이후 em.getReference()를 사용해도 이미 1차캐시에 실제 엔티티가 존재하므로 실제 엔티티가 반환된다. 위와 같이 이해하는게 맞을까요..?
-
해결됨React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드
Ch1-4. 네비게이션바 컴포넌트 만들기(1부) 에서 오류질문
안녕하세요 강의 코드 중에 질문드립니다.상단 네비게이션바 코드 작성시Navbar.jsx 에서 노션에 올려주신 MenuItem 컴포넌트가 올바로 작동하지 않습니다. 다만, 찾아보니 '화살표 함수에서 중괄호를 사용하면 명시적으로 return문을 작성해야 JSX가 반환됩니다.' 라고 하는데...실제로 return 을 추가하면 실행이 됩니다.선생님 강의에서는 MenuItem 컴포넌트 선언시 retrun 명시를 안하신거 같은데 어떻게 개발서버에서 상단 네비바가 보여지나요..? (전 : 노션코드)const MenuItem = ({ path, label, onClick }) => ( <li> <Link to={path} className="hover:text-blue-600 transition duration-300" onClick={onClick} > {label} </Link> </li> ); (후-실행됨)const Menuitem = ({ path, label, onClick }) => { return ( <li> <Link to={path} className="hover:text-blue-600 transition duration-300" onClick={onClick} > {label} </Link> </li> ); };
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
PasswordChangeView
강의에서 나오는 forms.py 파일을 만들어서 커스텀폼을 만드니A user with that username already exists.username 이 이미 존재하는 에러가 계속해서 발생 (다른 수강생분들도 겪은 에러인듯) 장고 기능이 추가된 건지는 몰라도 PasswordChangeView 를 활용함 views.pyclass AccountUpdateView(PasswordChangeView): form_class = PasswordChangeForm template_name = 'accountapp/update.html' success_url = reverse_lazy('accountapp:detail')여기서 success_url 이 정적 url 로 pk 파라미터 값을 전달해주지 못하는 문제가 있음그래서 수정된 코드는class AccountUpdateView(PasswordChangeView): form_class = PasswordChangeForm template_name = 'accountapp/update.html' def get_success_url(self): return reverse('accountapp:detail', kwargs={'pk': self.request.user.pk}) 2025년 3월 31일 기준1) 비밀번호 변경 기능의 기본 View,Form 있음 (PasswordChangeView, PasswordChangeForm)2) 비밀번호 변경 후 hello_world 페이지로 리다이렉트 시킬거면 success_url = 'accountapp:hello_world'3) 로그인한 계정의 detail 페이지로 이동한다면 마지막 코드 참고
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
remove() 정확한 흐름을 알고싶습니다
링크위 링크 속 질문에 대한 답변을 아래와 같이 이해하였습니다. em.remove(member)를 하는 순간에 member가 1차 캐시에서 제거되고동시에 delete 쿼리가 쓰기 지연 SQL 저장소에 저장commit()을 만나면 내부적으로 flush()를 호출하고 쓰기 지연 SQL 저장소에 있는 쿼리가 나간다고 이해했습니다. 그리고 아래와 같은 테스트를 했을 때 의문이 생겼습니다Member member1 = em.find(Member.class, 101L); em.remove(member1); Member member2 = em.find(Member.class, 101L); System.out.print(member2); // null tx.commit();위 테스트의 결과는처음 member1을 찾을 때 select 문 1번remove()로 인한 delete 문 1번이처럼 총 2번 발생했습니다 하지만 제 생각은remove()를 하면서 1차 캐시에서 지웠기 때문에두 번째 find() 시에는 쿼리를 날려야 되는거 아닌가요? 그리고 또 이해가 안되는 부분은 member2를 찍어보면 null 이 나옵니다.commit()을 하기 전, 즉 flush()를 통해remove()에 의해 만들어진 쓰기 지연 SQL 저장소에 저장된delete 문이 나가기 전인데 왜 null이 찍히는 걸까요? 정리하자면두번째 find()는 왜 안 날라가는지member2는 왜 null 인지별도로 궁금한 점쓰기 지연 SQL 저장소에 있는 쿼리들은 들어온 순서대로 나가나요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
protobuf string
protobuf를 이것저것 연습하는 중에 문제가 생겨 질문드립니다. 위처럼 int32만 사용했을 경우에는 정상적으로 빌드가 되지만, 이런식으로 string으로 바꾸었을 때에만 이러한 오류가 발생합니다. 버전도 일치하고 링크도 제대로 되어있는 듯 한데 심볼이 없다라고 하는데 어떤 이유인지 궁금합니다.
-
해결됨깡샘의 쌩초보 안드로이드 One Day Class – Part2 코틀린 이해하기
모듈
모듈은 무엇인가요 이 프로그램내에서 어떤역할을 하나요
-
미해결김영한의 실전 자바 - 중급 1편
Exception과 명시적인 체크예외의 차이
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강사님께서 설명해주신 것처럼 다른 예외가 발생시 disconnect();의 호출이 불가피하게 되었을때 finally라는 문구를 사용하여 해결방법이 있겠지만 catch의 예외타입을 Exception (= 실질적인 최상위 예외)로 지정하면 다른 에러가 발생하여도 해결할수 있을것 같은데 통합적으로 Exception으로 잡지 않는 이유가 궁금합니다!
-
해결됨깡샘의 쌩초보 안드로이드 One Day Class – Part2 코틀린 이해하기
아까설명해주신거에 차이가 궁금해요!
혹시 클래스 안에 들어가는 변수함수와 클래스 전 줄에 들어간다는 변수함수는 무슨차이이고 class는 왜필요하고 뜻은 무엇인가요
-
해결됨깡샘의 쌩초보 안드로이드 One Day Class – Part2 코틀린 이해하기
java.util
java.util은 무엇인가요 이것도 파일 명인가요?
-
해결됨깡샘의 쌩초보 안드로이드 One Day Class – Part2 코틀린 이해하기
저 엄청 초보인데
3-1에서 import는 왜 필요하고 /뜻은 무엇인가요 { }
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
koreanjson.com 사이트가 안열려요..
강의 수강중인데 koreanjson.com 참고사이트가 사이트에 연결할 수 없음이라고 뜨네요 다른 방법이 있을까요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
강의 전체 소스코드 받을수있을까요?
강의를 듣는데 보내주시면 감사드리겠습니다
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
다차원배열과 문자열 8분23초에 arr[5]
arr[5]가 6번째 인거는 알겠는데 밑에 arr배열에서 6번째 찾으면 6아닌가요??
-
미해결모두를 위한 대규모 언어 모델 LLM Part 5 - LangGraph로 나만의 AI 에이전트 만들기
"Plan-and-Execute 아키텍쳐 구현하기" 강의 prompt not found error
"Plan-and-Execute 아키텍쳐 구현하기" 강의 hub.pull("ih/ih-react-agent-executor") 실행 시 not found error 발생hub.pull("pollyjaky/ih-react-agent-executor") 로 대체
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
초기화하면 1차캐시에
안녕하세요. em.getReference()를 통해 프록시 객체를 조회하면 1차캐시에 프록시객체가 저장되고, 이후에 getName()을하더라도 실제 엔티티객체는 1차캐시에 저장되지않고 프록시객체만 1차캐시에 저장되어있는건가요??
-
미해결스프링 배치
강의 자료 다른 방법 있을까요?
맥을 사용중인데 DB 스키마 생성 및 이해(1) 파트에서 자료 다운로드가 불가능해서요 다른데서 다운로드 가능한게 있을까요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
[오타 제보] pdf 10, 11 챕터
안녕하세요. 오타 제보입니다.자바 고급1편 11.동시성 컬렉션 pdf 4페이지add(): 컬렉션에 데이터를 추가한다sleep(100): 잠시 기대한다. 자바 고급1편 10. CAS-동기화와 원자적 연산 pdf 7페이지 6번째 줄 이 문제는 연산 자체가 나누어져 있기 때문에 발생한다. volatile 은 연산 차제를 원자적으로 묶어주는 기능이 아니다. 강의 감사히 듣고 있습니다!! 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 객체의 초기화 부분에서
안녕하세요. 강의 내용 15분쯤에 프록시 객체의 초기화 부분에서 설명해주신 부분이 잘 이해가 되지않아서 찾아보고 아래와 같이 정리해보았는데요. 이렇게 이해하는게 맞을까요? 프록시 초기화(프록시객체의 초기화) : 프록시 객체의 target필드에 실제 엔티티 객체의 참조를 설정하는것.em.getReference()를 하게되면, 프록시 객체가 영속성컨텍스트(1차캐시)에 저장된다. 프록시는 내부에 Member target;이라는 멤버변수(필드)를 가지고 있다.member.getName()을 호출해서 초기화 요청을 한다.JPA는 영속성 컨텍스트(1차캐시)에 실제 엔티티객체가 있는지 확인한다. 4-1. 있으면, JPA는 프록시 객체 내부의 target필드에 1차캐시에 있는 실제 엔티티객체의 참조를 설정한다.4-2 없으면, JPA는 db조회를 해서 실제 엔티티객체를 생성하고 프록시 객체 내부의 target필드에 실제 엔티티객체의 참조를 설정한다.초기화된 필드를 통해 실제 객체의 메서드를 호출한다.
-
해결됨은행 서버 프로젝트 실습을 통해 배우는 코틀린 마스터 클래스
기기 관련 질문입니다!
mac 어떤 스펙의 기기를 쓰고 계신지 궁금합니다!
-
해결됨김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
FilterExampleEx2의 또 다른 답안 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 정보]질문 내용의 위치:3. 함수형 인터페이스.pdf _ 문제와 풀이 _ 문제1 - FilterExampleEx2제가 작성한 소스코드: https://inf.run/GQrVP질문 요약: 1) Predicate 말고도 추가적으로 filter() 메서드도 BiFunction 함수형 인터페이스로 대체했는데, 이 정도까지 (메서드까지) 대체하는 것은 너무 과한 행동인지 궁금합니다.2) BiFunction.apply()를 호출하여 필터링 하는 방식은 filter() 메서드로 필터링하는 방식보다 직관성이 떨어지기 때문에 권장되지 않는지 또는 그냥 사용해도 되는지 궁금합니다. [질문 내용]안녕하세요. 기존 FilterExampleEx2의 모든 부분을 자바가 제공하는 함수형 인터페이스로 대체하는 문제로 잘못 이해해서 filter(리스트, Predicate) 메서드까지 BiFunction<리스트, Predicate, 리스트> 함수형 인터페이스로 대체를 했습니다. 이때 제가 생각했을 때는 크게 두 가지 부분이 문제가 될 수도 있겠다고 생각을 했는데, 실제로도 문제가 될 위험이 있는지 궁금해서 질문드립니다. (필터링 결과는 동일합니다.) (제가 추측한) 문제 상황1. 너무 과한 대체메서드까지 함수형 인터페이스로 대체하는 것은 너무 과하다. (제가 추측한) 문제 상황2. 직관성의 저하(영한님 답안의 경우) filter() 메서드를 호출하는 방식의 경우 메서드명이 filter로 직관적이다.(제 답안의 경우) BiFunction.apply()를 호출하는 방식의 경우 apply()라는 메서드명만 보고는 "필터링한다"라는 느낌을 받을 수 없어 직관적이지 못하다.제가 작성한 소스코드는 [질문 정보] 부분에 구글 드라이브 링크를 첨부했으나, 혹시 몰라 질문글에도 작성해봅니다.package lambda.ex3; import java.util.ArrayList; import java.util.function.BiFunction; import java.util.function.Predicate; import java.util.List; // 내 풀이 public class FilterExample { public static void main(String[] args) { List<Integer> numbers = List.of(-3, -2, -1, 1, 2, 3, 5); System.out.println("원본 리스트: " + numbers); // predicate까지 parameter로 받으면 더 유연하다. BiFunction<List<Integer>, Predicate<Integer>, List<Integer>> listFilter = (numberList, predicate) -> { ArrayList<Integer> filteredList = new ArrayList<>(); for (Integer number : numberList) { if (predicate.test(number)) filteredList.add(number); } return filteredList; }; // 조건 1. 음수(negative)만 골라내기 Predicate<Integer> isNegative = n -> n < 0; List<Integer> negatives = listFilter.apply(numbers, isNegative); System.out.println("음수만: " + negatives); // 조건 2. 짝수(even)만 골라내기 Predicate<Integer> isEven = n -> n % 2 == 0; List<Integer> evens = listFilter.apply(numbers, isEven); System.out.println("짝수만: " + evens); } }