안녕하세요 강의 잘보고있어서 감사의 말씀 전하며 질문이 있어 글 남깁니다. 만약 비로그인도 어뷰징 방지 정책을 적용 한다했을때 실무에선 어떻게 처리하나요? IP나 쿠키, User-Agent 등을 활용한다고 하셨는데, IP 주소로 처리하기에는 공유망이나 VPN 같은 다양한 접근 방식도 있을 것 같고 User-Agent 나 브라우저쿠기같은경우는 브라우저에서 조작이 가능하기도하고 Pomsman 같은걸로 요청해서 User-Agent 값을 임의로 설정하는등과 같은 방법으로 집계될수도 있을것같은데 1. 그냥 일반적인 조회수만 집계만 하면되는 서비스에선 어떤식으로 처리하는지 궁금하고 만약 정말 빡세게 어뷰징을 처리한다고했을때 서버쪽에서 고유키값을 만들어서 로그인안한유저면 그 키값을 httponly 쿠키로 설정해서 고유키값이 있을때만 조회수가 집계되는 방법도 있을것 같은데 이런방식은 어떤지도 또 다른 괜찮은 방법이 있는지 궁금합니다.
안녕하세요, 강사님! 강의 잘 듣고 있습니다. RAG 및 LangChain을 공부하는 도중에 기존 리트리버 방식인(dense based)에 더 자세히 공부하기 위해 Hybrid Retriever(e.g. RRF, CC)등을 더 찾아보고 있는데 이부분은 강의에서 따로 안다뤄주는 부분일까요?? 또한 현업에서는 어떤 Retriving 방식을 선호하는지 또한 궁금합니다!
우선, 제가 가려는 기업에서 원하는 것은 springboot(와 API 계약 이해), bootstrap, postman, WebSocket 사용 이해입니다. 이번년도 9월까지 개인 프로젝트 2개(각 1달)와 팀프로젝트 1개(2달)를 할 생각인데, springboot 학습과 동시에 프로젝트를 진행하기 전에 jdbc를 학습하는 것이 필수적인지 궁금합니다. 제 글에 부족한 부분이 있어서, 이해하기 어려우시면 답변으로 더 필요한 정보를 말씀해주시면 감사하겠습니다.
OpenAI를 활용한 나만의 AI 에이전트 만들기 (Agent Builder, GPT-5, Chatkit, Cloudflare, MCP, Fine Tuning, CoT 등)
2026-01-24T18:01:27.860119Z Cloning repository... 2026-01-24T18:01:28.415748Z From https://github.com/ssmktr/openai-chatkit-starter-app 2026-01-24T18:01:28.416363Z * branch d8abdc1e7810bbe5fdb3c809e65c2b07141d1450 -> FETCH_HEAD 2026-01-24T18:01:28.41648Z 2026-01-24T18:01:28.451163Z HEAD is now at d8abdc1 Simplify ChatKit backend (#104) 2026-01-24T18:01:28.451626Z 2026-01-24T18:01:28.523349Z 2026-01-24T18:01:28.523863Z Using v2 root directory strategy 2026-01-24T18:01:28.544435Z Success: Finished cloning repository files 2026-01-24T18:01:30.338662Z Checking for configuration in a Wrangler configuration file (BETA) 2026-01-24T18:01:30.339458Z 2026-01-24T18:01:31.455516Z No wrangler.toml file found. Continuing. 2026-01-24T18:01:31.532601Z Detected the following tools from environment: nodejs@22.21.1 2026-01-24T18:01:31.533343Z Installing nodejs 22.21.1 2026-01-24T18:01:32.491348Z Trying to update node-build... ok 2026-01-24T18:01:32.581604Z To follow progress, use 'tail -f /tmp/node-build.20260124180132.491.log' or pass --verbose 2026-01-24T18:01:32.676902Z Downloading node-v22.21.1-linux-x64.tar.gz... 2026-01-24T18:01:32.916706Z -> https://nodejs.org/dist/v22.21.1/node-v22.21.1-linux-x64.tar.gz 2026-01-24T18:01:35.061658Z 2026-01-24T18:01:35.061984Z WARNING: node-v22.21.1-linux-x64 is in LTS Maintenance mode and nearing its end of life. 2026-01-24T18:01:35.062214Z It only receives critical security updates, critical bug fixes and documentation updates. 2026-01-24T18:01:35.0625Z 2026-01-24T18:01:35.062624Z Installing node-v22.21.1-linux-x64... 2026-01-24T18:01:35.494128Z Installed node-v22.21.1-linux-x64 to /opt/buildhome/.asdf/installs/nodejs/22.21.1 2026-01-24T18:01:35.49449Z 2026-01-24T18:01:36.434863Z Executing user command: npx @cloudflare/next-on-pages@1 2026-01-24T18:01:37.460162Z npm warn exec The following package was not found and will be installed: @cloudflare/next-on-pages@1.13.16 2026-01-24T18:01:49.78096Z npm warn deprecated path-match@1.2.4: This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions 2026-01-24T18:01:50.799789Z npm warn deprecated tar@6.2.1: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me 2026-01-24T18:01:51.18784Z npm warn deprecated @cloudflare/next-on-pages@1.13.16: Please use the OpenNext adapter instead: https://opennext.js.org/cloudflare 2026-01-24T18:01:59.323249Z ⚡ ️ @cloudflare/next-on-pages CLI v.1.13.16 2026-01-24T18:01:59.510375Z ⚡ ️ Detected Package Manager: npm (10.9.4) 2026-01-24T18:01:59.510832Z ⚡ ️ Preparing project... 2026-01-24T18:01:59.513738Z ⚡ ️ Project is ready 2026-01-24T18:01:59.514039Z ⚡ ️ Building project... 2026-01-24T18:02:00.366087Z ▲ npm warn exec The following package was not found and will be installed: vercel@50.5.0 2026-01-24T18:02:05.898447Z ▲ npm warn deprecated tar@6.2.1: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me 2026-01-24T18:02:08.620603Z ▲ Vercel CLI 50.5.0 2026-01-24T18:02:08.625834Z ▲ > NOTE: The Vercel CLI now collects telemetry regarding usage of the CLI. 2026-01-24T18:02:08.626058Z ▲ > This information is used to shape the CLI roadmap and prioritize features. 2026-01-24T18:02:08.626552Z ▲ > You can learn more, including how to opt-out if you'd not like to participate in this program, by visiting the following URL: 2026-01-24T18:02:08.626709Z ▲ > https://vercel.com/docs/cli/about-telemetry 2026-01-24T18:02:08.713183Z ▲ WARN! Build not running on Vercel. System environment variables will not be available. 2026-01-24T18:02:08.844345Z ▲ Your application is being built using next build . If you need to define a different build step, please create a vercel-build script in your package.json (e.g. { "scripts": { "vercel-build": "npm run prepare && next build" } } ). 2026-01-24T18:02:08.847668Z ▲ Installing dependencies... 2026-01-24T18:02:09.443264Z ▲ up to date in 464ms 2026-01-24T18:02:09.460617Z ▲ Warning: Could not identify Next.js version, ensure it is defined as a project dependency. 2026-01-24T18:02:09.481655Z ▲ Error: No Next.js version detected. Make sure your package.json has "next" in either "dependencies" or "devDependencies". Also check your Root Directory setting matches the directory of your package.json file. 2026-01-24T18:02:09.554599Z 2026-01-24T18:02:09.554859Z ⚡ ️ The Vercel build npx vercel build ) command failed. For more details see the Vercel logs above. 2026-01-24T18:02:09.554978Z ⚡ ️ If you need help solving the issue, refer to the Vercel or Next.js documentation or their repositories. 2026-01-24T18:02:09.555101Z 2026-01-24T18:02:09.599906Z Failed: Error while executing user command. Exited with error code: 1 2026-01-24T18:02:09.609667Z Failed: build command exited with code: 1 2026-01-24T18:02:11.150853Z Failed: error occurred while running build command 빌드시 위에처럼 에러가 뜨면서 응용 프로그램 빌드 중 에서 멈추고 있습니다. 해결방법이 어떻게 될까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 코드를 따라 치는 과정에서 아래와 같이 작성 했더니 BeanCreationException 이 발생하는 것을 확인 할 수 있었습니다. public void dbInit1(){ Member member = new Member(); member.setName("userA"); member.setAddress(new Address("서울", "1", "111")); em.persist(member); Book book = new Book(); book.setName("JPA1 BOOK"); book.setPrice(10000); book.setStockQuantity(100); em.persist(book); Book book2 = new Book(); book.setName("JPA2 BOOK"); book.setPrice(20000); book.setStockQuantity(100); // book2.setName("JPA2 BOOK"); // book2.setPrice(20000); // book2.setStockQuantity(100); em.persist(book2); OrderItem orderItem1 = OrderItem.createOrderItem(book, 10000, 1); OrderItem orderItem2 = OrderItem.createOrderItem(book2, 20000, 2); Delivery delivery = new Delivery(); delivery.setAddress(member.getAddress()); em.persist(delivery); Order order = Order.createOrder(member, delivery, orderItem1, orderItem2); em.persist(order); } 이때 위의 코드에서 주석 처리된 부분처럼 고쳤더니 정상적으로 코드가 실행되는 것을 확인했습니다. 그런데 이게 어떤 문제에서 오류가 발생한건지 정확히 알 수 없어 질문드립니다. 처음에는 book2의 값이 아무것도 없어서 null에 관한 엔터티 제약조건 관련해서 문제가 발생했나 생각해지만 notnull 같은 제약조건이 없었고 Book이 Item과 상속관계이고 싱글 테이블 전략을 사용해서 DTYPE 값이 book2 생성시 자동으로 생성 된다고 기억해서 특별히 값이 비었다고 생기는 오류가 아니라고 생각이 들었습니다. 결론적으로는 정확히 어떤 원인에서 발생한 문제인지 궁금해서 질문 남깁니다.
@Test @DisplayName("하위 댓글이 삭제되고, 삭제되지 않은 부모면, 하위 댓글만 삭제한다.") void deleteShouldDeleteChildrenOnlyIfNotDeletedParent() { // given Long articleId = 1L; Long commentId = 2L; Long parentCommentId = 1L; Comment comment = createComment(articleId, commentId, parentCommentId); given(comment.isRoot()).willReturn(false); Comment parentComment = mock(Comment.class); given(parentComment.getDeleted()).willReturn(false); given(commentRepository.findById(commentId)) .willReturn(Optional.of(comment)); given(commentRepository.countBy(articleId, commentId, 2L)).willReturn(1L); // 이 부분 given(commentRepository.findById(parentCommentId)) .willReturn(Optional.of(parentComment)); // ... 위 테스트에서 given(commentRepository.countBy(articleId, commentId, 2L)).willReturn(1L); 이 부분 때문에 질문을 드렸습니다. commentRepository.countBy() 에서 commentId = 2L 을 부모로 갖는 comment는 아무도 없으므로, 0L 을 반환하는 것이 옳다고 이해했는데, 강의에선 1L 을 반환하셨습니다! (물론 서비스 계층의 메서드에서 hasChildren() 의 판정 로직상 0L 과 1L 은 동일한 결과를 반환하므로 테스트 결과에는 영향을 주지 않는 것 같습니다.) 카운트 쿼리의 동작 부분을 제가 잘못 이해한 것인지 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 궁금한게 있는데요 선생님 강의중에서 데이터베이스 시리즈 꼭 자바를 알아야만 들을 수 있는건가요?백엔드가 파이썬으로 공부중인데 자바를 또 배워야할까요?
1:11부터 이전 시간의 예제를 실행했을 때, 왜 0bytes가 나오는지 설명해주시는 부분에 대한 질문입니다! 제가 혼자서 생각해봤을 때는 "버퍼 인스턴스에 두 개의 비동기 write 작업이 동시에 접근해서 발생한 스레드 동기화 문제"라고 생각했는데, 강사님께서는 "native 수준에서 비동기 쓰기를 처리하려면 각각의 버퍼가 필요하다"고 설명해주셨습니다. 버퍼에 접근해서 데이터를 읽어오면 pos가 읽은 바이트수만큼 증가하고, 그 다음에 버퍼에 접근한 writer는 pos위치부터 읽기 시작하는데 그 뒤로는 데이터가 없기 때문에 읽지 못하게 됩니다. 그런데 매번 0bytes가 나오는건 아니고 어떨 때는 34bytes가 나오기도 했습니다. "버퍼에 접근해서 데이터를 읽어서 pos를 읽은 바이트 수만큼 증가"연산을 하기전에 버퍼에 접근하게 되면 데이터를 읽어올 수 있게 되는 것 같다고 생각했습니다. buffer.get(data.getBytes()); 위 코드를 asyncChannel.write 하기 전에 실행해본결과 모두 0bytes가 나오는 걸 보고, 버퍼의 상태에 따라서 결과가 달라진다고 판단했습니다. 따라서, 버퍼에 두 스레드가 동시 접근하면서 발생하는 동기화 문제다 라고 생각했습니다! 제가 이해한 것이 틀린것인지 강사님과의 답변과 어떤 차이가 나는건지 궁금해서 질문남깁니다!
현재 대학교 3학년에 복학 예정이며 백엔드 프로젝트(JAVA)를 공부하고 있는 대학생입니다. 여러 진로를 알아보던 중 우연히 해당 강의를 접하게 되었습니다. 우선 백엔드로 여러 프로젝트를 하고 있는 중인데, 제가 아직 지원하고자 하는 계열을 딱 하나로 정하지 못한 상태입니다. 4학년까지 백엔드 프로젝트를 하면서 방산기업들 뿐만 아니라 다른 분야(대기업, 금융권 등등)도 노려볼 생각인데, 자바와 백엔드 프로젝트가 방산 기업과 핏하지 않는 것 같아서 걱정이 됩니다( 방산기업들은 주로 C,C++사용 등등 ). 혹시 자바와 백엔드 포트폴리오만으로도 설명만 잘한다면 방산 기업 지원시에 플러스 점수를 받을 수 있을까요? 아니면 C언어나 다른 프레임워크들을 배워서 다른 프로젝트를 진행해보는 것이 좋을까요? + 현재 백엔드 공부하는 대학교 3학년 학생이 어떤 방향으로 준비해나가면 좋을지 질문 드리고 싶습니다! 긴 질문글 읽어주셔서 감사합니다. 추운 겨울 감기 조심하세요 !!
MemberDetail 테이블의 UK_MEMBER_DETAIL_PROFILE_ADDRESS 유니크 제약 조건과 관련해서 질문이 있습니다. 39장 강의 마지막 부분에서, 해당 프로파일 주소(profile_address)를 빈 문자열로 바꿔 삭제할 수 있는 부분 테스트를 추가 하셨는데, 그런데 이렇게 되면 여러 사용자가 프로필 주소를 빈값으로 변경 할 경우 제약 조건에 충돌이 발생할 수 있을 것 같습니다. profile_address 값을 빈값으로 설정할 수 없도록 테스트를 조정하는게 더 맞아 보이는데 제가 생각한게 맞을까요?
안녕하세요 강사님. Stream 연습문제를 풀려고 보니 예제 코드가 잘려있네요. 첫번째 예제만 그런게 아니라 다른 예제도 마찬가지 입니다. 같은 예제 환경에서 정답 결과를 확인하여 연습해보고싶은데 어떻게 하면 좋을까요? public static List<Car> cars = List.of( new Car(CarBrand.Volkswagen, CarType.SEDAN, "티구안", new Car(CarBrand.BMW, CarType.SUV,"미니", 33_000_000, new Car(CarBrand.Benz, CarType.SUV,"G바 겐", 50_000_000 new Car(CarBrand.Benz, CarType.SEDAN, "E-Class", 28_ new Car(CarBrand.Ford, CarType.SUV, "익스플로러", 18_0 new Car(CarBrand.Jeep, CarType.SUV, "랭글러", 23_000_ section1-class03-Stream API 3 new Car(CarBrand.Volkswagen, CarType.SUV, "투아렉", 4 new Car(CarBrand.Volkswagen, CarType.SUV, "골프", 43_ new Car(CarBrand.Jeep, CarType.SEDAN, "체로키", 35_00 new Car(CarBrand.Jeep, CarType.PICKUPTRUCK, "글래디에이 );
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 13강 Redis 캐싱 시 발생하는 대표 문제 사례와 해결책3 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 이력서에 써갈수 있는 이력 제시한다음에 다음강의에 실제 할수있는 과제가 있다고 써져있는데요. 왜 다음에 바로 강의 마무리가 되나요?? 뒷부분이 없어요
바흐다나우 어텐션에서 모든 입력 토큰을 참조하는 이유 와 그로인한 바흐다나우 어텐션 장점이 무엇인지 궁금해요! 찍어주신 강의에서는 아래와 같이 정리해볼 수 있었는데요, 어떤 장점이 있는지 궁금해서 질문드립니다! - 방법 : 출력 토큰을 생성할 때, 모든 입력 토큰을 참조하고, 입력 토큰별로 중요도를 기록한다. - 단점 : 토큰양이 많아질 수록 저장공간 문제가 발생한다. - 단점으로 인한 제약 : 입력 텍스트 길이에 제한이 발생한다. 좋은 강의 감사합니다.