묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
트랜잭션 질문
public class OrderApiController { @GetMapping("/api/v1/orders") public List<Order> orderV1() { List<Order> all = orderRepository.findAllByString(new OrderSearch()); for (Order order : all) { order.getMember().getName(); order.getDelivery().getAddress(); List<OrderItem> orderItems = order.getOrderItems(); orderItems.forEach(o -> o.getItem().getName()); } return all; } } public class OrderRepository{ public List<Order> findAllByString(OrderSearch orderSearch) { String jpql = "select o from Order o join o.member m"; boolean isFirstCondition = true; //주문 상태 검색 if (orderSearch.getOrderStatus() != null) { if (isFirstCondition) { jpql += " where"; isFirstCondition = false; } else { jpql += " and"; } jpql += " o.status = :status"; } ...트랜잭션을 따로 붙히지 않았는데 상관없는건가요?List<Order> all = orderRepository.findAllByString(new OrderSearch()); 이 때 연관관계매핑되어 있는 객체들은 지연로딩에 의해 프록시로 존재하고 for (Order order : all) { order.getMember().getName(); order.getDelivery().getAddress(); List<OrderItem> orderItems = order.getOrderItems(); orderItems.forEach(o -> o.getItem().getName()); } 이 때 강제호출 되어서 쿼리가 나가는 게 맞나요?orderRepository.findAllByString에서 repository에서 작업이 마쳐서 트랜잭션이 커밋되어서 영속성 컨텍스트에는 아무값이 없을 거 같은데 컨트롤러에서 리턴하기 전까지 하나의 트랜잭션 안에서 작동이 이뤄지는 건가요?트랜잭션이 언제 시작하고 언제 종료되는 지 궁금합니다
-
해결됨FastAPI 완벽 가이드
url 차이 질문
@app.get("/items") # 함수에 개별 인자값이 들어가 있는 경우 path parameter가 아닌 모든 인자는 query parameter # query parameter의 타입과 default값을 함수인자로 설정할 수 있음. async def read_item(skip: int = 0, limit: int = 2): return fake_items_db[skip : skip + limit] @app.get("/items_nd/") # 함수 인자값에 default 값이 주어지지 않으면 반드시 query parameter에 해당 인자가 주어져야 함. async def read_item_nd(skip: int, limit: int): return fake_items_db[skip : skip + limit]안녕하세요 url 차이에 관해 질문드립니다. 위에 url은 "/items" 인데, 아래 url은 "/items_nd/" 으로 끝에 /가 붙어있는데요. 둘다 query params로 구성되어 있는데 위는 /로 안끝나고, 아래는 왜 /로 끝났는지 이유가 궁금합니다.
-
해결됨스스로 구축하는 AWS 클라우드 네트워크 - 기본편
curl 되고 ping이 안되는 이유는 무엇일까요?
route table 구성까지 실습을 하였습니다. 그런데 회사에서 실습해야하는 상황이라 라우트 테이블 구성하고 security inbound를 0.0.0.0/0 이 아닌 회사ip/32 설정하니 ping 동작이 막혀서 동작을 안하더라구요. 그래서 curl을 해보니 이건 또 동작을 합니다. outbound도 설정을 안했는데요. 왜 그런지 알수 있을까요?
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
분류카드 실습
안녕하세요 위와 같이 코드를 실행하면 아래와 같이 에러가 뜨네요 ㅠ 집에선 잘됬던거 같은데회사에서 똑같이 하니 왜그런건지 ..!..ㅠ
-
미해결[React 1부] 만들고 비교하며 학습하는 React
delegate, emit 필요한 이유
안녕하세요. delegate와 emit 함수의 필요성이 잘 와닿지 않는데, 왜 필요한걸까요?
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[인프런 빅쿼리 빠짝스터디 1주차] 퍼널 작성 흐름을 익히는게 어려웠다
목차과제별 작성 쿼리쿼리 작성 후 느낀점 과제별 작성 쿼리(1) ARRAY·STRUCT## 연습문제 1번-- select-- title,-- genre-- from advanced.array_exercises-- cross join unnest(genres) as genre## 연습문제 2번-- select-- title,-- actor.actor,-- actor.character,-- from advanced.array_exercises-- cross join unnest(actors) as actor## 연습문제 3번-- select-- title,-- actor.actor,-- actor.character,-- genre-- from advanced.array_exercises-- cross join unnest (actors) as actor-- cross join unnest (genres) as genre## 연습문제 4번-- select-- user_id,-- event_date,-- event_name,-- user_pseudo_id,-- event_param.key,-- event_param.value,-- event_param.value.int_value-- from advanced.app_logs-- cross join unnest(event_params) as event_param-- where-- event_date = '2022-08-01' PIVOT## 연습문제 1번-- select-- order_date,-- sum(if(user_id=1, amount, 0)) as user_1,-- sum(if(user_id=1, amount, 0)) as user_2,-- sum(if(user_id=1, amount, 0)) as user_3,-- from advanced.orders-- group by-- order_date-- order by-- order_date asc## 연습문제 2번-- select-- user_id,-- sum(if(order_date='2023-05-01', amount, 0)) as 2023-05-01,-- sum(if(order_date='2023-05-02', amount, 0)) as 2023-05-02,-- sum(if(order_date='2023-05-03', amount, 0)) as 2023-05-03,-- sum(if(order_date='2023-05-04', amount, 0)) as 2023-05-04,-- sum(if(order_date='2023-05-05', amount, 0)) as 2023-05-05-- from advanced.orders-- group by-- user_id## 연습문제 3번-- select-- user_id,-- max(if(order_date = '2023-05-01', 1, 0)) as 2023-05-01,-- max(if(order_date = '2023-05-02', 1, 0)) as 2023-05-02,-- max(if(order_date = '2023-05-03', 1, 0)) as 2023-05-03,-- max(if(order_date = '2023-05-04', 1, 0)) as 2023-05-04,-- max(if(order_date = '2023-05-05', 1, 0)) as 2023-05-05-- from advanced.orders-- group by-- user_id## 앱 로그 데이터 배열 PIVOT-- with base as (-- select-- user_id,-- event_date,-- event_name,-- user_pseudo_id,-- event_param.key as key,-- event_param.value.string_value as string_value,-- event_param.value.int_value as int_value-- from advanced.app_logs-- cross join unnest(event_params) as event_param-- where-- event_date = '2022-08-01' and-- event_name = 'click_cart'-- )-- select-- user_id,-- event_date,-- event_name,-- user_pseudo_id,-- max(if(key = 'firebase_screen', string_value, null)) as firebase_screen,-- max(if(key = 'food_id', int_value, null)) as food_id,-- max(if(key = 'session_id', string_value, null)) as session_id,-- from base-- group by all 퍼널## step1 : 퍼널정의, 유저 집계 방식 정하기## step2 : 데이터 확인-- select-- *,-- event_param.key,-- event_param.value.string_value,-- event_param.value.int_value,-- from advanced.app_logs-- cross join unnest(event_params) as event_param-- where-- event_date between '2022-08-01' and '2022-08-18'-- limit 100## step3 : pivot 해서 concat 하기 좋은 형태로 만들기with base as (select*,max(if(event_param.key = 'firebase_screen', event_param.value.string_value, null)) as firebase_screen,max(if(event_param.key = 'food_id', event_param.value.int_value, null)) as food_id,max(if(event_param.key = 'session_id', event_param.value.string_value, null)) as session_idfrom advanced.app_logscross join unnest(event_params) as event_paramwhereevent_date between '2022-08-01' and '2022-08-18'group by all)## step4 : concat해서 퍼널 컬럼 정의하기, base2 as (select*,concat(event_name, '-', firebase_screen) as event_name_with_screenfrom base)## step5 : 퍼널별 유저수 쿼리 작성 I step_number, cnt 컬럼 생성-- select-- event_name_with_screen,-- case-- when(event_name_with_screen = 'screen_view-welcome') then 1-- when(event_name_with_screen = 'screen_view-home') then 2-- when(event_name_with_screen = 'screen_view-food_category') then 3-- when(event_name_with_screen = 'screen_view-restaurant') then 4-- when(event_name_with_screen = 'screen_view-cart') then 5-- when(event_name_with_screen = 'click_payment-cart') then 6-- else null-- end as step_number,-- count(distinct user_pseudo_id) as cnt-- from base2-- group by-- 1-- having-- step_number is not null## step6 : 일자별 퍼널 쿼리 작성selectevent_date,event_name_with_screen,casewhen(event_name_with_screen = 'screen_view-welcome') then 1when(event_name_with_screen = 'screen_view-home') then 2when(event_name_with_screen = 'screen_view-food_category') then 3when(event_name_with_screen = 'screen_view-restaurant') then 4when(event_name_with_screen = 'screen_view-cart') then 5when(event_name_with_screen = 'click_payment-cart') then 6else nullend as step_number,count(distinct user_pseudo_id) as cntfrom base2group by allhavingstep_number is not nullorder byevent_date 쿼리 작성 후 느낀점(1) ARRAY·STRUCT I 쿼리를 풀고난 이후 느낀점1. '~별'이라고 해서 무조건 GROUP BY는 아니다ARRAY 또는 STRUCT 같은 구조체 타입 컬럼을 만나기 전에는 '~별'이라는 텍스트가 있을 때 GROUP BY를 떠올렸습니다.그러나 구조체 타입 컬럼을 다루고난 이후, 생각이 달라졌습니다.비구조체 컬럼을 구조체 컬럼과 함께 출력할 때는 '~별'을 GROUP BY로 출력할 수 없다는 걸 알았습니다.2. CROSS JOIN을 2개 이상 사용할 때는CROSS JOIN을 2개 이상 입력할 때는 쉼표를 사용하지 않는다는 걸 알았습니다.다른 구간에서 요소를 2개 이상 입력할 때는 쉼표를 사용해서 요소를 분리 했었는데, CROSS JOIN은 아니였습니다.CROSS JOIN을 2개 이상 사용할 때 쉼표를 쓰면 다음과 같은 오류가 발생하는 걸 알았습니다 :--> Syntax error: Unexpected keyword CROSS at [24:1] (2) PIVOT I 쿼리를 풀고난 이후 느낀점1. 날짜 데이터와 다르게 일반 숫자데이터는 따옴표를 쓰지 않는다EX)if(user_id=1, amount, 0) --> Oif(user_id='1', amount, 0) --> X+if(user_id='2024-10-22', amount, 0) --> O2. 컬럼명에 대시(또는 한글)를 사용할 때는 따옴표가 아닌 백틱으로 컬럼명을 감싼다대시를 컬럼명으로 할 때는 백틱을 사용.as 2023-05-01 --> Oas '2023-05-01' --> X+as 빠짝스터디 --> Oas '빠짝스터디' --> X3. 일반 테이블을 피봇테이블로 만들 때 고려해 봐야 할 2가지1. 행에 2개 이상 중복이 있는지 확인한다.2. 2개 이상 중복이 있지만, 피봇테이블로 변경 했을 때 효율적인지 생각해 본다.위 2개 조건을 모두 충족하는 컬럼을 피봇테이블 만들 때 기준 컬럼으로 삼음.EX)*'앱 로그 데이터 배열 PIVOT 하기' 테이블 참고student 열중복 있음 (A, A, A, B, B, B)기준 열로 삼으면 → 각 학생의 모든 과목 점수를 한눈에 볼 수 있어서 효율적!subject 열중복 있음 (수학, 영어, 과학이 2번씩)기준 열로 삼으면 → 과목별로 학생들의 점수를 볼 수는 있지만, 한 학생의 전체 성적을 보기는 어려움score 열중복이 없음.기준 열로 삼으면 → 같은 점수끼리 모이겠지만, 효율이 떨어짐. (3) 퍼널 I 쿼리를 풀고난 이후 느낀점1. concat 할 때 따옴표 사용 주의처음 concat 할 때 다음과 같이 입력했습니다.concat(event_name, '-', 'firebase_screen')'firebase_screen'라고 작성했었는데, 이렇게 하니깐 firebase_screen 내에 있는 데이터랑 concat 된 게 아니라 'firebase_screen'라는 문자 자체랑 concat이 되어서 혼란스러웠습니다.concat 내에서는 따옴표를 쓰지 않고, 컬럼끼리 연결해야겠다는 걸 알게 됐습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
new HashMap 관련한 import 문제
[질문 내용]코드에서 private static Map<Long, Member> store = new HashMap<>(); 부분이 있는데요.. 중간에 코딩시에 HashMap 부분에 빨간줄이 그어져있어서뭔가 문제지 했는데나중에 코드를 보니까import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Optional;처음 작성시엔 위의 코드로 import 가 되어있었는데동영상 후반에 보니까 아래 코드로 변경되어져 있었습니다.import java.util.*;위 import 부분을 강의영상에서 변경된 부분을 못찾았는데어떠한 이유로 그렇게 변경된건지 알고 싶습니다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 영화 사이트 만들기
antd Menu 질문
안녕하세요 강사님혹시 메뉴가 한개만 있는데도 불구하고 "..." 이라는 메뉴 아래에 "나의 favorite" 으로 생겼습니다.굳이 "..." 라는 메뉴 아래에 "나의favorite"이 생기지 않고, "Home" 오른쪽에 "나의 favorite" 을 바로 생성하고 싶은데, 이런경우 어떻게 해결 하면 될까요? [NavBar] [NavBar][NavBar.js]import React, { useState } from 'react'; import LeftMenu from './Sections/LeftMenu'; import RightMenu from './Sections/RightMenu'; import { Drawer, Button } from 'antd'; import Icon from '@ant-design/icons'; import './Sections/Navbar.css'; function NavBar() { const [visible, setVisible] = useState(false) const showDrawer = () => { setVisible(true) }; const onClose = () => { setVisible(false) }; return ( <nav className="menu" style={{ position: 'fixed', zIndex: 5, width: '100%' }}> <div className="menu__logo"> <a href="/">Logo</a> </div> <div className="menu__container"> <div className="menu_left"> <LeftMenu mode="horizontal" /> </div> <div className="menu_rigth"> <RightMenu mode="horizontal" /> </div> <Button className="menu__mobile-button" type="primary" onClick={showDrawer} > <Icon type="align-right" /> </Button> <Drawer title="Basic Drawer" placement="right" className="menu_drawer" closable={false} onClose={onClose} visible={visible} > <LeftMenu mode="inline" /> <RightMenu mode="inline" /> </Drawer> </div> </nav> ) } export default NavBar[LeftMenu.js]import React from 'react'; import { Menu } from 'antd'; function LeftMenu(props) { return ( <Menu mode={props.mode}> <Menu.Item key="mail"> <a href="/">Home</a> </Menu.Item> <Menu.Item key="favorite"> <a href="/favorite">나의 Favorite</a> </Menu.Item> </Menu> ) } export default LeftMenu
-
미해결
게임 개발용 컴퓨터 사양을 모르겠어요
유니티를 주로 사용할것같고 언리얼엔진 또한 사용할것 같은데 인터넷에서 견적 맞춘거 보면 너무 부담되는 가격이여가지고언리얼 엔진과 유니티 엔진을 원할하게 구동시키기 위해서 컴퓨터를 어떻게 구매해야 할까요
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
findAllByString() 실행 시 총 쿼리 7번 날아갑니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이전 질문 내역에서 하이버네이트6 최적화 문제라는 답변을 봤는데.. 아직 패치가 안된건지 2024 년에도 총 7번 쿼리날아가네요. 디버깅 해보니address = order.getDelivery().getAddress(); // LAZY 초기화이 부분에서select d1_0.delivery_id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status from delivery d1_0 where d1_0.delivery_id=? 2024-10-22T14:07:35.134+09:00 DEBUG 6578 --- [nio-8080-exec-1] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=?이렇게 두번 쿼리가 실행되네요..그래서 List<Order> all = orderRepository.findAllByString(new OrderSearch());여기서 쿼리 한번 name = order.getMember().getName(); // LAZY 초기화여기서 쿼리 한번 address = order.getDelivery().getAddress(); // LAZY 초기화여기서 쿼리 두번 주문 리스트가 2개 있으므로1 + 2 * (1 + 2) = 7 번 실행됩니다.궁금한 점은 select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=?이 쿼리는 왜 추가적으로 실행되는지 모르겠습니다.
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
프로젝트의 구조가 궁금합니다
백엔드는 spring 에 내장 톰캣이 서버이고프론트엔드의 서버는 node js인가요? 그렇다면 aws에다가 백엔드 프론트 엔드 따로 서버를 구축하는게 맞는 방법인가요??
-
미해결[유니티6] 따라하면서 배우는 고박사의 2D 플랫포머 게임 제작
01-04. 부서지는 타일에서 첫번째타일
부서지는 타일에서 이상하게도 첫번째 타일을 정확히 맞추려해도점프가 더 안 올라가면서 막히더라구요. 그래서 게임오브젝트를 찾아보니 부서지는 타일 좌측아래부분에 Level01 게임오브젝트의 BoxCollider가 있어요. 그래서 이것의 크기를 줄여야 했습니다.
-
미해결문과생도, 비전공자도, 누구나 배울 수 있는 파이썬(Python)!
수업자료를 어떤 곳에 넣어야 하나요?
압축파일에 있는 자료를 관련 폴더에 다 넣어봐도 주피터에 뜨질 않습니다 ㅠ
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
react에서 modal & portal 사용시 에는 어떻게 작성해야될까요
개요react-modal 라이브러리를 사용하고 있다가 Storybook에 등록하여 관리하고 싶어서 작성하는데 아래와 같이 컴포넌트를 작성했다가 스토리북 화면에서에러가 발생하였습니다. 강사님께서는 Modal의 경우 어떤식으로 해서 Storybook을 동작가능하게 하셨는지 궁금합니다. 현재는 Modal.setAppElement('body')로 처리하여 임시로 실행되게 하였으나, 더 좋은 다른 방법이 있을지 질문드립니다.import Modal from 'react-modal'; Modal.setAppElement('#root'); // 모달이 열린 상태에서도 접근성을 보장하기 위해 필요합니다. const BaseModal: React.FC<BaseModalProps> = ({ Missing Context/Providers: You can use decorators to supply specific contexts or providers, which are sometimes necessary for components to render correctly. For detailed instructions on using decorators, please visit the Decorators documentation.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
백준 22988 번 문제
#include<iostream> #include <vector> #include <algorithm> using namespace std; int n, target; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> target; vector<int>vec(n); for (int i = 0; i < n; i++) { cin >> vec[i]; } int cnt = 0; sort(vec.begin(), vec.end()); int l = 0, r = n - 1; float liq = target / 2.f; int remain = 0; while (l < r) { if (target == vec[r]) { r--; cnt++; continue; } int sum =vec[l] + vec[r]; if (sum >= liq) { l++; r--; cnt++; } else { l++; remain++; } } if (l == r) { remain++; } cout << cnt+(remain/3); return 0; }이렇게 코드 작성했는데 결과는 맞는데 왜 제출하면 틀렸다고 나올까요??
-
해결됨RAG를 활용한 LLM Application 개발 (feat. LangChain)
3.5 Retrieval 효율 개선을 위한 데이터 전처리 - 동일한 결과가 안나옴
안녕하세요, 강의 수강 중 아무리 실행해도 결과가 영상과 동일하게 나오지 않아서 질문드립니다. 실습에 사용중인 tax.docx 파일에서 제55조의 그림으로 되어 있는 테이블을 마크다운으로 변환한 tax_with_markdown.docx로 실습 진행하고 있습니다 .강의에서 올려주신 마크다운 변환된 파일과 코드로 실행했는데, retriever.invoke(query) 결과에서 제55조가 나오지 않아서 result 값이 제대로 나오지 않습니다. 파인콘 인덱스를 삭제하고 새로 만들어도 결과는 동일하게 나옵니다. 원인이 무엇인지 알 수 있을까요? from langchain_community.document_loaders import Docx2txtLoader from langchain_text_splitters import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter( chunk_size = 1500, # 문서를 쪼갤 때, 하나의 chunk가 가질 수 있는 토큰 수 chunk_overlap = 200 # 문서를 쪼갤 떄, 중복을 허용하는 토큰 수 ) loader = Docx2txtLoader("tax_with_markdown.docx") document_list = loader.load_and_split(text_splitter=text_splitter) document_list[52] # 마크다운 부분 잘 나오는 거 확인 from dotenv import load_dotenv from langchain_openai import OpenAIEmbeddings load_dotenv() # API Key 필요 (환경 변수) embedding = OpenAIEmbeddings(model='text-embedding-3-large') import os import time from pinecone import Pinecone from langchain_pinecone import PineconeVectorStore index_name = 'tax-index-markdown' pinecone_api_key = os.environ.get("PINECONE_API_KEY") pc = Pinecone(api_key=pinecone_api_key) database = PineconeVectorStore.from_documents(document_list, index_name=index_name, embedding=embedding) query = '연봉 5천만원인 직장인의 소득세는 얼마인가요?' from langchain_openai import ChatOpenAI llm = ChatOpenAI(model='gpt-4o') from langchain import hub prompt = hub.pull("rlm/rag-prompt") from langchain.chains import RetrievalQA retriever = database.as_retriever() qa_chain = RetrievalQA.from_chain_type( llm, retriever = retriever, chain_type_kwargs = {"prompt":prompt} ) # llm 모델과 벡터데이터베이스와 프롬프트 템플릿 준다. retriever.invoke(query)
-
미해결문과생도, 비전공자도, 누구나 배울 수 있는 파이썬(Python)!
익스텐션 설치하면 아래와 같은 화면이 나옵니다
이런식으로 제대로 설치가 안되는데 어떻게 진행해야 하나요?
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
코드 정정방법 문의(문서 끼워 넣기 관련)
지난 번에 답변주신 코드에서 일부 수정하여 아래와 같이 코드를 실행해 보면 제대로 작동되지 않습니다.ChatGPT에 물어봐도 정확한 문제원인과 해결책을 알려주지 않아서 질문 올립니다. 제가 원하는 기능은, 바탕화면의 combine 폴더 안에 n개의 hwp파일을 위치 시킨 상태에서, 코드를 실행하면 hwp 문서들을 순서대로 끼워넣기 하여 "취합본.hwp"으로 저장하는 기능입니다. 지난 번에 일코님이 알려주신 코드는.. "개구리.hwp, 너구리.hwp, 다람쥐.hwp, 라마.hwp, ... "를 먼저 생성하고 나서 "취합본.hwp"을 만들어 내는 방법이었으므로, "# 샘플문서 생성"에 해당하는 코드를 제거하고 제가 원하는 기능으로 작동하기를 기대했습니다. 위와 같이 바탕화면의 combine 폴더 내에 1.hwp, 2.hwp, 3.hwp, 4.hwp, 5.hwp 문서를 넣어 두고 해당 폴더가 활성화된 상태에서 아래의 코드를 실행시켰습니다.from pyhwpx import Hwp # 임포트 hwp = Hwp() # 한/글 실행 import os # 끼워넣기 hwp.open(os.listdir()[0]) # 첫 번째(0) 파일 열기 for i in os.listdir()[1:]: # 첫 번째(0) 파일은 제외하고 두 번째(1)파일부터 아래 들여쓰기한 코드 반복 hwp.MoveDocEnd() # 한/글의 문서 끝으로 이동해서 hwp.BreakPage() # <----------------------- 페이지나누기(Ctrl-Enter) hwp.insert_file(i) # 문서끼워넣기(기본값은 섹션, 글자, 문단, 스타일 모두 유지) hwp.save_as("취합본.hwp") # 반복이 끝났으면 "취합본.hwp"로 다른이름으로저장 hwp.Quit() # 한/글 프로그램 종료 그러니까 원하는 대로 작동되지 않고 아래와 같이 나타납니다. [질문] 위의 코드는 왜 제가 원하는대로 작동이 되지 않는지? 또 그 해결방법은 무엇인지? [추가질문] 아래 코드 4줄은 한/글 자동화 코딩에서 거의 필수적으로 항상 쓰는 것 처럼 이해했었는데요.위의 코드를 짜 주실 때 아래 4줄의 코드는 전혀 사용하지 않으셨었는데, 그 이유를 알 수 있을까요? import win32com.client as win32 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.RegisterModule("FilePathCheckDLL","FilePathCheckerModule") 궁금합니다. 답변 부탁드립니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
조회되는 빈이 2개 이상이더라도 문제가 없는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]AllBeanTest에서 DiscountService에 의존 관계를 주입할 때, Map과 List를 사용했기 때문에, RateDiscountPolicy, FixDiscountPolicy 두 가지 빈이 등록되어 있어도 문제가 없는 건가요??
-
미해결[유니티6] 따라하면서 배우는 고박사의 2D 플랫포머 게임 제작
01-03 부서지지 않고 튀는 타일 충돌처리 부분 코드 바뀌어야 될 것 같습니다.
설마 소스코드가 잘못 되었을 거라고는 상상을 못하고,,,아무리 이것저것 설정을 바꾸고 새로 시도해봐도, 강의처럼 되지 않아서 하루종일 고생했습니다....bounce되는 타일과 충돌했을 경우, 타일이 바운스되어야 되는데 그것이 안되요.그래서 처음에는 내가 잘못 따라한 것인가 싶어서 강의를 몇번 돌려보고 확인하고, 코드도 확인하고, 배포한 소스코드랑도 비교해 보아도 도저히 답이 안나왔습니다.그런데, 강사님은 해당코드로 작동이 잘 되니... 이상합니다.우선, 플레이어가 타일과 부딪치면 타일충돌체에 맞아서 아래로 튕겨나옵니다. 그래서 ResetVelocityY를 해 줄 필요가 없습니다.위로 솟아서 날라가지 못해요. 저절로 충돌되어 튕겨나오면서 아래로 내려옵니다.(혹시 mass를 늘려서 힘이 강하게 되면 모르겠습니다.)진짜 문제가 된 부분은UpdateAboveCollision() 메소드 부분입니다.if(movement.Velocity.y >=0 && movement.HitAboveObject !=null)이렇게 조건을 걸어놓았는데,플레이어가 타일과 충돌하면, 충돌하는 순간 속도가 0 가 되고 곧바로 아래로 떨어지면서 속도가 마이너스가 됩니다.그런데, 위 조건에서는 속도가 0 보다 클 경우로 하니, 이 조건을 만족하지 못해서 그 아래의 코드가 실행되지 못합니다.제가 충돌할 때의 플레이어리디드바디속도를 출력하니 모두 마이너스였습니다.(다른 스크립트에서 속도를 읽을 때는 충돌시점에서 0.0001라도 경과한 시점)그래서 위 조건을 충족하지 못하니, 충돌해도 타일이 위로 바운스 되지 못했었습니다.그래서 void UpdateAboveCollision(){if (movement.HitAboveObject !=null){ 이 조건으로 하면 됩니다.여기서 ResetVelocityY() 도 호출할 필요 없습니다.