안녕하세요. 싱글톤 관련 질문 드립니다. 특정한 의문점에 대한 질문은 아니고요. 스프링 컨테이너는 핸들러나 서비스 빈을 싱글톤으로 관리하게 되는데, 혹시 강의에서 등장한 자바와 코틀린의 싱글톤 사용 방식의 차이에 의해 발생하는 스프링 싱글톤 관련된 이슈가 있는지 궁금합니다. 싱글톤 관리는 언어와 관계없이 스프링 컨테이너가 맡게 되니 별 상관이 없을 것으로 예상되긴 합니다만.. 혹시 싶어 질문 드립니다. 감사합니다.
먼저, 이렇게 양질의 강의 올려주셔서 정말 감사드립니다. 잘 듣고 있습니다. 49강의 실습에서 equals 메소드를 재정의한다고 말씀하셨습니다. 그런데, MyString 은 Object 로부터 equals(Object) 를 상속 받았고, 강의에서 보여주신 코드에서는 equals(MySring) 을 정의했으므로, 메소드 시그니처가 달라 재정의(overriding)보다는 overloading이 더 적절한 표현이 아닌가 싶어서 질문드립니다. 실제로 인텔리제이에서 equals(MyString) 에 @Override 어노테이션을 붙이려하면 아래의 사진과 같은 오류가 발생합니다. 아니면 제가 재정의에 대해서 오해하고 있는 부분이 있는걸까요?
게스트 예약 부킹 일정 변경 정책 일자와 타임 슬롯 변경을 허용합니다. 과거 일자로의 변경은 허용 되지 않습니다. 예약 날짜는 항상 현재 일자 및 시간 보다 미래 이어야 하기 때문입니다. 각 호스트 고유의 등록된 타임 슬롯으로만 변경이 허용 가능 합니다. 호스트 A의 캘린더에 지정된 타임 슬롯 이외에 시간을 선택한다면, 호스트와 게스트의 만남이 불가능합니다. 호스트의 캘린더에 해당 타임 슬롯의 자리가 비어있다면, 변경이 가능합니다. 그렇지 않다면, 해당 예약 내역 실패 오류를 반환합니다. 성공 시나리오 호스트 타임슬롯: 화,목,금 오후 3시 - 4시, 4시 - 5시, 6시 - 7시 (1월 3일~ 1월 10일 다 비어있음) 게스트는 2026년 1월 1일에, 2026년 1월 2일 (금요일) 오후 3시 부킹을 2026년 1월 6일 (화요일) 오후 6시로 변경하려고 합니다. a) 새 부킹 날짜는 현재 날짜보다 미래 날짜이며, b) 새 부킹 날짜는 호스트의 타임 슬롯의 일자와 일치하며, c) 1월 6일 오후 6시에는 자리가 비어있으므로, 일정 변경이 성공하게 됩니다. 실패 시나리오들 a) 1. 게스트는 2026년 1월 1일에, 2025년 1월 2일 (금요일) 오후 3시 부킹을 실수로 2025년 12월 30일 (화) 오후 6시로 변경하려고 합니다. 새 부킹 날짜는 현재 날짜보다 과거 날짜 이므로 유효 날짜 오류를 반환해줍니다. b) 1. 게스트는 2026년 1월 1일에, 2025년 1월 5일 (금요일) 오후 3시 부킹을 2026년 1월 5일 (월) 오후 6시로 변경하려고 합니다. 새 부킹 날짜는 현재 날짜보다 미래 날짜이므로 첫번째 조건을 통과합니다. 그러나, 호스트의 타임 슬롯 일자들과 맞지 않으므로, 유효하지 않은 타임슬롯 오류를 반환합니다. c) 1. 게스트는 2026년 1월 1일에, 2025년 1월 5일 (금요일) 오후 3시 부킹을 2026년 1월 6일 (화) 오후 6시로 변경하려고 합니다. 새 부킹 날짜는 현재 날짜보다 미래 날짜이므로 첫 번째 조건을 통과합니다. 호스트의 타임슬롯과 일치하므로, 두 번째 조건도 통과합니다. 그러나, 호스트의 캘린더에 이미 요청 시간대에 다른 게스트와의 예약이 존재하므로, 이미 존재하는 일자 오류를 반환합니다.
351쪽 내용 중에 "테스트할 때 현재 일시는 우리가 원하는 임의의 현재 일시값을 사용하도록 합니다. 종단점 함수에서는 어떻게 해야하고, conftest.py 파일에서 의존성 주입 오버라이드는 어떻게 해야할까요?" 이 질문에 대한 저의 구현이 맞는지 궁금합니다. appserver.apps.calendar.deps.py appserver.apps.calendar.endpoints.py conftest.py 3
PostgreSQL의 Partial Unique Index의 기능을 활용하면 attendance_status 모델필드의 값이 cancelled 된 경우를 제외한 모든 동일 일자와 동일 타임슬롯인 경우를 중복으로 간주하는 제약을 구현 할 수 있습니다. __table_args__ = ( Index( "uq_active_booking_when_timeslot", "when", "time_slot_id", unique=True, postgresql_where=text("attendance_status <> 'CANCELLED'"), ), ) postgresql 일 경우, attendance_status 가 'CANCELLED' 가 아닌 모든 when + time_slot_id 조합에 고윳값 제약을 걸어줍니다.
픽스처 함수는 픽스처로, 픽스처 내부에서 사용되는 픽스처 함수는 객체로 표현하였습니다. ===== host_user_calendar 픽스처에서 refresh() 메서드를 통해 host_user 객체를 db와 동기화해서 host_user 객체가 calendar 객체의 존재를 아는 것으로 이해했는데요. 그런데 해당 host_user 객체는 반환되지 않고 host_user_calendar 픽스처에 남아있게 되어 접근할 수 없으니 무의미한 행동이라고 보여졌습니다. 그런데 refresh()를 사용하지 않으면 test_사용자가_변경하는_항목만_변경되고_나머지는_기존_값을_유지한다() 테스트 함수에서 update_calendar 엔드포인트 호출 시 404 에러가 발생하는 것을 확인했습니다. 즉, user.calendar로 접근 시 None으로 평가되는 것이지요. 그렇다면 host_user를 반환하지 않아도 해당 host_user 객체는 client_user_auth 픽스처에서 공유되는 것일까요? (혹은 동일한 객체일까요?) 그래야 refresh()를 진행했을 때 오류가 뜨지 않는다는 점이 설명이 되더라구여. 여기서 또하나 궁금한 점은 client_with_auth 픽스처보다 host_user_calendar 픽스처가 먼저 실행이 되어야 공유되는 host_user 객체가 calendar 정보를 가질 수 있다는 점이었습니다. 이 실행 순서를 결정하는 프로세스에 대해서도 궁금합니다!
안녕하세요. 강의를 듣던 중 생성자 호출 결과와 관련해 궁금한 점이 생겨 질문드립니다. 해당 예제에서 new 연산자 사용 시 다중 정의된 int 타입 파라미터를 받는 생성자가 호출된다고 설명해 주셨는데, 그 이유가 궁금합니다. new 연산자에 int 타입 매개변수를 전달한 상황을 가정하고 설명하신 것일까요? 강의와 유튜브 항상 잘 보고 있습니다. 감사합니 다.
실습내용을 열심히 따라가다 보니 WSL에서 git push하려면 토큰 방식으로 생성된 비번을 입력하라고 하셨는데 하다 보니 아래 캡처와 같이 계속 에러가 나네요. 따라하다 무엇을 잘못한 걸까요? ㅠㅠ 참고로 토큰값 생성은 Tokens(classic)으로도 해보고, Fine-grained tokens로도 생성해서 해 봤습니다. 둘 다 안되네요. ㅠ
안녕하세요. 상속과 별로 연관된 질문은 아닌 듯 하지만 강의에서 나온 부분에 궁금증이 생겨 질문 남깁니다. val swimAbility: Int get() = 3 이라는 예제 코드를 작성하셨는데요. 코틀린은 어차피 필드를 선언하면 게터, 세터를 만들어주고 필드 선언 시 디폴트 값도 지정해줄 수 있는데 그렇다면 위와 같은 형태의 커스텀 게터는 굳이 구현할 필요 없는 것 아닌가? 하는 생각이 듭니다. 그냥 초기값 3을 갖는 필드를 선언하기만 하면 게터까지 알아서 만들어질 테니까요. 그냥 인터페이스의 게터 상속 의도를 표현하기 위해 별 의미나 실 용례는 없는 코드를 작성하신 거라고 봐도 될지? 아니면 저런 방식의 커스텀 게터에 제가 이해하지 못하는 어떤 의미가 있는 것일지가 궁금합니다. 감사합니다. ㅇ
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
@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에 멀티 쿼리의 문서 검색 결과를 저장한 뒤, 각 쿼리에 대한 리랭킹 노드를 하는 방법이 생각이 났는데 피드백 부탁드려도 될까요? (사실 오버 엔지니어링이라는 생각이 들지만 ㅎㅎ 실제 프로덕션에 적용시킨다면 어떤 아키텍쳐가 좋은지 궁금합니다!) 감사합니다 :)
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 수업이 끝나면 어떤 수업을 들어야 하는 걸까요? 강의를 듣다 보니 통계, 확률을 알아야 하는 것 같은데 저는 그것도 전혀 모릅니다. 이후 어떤 수업을 들어야 하는지 문의드려요.
안녕하세요 선생님. 오늘도 너무나 재밌게 잘 배우고 있습니다. 감사드립니다. 현재 시간 관계상, 섹션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 처리가 이뤄지나요?