[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 영한님, 안녕하세요. 강의를 들으며 부족하다고 느껴졌던 기본기를 덕분에 잘 습득하고 있습니다! 타입 매개변수 제한 강의를 듣고 나서 궁금한 점이 생겨 Q&A를 남기게 되었습니다. 제네릭을 도입하고 타입 매개변수를 제한함으로써, 1. 코드의 재사용성 증가 2. 타입 안정성 보장 위 두 가지의 강력한 장점을 가진다는 부분을 잘 이해했습니다. 다만, 클라이언트 코드에서 인스턴스를 생성하는 과정에 타입 매개변수를 아래와 같이 Animal로 지정하게 된다면 개발자의 실수가 발생할 수 있는 부분이 있다고 생각합니다. AnimalHospitalV3<Animal> animalHospital = new AnimalHospitalV3<>(); animalHospital.set(new Dog("dog", 100)); Dog biggerAnimal = (Dog) animalHospital.bigger(new Cat("cat", 100)); 위와 같은 코드는 다형성만을 사용하여 개션한 코드와 같이 Java 컴파일러가 잡아주지 못하고, 런타임 시점에 오류가 발생하게 됩니다. (Animal 클래스를 추상 클래스, interface로 선언해도 타입 인자로 지정하는 것을 막지 못합니다.) 이런 상황일 때, 개발자의 실수를 최대한 방지할 수 있는 방법이 어떤 것이 있을지 궁금합니다. 항상 좋은 강의 만들어주셔서 감사합니다. 덕분에 잘 배우며 기본기를 다져가고 있습니다!
명령어에서 startDateTime, endDateTime 의 jobParameters 부재 코드에서 @StepScope 어노테이션과 startDateTime, endDateTime 의 jobParameters 파라미터 부재 1번은 다른 사람이 심지어 이전에 쓴 문제더라고 ? 아마 형이 반영 안한건 모아서 한번에 수정할 계획인거 같아 보이네. 2번의 경우에는 @StepScope 도 빠져서 JobParameter 를 입력해도 오류가 발생했어. 또한 해당 메소드의 파라미터 부분을 1번과 마찬가지로 jobparameter로 받아야 할 것으로 보여져. 읽다가 하나씩 돌려보는데, 오류 터져서 놀라가지고 시간을 좀 썼어, 형. 1번은 내가 이해하는데, 2번은 형 실수가 좀 큰듯.
기본기 부족한 n년차 개발자 입니다. 입문, 기본, 중급1까지 완강했고, 현재 중급2 수강중입니다. (최종목표는 자바, 스프링, 데이터베이스 대부분의 강의를 로드맵 따라 익혀가는 것입니다.) 컬렉션 프레임워크(ArrayList) 부분부터 좀 버거운 느낌이 있는데, 강의를 어설프게 이해하며 따라가고 있는 것 같아 문의드립니다. (사실 잘 이해 못하고 있는 걸지도...) 우선 강의 듣는 자세는 다음과 같습니다. 하나하나 따라치며 강의를 듣기에는 오래 걸리고 하다가 지쳐서 중도포기 할 것 같아 강의를 쭉 돌려본다는 생각으로 학습하고 있습니다. (1배속) IDE에서 소스코드 열고 강의 들으면서 중간중간 눈으로 이해하며 넘어가고 있음 (부분적으로만 아조 조금씩 따라 치고 있음) 강의자료 설명 부분은 어느정도 이해가 가는데 코드 작성 부분에서는 조금 버겁게 느껴짐 즉, 과연 내가 이 코드들을 작성할 수 있을까, 다음 강의들을 잘 따라갈 수 있을까 걱정되는 부분이 있음 어떻게 해야 잘 습득해갈 수 있을까요? 강의는 더할 나위 없이 만족하고 있습니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예/ 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 아니오 [질문 내용] 수정 또는 삭제시에 한번 find 메서드를 호출해서 select하여 데이터의 값을 영속성 컨텍스트에 올려놓은뒤에 수정 또는 삭제시에는 객체의 값만 바꾼후에 commit 을 통해 쿼리가 날라간다고 설명해주셨는데, 보통 수정또는 삭제시에 객체를 조회하지않고 바로 update 또는 delete 쿼리를 사용하는데 jpa를 사용하면 무조건 find 메서드를 통해 select후에 update 또는 delete작업을 해야되는건가요?
질문 가이드 읽고 삭제 후 오타제보 JobScope와 StepScope 사용 시 주의사항 ... 2. Step 빈에는 @StepScope와 @JobScope와를 사용하지 말라. -> @Step 빈에는 @StepScope 와 @JobScope 와 를 사용하지 말라 -> 말이 확실히 이상해
형 스프링부트 4에서는 jdbc starter 추가 안하면 안되던데 뭐지 ```build.gradle.kts description = "batch" dependencies { implementation("org.springframework.boot:spring-boot-starter-jdbc") implementation("org.springframework.boot:spring-boot-starter-batch") implementation("org.springframework.boot:spring-boot-h2console") runtimeOnly("com.h2database:h2") testImplementation("org.springframework.boot:spring-boot-starter-batch-test") } ``` implementation("org.springframework.boot:spring-boot-starter-jdbc") 위 처럼 의존성 명시적으로 처리해주기 전에는 아래 에러떳었어. Could not autowire. No beans of 'PlatformTransactionManager' type found.
안녕하세요 얄코님 객체지향 프로그래밍 섹션 수강 후 디자인 패턴 섹션을 수강하려 하는데 notion의 샘플 코드를 보면 Creational Patterns Structural Patterns Behavioral Patterns 으로 분류하여 나열해놓으셨는데, 강의 순서는 위의 분류와 상관없이 나열되어 있더라구요. 강의 순서에 의도가 있을까요? 별다른 의도가 없는 경우 위에서 분류된 패턴별로 강의를 들어볼까 하여 질문드립니다.
안녕하세요, 이번 강의를 통해 처음으로 헥사고날 아키텍처에 대해서 공부하고 있는 사람입니다. 헥사고날 아키텍쳐를 지키면서 배치, 시큐리티, 이벤트 처리 등등 다양한 기술을 어떻게 사용하나요? 제가 공부해본 바로는 1. 배치: 애플리케이션 계층에 배치를 통해 이루어질 api를 만들어두고, 어댑터 계층엔 배치(Job, Step, Writer, Reader등 )에 관한 설정들을 위치하게 한다. 2. 시큐리티: 전부 어댑터에 위치한다. 이벤트 처리: 이벤트는 도메인으로 간주하고 도메인 계층에 위치시키고, 이벤트 리스너는 어댑터 계층에 위치시킨다. 이벤트를 발행시키는 로직은 애플리케이션 계층에 위치하고, ApplicationEventPublisher 같은 경우는 추상화됐다고 판단하고 그냥 사용하거나, 혹은 인터페이스를 따로 만들어서 사용한다. 이정도인데 큰 흐름에서 제가 이해한 게 맞을까요? 특히 궁금한 건 "이벤트가 도메인으로 간주되어도 문제가 없는지" 입니다. (무조건 도메인이기 보다는 로직을 처리하기 위해 존재하는 dto로 볼 수도 있는 거 아닌가 싶어서요.) 다른 기술들을 헥사고날 아키텍쳐에 적용시킬 때 주의할만한 사항들도 따로 존재를 할까요?
하이딩과 static, 상속 관련해서 질문이 있습니다. 일반적인 상속 상황을 가정할 때 부모, 자식에게 둘 다 있는 메서드(즉, 오버라이딩): 자식꺼 사용 부모, 자식에게 둘 다 있는 static 메서드: 부모꺼 사용 부모, 자식에게 둘 다 있는 변수: 객체의 자료형(Parent p = new Child();의 경우 Parent의 변수 사용, Child c = mew Child();의 경우 Child의 변수 사용)에 맞는 변수 사용 이 맞을까요?
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. '클래스 도입'이라는 강의 16:25 쯤 강사님이 "마치 method을 호출하고 반환한 것처럼 끝나고 나면 참조값을 딱 반환합니다. " 라고 하셨는데 매서드를 호출하고 반환할 때 원래 위치로 돌아가는 것이 참조값을 반환해서 라고 이해하면 될까요? 무슨 말인지 잘 이해가 안 됩니다.
안녕하세요. 강의 수강 중 중간중간에 일이 생겨 이제서야 빠르게 복습하고 다시 수강하고 있는 수강생입니다. 저는 강의에서 사용되었던 코드를 실행했을 때, 평가 실행 시 "KeyError" 오류가 발생되었습니다. 많은 분들께서 따라하는 과정에서 저와 같은 오류를 마주하고 Langsmith Docs를 열어보셨을 것 같습니다. 다만 강의에서 다루는 코드와 현재 시점에 Langsmith Docs에 작성된 튜토리얼 코드는 많은 부분이 변경되었기에 현재 시점의 Langsmith Docs에서 다루는 LLM Evaluator 구현 시 포인트와 함께 Upstage를 사용한 방법을 정리하여 공유드리려합니다. 참고로 현재 시점의 Langsmith Docs는 아래 링크의 문서이며, 이하 설명에서는 Langsmith Docs를 Docs로 부르겠습니다. https://docs.langchain.com/langsmith/evaluate-rag-tutorial 1. Evaluator 종류 - 현재 Doc에서는 다음과 같은 평가 지표에 대한 예시를 제공하고 있습니다. 1) 정확성(Correctness): LLM의 답변이 실제 답변과 얼마나 유사하고 정확한지 측정 2) 관련성(Relevance): LLM의 답변이 사용자의 질문과 얼마나 관련있는지 측정 3) 근거성(Groundedness): LLM의 답변이 검색된 데이터의 맥락과 얼마나 일치하는지 측정 4) 검색 관련성(Retrieval relevance): 입력된 질문과 검색된 데이터는 얼마나 관련있는지 측정 2. 데이터 셋 형식 변경 - 현재의 Docs에서는 다음과 같은 데이터 셋 형식을 사용하고 있습니다. # Define the examples for the dataset examples = [ { "inputs": {"question": "How does the ReAct agent use self-reflection? "}, "outputs": {"answer": "ReAct integrates reasoning and acting, performing actions - such tools like Wikipedia search API - and then observing / reasoning about the tool outputs."}, }, ... ] - 따라서 강의에서 제공된 데이터 셋을 다음과 같이 변경할 수 있습니다. Docs의 Evaluator에서는 'contexts' 를 사용하진 않는 것 같지만 기존 데이터 셋의 내용에 맞추어 수정한 점은 참고바랍니다. examples = [ { "inputs": {"question": "제1조에 따른 소득세법의 목적은 무엇인가요?"}, "outputs": {"answer": "소득세법의 목적은 소득의 성격과 납세자의 부담능력에 따라 적정하게 과세함으로써 조세부담의 형평을 도모하고 재정수입의 원활한 조달에 이바지하는 것입니다."}, "metadata": {"contexts": "제1조(목적) 이 법은 개인의 소득에 대하여 소득의 성격과 납세자의 부담능력 등에 따라 적정하게 과세함으로써 조세부담의 형평을 도모하고 재정수입의 원활한 조달에 이바지함을 목적으로 한다."}, }, ... ] 3. Upstage Model을 사용하는 방법 - 현재의 Docs에서는 각 단계에서 LLM을 선언하는 부분에서 다음과 같이 'ChatOpenAI()' 함수를 사용하고 있습니다. # Rag-Bot from langchain_openai import ChatOpenAI ... llm = ChatOpenAI(model="gpt-4.1", temperature=1) # Evaluators grader_llm = ChatOpenAI(model="gpt-4.1", temperature=0).with_structured_output( ... ) - 따라서 다음과 같이 'ChatUpstage' 라이브러리를 import한 후, 'ChatOpenAI()' 함수를 사용하는 부분을 'ChatUpstage()' 함수로 변경해주면 됩니다. 'Rag-Bot' 코드를 작성하는 셀에서 'ChatUpstage' 라이브러리를 import한다면 이하 코드에서는 일일이 import하지 않아도 되며, 'ChatOpenAI()' 함수에서 사용하던 'temperature=1' 인자는 제거해도 무방했습니다. # Rag-Bot from langchain_upstage import ChatUpstage ... llm = ChatUpstage(model="solar-pro3") # Evaluators grader_llm = ChatUpstage(model="solar-pro3").with_structured_output( ... ) 제가 수정한 전체 코드, 코드별 설명과 변경된 데이터 셋 파일은 아래 링크에 업로드해두었으며, 참고하시면 좋을 것 같습니다. https://github.com/C0deH4ter/llm-application/tree/main/5.1%20Upstage%20Challenge
운영체제 관점의 실제 모니터 명세는 조건변수를 추가할 수 있습니다. synchronized는 자바가 구현한 모니터인데 조건변수의 추가가 불가능해서 생산자 소비자 문제를 해결할 수 없습니다. ReentrantLock은 자체적으로 구현한 락을 사용하지만 그 락의 구현은 실제 조건변수를 추가할 수 있는 모니터의 명세를 따르고 있어 모니터를 구현했다고 할 수 있습니다. 모니터는 CAS를 내부적으로 사용합니다. CAS를 반복문으로 돌리며 바쁜대기를 하거나 Park로 락을 획득하고 반환합니다. 원자적 연산도 CAS를 구현하지만 단순 속도가 synchronized와 ReentrantLock보다 더 빠른 이유는 락의 존재 유무입니다. 혹시 제가 이해한 내용들이 맞을까요?? 현재 81강까지 들었습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 영상에선 정렬되서 나오는데 제 DB에서는 price부터 나오네요 코드 에러는 없고 넣으면 들어가는데 보기좋게 정렬되게 만들고 싶은데 어떻게 해야할까요?