자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
@PutMapping("/user") public void updateUser(@RequestBody UserUpdateRequest request){ String readSql = "select * from user where id=?"; String sql = "update user set name=? where id=?"; jdbcTemplate.update(sql, request.getName(), request.getId()); } 웹페이지에서 update를 발생시켜서 put 요청이 올라 왔을때 UserUpdateRequest dto에 id와 name이 들어 간다는건 웹에서 요청이 올라왔을때 json에 이미 해당 name에 대한 id 정보가 있다는 거죠? id는 db에서 자동적으로 생성해 준다고 했었는데, 이 id를 웹에서는 어떻게 알고 있나요?
안녕하세요 선생님 🙂 먼저 양질의 강의를 제공해주셔 정말 감사합니다. cross_encoder_retriever = ContextualCompressionRetriever( base_compressor=re_ranker, base_retriever=multi_query_custom_retriever, ) 위와 같이 re-ranker를 적용시킬때 retriever를 멀티쿼리로 적용을 해보았습니다. 랭스미스로 로깅을 해보니, 멀티 쿼리는 정상적으로 작동한것 같은데요, 각각의 쿼리에 대해 Runnable로 리랭킹을 하는게 아닌, 원본 쿼리를 기반으로 리랭킹을 한다는 느낌을 받았습니다. 아무래도 데이터셋이 테스트용이라 확답이 안서는데, 이 부분은 사용자의 "원본" 쿼리로만 리랭킹을 하는건지 궁금합니다. 만약 그렇다면 랭그래프로 해결을 할 수 있을듯 한데요, State에 멀티 쿼리의 문서 검색 결과를 저장한 뒤, 각 쿼리에 대한 리랭킹 노드를 하는 방법이 생각이 났는데 피드백 부탁드려도 될까요? (사실 오버 엔지니어링이라는 생각이 들지만 ㅎㅎ 실제 프로덕션에 적용시킨다면 어떤 아키텍쳐가 좋은지 궁금합니다!) 감사합니다 :)
안녕하세요. 프로젝트 2 섹션에 돌입하게 되어 프로젝트 소개 및 오리엔테이션을 수강을 시작한 뒤 의문점이 생겨 몇 가지 질문을 드리고자 합니다! 현재 Notion을 활용해서 견적서를 내는 프로젝트를 짐코딩님께서 강의를 쭉 촬영해서 올라와 있는 상태로 알고 있습니다. 하지만 아래 미션들을 보면 수강생들이 직접 아이디어를 내서 새로운 프로젝트를 생성하는 것을 미션으로 제출하고 있는 것으로 미리 확인을 했습니다. 그렇기 때문에 아무래도 pro 버전이라 실습을 하고 제 프로젝트도 따로 만들다보면 많은 토큰을 사용해서 Current Session 토큰이 부족해지거나 주간 토큰량을 초과하게 될까봐 걱정이 되는 상황이고, 또한 견적서는 학생인 저의 경우에는 실습까지 해두면 좋겠지만 토큰량이 걱정입니다. 이런 상황 속에서 아이디어를 미리 정하고 강사님의 강의를 들으면서 저의 프롬프트로 진행하는 것이 좋을 지 혹은 강사님의 커리큘럼대로 쭉 따라간 다음에 미션을 마지막에 진행해도 되는 지 여쭤보고 싶습니다. 현재는 섹션마다 강의를 듣고 미션을 바로바로 진행했는데(강의 실습 진행과 미션 진행을 동시에 => 그 이유는 스타터킷이라는 동일한 조건이기 때문에 실습 자료에 저의 생각을 넣어도 어차피 결과물은 다르게 나오기 때문에 괜찮다고 생각했습니다.) 생각보다 토큰이 빠르게 차서 중간에 작업을 중단해야 되는 경우가 발생했었기 때문에 질문을 드립니다. 위의 이유와 같이 스타터킷의 경우에는 저도 활용 가능하기 때문에 괜찮다고 생각했지만 견적서의 경우에는 당장 학생의 신분에서는 이 강의를 듣고 활용하기에는 어려움이 있지 않을까? 하는 의문이 생겼기 때문입니다!
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 4-8강 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? chapter4/_2_event_with_participant 폴더의 EventJoinService 객체의 메서드 코드에 대한 질문입니다. 코드의 어떤 로직이 이해가 안 되시나요? @Transactional public void joinEvent(Long eventId, Long memberId) { Event event = eventRepository.findById(eventId) .orElseThrow(() -> new EntityNotFoundException("이벤트를 찾을 수 없습니다.")); Member member = memberRepository.findById(memberId) .orElseThrow(() -> new EntityNotFoundException("회원을 찾을 수 없습니다.")); // save()를 호출하지 않아도 Dirty Checking에 의해 Update 쿼리가 나가지 않나요? event.increaseParticipants(); eventRepository.save(event); EventParticipant participant = EventParticipant.builder() .event(event) .member(member) .build(); participantRepository.save(participant); } } 코드 블럭의 주석 란에 질문을 적어놓았습니다. 저 상황에서 save() 를 호출하는 이유가 궁금합니다. JPA 엔티티의 상태 변경분에 대한 쿼리는 트랜잭션 커밋 후, 자동으로 나가는 것으로 알고 있습니다. 혹시, 제가 잘못 알고 있는건지 궁금합니다.
AI를 1도 모르는 JAVA 개발자 입니다. AI를 어떻게 공부해야 하는지 몰라서 인프런 검색하여 강사님 강의를 듣게 되었습니다. AI 개발에 파이썬이 사용된다고 하여 인공지능을 위한 파이썬 Level4 까지 모두 구입해두고 듣고 있는데요. 개발자라서 지금 수업이 어렵거나 하지는 않습니다. 그런데 인공지능을 위한 파이썬 LEVEL4 수업이 끝나면 어떤 수업을 들어야 하는 걸까요? 강의를 듣다 보니 통계, 확률을 알아야 하는 것 같은데 저는 그것도 전혀 모릅니다. 이후 어떤 수업을 들어야 하는지 문의드려요.
이번 미션을 진행하면서 궁금한 점이 있어 질문드립니다. 이전 강의에서 프로젝트를 처음 시작시 보통 초기화(/init)하여 claude.md파일을 생성한다고 했는데 이번 미션에는 초기화없이 Plan Mode로 계획을 수립/구현하는데 그럼 구현 후 초기화하면 되는 걸까요? 초기화 하는 시점이 궁금합니다. 그리고 만약 구현 후 초기화하면 코드베이스를 분석하여 claude.md 파일을 생성하면 그 이후에 수정사항은 Plan Mode가 아닌 claude.md 파일에서 지침을 수정하면 이전 컨텍스트를 기억해서 수정하는게 아니라 claude.md 파일을 분석해서 수정하니까 token 소모가 덜 들것 같은데 claude.md 파일을 수정해서 구현을 요청해도 되는 걸까요?
안녕하세요 선생님. 오늘도 너무나 재밌게 잘 배우고 있습니다. 감사드립니다. 현재 시간 관계상, 섹션4(RCNN계열)까지 수강 후 섹션7(SSD)를 수강중입니다. 강의 내용을 누락시킨 채 질문을 드리는 것이 아니었으면 좋겠습니다. 제가 이해한 바 Faster-RCNN에서 RPN은 image 원본이 아닌 feature map을 입력을 받는다. RPN 내에서 Positive Anchor들에 대해서만 학습을 수행한다. 일 때 학습 시에, RPN내에서 특정 anchor의 Positive 판단이 된다면, 해당 anchor 위치에 어떤 객체 A의 GT가 IoU 기준에 부합하다는 것이 판단되어야 할텐데, RPN 내에서는 feature map 을 입력으로 받고 있으니 내부에서 A 객체의 GT와 anchor 의 IoU를 계산하기 위해선 GT(image 좌표계), anchor(feature 좌표계)를 비교해야 할 텐데 이건 너무 번거로운 일이 아닌가 생각이들었습니다. 위 내용이 틀렸다면 RPN 이전 벌써 anchor 가 존재하고(혹은 설계 가정), 매 학습 이미지가 들어올 때마다 각 anchor 의 라벨정보를 미리 구해놓은 뒤 역전파 시점에서 해당 라벨 정보를 가지고 RPN의 손실 함수 계산에 해당 라벨정보를 포함시킬 수 있겠다라고 생각을 했습니다. 하지만 이런 경우 이 anchor의 positive 처리 과정이 network 내로 들어올 수 없고 Keras 와 같은 framework 구성으로 들어와야하지 않을까 하는 생각이 들었습니다. network 에는 처리 소스코드를 넣을 수 없으니까요. (특정 구조로 가능할런지는 모르겠습니다) 질문입니다. RPN 내에서 Anchor Positive 처리가 이뤄지나요?
안녕하세요 토비님!! 강의를 완강하고 제 프로젝트를 리팩토링하면서 피드백받고싶은점이 생겨 질문글을 올립니다. Repository Port를 기술에 종속시키지 않기 위해 Adapter에서 JPA, MyBatis, QueryDSL을 조합하는 구조를 선택했는데, 이 설계 방향이 적절한지 조언을 구하고 싶습니다. 현재 구조 core/ └── domain/ └── application/ └── required/ ← Port 인터페이스 └── ~Repository adapter/ └── persistence/ ├── ~RepositoryAdapter ← Port 구현체 ├── ~JpaRepository ← Spring Data JPA └── ~MybatisMapper ← Mybatis 매퍼 인터페이스 의존 관계 [Service] → [Repository] ←impl― [RepositoryAdapter] → [JpaRepository] → [MybatisMapper] → [JPAQueryFactory] (core) (core) (adapter) (adapter) 예시 @Repository @RequiredArgsConstructor public class ItemRepositoryAdapter implements ItemRepository { private final ItemJpaRepository itemJpaRepository; private final ItemMybatisMapper itemMybatisMapper; @Override public List<Item> findBySearchRequest(ItemSearchRequest request) { return itemMybatisMapper.findBySearchRequest(request) .stream() .map(Item::from) .toList(); } @Override public List<Item> saveAll(List<Item> items) { return itemJpaRepository.saveAll(items); } } @Repository @RequiredArgsConstructor public class AuctionRepositoryAdapter implements AuctionRepository { private final JPAQueryFactory jpaQueryFactory; private final AuctionJpaRepository auctionJpaRepository; @Override public void deleteAllByRegionAndRealmId(RegionType region, Long realmId) { QAuction qAuction = QAuction.auction; BooleanBuilder filter = new BooleanBuilder(); filter.and(qAuction.region.eq(region)); if (realmId == null) { filter.and(qAuction.realmId.isNull()); } else { filter.and(qAuction.realmId.eq(realmId)); } jpaQueryFactory.delete(qAuction) .where(filter) .execute(); } @Override public int saveAll(List<Auction> auctions) { if (auctions.isEmpty()) return 0; return auctionJpaRepository.saveAll(auctions).size(); } } 이 구조를 선택한 이유 동적 쿼리, 벌크 연산 등 JPA만으로 해결하기 어려운 케이스가 있어 MyBatis와 QueryDSL을 병행 사용하고 있습니다. 일반적인 방식인 Port 인터페이스가 Spring Data JPA Repository를 상속하는 구조를 채택하지 않은 이유: MyBatis나 QueryDSL 기반 구현체를 만들 수 없음 CustomRepository 인터페이스를 별도로 만들어야 하는 복잡도 증가 현재 방식의 장점: Port 인터페이스가 순수 Java 인터페이스로 유지됨 RepositoryAdapter에서 상황에 맞는 기술을 자유롭게 조합 가능 추가 인터페이스 없이 단순한 구조 유지 저는 현재 구조가 의존 관계도 외부에서 내부로 향하고 테스트도 쉬워서 괜찮다고 생각하는데 토비님의 생각도 듣고싶습니다!! 좋은 강의 감사합니다!!
현재 수강 진도를 함께 알려주세요! "1주차 3강까지 완료" 또는 "2주차 실습 중"처럼 어디까지 들으셨는지 적어주시면 맞춤형 답변을 드릴 수 있어요 📚 구체적인 상황과 함께 질문해주세요! "AI가 안 된다"보다는 "Cursor에서 이런 프롬프트를 입력했는데 이런 에러가 나와요"처럼 상세하게 적어주시면 더 정확한 답변을 드릴 수 있어요 🎯 스크린샷이나 코드를 첨부해주세요. 에러 화면, 현재 진행 상황을 보여주시면 문제 해결이 10배 빨라집니다! 마크다운 코드 블록(```)을 활용하면 더 깔끔하게 정리할 수 있어요 📸 커뮤니티 검색을 먼저 해보세요. 같은 문제로 고민하신 분들이 이미 해결책을 찾았을 수도 있어요. 검색 후 못 찾으시면 언제든 새로 질문해주세요! 🔍 서로 도우며 함께 성장해요. 나도 모르는 건 "저도 궁금해요!"라고 댓글 달아주시고, 아는 건 적극적으로 공유해주세요. 가르치면서 더 잘하게 됩니다 💪 바이브코딩 관련 질문은 환영, 기술 세부사항은 GPT 활용! 프롬프트 작성법, AI 도구 사용법은 여기서, 복잡한 코딩 문법은 ChatGPT에게 물어보시는 게 더 빨라요 🤖 진도나 과제 관련 문의는 1:1 문의를 이용해주세요. 개인적인 학습 계획, 환불, 수강 기간 연장 등은 따로 문의해주시면 더 자세히 상담드릴게요 📞 실패 사례도 공유해주세요! "이렇게 했더니 망했어요" 같은 경험담도 다른 수강생들에게 큰 도움이 됩니다. 실패도 소중한 학습 자료예요 💡 💬 좋은 질문 예시 [진도] 1주차 3강 Lovable [질문] 클라우드로 넘어갈 때 새로 회원가입 후 계속 퍼즐을 하라고 하는데 맞을까요? (사진 첨부)
안녕하세요, PRD.md -> ROADMAP.md -> Shrimp 로 작업 쪼개기 후 MVP 만든 후에, 기능을 새로 추가할때마다 똑같은 프로세스 ( PRD.md -> ROADMAP.md -> Shrimp ) 를 반복해야 하나요? 아니면 그냥 클로드에 바로 해당 기능을 추가해달라고 하는게 좋을까요?