안녕하세요 강의 잘 듣고 있습니다. 강의랑 버전 맞춰서 실행하고 있는데 delete 메서드는 잘 동작하는데 deleted가 계속 0이네요.. 아래 질문글도 보고 해봤는데 저는 강의 버전이랑 딱 맞춰서 뭐가 문제인지 잘 모르겠습니다!.. 댓글 세 개 다 테스트 해봤는데 테스트는 잘 통과하는데 강의에서는 두번째 댓글부터 Empty Set이라고 나오는데 저는 아래 사진처럼 나옵니다..
안녕하세요. 오늘도 인덱스 관련해서 질문을 들고 왔습니다! (선생님이 "이런것도 질문해? 제발 질문 하지마 제발" 이라고 들 정도의 질문을 하는 학생들이 대부분 실력이 상승 한다고 해서 물음표 살인마가 되기로 했습니다. 지인들한테 강의 마구마구 홍보중입니다.. 한번만 봐주셉요..) 데이터 삽입 필요한 인덱스 페이지가 가득 찼다면 ,B+ tree 재구성 및 페이지 분할로 디스크 I/O 증가 정렬된 상태를 유지하기 때문에 삽입시마다 B+tree 재구성으로 인해 정렬로 인한 성능 저하 된다는건 이해가 되었습니다.(맞다면..) 허나 페이지 분할은 잘 이해가 안가네요 ㅠ 페이지 분할에 대해 제가 이해한 바인 아래 내용이 맞는지 궁금합니다. PK가 AUTO_INCREMENT일 경우 데이터가 항상 B+ Tree의 마지막(오른쪽 끝)에 삽입됨 . 하나의 페이지가 꽉 차면 , 새로운 페이지가 오른쪽에 생성됨 . 1. [ Page 1 ] (꽉 참) → 데이터 추가 시 분할 필요 2. [ Page 1 (반) ] → [ Page 2 (새로운 페이지 생성) ] PK가 유니크 문자열 또는 숫자일 경우 랜덤한 값이 삽입될 때, 페이지가 꽉 차지 않았더라도 균형을 맞추기 위해 강제적으로 새로운 페이지가 만들어질 수 있음. 1. [ Page 1 ] (데이터 60% 차 있음) → 중간에 랜덤 값 삽입 시 균형 유지 필요 2. 균형 유지 과정에서 일부 데이터를 새로운 페이지로 이동하여 분산 3. [ Page 1 (30%) ] → [ Page 2 (새로운 페이지 생성) ] 즉, 유니크 문자열 또는 숫자는 페이지가 “완전히 가득 차지 않아도” 새로운 페이지가 생성될 수 '도' 있다.
안녕하세요~ 2.2강 초반부 전처리 관련해서 질문이 있습니다. 제가 window os라 그런가 어디서 잘못했는지는 모르겠지만.. 주피터에서 nest_asyncio.apply()를 해도 안되더라구요. 그래서 하루종일 쳇지피티 지지고 볶으면서 그냥 주피터 포기하고 .py로 돌리자 했는데 계속 poppler path가 없다는 에러가 뜨더니 실행이 안됐어요. 그래서 poppler 깔고, 해당 파일이 있는 주소를 아래와 같이 위치지정 해주니까 작동은 되더군요. 제가 했던 코드는 아래와 같습니다. poppler_bin_path = r"C:\Users\Desktop\langgraph-agent\poppler-24.08.0\Library\bin" os.environ["PATH"] += os.pathsep + poppler_bin_path load_dotenv() kwargs = {} model = "gpt-4o-mini" custom_system_prompt = None async def main(): file_path = "./documents/income_tax.pdf" select_pages = 53 output_dir = "./documents" result = await zerox(file_path=file_path, model=model, output_dir=output_dir, custom_system_prompt=custom_system_prompt, select_pages=select_pages, **kwargs) return result result = asyncio.run(main()) print(result) 젤 위에 두 줄 말곤 똑같이 했고 .md 파일 생기는것도 확인했어요. select_pages는 표가 있는 하나만 골라서 했습니다. 서론이 길었지만 여기까지가 제 상황이구요! 아래가 찐질문입니다 ㅎ.. .md 파일을 열어보니 문제가 세가지 정도 보였는데 첫번째는 인코딩 문제 입니다. 저만 그런건지 utf-8로하면 깨져서 나오고 euc-kr로하면 원하는 한국어 파일이 나오더라구요. 저만 이런건가요 강사님도 변환 과정을 거치신 건가요? 두번째는 오타입니다. 님시제< 라는 단어가 반복되길래 뭐지 했는데 나중에 3번 오류를 찾아보면서 같이 찾아보니까 납세지 더라구요. '면세사업등 수입금액)보다 미달하게'를 '면세사업동안이지 더욱 미달하여'라고 표현한것도 보이고요.. 저 위에 있는 코드가 문제인가요 아님 이런 자잘한 오타들은 pdf를 변환하는 과정에서 어쩔 수 없는 것인가요? 강사님이 올려주신 md파일이랑도 번갈아가며 보는데 저기도 짜잘하게 보이긴 하거든요.. 이정도 오타는 넘어가도 괜찮은 건가요?? 마지막으로 제 마크다운 파일에는 표가 보이지 않습니다. 강의 내용 중에도 zerox로 만들어진 .md 파일을 훑어보는데 거기도 표가 나오고, 애초에 zerox를 사용하는 이유가 표를 꺼내기 위해선데 표가 보이지 않아요. 강의 자료 .md를 보면 수식으로 나와있는데(표는 아니더라도) 저는 수식이 있어야 될 곳은 공란으로 나오고 바로 다음 내용으로 넘어갑니다. 아래와 같이요. 복붙하면서 보니까 여기에도 어색한 표현이 있네요ㄷㄷ.. 특히 아래껀 1만분의 2를 곱한 금액인데.. 1만분의 1금이면 타격이 좀 있지 않나요?? <제가 변환한 거 - 틀린 부분이 1 이하 <-> 1보다 큰 경우라서 아예 반대로.. 서술하고 있네요 ㄷㄷ> 1. 다음 계산세에 따라 계산한 약수(사업소득금액)의 종합소득금액에 차치하는 비율 1분 이하인 경우에는 1로, 0보다 큰 경우에는 0으로 한다. ② 해당 과세기간의 사업소득의 총수입금액에 1만분의 1금을 곱한 금액 <강사님의 강의자료> 1. 다음 계산식에 따라 계산한 금액(사업소득금액이 종합소득금액에서 차지하는 비율이 1보다 큰 경우에는 1, 0보다 작은 경우에는 0으로 한다) 가산세 = A × (B/C) × 100 - C × 5 A: 종합소득분이출세액 B: 사업소득금액 C: 종합소득금액 2. 해당 과세기간 사업소득의 총수입금액에 1만분의 2를 곱한 금액 적다보니 글이 길어졌네요 볼드체로 칠한게 글의 요지랍니다. 긴 글 읽어주셔서 감사합니다!
1강부터 차례대로 듣고 있는데 3강부터 막히네요. 영상으로만 보면 따라갈수가 없습니다. 보니까 3강 이후 강의를 먼저 들어야 진행이 가능한거 같은데, 우선순위를 한번 자세히 설명해주시면 좋겠습니다. 그리고, 영상만 봐서 진행이 안되는부분은 https://banbu.kr/free/35 해당페이지 순서를 우선적으로 따라해야하는건지도요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? [질문 내용] public static HttpStatus findByCode(int code) { // value(): HttpStatuse의 배열을 반환한다. for (HttpStatus status : values()) { if (status.getCode() == code) { return status; } } return null; } 위 코드에서 왜 static으로 받나요?
안녕하세요. 아래 강의 소스의 내용중 memberService.join메소드를 호출시 em.persist로 인해 select next value 시퀀스값을 가져오는 쿼리를 기대했습니다. @SpringBootTest(classes = JpashopApplication.class) @Transactional public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Autowired EntityManager em; @Test @Rollback(value = false) public void 회원가입() throws Exception { System.out.println("MemberServiceTest.회원가입"); //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then assertThat(memberRepository.findOne(savedId)).isEqualTo(member); } 하지만, 아래 소스 InitDb의 init메소드의 제거 여부에 따라 위 시퀀스 채번쿼리가 나타났다 사라졌다 합니다. @Component @RequiredArgsConstructor public class InitDb { private final InitService initService; @PostConstruct public void init() { initService.dbInit1(); initService.dbInit2(); } .... } 다른 분들 도 같은 현상을 겪는지 궁금하며 원인을 알고싶습니다.
실무에서 개발좀해보닌깐 느꼇는데 개발자는 기본기가 매우매우매우매우매우중요하다. 갓영한님도 그걸 아시기 떄문에 왜써야하고 어떤문제가있고 그러면 어떻게 해결하고 어떻게 개선하는지를 스텝바이스텝으로 보여주신다. 묻따 기본기룰 챙기고 항상 교차검증을 하는 마인드로 개발을 했으면 좋겟다 -어느 흔한 개발자의 주저리 글-
이 메서드를 만들 때 ProductOrder 인스턴스를 order로 만드는 것과 orders로 만드는 것에 어떤 차이가 있나요? orders로 만드니까 계속 오류가 나서요,, productName에 order 인스턴스에 있는 product를 대입하는 게 아니라 order.productName에 productName을 대입하는 것인지도 궁금합니다
안녕하세요. 강의 13:00에서 @OneToMany 컬렉션 필드를 하이버네이트가 변경사항을 추적한다는 말씀을 하셨습니다. 연관관계의 주인이 아닌 거울이기 때문에 컬렉션에 요소를 추가/제거 하더라도 테이블에 영향을 주지 않는데요. 즉 더티체킹을 하지 않는 것으로 이해했기 때문에 하이버네이트가 추적을 한다는 말씀이 잘 와닫지 않습니다. 제가 잘못이해한 것이 있는지 궁금합니다~!
Student 클래스를 이렇게 이해한 것이 맞는지 확인 부탁드립니다,, 혹시 틀린 부분이 있다면 알려주세요,, Student student1; student1 = new Student(); 1. Student 클래스의 참조값을 student1이라는 변수에 집어넣는다. 2. new Student()는 Student 클래스에 실제로 접근할 수 있는 새로운 인스턴스 값을 생성한다는 의미이다. 3. 이를 student1에 대입하여 Student 클래스의 객체(인스턴스)에 실제로 접근하여 클래스 안의 멤버 변수를 활용할 수 있다. 이를 축약하면 Student student1 = new Student(); 다른 클래스에서 데이터 타입형태로 Student를 넣을 수 있다.(Student student1 같이)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 영한님 강의 영상을 보다가 exception 클래스 색깔이 노란색 인것을 보고 괘찮은 기능이라고 생각해서 여쭈어 봅니다. 이것은 어떻게 설정해야 이렇게 바꿀수 있나요? 답변 부탁드립니다.
안녕하세요. 연관관계 부분이 많이 헷갈리지만 확실히 알고 가고 싶어서 좀 더 공부하면서 알아보고 있다가 질문드릴게 있어서요..! 강의에서 연관관계의 주인만 외래키를 관리할수 있다는 의미에 대해서 코드로 제가 이해한 바가 맞는지 직접 확인해보았는데요. 연관관계의 주인만 setTeam()메서드 등을 통해 외래키를 추가 및 변경할 수 있고, 연관관계의 주인이 아닌쪽은 외래키를 참조해서 조회만 할수 있다. 예를들어, Team team = new Team(); em.persist(team); Member member1 = new Member(); Member member2 = new Member(); Member member3 = new Member(); member1.setTeam(team); // 이렇게 해야함 member2.setTeam(team); // 이렇게 해야함 em.persist(member1); em.persist(member2); em.persist(member3); team.getMembers().add(member3); // 이렇게만 하면, member3의 외래키(TEAM_ID)가 설정되지않음. // 즉 member3의 team필드는 여전히 null이다. List<Member> newMembers = new ArrayList<>(); Member member4 = new Member(); em.persist(member4); newMembers.add(member4); team.setMembers(newMembers); // 이렇게만 하면, member4의 외래키(TEAM_ID)가 설정되지않음. // 즉 member4의 team필드는 여전히 null이다 tx.commit(); //그래서 위와같이하면, 이 상태로 db에 저장된다고 해도, 이후에 team.getMembers()를 호출하면, 리스트안에 member1, member2만 있고 member3과 member4는 없다. 이렇게 이해하는게 맞을까요..? 항상 질문에 답해주셔서 정말 감사드립니다..!
이번에 커버링 인덱스를 설명하시면서 아 대충 왜 빠르게 조회가 되는지 이해가 되기 시작했습니다. 그런데 최근에 했던 프로젝트 중에 이와 비슷한데 왜 성능이 개선되었는지 모르는 것이 하나 있습니다. 아래 부분인데요.. 일단 created_at 은 index 가 적용되지 않았음을 알려 드립니다. select ep1_0.employee_post_id, ep1_0.access_url, ep1_0.contact, ep1_0.contents, ep1_0.member_id, m1_0.member_id, m1_0.access_url, m1_0.authority, m1_0.birth_day, m1_0.email, m1_0.login_id, m1_0.name, m1_0.nick_name, m1_0.password, m1_0.personal_link, m1_0.personal_statement, m1_0.sex, m1_0.tmp_password, m1_0.twitter_link, m1_0.youtube_link, ep1_0.payment_amount, ep1_0.payment_method, ep1_0.title, wft1_0.work_field_tag_id, wft1_0.name, ep1_0.career_year, ep1_0.created_at, ep1_0.updated_at from employee_post ep1_0 left join work_field_tag wft1_0 on wft1_0.work_field_tag_id=ep1_0.work_field_tag_id join member m1_0 on m1_0.member_id=ep1_0.member_id where wft1_0.work_field_tag_id=1 order by ep1_0.created_at desc, ep1_0.employee_post_id desc limit 0,10; 이것을 explain analyze 한다면 Limit: 10 row(s) (cost=1088 rows=10) (actual time=39.1..39.1 rows=10 loops=1) -> Nested loop inner join (cost=1088 rows=1968) (actual time=39.1..39.1 rows=10 loops=1) -> Sort: ep1_0.created_at DESC, ep1_0.employee_post_id DESC (cost=399 rows=1968) (actual time=39..39 rows=10 loops=1) -> Index lookup on ep1_0 using FK_work_field_tag_TO_employee_post (work_field_tag_id=1) (cost=399 rows=1968) (actual time=0.0949..7.91 rows=1968 loops=1) -> Single-row index lookup on m1_0 using PRIMARY (member_id=ep1_0.member_id) (cost=0.25 rows=1) (actual time=0.011..0.011 rows=1 loops=10) 이렇게 나오고 성능이 무척 안좋은 것을 볼 수 있었습니다(using filesort 가 직접적인 원인) 근데 문제는 member 에 대한 inner join 을 빼면 -> Limit: 10 row(s) (cost=398 rows=10) (actual time=10.5..10.5 rows=10 loops=1) -> Sort: ep1_0.created_at DESC, ep1_0.employee_post_id DESC, limit input to 10 row(s) per chunk (cost=398 rows=1968) (actual time=10.5..10.5 rows=10 loops=1) -> Index lookup on ep1_0 using FK_work_field_tag_TO_employee_post (work_field_tag_id=1) (cost=398 rows=1968) (actual time=0.0712..6.03 rows=1968 loops=1) 위와 같이 나오면서 성능이 무척 개선된다는 점입니다. 제가 보았을 떄 핵심적인 부분은 10 rows per chunk 입니다. 혹시 10 rows per chunk 같은 키워드는 언제 언제 발생하는지 알 수 있을까요??(왜 member에 대한 join 을 빼면 나타나구, wft1_0 을 left outer join 을 하는 것은 영향이 없는지..) mysql 공식 문서를 계속 뒤져도 발견하지 못했습니다. 강의와 관련 없는 부분이라고도 생각하실 수 있는데 이런 질문 해서 정말 죄송합니다.. 관련해서 블로그 정리한 거 혹시 필요한 정보가 있을 수도 있으니 링크 남겨놓겠습니다... https://velog.io/@dionisos198/Query-DSL-%EC%84%B1%EB%8A%A5-%EA%B0%9C%EC%84%A0-%EB%B0%8F-fetch-join-%EA%B3%A0%EC%B0%B0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 얼마만큼 실행될지는 운영체제가 결정하는것을 스케줄링인데 그럼 스케줄링이 실행되고나서 시분할이 적용되는 방식인가요?
[오타 내용] 대상 강의록 : 11. 동시성 컬렉션.pdf 대상 페이지 : p.14 첫 번째 그림에 대한 설명 중 마지막 부분 내용 기존 : 클라이언트인 test() 입장에서 ... (중략) ... BasicList 의 어떤 구현체든지 다 받아들일 수 있다. 변경 : 클라이언트인 test() 입장에서 ... (중략) ... SimpleList 의 어떤 구현체든지 다 받아들일 수 있다. 강의 잘 듣고 있습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 정상적인건가 했는데 영상의 선생님을 보니 아닌것같아서 질문드립니다. 프로젝트 실행후 종료하면 아래 사진과 같이 에러같은 문구가 뜹니다. 프로젝트도 정상적으로 빌드되고 따라하는데 문제도 없으니 문제 없는건가 싶었는데 영상의 선생님을 보니 선생님은 프로젝트를 종료하실때 이런 화면이 안뜨는 것같아 뭔가 잘못된건가 싶습니다. 그러다가 아래사진의 Settings -> Build Tools -> Gradle 에서 Build and rung using 과 Run tests using을 Gradle -> 에서 IntelliJ로 변경 후 빌드 하고 종료하니 아무런 문구가 뜨지 않습니다. 해당 설명은 프로젝트 생성 영상에서 언급하셨던 것으로 생각하는데 그때는 속도차이정도로 밖에 설명을 안하셔서 저는 그냥 딱히 인텔리제이 옵션으로 변경하지 않고 Gradle로 그대로 했었습니다. 그런데 이번에 프로젝트를 실행하고 종료하고 하다보니 오류문구같은 차이가 있다보니 혹시 추후에 문제가 있을까 싶어 질문드려요. 어떠한 차이점일까요?
1. 강의 내용과 관련된 질문인가요? (예/아니오) 네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 왜 주문과 상품은 1:N, N:1로 풀고, 카테고리와 상품은 풀지 않은 건가요? 둘 다 다대다 관계인데 어떤 의미가 있나요?