강의 36분 10초 경부터 관련해서 질문드립니다. 해당 시점에서 refMember는 getReference()하였으므로 프록시입니다. 그리고 바로 다음에 em.detach(refMember) 하여 영속성 컨텍스트에서 끄집어 낸다고 하시는데요. 그렇다면 getReference()하여 생성되는 프록시도 영속성 컨텍스트에 속하게 된다는 말씀인건가요?
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
@Transactional public void returnBook(BookReturnRequest request) { User user = userRepository.findByName(request.getUserName()) .orElseThrow(IllegalArgumentException::new); user.returnBook(request.getBookName()); } 위 코드의 BookService 에서 책을 반납할때 userLoanHistory 중 user명과 책 이름이 같은것을 가져와서 userLoanHistory 에서 리턴하는데 문제는 한 사람이 이미 같은 책을 빌렸고 반납한 기록이 있다면 중복으로 잡힙니다. public void returnBook(String bookName) { UserLoanHistory targetHistory = this.userLoanHistories.stream () .filter(history -> history.getBookName().equals(bookName)) .findFirst() .orElseThrow(IllegalArgumentException::new); targetHistory.doReturn(); } 위의 User 엔티티에서 혹시 userLoanHistory 값이 여러개 나올때 혹시 .findFirst() 를 통해 그 중 가장 위 즉, 여기선 가장 최근에 대출한 책의 기록인 userLoanHistory 를 가져와서 doReturn()을 진행하는 형태가 맞습니까?
안녕하세요! 강의 잘 보고 있습니다. 강의 내용중 - "File + a"가 있고 - "a"에 해당되는 내용이 네트워크(port번호, IP주소)가 되면 - "file + a" == 소켓이다. 이렇게 말씀하셨는데 그러면 앞에서 쭉 강의 하셨던 내용을 토대로 생각해보면 제가 작성한 A,B가 맞는 내용인가요? 아니면 C가 맞는 내용인가요? 아래 그림도 첨부했습니다! A. "a"에 해당하는 네트워크 정보가 있기 때문에 서버와 클라이언트는 각 소켓을 통해 데이터를 주고 받고가 가능. B. 이때 클라이언트에서 hello!라는 mgs를 소켓을 통해 전송하면 : 로컬(서버)에 "file"이라는 1차원 선형 공간에는 data(그림의 경우 클라이언트가 전송한 String타입의 data)이 저장되고 해당 file을 콘솔에 출력하거나, txt로 저장하거나 할 수 있다. C. A,B 둘 다 아니고 소켓은 (장치파일 + a(네트워크 정보))이고 소켓에 send,recv 행위를 하는 것은 장치파일에 write,read 하는 것과 같은 행위이다. 그림에서 클라이언트의 msg를 서버에서 recv 하면 장치파일에 [hello]가 저장되고 그것을 콘솔에 출력하거나 별도의 파일로 저장할 수 있는 것 이라는 의미인가요...??
안녕하세요 강사님 좋은 강의 잘 듣고 있습니다. [2-7 최대 힙 메모리를 늘리면 좋은 점 ] 최대 힙 메모리로 늘리면 좋은 점 - GC가 적게 일어나면 좋다? 에 대해서 궁금증이 있어 질문을 드립니다. GC가 일어나게 되면 STOP-THE-WORLD로 객체 제거 할떄 어플리케이션이 멈춘다고 알고 있습니다. 그래서 GC가 자주 일어나지 않으면 stop-the-world 가 덜 일어나니 좋겠네? 라는 생각을 처음에 했습니다. 하지만 생각을 해보니 힙사이즈를 늘리면 gc가 일어나는 빈도가 적어지지만 한 번 gc가 일어날떄 객체 제거에 처리해야할 양이 늘어나 stop-the-world시 멈추는 시간이 늘어난다고 알고 있습니다... 그래서 과연 무조건적으로 힙사이즈를 늘리는게 옳은게 맞을까 라는 궁금증이 생겨 질문 드립니다. 감사합니다.
안녕하십니까 강사님 마지막까지 좋은 강의로 마무리해주셔서 감사드립니다. 혹시 시간이 괜찮으시다면 지금까지 배운 내용들을 토대로 end-to-end mlops framework를 만들어서 실제로 사용하는 모습에 대한 강의도 추가적으로 제작해주실 수 있으신가요? mlops의 각 파트에 대한 내용은 너무 자세히 다뤄주셨지만 각 파트당 연결되는 부분이랑 결국 최종적으로 이 배운것들을 어떻게 융합하는지에 대한 내용도 있으면 너무 좋을 것 같습니다. 감사합니다.
안녕하세요. Java 의 Socket::close() 내부에서 InputStream, OutputStream 을 정리해주지 않는 이유가 있나요? Java 에서 제공하는 Socket::close() 내부에서 Stream 들을 정리해주면 강의 코드가 훨씬 간단해질것 같아 문의 드립니다. 아니면, 원래 정리를 해주는데 강의에서 복잡한 상황을 보여주기 위해 의도적으로 Socket 과 InputStream, OutputStream 을 함께 명시적으로 정리해주는 것인가요? ServerSocket 의 경우에도 자체적으로 SessionManager 와 같은 기능을 제공하는 더 나은 ServerSocket 클래스가 있는지 궁금합니다. 감사합니다.
안녕하세요. 강사님. 강의를 보고 개인 웹사이트를 만들었는데요. https://mirihomepage.com/ 로그인이 안됩니다;;; superuser도 있고, 카테고리/google 사이트 등록까지 분명 다 했는데, https인증 받고, 도메인 연결하고 그러는 사이에 뭔가 달라진건가싶습니다...
mappedBy를 정확히 뭐라고 이해해야할지 잘모르겠습니다. 양방향 연관관계 설정을 위해서 필요한 것은 알겠으나 그 용어의 개념?이라고 할까요 뭐라고 이해해야할까요? 이전 양방향 연관관계와 연관관계의 주인 1- 기본 에서는 반대 편에 어떤 것이 걸려있는지 이런식으로 용어를 설명하셨는데 이번 강의 11분 44초와 13분 31초 부터 설명하시는 것을 보면 mappedBy를 통해 연관관계 주인이 누구로 설정되어있는지 알려주는 듯한 설명을 하시는데요 그냥 단순 mappedBy라는 용어 개념을 이해하려면 전 강의에서 설명하셧듯이 단순히 어떤 것이랑 연결되어있는지로 이해하면 될지 아니면 이번 강의에서처럼 연관관계 주인이 어떤 것으로 설정되어있는지 알려주는 것으로 이해하면 될지 궁금합니다
[질문 내용] 여기에 질문 내용을 남겨주세요. 궁금한 것이 생겨서 질문 남깁니다. Executor 스레드 풀 관리에서 예제와 같은 상황일 때, 만약 요청이 계속 들어온다면 초과 스레드를 유지하는 것이 좋다고 말씀하셨습니다. 거기서 의문이 생긴 게, 요청이 계속 들어오면 동적으로 maximumPoolSize를 조절할 수 있는 방법이 있나요? 아니면 초과 스레드를 살려두는 TimeUnit 값을 늘릴 수 있는 방법이 있나요? 유연하게 관리할 수 있지 않나 싶어서 찾아보니, setMaximumPoolSize(int maximumPoolSize) setKeepAliveTime(long time, TimeUnit unit) 으로 설정할 수 있더군요. 이를 활용해 동적으로 관리하는 것인지 궁금합니다! 실무에서는 어떤 방식을 사용하는지 궁금해 질문 남깁니다. 감사합니다!
안녕하세요. 질문은 아니고 혹시나 저와 같은 에러가 발생하신 분들이 보다 빠르게 문제를 해결하고 강의를 들으실 수 있도록 comment 하나 남깁니다! 현재 저는 Airflow 3.0.x 버전으로 수강 중인데, Python & Email Operator 기반 Xcom 강의(32강) 를 듣던 중, 아래와 같이 AirflowException: SMTP connection is not found 에러가 발생했습니다. 원인 파악을 위해 코드를 다시 보던 중, 강사님 GitHub에 있는 코드( dags_python_email_xcom.py )에서 EmailOperator에 conn_id 부분이 없는 것을 확인했습니다. 혹시나 저처럼 Airflow 3.0.x 버전으로 실습을 진행하시는 분들이 참고하실 수 있도록 내용 공유 드립니다~! 그럼 완강까지 다들 화이팅입니다!
settings.py를 똑같이 작성하고, hands_on 경로에 있는 것도 잘 확인했는데, PRINT_SQL=1 py manage.py shell을 작성하면, -------------------------------- PRINT_SQL=1 : 'PRINT_SQL=1' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + PRINT_SQL=1 + ~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (PRINT_SQL=1:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException ----------------------------------- 이렇게 에러가 납니다.. 그래서 좀 찾아보니까 ------------------- $env:PRINT_SQL=1 py manage.py shell ------------------- 이렇게 작성하면 된다고 하는데 맞을까요?
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] package thread.executor.test; import java.util.List; import java.util.concurrent.*; import static util.MyLogger.log; import static util.ThreadUtils.sleep; public class NewOrderService { private final ExecutorService es = Executors.newFixedThreadPool(10); public void order(String orderNo) throws InterruptedException, ExecutionException { InventoryWork inventoryWork = new InventoryWork(orderNo); ShippingWork shippingWork = new ShippingWork(orderNo); AccountingWork accountingWork = new AccountingWork(orderNo); try { List<Callable<Boolean>> tasks = List.of(inventoryWork, shippingWork, accountingWork); List<Future<Boolean>> futures = es.invokeAll(tasks); for (Future<Boolean> future : futures){ Boolean value = future.get(); if (!value){ log("일부 작업이 실패했습니다."); } } log("모든 주문 처리가 성공적으로 완료되었습니다."); } finally { es.close(); } } } 코드의 내용을 이렇게 짰는데요. 디자인 패턴 중 전략 패턴을 적용하고 싶은데 영 떠오르지 않네요. InventoryWork, ShippingWork, AccountingWork 처럼 계속 인스턴스가 늘어나면, 코드가 번잡해질 듯한데 전략 패턴을 어떻게 녹일 수 있을까요? 떠오르지 않아서 질문드립니다. 감사합니다.