[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 POST의 결과로 새로운 리소스가 생성되지 않을 수도 있음. 이라고 자료에 나와 있는데, 그렇다면 일반적으로는 POST의 결과로 리소스가 생성된다는 말씀이신가요? 그렇다면 앞에 예제에서 나온 회원 정보 관리 API에서 POST로 회원을 신규 등록하면 리소스가 생성되는 것인가요?
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/ServiceLocatorFactoryBean.html 공식문서에서 일반적으로 프로토타입 빈에서 사용하고, 싱글톤 빈의 경우 대상 빈의 직접 세터 또는 생성자 주입이 더 좋다고 되어있습니다. 만약 아래코드처럼 로그인방식이 여러가지고 추가로 늘어날 경우 NaverLoginStrategy, GoogleLoginStrategy등 새로운 클래스만 생성하면 된다고 생각하는데 이때도 ServiceLocatorFactoryBean을 사용하는게 좋지않는걸까요? provider나 ObjectFactory를 이용하는게 좋은지 아니면 공식문서처럼 setter나 constructor를 주입하는게 좋을지 궁금합니다. public interface LoginStrategy { String login(String id, String pw); } @RequiredArgsConstructor @Service("kakao") public class KakaoLoginStrategy implements LoginStrategy { private final LoginRepository loginRepository; @Override public String login(String id, String pw) { // 로그인 로직 return "kakao Login"; } } public interface LoginFactory { LoginStrategy getLoginStrategy(String type); } @Configuration public class LoginConfig { @Bean public ServiceLocatorFactoryBean loginStrategyFactory() { ServiceLocatorFactoryBean factoryBean = new ServiceLocatorFactoryBean(); factoryBean.setServiceLocatorInterface(LoginFactory.class); return factoryBean; } }
선생님, 안녕하세요! 모바일 화면에서도 비율을 유지하면서 반응형으로 동작하게 만드는 것이 가능할까요? 여러 방법을 시도해 보았는데, 해결이 잘 안 돼서 이렇게 질문을 남깁니다. 아니면 차라리 모바일 전용 SVG를 따로 만들고, PC 버전에서는 display: none으로 처리한 후 모바일일 때만 보이게 하는 방식이 더 나을까요? 조언 부탁드립니다!
섹션3. 여러 스레드 만들기 - [1:40] HelloRunnable 스레드 3개 실행하는 부분 앞서 스레드의 start 메서드를 호출할 때 스레드는 스택 공간을 할당 받고 실행 된다고 이해했습니다. 그럼 아래 코드를 실행했을 때 start 메서드를 순서대로 읽어서 순서대로 실행 되어야 하는게 아닌가요?? 왜 각자 동시에 실행 되어서 순서를 보장할 수 없는 것인가요? HelloRunnable runnable = new HelloRunnable(); Thread thread1 = new Thread(runnable); thread1.start(); Thread thread2 = new Thread(runnable); thread2.start(); Thread thread3 = new Thread(runnable); thread3.start();
안녕하세요. 좋은 강의 감사합니다. 강의를 듣고 저도 word로 데이터를 가공해, 저만의 챗봇을 huggingface에 있는 모델을 사용해 만들어 streamlit에 띄우고 싶습니다. 그런데 streamlit에 띄우는 과정에서 계속 로딩이 오래걸리거나, 로컬과 달리 이상한 답변이 나오는 등 문제를 겪고 있습니다. 참고하면 좋을 만한 자료가 있을까요?
다름이 아니고 UserListViewController에서 private func bindView() { tableView.rx.prefetchRows .bind { [weak self] indexpath in guard let rows = self?.tableView.numberOfRows(inSection: 0), let itemIndex = indexpath.first?.item else { return } if itemIndex >= rows - 1 { self?.fetchMore.accept(()) } } .disposed(by: disposeBag) } 해당 코드 작성한 것을 확인했는데 이 상황에서 itemIndex >= rows - 1 가 정상적으로 동작하지 않는다고 생각이 들어서요. 정상적으로 동작하는 경우도 있지만 (천천히 스크롤 할 때) 빠르게 스크롤했을때 rows 는 30이라고 할때 itemIndex 는 24가 찍혀 self?.fetchMore.accept(()) 가 실행이 안되더라구요 그렇다면 prefetchRows 를 쓰는게 좋은 방법인가에 대한 생각이 들어서 질문 드립니다!
✅ 연습문제 (1) Array & Struct -- 연습문제 1) 영화 제목 별로 장르를 unnest하여 출력 -- select 절에서 새로운 이름으로 사용해야 unnest한 값이 출력됨 (기존의 array칼럼은 사용하지 않기) select title, genre from`avdanced.array_exercises` as ori ,unnest(genres) as genre --연습문제 2) 영화별로 배우와 배역을 출력. -- safe_offset 사용시, 모든 칼럼에 대하여 일일히 [0], [1].. 해줘야 하는 문제 -> UNNEST 사용. select title, ac.actor, ac.character from`avdanced.array_exercises` as ori ,unnest(actors) as ac -- 연습문제 3) title, actor, character, genre 출력 select title, ac.actor, ac.character, genre from`avdanced.array_exercises` as ori ,unnest(actors) as ac ,unnest (genres) as genre --연습문제 4) 배열을 풀기 select user_id, event_date, event_name, user_pseudo_id, eve.key, eve.value.string_value, eve.value.int_value from`avdanced.app_logs_temp` as ori , unnest (event_params) as eve where event_date = '2022-08-01' (2) Pivot 연습문제 --Pivot : 집계함수(if (조건문, true일 때 값, False일때 값)) as new_column + GROUP BY (False일때의 값은 NULL또는 0으로 해주기) --1) id를 기준으로 amount sum을 pivot, order_date를 행, user_id를 열 -- 연습문제 1-1) 서브쿼리 사용하기 select order_date, sum(if(user_id=1, sum_of_amount, 0)) as user_1, sum(if(user_id=2, sum_of_amount, 0)) as user_2, sum(if(user_id=3, sum_of_amount, 0)) as user_3 from ( select order_date, user_id, sum(amount) as sum_of_amount from `avdanced.orders` group by order_date, user_id ) group by order_date order by order_date -- 연습문제 1-2) 간략하게 작성하기 select order_date, sum(if(user_id=1, amount, 0)) as user_1, sum(if(user_id=2, amount, 0)) as user_2, sum(if(user_id=3, amount, 0)) as user_3 from `.avdanced.orders` group by order_date order by order_date --연습문제 2) orde_date별로 amount의 합을 pivot (user_id row, drder_date column) -- (`)backstick을 사용하여 별칭지정 -- any_value: 그룹화할 대상 중 임의의 값을 선택(NULL 제외). any_value에서는 나머지 값이 NULL이거나 확정적으로 이값이 나올 것이다 기대할 때 사용! -- ANY_VALUE: 임의의 값을 반환하며, 특정한 규칙이나 일관성을 요구하지 않을 때 사용. (대표값, 랜덤 샘플링) -- MAX: 그룹 내에서 가장 큰 값을 반환하며, 항상 일관된 결과를 제공합니다. 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 `avdanced.orders` group by user_id order by user_id -- +) 강의 내용 (any_value) -- select -- user_id, -- any_value(if(order_date='2023-05-01', amount, 0)) as `2023-05-01`, -- any_value(if(order_date='2023-05-02', amount, 0)) as `2023-05-02`, -- any_value(if(order_date='2023-05-03', amount, 0)) as `2023-05-03`, -- any_value(if(order_date='2023-05-04', amount, 0)) as `2023-05-04`, -- any_value(if(order_date='2023-05-05', amount, 0)) as `2023-05-05` -- from `avdanced.orders` -- group by user_id -- order by user_id --연습문제 3) user_id, order_date별로 주문이 있으면 1, 없으면 0으로 pivot, user_id row, order_date column. 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 `avdanced.orders` group by user_id order by user_id -- 연습문제 4) app_log를 pivot하기 with date_user_cnt as( select ori.user_id, ori.event_date, ori.event_name, ori.event_timestamp, ori.user_pseudo_id, max(if(eve.key = "firebase_screen", eve.value.string_value, null)) as firebase_screen, max(if(eve.key ="food_id", eve.value.int_value, null)) as food_id, max(if(eve.key ="session_id", eve.value.string_value, null)) as session_id from`avdanced.app_logs_temp` as ori , unnest (event_params) as eve where event_date ='2022-08-01' group by all ) select event_date, count(user_id) as user_cnt from date_user_cnt where event_name ="click_cart" group by event_date (3) 퍼널 연습문제 -- 퍼널 별 유저수 집계 -- 1-1) UNNEST하기 & PIVOT하기 WITH base AS( SELECT event_date, event_timestamp, event_name, user_id, user_pseudo_id, MAX(IF(param.key = 'food_id', param.value.int_value,NULL)) AS food_id, MAX(IF(param.key = 'session_id', param.value.string_value,NULL)) AS session_id, MAX(IF(param.key = 'firebase_screen', param.value.string_value,NULL)) AS firebase_screen, from `bigquery-432401.avdanced.app_logs_temp` , unnest (event_params) as param where event_date between '2022-08-01' and '2022-08-18' GROUP BY ALL ), base2 AS( -- 1-2) CONCAT하기 SELECT * EXCEPT (event_name, firebase_screen, event_timestamp), CONCAT(event_name, "-", firebase_screen) AS event_name_with_screen, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM base WHERE event_name IN ("screen_view", "click_payment") ), base3 AS ( --1-3) 일자별 이벤트 별 집계 SELECT event_date, 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 ALL HAVING step_number IS NOT NULL ) --1-4) 집계한 데이터를 PIVOT SELECT event_date, MAX(IF(base3.event_name_with_screen ="screen_view-welcome", cnt, NULL)) AS screen_view_welcome, MAX(IF(base3.event_name_with_screen ="screen_view-home", cnt, NULL)) AS screen_vie_home, MAX(IF(base3.event_name_with_screen ="screen_view-food_category", cnt, NULL)) AS screen_view_food_category, MAX(IF(base3.event_name_with_screen ="screen_view-restaurant", cnt, NULL)) AS screen_view_restaurant, MAX(IF(base3.event_name_with_screen ="screen_view-cart", cnt, NULL)) AS screen_view_cart FROM base3 GROUP BY ALL ✅ 배운점 ‘cross join unnest 칼럼 as 별칭’에서 반드시 ‘AS 별칭’ 을 이용해야 ‘ Cannot access field on a value with type ARRAY ’ 에러가 안 뜬다. 빅쿼리에서는 ‘’이 아닌, ``을 사용하여야 한다. pivot이라고 하면 pivot()함수를 반드시 사용해야 편할 것이라고 생각했었는데, max와 if로 pivot을 구현하는 것이 인상 깊었다. SQL 기반이라고 하면 모든 DB가 비슷한 기능을 가지고 있다고 생각했는데, DB마다 생성된 함수 및 기능이 미묘하게 다르다는 것을 느꼈다. 예를 들어 빅쿼리에서 배운 countif()을 MySQL에서 사용했는데 안되는 것도 그 예가 아닐까. 생각보다 빅쿼리와 PostgreSQL에서 사용하는 함수가 동일한 게 많아 인상적이었다. ✅ 익숙해져야 할 부분 퍼널 분석을 배우면서, 이론적으로 이해하는 것은 쉽지만 내가 아는 쿼리적인 지식을 실제 데이터에 적용하는 것은 생각보다 손이 많이 가고 쉽지 않은 작업이라는 것을 느꼈다. 많이 해봐야 노하우가 생길 것 같다. 어떤 데이터를 어떻게 해야 어떤 결과가 나오고, 이를 어떻게 이용하고 해석할 수 있는지에 대한 일련의 과정에 익숙해져야 할 것 같다. TIMESTAMP를 DATE로 바꾸고 확인하는 부분에 대한 연습이 필요 쿼리 작성 시, 예약어를 대문자로 사용하는 것이 좋다고 알고 있는데, 아직 이 부분이 익숙하지 않아 연습이 필요하다. 코드를 작성하면서 문장을 그대로 쿼리로 옮기는 편이라서 그런지 서브 쿼리를 사용하는 경우가 많다. 단순히 문장을 쿼리로 옮기기 보다 어떻게 하면 더 간결하고 가독성 높은 쿼리를 작성할 수 있을 지 고민하는 습관을 들여야 겠다. 함수 이름 정하는 거 중요한 건 아는데, 잘 안되는 것 같다. 사용 기능을 이용하여 함수 이름 짓는 습관을 지어야겠다.
ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
안녕하세요 20강의 마지막 부분에서 배포 부분에서 궁금한 점이 있어서 질문드립니다. 강의 중 20강 26:34 에서 "공유기가 아닌 랜선을 바로 여러분들의 컴퓨터하고 연결을 한다면 공인 ip를 통해 외부에서 여러분들이 생성한 사이트에 접속이 가능" 이라는 설명이 있습니다. 무선 네트워크 환경(공유기 or 핫스팟 등)에서는 배포가 불가능한가요?
안녕하세요 강의를 재밌게 수강하던 도중 궁금증이 생기어 질문 드립니다. 질문 select 의 row 매개변수의 순서와 FilmWithActor의 생성자 매개변수의 순서가 각 테이블 타입에 매칭되지 않을 경우 mapping이 정상적으로 이뤄지지 않는 현상이 있어 별도의 해결 방법이나 대안이 있는지 여쭙고 싶습니다. 정상 케이스(Film - FilmActor - Actor) dslContext.select( DSL.row(FILM.fields()), DSL.row(FILM_ACTOR.fields()), DSL.row(ACTOR.fields()) ).from(FILM) .join(FILM_ACTOR) .on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID)) .join(ACTOR) .on(FILM_ACTOR.ACTOR_ID.eq(ACTOR.ACTOR_ID)) .offset((page - 1) * pageSize) .limit(pageSize) .fetchInto(FilmWithActor.class); public class FilmWithActor { private final Film film; private final FilmActor filmActor; private final Actor actor; public FilmWithActor(Film film, FilmActor filmActor, Actor actor) { this.film = film; this.filmActor = filmActor; this.actor = actor; } // ... 문제 케이스(Film - Actor - FilmActor) dslContext.select( DSL.row(FILM.fields()), DSL.row(FILM_ACTOR.fields()), DSL.row(ACTOR.fields()) ).from(FILM) .join(FILM_ACTOR) .on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID)) .join(ACTOR) .on(FILM_ACTOR.ACTOR_ID.eq(ACTOR.ACTOR_ID)) .offset((page - 1) * pageSize) .limit(pageSize) .fetchInto(FilmWithActor.class); public class FilmWithActor { private final Film film; private final FilmActor filmActor; private final Actor actor; public FilmWithActor(Film film, Actor actor, FilmActor filmActor) { this.film = film; this.filmActor = filmActor; this.actor = actor; } // ...
안녕하세요 선생님 🙂 테스트케이스가 여러 개인 문제기 때문에 vector를 clear해줬는데요, out of range error가 발생해서 질문 드립니다. 아래 코드의 주석을 살리면 위 에러가 발생합니다. 조언 부탁 드립니다 🙂 http://boj.kr/f9dc05bf7b6e4897a286d9746368c283
강의에 알려주신대로 따라서 하고 있는데 원핫인코딩 결과에 income category랑 card category만 뜨고 나머지 object컬럼(gender 등)은 뜨질 않습니다.. 뭐가 문제인지 알려주실 수 있을까요? #baseline(object컬럼 제거) cols = train.select_dtypes(include='object').columns # print(train.shape, test.shape) # train = train.drop(cols, axis=1) # test = test.drop(cols,axis=1) # print(train.shape, test.shape) # 라벨인코딩 # from sklearn.preprocessing import LabelEncoder # for col in cols: # le = LabelEncoder() # train[col] = le.fit_transform(train[col]) # test[col] = le.transform(test[col]) # train.head() # onehot 인코딩 pd.get_dummies(train, columns=cols) 마지막에 8101 rows × 39 columns 라고 뜨는데 그냥 표시만 안 된건가요?