학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] em.find()로 가져온 후 이름을 바꾸고 commit 이전에 em.find()로 똑같은 id의 이름을 조회해서 이름을 확인했을 때 영속성 컨텍스트에서 1차 캐쉬로 조회하기에 바뀐 이름으로 조회되는 것이 맞나요?
학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님 이번에 강의를 구매한 학생입니다. 해당 강의가 실제로 현업에서 사용될 수 있는 방법들인가요? 해당 강의를 수강하고, 이를 바탕으로 프로젝트에 녹여내볼려고 하는데 현업에서 사용하지 않는 방법들이라던가 교육용 강의라면 고민을 좀 해봐야 될 것 같아 문의글 남깁니다 감사합니다.
Q. npm i react-copy-to-clipboard 패키지 설치시 아래와 같은 오류가 발생합니다. > npm i react-copy-to-clipboard npm error code ERESOLVE npm error ERESOLVE unable to resolve dependency tree npm error npm error While resolving: mbti-contents-platform@0.0.0 npm error Found: react@19.0.0 npm error node_modules/react npm error react@"^19.0.0" from the root project npm error npm error Could not resolve dependency: npm error peer react@"^15.3.0 || 16 || 17 || 18" from react-copy-to-clipboard@5.1.0 npm error node_modules/react-copy-to-clipboard npm error react-copy-to-clipboard@"*" from the root project npm error npm error Fix the upstream dependency conflict, or retry npm error this command with --force or --legacy-peer-deps npm error to accept an incorrect (and potentially broken) dependency resolution. npm error npm error ... 강의 들으며 문제가 발생했고, 직접 해결한 방법을 공유합니다. 🎯 오류 원인 분석 오류 메시지를 분석하면, react-copy-to-clipboard@5.1.0 패키지가 React 19을 지원하지 않기 때문에 설치에 실패한 것입니다. 🎯 1. 오류 원인 분석 오류 메시지를 보면: npm error Found: react@19.0.0 npm error Could not resolve dependency: npm error peer react@"^15.3.0 || 16 || 17 || 18" from react-copy-to-clipboard@5.1.0 📌 원인 프로젝트에 React 19.0.0 이 설치되어 있음. 하지만 ** react-copy-to-clipboard@5.1.0 **은 React 19을 지원하지 않음 (React 15~18까지만 지원). 📌 결과 react-copy-to-clipboard 는 react@19 와 호환되지 않아서 설치할 수 없음. 강사님은 18버전으로 진행, 실습 시 vite로 최신버전이 19버전으로 설치됨 Soultion ✅ react-copy-to-clipboard 대신 다른 패키지 사용 (추천) 현재 react-copy-to-clipboard 는 React 19을 공식적으로 지원하지 않음 . 대신 React 19에서 정상적으로 동작하는 최신 패키지 를 사용하는 것이 좋음. 대체 패키지: @uidotdev/usehooks 이 패키지는 useCopyToClipboard() 훅을 제공하며, React 19에서도 사용 가능 . npm i @uidotdev/usehooks 📌 사용 예시 ( useCopyToClipboard 활용) import { useCopyToClipboard } from "@uidotdev/usehooks"; export default function CopyButton() { const [copiedText, copy] = useCopyToClipboard(); return ( <div> <button onClick={() => copy("Hello, World!")}>복사하기</button> {copiedText && <p>복사 완료: {copiedText}</p>} </div> ); } 저는 위 방식을 통해 해결하였습니다. 더 좋은 방법이 있으면 공유해주세요.
안녕하세요! 강의 들으며 많은 부분 배우고 있습니다. DateCoverter 정규표현식 부분을 보면서 드는 의문이 있어 질문드립니다. 제가 이해한 바가 맞다면, 정규표현식에서 {1,2} 부분은 앞부분의 패턴을 1번 또는 2번 반복한다고 이해했습니다. 그렇다면 r"20\d{2}/([1-9]|0[1-9]|1[0-2]){1,2}/([1-9]|0[1-9]|[12][0-9]|3[01]){1,2}" 라는 정규표현식에서 월과 일의 숫자를 체크하는 부분이 1번 또는 2번 반복될 수도 있으니 "2023/0303/1212"와 같은 문자열도 통과 가능한 것일까요?
안녕하세요. 백엔드에서 connect.sid 쿠키와 next-auth의 auth.js-session-token을 사용해서 유저 인증을 하는 것 처럼 보입니다. 프론트서버에서 유저가 접근 시 세션 쿠키(connect.sid)를 받아 백엔드에 유저 세션을 확인한다면 next-auth를 사용하지 않아도 되는 것처럼 보입니다. 백엔드에서 auth.js-sessoin-token으로 유저 인증을 한다면 역시 세션 쿠키(connect.sid)가 필요없는 것처럼 보입니다. connect.sid와 auth.js-session-token 쿠키를 모두 사용해야 하는 이유가 있을까요? 만약 둘 다 사용하는게 좋다고 한다면 동기화가 필요할 것 같은데(만료 시간, 세션 무효화 등..), 이건 어디서 어떻게 처리하는게 좋을까요? (예외 질문) connect.sid의 쿠키에 httpOnly 옵션이 false여도 괜찮은가요? 혹시 백엔드에서 connect.sid의 쿠키를 httpOnly로 보냈다면 쿠키파싱이 제대로 안된 것 같습니다. 아래 모듈로 쿠키파싱하면 되는 것 같습니다. 혹시나하고 남겨봅니다. //현재 코드 //import cookie from "cookie"; //const parsed = cookie.parse(setCookie); import { parseSetCookie } from "next/dist/compiled/@edge-runtime/cookies"; const parsed = parseSetCookie(setCookie);
안녕하세요. 상수처리에 궁금한 점이 있습니다. 3장 기본문법pdf의 p.21 참고를 강의촬영후 달아주셨는데요. Q1. '위와 같이 최적화가 가능' 이란 설명을 하셨는데 위 쿼리가 어떤 점에서 최적화가 된 쿼리인지 알고싶습니다. Q2. 상수를 더하는 것 처럼 최적화가 어려우면 SQL에 constant 값을 넘긴다. 이 말씀도 잘 이해가 되지 않습니다. 상수를 더한다는 표현과 상수를 넘긴다라는 표현이 낮설기만 한데요. 혹시 예시를 들을 수 있을까요?
[오타 내용] 대상 강의록 : 13. 스레드 풀과 Executor 프레임워크2.pdf 대상 위치 : p.2 close() 부분 오타 내용 변경 전: close() 는 자바 19부터 지원하는 서비즈 종료 메서드이다 변경 후: close() 는 자바 19부터 지원하는 서비스 종료 메서드이다
8강 Spring Boot 프로젝트 세팅 2 강의를 반복해서 보고 있습니다. 강의에서는 Multi Module 을 생성하기 위하여 Directory 를 생성하고, build.gradle 파일을 생성한 후 코드 입력 settings.gradle 에 Module 정의를 하시고 계십니다. 인텔리제이에서는 프로젝트에 Module 을 추가하기 메뉴가 있습니다. 인텔리제이 에서 프로젝트에 Module 을 추가하면, 강좌파일의 모듈처럼 생성이 되지 않습니다. project/module1, project/module2 이렇게 1단계 모듈만 작성이 가능합니다. 인터넷 검색자료에도 모듈작성이 1단계방식(에를들어 service-article, service-like)으로 되어 있습니다. 계층구조가 강의 내용이 보기 깔끔하여 따라 해보려 하는데 잘 되지 않습니다 디렉토리를 2단계로 작성( project/service/article)하고 build.gradle 파일을 직접 생성하면 "dependecies" 키워드도 자동안성이 되지 않습니다 인텔리제이 버전은 "IntelliJ IDEA 2024.3.3 (Ultimate Edition)", "Build #IU-243.24978.46, built on February 11, 2025" 입니다 인텔리제이가 버전업이 될때마다 메뉴라던가, 기능이 많이 바뀌기는 합니다만. 조금 답답합니다
강의에서 모든 부분이 잘 따라왔습니다. 다만.. 마지막 안드로이드 가상 에뮬레이터가 작업표시줄 창에는 뜨지만 직접적으로 확인하지 못하고 있습니다. 클릭해도 아무 반응이 없고, 작업 표시줄에 있는 프로그램에 마우스를 올려보면 이렇게만 뜨고 있습니다. adb 설치도 다시 해보았고, 에뮬레이터에서 앱이 실행 중인지도 adb shell pm list packages | grep 명령어로 확인해보았습니다. 제가 놓친 부분이 있는 걸까요?
const res = await fetch( `${process.env.NEXT_PUBLIC_BASE_URL}/api/posts/recommends?cursor=${pageParam}`, { next: { tags: ["posts", "recommends"], }, //cache: "force-cache", } ); '/home'에서 포스팅 로딩 시 또는 새로고침 시에 데이터를 최초 조회하는 시점에서 cache: "force-cache"를 제거하면 포스팅이 노출되고 포함하면 포스팅이 안 나오는 현상이 있는데 어떤 이유인지 의심 가는 부분을 못 찾겠어서 질문 드립니다. cache: "force-cache" 주석처리 데이터 존재 cache: "force-cache" 빈 배열
❗ 질문 작성시 꼭 참고해주세요 현재 문제(또는 에러)와 코드(또는 github) 를 첨부해주세요. 맥/윈도우, 안드로이드/iOS, Expo, Node 버전 등의 개발환경 을 함께 적어주시면 도움이 됩니다. 에러메세지는 일부분이 아닌 전체 상황 을 올려주세요. ( 일부만 자르거나 복사하지말아주세요 .) 개발환경/코드에 대한 정보가 없을경우 답변이 어렵습니다. pgAdmin4에 저장된 유저 정보에 비밀번호를 보면 제가 임의로 입력한 비밀번호가 아닌 암호화?된 값이 저장되어있는데 이 부분은 올려주신 server 백엔드에서 진행된건가요? 프론트 부분에서는 없는것 같아서 여쭤봅니다. 프론트가 아닌 백엔드에서 암호화하는게 맞는것 같긴 한데, 혹시나 놓친 부분이 있는건가 싶어서 여쭙니다.
애플리케이션 수준에서 Repeatable Read를 JPA는 항상 보장하는지 궁금합니다. 어떤 글에서는 DBMS의 격리수준 설정값에 따라 JPA도 동일한 격리수준 설정값을 갖는다고 하는데요. 대부분의 DBMS가 Read Commited라서 JPA도 ReadCommited인가보다 막연하게 생각했다가 아래 실습을 통해 큰 코를 다쳤습니다. 실습내용: TX1에서 MEMBER(id=1, age=20) 인 DB레코드를 em.find(Member.class, 1L)로 조회해서 엔티티객체를 얻는다. 이후 sleep(15초)을 걸어준다. TX2에서 h2-console에서 이 레코드를 업데이트 해서 age = 50 으로 변경하고 커밋을 한다. 그럼에도 불구하고 15초뒤 TX1에서 JPQL로 조회한 엔티티는 같은 주소값을 갖는 동일한 엔티티객체를 갖는다. 즉, age가 여전히 20이다. 어떻게 정리를 하는 것이 좋을까요? DBMS설정값을 따른다 vs Repeatable Read 참고: https://cheese10yun.github.io/jpa-jpql/
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [소스 코드 다운로드 링크] https://drive.google.com/file/d/1c0QnKniulwUHetmd8iRalCwtm1o3RxSf/view?usp=share_link [질문 내용] 질문 대상 소스 코드 : NewOrderService.java - line 30 제 생각 : 스레드들이 작업을 수행중일 때 (mac 기준) ctrl + c 를 누르면 키보드 인터럽트가 발생하여 catch block에 잡혀서 line 31 의 log("일부 작업이 실패했습니다."); 코드가 수행될 것이라고 예상했습니다. 하지만 ctrl + c 를 입력하더라도 예외는 발생하지 않고, 스레드들이 정상적으로 처리되는 것이 실제 흐름이었습니다. 질문 1-1 . ctrl + c 입력은 인터럽트인가요? 질문 1-2 . 만약 1-1 에 대한 답변이 yes라면, 시스템 상의 인터럽트(?)는 맞지만 자바 프로그램 상의 인터럽트는 아닌 것인가요? 질문 1-3 . 만약 1-1 에 대한 답변이 yes라면, 이는 터미널 상에서만 입력 가능한 인터럽트이고, 인텔리제이에서는 불가능한 입력인가요? 질문 2 . (인텔리제이에서) 자바 프로그램에 대해서 예외를 일부러 발생시키려면 throw new IllegalStateException(); 등과 같이 코드를 통해서만 가능한가요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 배열의 입력과 출력 문제입니다. 스캐너로 배열을 입력받을 때 향상된 for문을 사용했더니 결과가 0,0,0,0,0이 나왔습니다. 주석처리된 일반 for 문으로 문제를 풀면 제대로 나옵니다. 두 가지가 같은 결과가 나올거라고 생각했는데 왜 다른 결과가 나온건지 알고싶습니다. package array.ex; import java.util.Scanner; public class Array02 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int[] nums = new int[5]; //왜 안되는거지 for (int num : nums) { num = input.nextInt(); } // for (int i = 0; i < 5; i++){ // nums[i] = input.nextInt(); // } for (int i = 0; i < 5; i++){ System.out.print(nums[i]); if (i == 4){ break; } System.out.print(", "); } } }
일대다 단방향 연관관계에서, @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String name; ... getter and setter } @Entity public class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; private String name; @OneToMany @JoinColumn(name = "TEAM_ID") private List<Member> members = new ArrayList<>(); ... getter and setter } Member member = new Member(); member.setName("member1"); em.persist(member); Team team = new Team(); team.setName("teamA"); team.getMembers().add(member); em.persist(team); 위와 같은 일대다 단방향 연관관계에서, 1. 이렇게하면 Team엔티티의 members필드인 리스트에 값을 추가 및 변경(team.getMembers.add(member), team.setMembers())하고 Team엔티티를 저장하면, MEMBER 테이블에 대한 UPDATE쿼리가 추가적으로 생성되고, MEMBER 테이블의 외래키(TEAM_ID)를 추가 및 변경할 수 있다. 이렇게 이해했는데요. @OneToMany @JoinColumn(name = "TEAM_ID") private List<Member> members = new ArrayList<>();를 통해 MEMBER테이블에 TEAM_ID컬럼이 생기는거 같은데, 다른 여러 테이블도 있다고 가정했을때 어떤 이유로 MEMBER테이블에 TEAM_ID컬럼이 생성되는것인가요? @JoinColumn(name = "TEAM_ID")만 보고 MEMBER테이블인지 어떻게 아는것인가요..? 2. db에 위와같이 Member와 Team을 저장한다음에, team.getMembers()을 해서 Member를 구한 다음에, Member를 통해 MEMBER테이블에 있는 Member의 TEAM_ID값을 알고싶으면 어떻게해야하나요? 제가 알기로는 team.getMembers()로 가져온 Member 객체에는 TEAM_ID를 알 수 있는 필드가 없어서 알수없다고 생각하는데 이게 맞을까요? 그럼 Member의 TEAM_ID값을 알고싶으면 양방향 연관관계로 만들어서 Member 엔티티에 @ManyToOne을 추가하고 Member 객체에서 member.getTeam().getId(); 를 통해 TEAM_ID를 직접 조회해야할까요?