묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결함수형 프로그래밍과 JavaScript ES6+
질문이있습니다!
함수형 프로그래밍에서는 순수함수로 만들어야된다 라고 알고있는데 랜덤숫자뽑는 로직을 만들어야된다고한다면 동일한입력 동일한출력이 나올수가 없을거같은데 이런경우에는 순수함수가 될수가 없는게 맞는걸까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
int의 최대값과 inf의 관계
안녕하세요! 본격적인 강의 듣기 전에 교안부터 학습 중입니다. 궁금한 것 질문 드립니다. 5. int, 4바이트짜리 정수 1."int는 ... 20억까지 표현할 수 있습니다" 2."int의 최대값으로 987654321 또는 1e9를 씁니다." - 알고리즘 교안 18page 2번째 문장이 이해가 안되는데요. const int INF = 987654321; 20억까지 표현 가능한데 왜 약 10억 정도로 최대값을 정의하는 건가요? 감사합니다!
-
미해결남박사의 파이썬으로 실전 웹사이트 만들기
if문 문의 드려요~
선생님 공부하다가 제 머리로는 이해 안되는게 생겼습니다 약 7분 29초 이고 for문 안에 if 문이 있는데 for s in os.path.sep, os.path.altsep: if s: 위와 같이 if s: 이렇게 되어있는데 if문을 왜 쓴걸까요? s는 무조건 존재하기때문에 무조건 참이 나올수밖에 없는 상황인데 해당 코드가 왜 들어갔는지 잘 모르겠어요 뭔가 심오한 뜻이 있을거 같은데 알려주시면 감사하겠습니다
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
질문 드립니다.
안녕하세요. 좋은 강의 감사합니다. 강의를 들으면서 작성한 코드를 바탕으로 블로그에 정리하고싶은데 출처를 밝히고 게시해도 될까요?
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
HOC auth.js에 관한 오류 발생 시 참고 사항
강사님 강의 내용과 똑같은 코드를 작성했으나 오류가 계속 생성됬는데 어찌저찌 풀어서 참고하실 분들을 위해 남깁니다 제가 오류가 발생한 상황(hoc/auth.js) [강사님과 같은 코드를 작성 후 서버/클라이언트 실행 시 빈 화면이 나옴] (오류 내용 : unctions are not valid as a React child. This may happen if you return a Component instead of <Component /> from render. Or maybe you meant to call this function rather than return it.) - 해결책 : AuthenticationCheck 리턴 시 함수로 리턴하는 것이 아닌 JSX 컴포넌트로 리턴하라고 합니다 (참고 : https://www.inflearn.com/questions/357383) - 실제로 auth.js의 마지막 부분인 을 return AuthenticationCheck -> return <AuthenticationCheck />로 변경 시 정상적으로 작동함을 확인할 수 있었습니다. [hoc/auth.js 코드] import React, { useEffect } from "react"; import { useDispatch } from "react-redux"; import { auth } from "../_action/user_action"; import { useNavigate } from "react-router-dom"; export default function (SpecificComponent, option, adminRoute = null) { //option : null = anyone, true = login user only, false = logout user only function AuthenticationCheck(props) { const dispatch = useDispatch(); const navigate = useNavigate(); useEffect(() => { dispatch(auth()).then((response) => { console.log("auth? ", response); if (!response.payload.isAuth) { // login yet if (option) { navigate("/login"); } } else { // login if (adminRoute && !response.payload.isAdmin) { navigate("/"); } else { if (option === false) { navigate("/"); } } } }); }, []); return ( <SpecificComponent /> // component return이 없으면 React 실행이 안됨. ); } return <AuthenticationCheck />; }
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Repository, Service에 따른 , @Transaction(readOnly=ture)에 따른 쿼리 차이에 대해 질문드립니다.
@Entity @Getter @Setter public class Category { @Id @Column(name="CATEGORY_ID") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="MEMBER_ID") private Member member; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="PARENT_ID") private Category parent; @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) private List<Category> child = new ArrayList<>(); } @Repository public class CategoryRepository { private final EntityManager em; public List<Category> findAll(){ return em.createQuery("select c from Category c", Category.class) .getResultList(); } } @Service @Transactional @RequiredArgsConstructor public class CategoryService { private final CategoryRepository categoryRepository; @Transaction <-- 이부분 //@Transaction(readOnly=true) <-- 이부분 public List<Category> findAll() {return categoryRepository.findAll(); } } @RestController @RequiredArgsConstructor public class CategoryApiController { private final CategoryService categoryService; private final CategoryRepository categoryRepository; private final MemberService memberService; @GetMapping("/api/v1/categories") public Result getCategory(@RequestParam(required = false, value = "id") String memberId){ List<Category> categories = categoryService.findAll(); <-- 이부분 // List<Category> categories = categoryRepository.findAll(); <-- 이부분 List<CategoryDto> categoryDtos = categories.stream() .map(c -> new CategoryDto(c)) .collect(Collectors.toList()); return new Result(categoryDtos.size(), categoryDtos); } @Data @AllArgsConstructor static class CategoryDto{ public CategoryDto(Long id, String name) { this.id = id; this.name = name; } public CategoryDto(Category category) { this.id = category.getId(); this.name = category.getName(); this.child = category.getChild().stream() .map(c -> new CategoryDto(c.getId(),c.getName())) .collect(Collectors.toList()); } private Long id; private String name; private List<CategoryDto> child; private Long parentId; } } categoryRepository.findAll()를 호출 했을 때 2022-05-12 23:35:46.474 DEBUG 18928 --- [nio-9090-exec-2] o.j.s.OpenEntityManagerInViewInterceptor : Opening JPA EntityManager in OpenEntityManagerInViewInterceptor 2022-05-12 23:35:46.527 INFO 18928 --- [nio-9090-exec-2] p6spy : #1652366146527 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select category0_.category_id as category1_0_, category0_.member_id as member_i3_0_, category0_.name as name2_0_, category0_.parent_id as parent_i4_0_ from category category0_ select category0_.category_id as category1_0_, category0_.member_id as member_i3_0_, category0_.name as name2_0_, category0_.parent_id as parent_i4_0_ from category category0_; 2022-05-12 23:35:46.539 INFO 18928 --- [nio-9090-exec-2] p6spy : #1652366146539 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id in (?, ?, ?, ?, ?, ?, ?, ?) select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id in (6, 7, 8, 9, 10, 11, 12, 13); 2022-05-12 23:35:46.566 DEBUG 18928 --- [nio-9090-exec-2] o.j.s.OpenEntityManagerInViewInterceptor : Closing JPA EntityManager in OpenEntityManagerInViewInterceptor categoryService.findAll() 을 호출 했을 때 1)@Transaction(readOnly = true) 2022-05-12 23:31:45.235 DEBUG 18388 --- [nio-9090-exec-1] o.j.s.OpenEntityManagerInViewInterceptor : Opening JPA EntityManager in OpenEntityManagerInViewInterceptor 2022-05-12 23:31:45.258 DEBUG 18388 --- [nio-9090-exec-1] o.s.orm.jpa.JpaTransactionManager : Found thread-bound EntityManager [SessionImpl(72969494<open>)] for JPA transaction 2022-05-12 23:31:45.258 DEBUG 18388 --- [nio-9090-exec-1] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [com.blog.demo.service.CategoryService.findAllRootCategories]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly 2022-05-12 23:31:45.261 DEBUG 18388 --- [nio-9090-exec-1] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@675de2b1] 2022-05-12 23:31:45.292 INFO 18388 --- [nio-9090-exec-1] p6spy : #1652365905292 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select category0_.category_id as category1_0_, category0_.member_id as member_i3_0_, category0_.name as name2_0_, category0_.parent_id as parent_i4_0_ from category category0_ select category0_.category_id as category1_0_, category0_.member_id as member_i3_0_, category0_.name as name2_0_, category0_.parent_id as parent_i4_0_ from category category0_; 2022-05-12 23:31:45.301 DEBUG 18388 --- [nio-9090-exec-1] o.s.orm.jpa.JpaTransactionManager : Initiating transaction commit 2022-05-12 23:31:45.301 DEBUG 18388 --- [nio-9090-exec-1] o.s.orm.jpa.JpaTransactionManager : Committing JPA transaction on EntityManager [SessionImpl(72969494<open>)] 2022-05-12 23:31:45.301 INFO 18388 --- [nio-9090-exec-1] p6spy : #1652365905301 | took 0ms | commit | connection 1| url jdbc:h2:tcp://localhost/~/blog ; 2022-05-12 23:31:45.302 DEBUG 18388 --- [nio-9090-exec-1] o.s.orm.jpa.JpaTransactionManager : Not closing pre-bound JPA EntityManager after transaction 2022-05-12 23:31:45.303 INFO 18388 --- [nio-9090-exec-1] p6spy : #1652365905303 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id in (?, ?, ?, ?, ?, ?, ?, ?) select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id in (6, 7, 8, 9, 10, 11, 12, 13); 2022-05-12 23:31:45.329 DEBUG 18388 --- [nio-9090-exec-1] o.j.s.OpenEntityManagerInViewInterceptor : Closing JPA EntityManager in OpenEntityManagerInViewInterceptor 2)@Transaction 2022-05-12 23:37:14.348 DEBUG 19206 --- [nio-9090-exec-2] o.j.s.OpenEntityManagerInViewInterceptor : Opening JPA EntityManager in OpenEntityManagerInViewInterceptor 2022-05-12 23:37:14.369 DEBUG 19206 --- [nio-9090-exec-2] o.s.orm.jpa.JpaTransactionManager : Found thread-bound EntityManager [SessionImpl(1468362384<open>)] for JPA transaction 2022-05-12 23:37:14.369 DEBUG 19206 --- [nio-9090-exec-2] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [com.blog.demo.service.CategoryService.findAllRootCategories]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 2022-05-12 23:37:14.371 DEBUG 19206 --- [nio-9090-exec-2] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@4209a22e] 2022-05-12 23:37:14.402 INFO 19206 --- [nio-9090-exec-2] p6spy : #1652366234402 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select category0_.category_id as category1_0_, category0_.member_id as member_i3_0_, category0_.name as name2_0_, category0_.parent_id as parent_i4_0_ from category category0_ select category0_.category_id as category1_0_, category0_.member_id as member_i3_0_, category0_.name as name2_0_, category0_.parent_id as parent_i4_0_ from category category0_; 2022-05-12 23:37:14.414 DEBUG 19206 --- [nio-9090-exec-2] o.s.orm.jpa.JpaTransactionManager : Initiating transaction commit 2022-05-12 23:37:14.414 DEBUG 19206 --- [nio-9090-exec-2] o.s.orm.jpa.JpaTransactionManager : Committing JPA transaction on EntityManager [SessionImpl(1468362384<open>)] 2022-05-12 23:37:14.418 INFO 19206 --- [nio-9090-exec-2] p6spy : #1652366234418 | took 0ms | commit | connection 1| url jdbc:h2:tcp://localhost/~/blog ; 2022-05-12 23:37:14.419 DEBUG 19206 --- [nio-9090-exec-2] o.s.orm.jpa.JpaTransactionManager : Not closing pre-bound JPA EntityManager after transaction 2022-05-12 23:37:14.420 INFO 19206 --- [nio-9090-exec-2] p6spy : #1652366234420 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=? select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=6; 2022-05-12 23:37:14.421 INFO 19206 --- [nio-9090-exec-2] p6spy : #1652366234421 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=? select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=7; 2022-05-12 23:37:14.423 INFO 19206 --- [nio-9090-exec-2] p6spy : #1652366234423 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=? select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=8; 2022-05-12 23:37:14.424 INFO 19206 --- [nio-9090-exec-2] p6spy : #1652366234424 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=? select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=9; 2022-05-12 23:37:14.424 INFO 19206 --- [nio-9090-exec-2] p6spy : #1652366234424 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=? select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=10; 2022-05-12 23:37:14.424 INFO 19206 --- [nio-9090-exec-2] p6spy : #1652366234424 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=? select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=11; 2022-05-12 23:37:14.425 INFO 19206 --- [nio-9090-exec-2] p6spy : #1652366234425 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=? select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=12; 2022-05-12 23:37:14.425 INFO 19206 --- [nio-9090-exec-2] p6spy : #1652366234425 | took 0ms | statement | connection 1| url jdbc:h2:tcp://localhost/~/blog select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=? select child0_.parent_id as parent_i4_0_1_, child0_.category_id as category1_0_1_, child0_.category_id as category1_0_0_, child0_.member_id as member_i3_0_0_, child0_.name as name2_0_0_, child0_.parent_id as parent_i4_0_0_ from category child0_ where child0_.parent_id=13; 2022-05-12 23:37:14.456 DEBUG 19206 --- [nio-9090-exec-2] o.j.s.OpenEntityManagerInViewInterceptor : Closing JPA EntityManager in OpenEntityManagerInViewInterceptor 안녕하세요. 좋은 강의 감사합니다. 강의에서 Order로 api를 만들어주셔서 저는 개인적으로 Category에 대해서 api를 간단하게 만들어보면서 테스트를 몇가지 진행했었는데요. Controller에서 Category의 child를 지연로딩을 통해서 가져올 때 아래 세가지의 경우에 따라 쿼리문이 달라지는 현상을 겪었습니다. 위 코드에서 `<-- 이부분` 으로 표시된 부분을 참고해주시면 감사하겠습니다. 1. Repository로 최초에 Category를 가져올 때에는 in 쿼리가 잘 나갔고, 2. Controller에서 Service로 최초에 Category를 가져올 때는 Service의 해당 메소드에 @Transaction 일떄에는 N+1 문제가 발생하고 3. readOnly=true 일때에는 in 쿼리로 잘 가지고 오는데 이 상황에대해서 이해가 잘 되지 않아 질문 드리게 됐습니다. 3가지 상황 모두 OSIV가 켜져있고, default_batch_fetch_size: 100인 상황입니다. 각각 상황에 대해서 왜 in 쿼리가 나가고 안나가는지에 대해서 설명해주실 수 있을까요? 감사합니다. Repository와 Service차이의 경우 OSIV가 켜져있기 때문에 Controller에 돌아와서도 영속성 컨텍스트가 유지되는게 동일 할텐데 왜 쿼리 차이가 있는지 모르겠고 readOnly=true인 경우, 영속성 컨텍스트의 내용을 플러시하지 않는 것으로 알고있는데 플러시 여부와 지연로딩시 쿼리가 다르게 나가는 것은 상관이 없을 것 같은데 왜 차이가 나는지 파악이 안되고 있습니다. * 트랜잭션 로그를 찍어보니 Repository에서는 transaction을 생성하지 않고 트랜잭션없는 읽기를 진행하는 것으로 보이고 Service에서는 readOnly인 트랜잭션을 생성하냐/아니냐의 차이로 보입니다.
-
미해결실전! Querydsl
동적 쿼리 작성을 위한 SearchCondition 사용시 주의사항
안녕하세요. 강사님. 동적 쿼리 작성을 위해 SearchCondition 방식을 팁으로 알려주셨는데요. SearchCondition 과 엔티티의 필드가 1:1 로 이루어져야 동적 쿼리 작성에 유용할거 같은데 SearchCondition -> BooleanBuilder 로 변환해야되고 이 과정에서 메모리 사용량이 많아질거 같은데요. SearchCondition 적용하므로 인한 메모리 이슈등은 없었는지요? 해당 이슈를 방지할수 있는 팁이 좀 더 있을까요?^^
-
미해결이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)
s3 ClientConfiguration 옵션 질문
server/aws.js 에서는 s3 인스턴스 생성할 때 ClientConfiguration 옵션 객체에 accesskey랑 secretkey를 넣어줬는데요 lambda/index.js 에서는 안해줘도 되나요? 어떻게 인증이 되는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
//짝수값만 벽 if (x % 2 == 0 || y % 2 == 0)
//짝수값만 벽 if (x % 2 == 0 || y % 2 == 0) 이 코드에서 짝수값만 벽이라 하셨는데 왜 테두리 까지 빨간색으로 되어있는지 모르겠습니다.
-
해결됨[백문이불여일타] 데이터 분석을 위한 고급 SQL
해커랭크 Top Earners 문제 답답합니다 ㅜㅜ
변수 명명이 헷깔립니다. 1. WHERE절에 서브쿼리를 할때 SELECT months*salary , count(*) FROM Employee WHERE months*salary = (SELECT MAX(months *salary) FROM Employee) GROUP BY months*salary 이렇게 months*salary를 따로 명명해주지 않아도 잘 돌아갑니다. 그런데 SELECT months*salary AS earnings, count(*) FROM Employee WHERE earnings = (SELECT MAX(months *salary) FROM Employee) GROUP BY earnings 이런식으로 WHERE과 GROUP BY에 earnings라고 명명한 변수를 쓰면 에러가 납니다. 그 이유를 모르겠습니다. 2. 그런데 HAVING 절에 서브쿼리를 쓰는 경우는 이와 반대가 됩니다. SELECT months*salary AS earnings, count(*) FROM Employee GROUP BY earnings HAVING earnings = (SELECT MAX(months*salary) FROM Employee) 이렇게 GROUP BY와 HAVING에 earnings라고 명명한 변수를 주면 잘 돌아갑니다. 그런데 SELECT months*salary , count(*) FROM Employee GROUP BY months*salary HAVING months*salary = (SELECT MAX(months*salary) FROM Employee) 이렇게 이름을 따로 명명해주지 않으면 안돌아갑니다. 명명부분이 너무 어렵습니다ㅜㅜ 도와주세요
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
4분 쯤에 post 방식으로 전송했을 때, 개발자 도구에 form data가 안나오네요..
저는 영한님이랑 다르게 user-agent 까지만 나오고 form-data 부분이 안나옵니다. 어떻게 확인할 수 있을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
UpdatePosition질문
기초적인 부분이긴 하지만 아직도 정확히 이해가 안가서 질문드립니다... 사용자의 입력을 받고 UpdatePoposition이 매 프레임마다 호출되는 과정에서 dist가 if와 else의 조건을 둘다 만족하게 되어 Idle인 상태와 Moving인 상태를 왔다라 갔다리 하는것 까지는 느낌적인 느낌으로 알겠습니다. 그런데 dist < _speed * Time.deltaTime 에서 1) _speed (= 5) * Time.deltaTime 이 무엇을 의미를 하는지 모르겠습니다. ( 사용자의 컴퓨터 사양이 다르기 때문에 이것을 해준다 라고는 들었는데 어떻게 동작을 하는것인지...ㅠㅠ) 2) TIme.deltaTime의 값이 얼마 인지를 잘 모르겠습니다.
-
미해결Outlook과 OneNote로 스마트한 업무 시스템 만들기
강의 자료를 공유 받을수 있을까요?
안녕하세요? 강의를 잘 듣고 있습니다. 혹시 강의 자료를 공유 받을수 있을까요? 실무에 적용하면서 틈틈히 꺼내어 볼 수 있었으면 해서요. 감사합니다^^
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew build 에러 뜹니다ㅠㅜ
./gradlew build 하면 ERROR: JAVA_HOME is set to an invalid directory: /Library/Java/JavaVirtualMachines/jdk11.0.12.jdk/Contents/Home Please set the JAVA_HOME variable in your environment to match the location of your Java installation. 이렇게 뜨는데 어떻게 해야하나요ㅠㅠ 맥북 사용중입니다!!
-
미해결파이썬 증권 데이터 수집과 분석으로 신호와 소음 찾기
url 앞에 'f'를 붙이는 것에 대한 의미를 정확히 모르겠습니다.
교수님 안녕하세요? 아래 질문한 학생인데 한 가지 질문이 더 있어서 이렇게 여쭙습니다. url = f"https://finance.naver.com/item/sise_day.naver?code={item_code}&page={page_no}" 에서 'f'를 붙이는 의미를 정확히 이해 못 하겠습니다. 처음에는 그냥 넘어갔는데, 이후에도 몇 번 나와서 여쭙습니다. 감사합니다!
-
미해결파이썬 증권 데이터 수집과 분석으로 신호와 소음 찾기
fdr에서 미국 주식 종목코드대신 티커(Ticker)를 사용하면 에러가 납니다. 왜 그런가요?
교수님 안녕하세요? 수업 너무 잘 듣고 있는 학생입니다. fdr에서 미국 주식 종목코드대신 티커(Ticker)를 사용하면 에러가 납니다. 왜 그럴까요? ㅠ amd = fdr.DataReader("AMD", "2015", "2021") amd --------------------------------------------------------- --------------------------------------------------------------------------- JSONDecodeError Traceback (most recent call last) ~\anaconda3\lib\site-packages\requests\models.py in json(self, **kwargs) 909 try: --> 910 return complexjson.loads(self.text, **kwargs) 911 except JSONDecodeError as e: ~\anaconda3\lib\json\__init__.py in loads(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw) 345 parse_constant is None and object_pairs_hook is None and not kw): --> 346 return _default_decoder.decode(s) 347 if cls is None: ~\anaconda3\lib\json\decoder.py in decode(self, s, _w) 336 """ --> 337 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 338 end = _w(s, end).end() ~\anaconda3\lib\json\decoder.py in raw_decode(self, s, idx) 354 except StopIteration as err: --> 355 raise JSONDecodeError("Expecting value", s, err.value) from None 356 return obj, end JSONDecodeError: Expecting value: line 1 column 1 (char 0) During handling of the above exception, another exception occurred: JSONDecodeError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_6068/1779725454.py in <module> 4 # amd 5 ----> 6 amd = fdr.DataReader("AMD", "2015", "2021") 7 amd ~\anaconda3\lib\site-packages\FinanceDataReader\data.py in DataReader(symbol, start, end, exchange, data_source) 39 # Investing 40 reader = InvestingDailyReader ---> 41 df = reader(symbol, start, end, exchange, data_source).read() 42 end = min([pd.to_datetime(end), datetime.today()]) 43 while len(df) and df.index[-1] < end: # issues/30 ~\anaconda3\lib\site-packages\FinanceDataReader\investing\data.py in read(self) 60 start_date_str = self.start.strftime('%m/%d/%Y') 61 end_date_str = self.end.strftime('%m/%d/%Y') ---> 62 curr_id = self._get_currid_investing(self.symbol, self.exchange, self.data_source) 63 if not curr_id: 64 raise ValueError("Symbol unsupported or not found") ~\anaconda3\lib\site-packages\FinanceDataReader\investing\data.py in _get_currid_investing(self, symbol, exchange, data_source) 28 } 29 r = requests.post(url, data={'search_text': symbol}, headers=headers) ---> 30 jo = r.json() 31 if len(jo['quotes']) == 0: 32 raise ValueError(f"Symbol('{symbol}') not found") ~\anaconda3\lib\site-packages\requests\models.py in json(self, **kwargs) 915 raise RequestsJSONDecodeError(e.message) 916 else: --> 917 raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) 918 919 @property JSONDecodeError: [Errno Expecting value] <!DOCTYPE HTML> <html lang="en-US"> <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta name="robots" content="noindex, nofollow" /> <meta name="viewport" content="width=device-width,initial-scale=1" /> <title>Just a moment...</title> <style> html, body {width: 100%; height: 100%; margin: 0; padding: 0;} body {background-color: #ffffff; color: #000000; font-family:-apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, "Helvetica Neue",Arial, sans-serif; font-size: 16px; line-height: 1.7em;-webkit-font-smoothing: antialiased;} h1 { text-align: center; font-weight:700; margin: 16px 0; font-size: 32px; color:#000000; line-height: 1.25;} p {font-size: 20px; font-weight: 400; margin: 8px 0;} p, .attribution, {text-align: center;} #spinner {margin: 0 auto 30px auto; display: block;} .attribution {margin-top: 32px;} @keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} } @-webkit-keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} } #cf-bubbles > .bubbles { animation: fader 1.6s infinite;} #cf-bubbles > .bubbles:nth-child(2) { animation-delay: .2s;} #cf-bubbles > .bubbles:nth-child(3) { animation-delay: .4s;} .bubbles { background-color: #f58220; width:20px; height: 20px; margin:2px; border-radius:100%; display:inline-block; } a { color: #2c7cb0; text-decoration: none; -moz-transition: color 0.15s ease; -o-transition: color 0.15s ease; -webkit-transition: color 0.15s ease; transition: color 0.15s ease; } a:hover{color: #f4a15d} .attribution{font-size: 16px; line-height: 1.5;} .ray_id{display: block; margin-top: 8px;} #cf-wrapper #challenge-form { padding-top:25px; padding-bottom:25px; } #cf-hcaptcha-container { text-align:center;} #cf-hcaptcha-container iframe { display: inline-block;} </style> <meta http-equiv="refresh" content="35"> <script> //<![CDATA[ (function(){ window._cf_chl_opt={ cvId: "2", cType: "non-interactive", cNounce: "32421", cRay: "70a2066eee2252f5", cHash: "a3250cbc257b75f", cUPMDTk: "\/?__cf_chl_tk=4AEdswm23.t_D1Kw4CowdKfl.p2O_4HDm_Fqhdm4tdk-1652346667-0-gaNycGzNCH0", cFPWv: "b", cTTimeMs: "1000", cRq: { ru: "aHR0cHM6Ly9jbi5pbnZlc3RpbmcuY29tLw==", ra: "TW96aWxsYS81LjAgKE1hY2ludG9zaCkgQXBwbGVXZWJLaXQvNTM3LjM2IENocm9tZS85OC4wLjQ3NTguMTA5", rm: "R0VU", d: "IrGXJX8WwxjHXC6SsLCyk5flSLKTkxdpBpn2uRFFjlhGA8FCzv1106INRQFcBCSOcc34UH5nxCxgebdO8IxwHVtQJTP7KekrmViRq1uOINl+AdX/a7i5RtF81mAIjVfGeDs5efiKIHUugONm7di/Xrw8p8JJpQ5ptheMrfDN1MVAnNeUvNeVv9OBWKcGIDbP2k+o7eVU1w7jEiUcPon932rhc5zweSsD5q9de0QkKxsXdTtwDZinxn7yaenlYYyUKTOn6Wt8sAyn09ME+iz+2TuAFvPMEt5eHG5m40pfZDbyah/W2SuEYPdwIZmZDb6Sd6WfuxBrNfJe1UbCbef8R/bjsw/1l0O/3Br3hOzTupONzZEFsiApEyFnaHd2gQWBhx1cbTGslUAYpdbj+micFY2zvAfLMgOHC56YmIFGk+EKEihMkaIuz2o9V0p7tBGsmexvHiBt4pChBoSUidvZ6tD/YQFC6qfBpn5moCRnzw7ngg2KtreyKZ540WXrUrrJQJG4w6A7kGJXbGy/YdLm8V3l8lSWhu1sfZiHBxiHPBDmyV9WzYbBUz/vGxNVlx3A9XcUsUE6KtZo8ITJWVvgnjvbbufQ1XMr3H4pbPDDtX4=", t: "MTY1MjM0NjY2Ny4zNTkwMDA=", m: "w8fUFTCnxEtk0fB7RJyyNGcBwOGo18NG04QMYvJ3GdE=", i1: "2nPfOKusxCugpSkSIFoqHQ==", i2: "n23pckyYeUXKbesrZe6pow==", zh: "JJQg2KI/+bPgJbLHlLjmrs/mnno8aAGH5k3tm8QDk4c=", uh: "POxlFgDekQG5h9Kd7TiU8+U9MUspCK9r8ctlJLyBZWY=", hh: "T2hi97JJ3TXBbbaDfe4fVaGfimFjucUPtz+gmsc9Zq0=", } } window._cf_chl_enter = function(){window._cf_chl_opt.p=1}; })(); //]]> </script> </head> <body> <table width="100%" height="100%" cellpadding="20"> <tr> <td align="center" valign="middle"> <div class="cf-browser-verification cf-im-under-attack"> <noscript> <h1 data-translate="turn_on_js" style="color:#bd2426;">Please turn JavaScript on and reload the page.</h1> </noscript> <div id="cf-content" style="display:none"> <div id="cf-bubbles"> <div class="bubbles"></div> <div class="bubbles"></div> <div class="bubbles"></div> </div> <h1><span data-translate="checking_browser">Checking your browser before accessing</span> cn.investing.com.</h1> <div id="no-cookie-warning" class="cookie-warning" data-translate="turn_on_cookies" style="display:none"> <p data-translate="turn_on_cookies" style="color:#bd2426;">Please enable Cookies and reload the page.</p> </div> <p data-translate="process_is_automatic">This process is automatic. Your browser will redirect to your requested content shortly.</p> <p data-translate="allow_5_secs" id="cf-spinner-allow-5-secs" >Please allow up to 5 seconds…</p> <p data-translate="redirecting" id="cf-spinner-redirecting" style="display:none">Redirecting…</p> </div> <form class="challenge-form" id="challenge-form" action="/?__cf_chl_f_tk=4AEdswm23.t_D1Kw4CowdKfl.p2O_4HDm_Fqhdm4tdk-1652346667-0-gaNycGzNCH0" method="POST" enctype="application/x-www-form-urlencoded"> <input type="hidden" name="md" value="7F11XeMx.ejOcm5oKagE6vMFVK_j.Pz2FIc0swxinqE-1652346667-0-AUybo4Ro0l1qXkmJ1DkI4qZxcjJTXb_JroUhYqMxz1IHsItTMBcl2SvE-Nwc4YHtH3aCMgTLJZWSB6iWaoUAX7Dmord_nj_y6po-kTqWq_7k1ucnDXpezv_jWsMqMtHSHvWQRx_f0KsYCu83UyAyJtz8xLKqwRREZuC0gjQydYhL9JjSVGkuSvaZ4VyOq3bLZPSfEfkw_yI164lnskD2Qcyv6qZmidWqUks3762SXA-D6ZDzp_hV5X5IdoelmjhxzUg1o9hVZ0-IJufOEtCUdN2dAocVEM_DEHm4AA77bfTIbaefwd3Ss170zUJxGFYm4rcwTtuF1zYbnyDwuUNg0ljsQoQNnO0D0hcHZv03_F992DYAinpFnsmEQd2awPYIlRCoOJVGxRfqXgtXNdgdtHulARtKVjsswAHxzWCvAmTz9sJsXSKiRgNMd3BdK1YkTmqmL8OuBmozDM78JKdZaBsUcrOrQmy0ebWDhYUJlUwJlt6SPYzH6n4wwuAVemHd6Zt4wwjvqjbF_tXTXR0eHyumR57Zem88H4CQtUVFSS96zoU3jCMqPSzMIDXw4ajVX4y4Vr6xiScXZ-vF-fcRZqNHtj2tgjcnA-bCvIwLPiecKnsNgLqbOOy3dRP4P0Xdp2UU4220QecPLwd3Z1lvmLg" /> <input type="hidden" name="r" value="VmkvMwaXQCCXVwuKHULAoIBe8.rhkYFvpLZ8qM0cZ44-1652346667-0-AbiW2sZVb6fEZDnf/oDYlaD2Q4cWhy4XOaMFMZq0X4Fq3qDjOzpyzc4Dtq4oxbvz/nJRAFdvZ3LTYDjIyfuScgqP91THQJSIxQJpWLdvho4XtqpKaKH1jfLCXymtWh/i3CCwzDkO8gNqmqwc5FyCE8BZxpQD4/O/XbQDs/VKgNvWVIXYrzrD/t91DyvL0pz5xja/YUUWpi+5d6Q4+jh62JKzsKcMwwwNSZb4ZvDexNTP7ELWAq66yPGu6JViNT/34ZCmFBPXMfJfAPSQsUl5kA87YpDa2wFUd/2K3m31uSE9Bc30TBynSe2cVFmMXNbHFwatuIkhRx16ilIx8WAdLpc3Lg/OZ9BUh1gQqzqpcH8yfWe8PQt9TZAZ8jq0Hi2NrgG6zSKdgd4RI0FAtnai3E3HgbnSZBfvDK0rgtUmTHY0hXzkKd2d8hNMzlQssMsIV0RfyLVUnDzzVSuJ6xHQGeNeOsI4UxzHFZkOhoaCV/ox6txsVUJxpRsUR/iyhQCCDW/3Vzw+QD/62gVHc5VzdUH843oWbCFA7fmdJvxC0rDGeGgDS4v7kn+QJ5dRYEFnkzt18ZYPp0NaXr2xh8ETf+tD/mhcHlWc4krLQnNoBIHPf05CyfK84RtCvsHc453mj1Xg5qHYk3ETQaG1+65Y8COuVsRiuSpm2eb5YVxgrSvP1fZi/ePRFMZMl9EuR38DkFQrNxVp/3OljymK81oR4kJ7aaPAo9Kw+o7P/UV5cFdg9YuVyq6XpcVPU/n8lmh5xuENDS/TzaifYaqZCONtrGbpTRrHScAma6SMe2RozFFf/WCvbmJcnhwd5ea0aSr9I9c0lSLipRTWj8RMqLIxrql9aBoMhkeIjjrRyf0hT/0Sah5ziS9ZPnL8WiPFfsdZPjl+bcNvZl804UsirI0k2+Aj2QrcZ99/9HU2iJxBjpHRNgTuVLu4r4YKKAwvoZuWDeuU59U35b6BdXJ2bSf2I7ibIz24cCKBgC5HtlPIVzE6xQp6F0lsYvxHmUJsAxxeSCMB3AI20IHqNCi99oOtNJVJlBZjluWWp00/rWUON2QJh77xqxZH35Zj1hlWGhRwfZ6qds6Z9wNw/cxBPghc5vSqzlKDDUW6L9D8svZvJbLNWNYxfJyV55GxvlHulUCaTpgYSlm0yoTRZAmwaz/XNLff4hzt0zAiBIb1lhCMMXHggndtRXv3IeCvWXe9BIa2Ip1fQ11HnSIx1LE1oJaBDolhn4nxHYjndN0jtqCjf/y0AAjLvF11I/EphD7h+081UtifhgivadpoO7aKhIXtoCbofeR6OfhrNLBxkbB3ZesMWB9RxiZOeSoH18Ypvrvpjp74WN8ZQ37Lu4yEOq2qrF5eYpMUYNvtj6dCXYSvUPeAbhjGPeTrpzxFum3A5V6M48ZaypHplDMl4Tz4BdV8WghDqBnnvJy5X4NUhQt6BKuzzJCV1vxgy1B0Zvtzdn6+PUqzvLyQUloXMIboInvt9CuFWCqDSc4Hg0Z1aFhrnoR4cizYlU0RX2uIsDwC4QwBwZj7toaPxsH/whCL2oIkoFLXIV+IjHpcJlpD924/VGetWmtusL5b1ZrdS+WjtpTtgSsHIDNu6BnAPV263IaEC3v3dGcmb9Fo/scNqbe1HAFDg6aD9kPLFAYpJrON307uXgj0buJ8smh3fkz/I+m1zIak+SRumHwHW1YZIirwyFFFbW1ZJjgXduZQ7BKAgZUW+jbHAn7y1kHKhbOqRJLZBjQcjjS5OQ19rdHqvEDUjKouMn+gd8aSzNXwjkl2L/ucvMhL01EE5CVF+d0uG0MaYMzHzRxPGVSuGmjkV+lpZTneaT6eX+785U4ENAuW+dMaMfGWMg29jrNXkLi//dwN9JrzDk2xVe6sL7fHX26PBtAvpcyiOIH0eN83kZmWx1OejsnI7kO3u2i0JW1q+c/iTIFlf9EB2njxWsdGJ0Yc27/Tv873vnepzUcExiLeRm4KfV5Ba8E6Qmns6M6pR7Cn0H5CkIEA492PidHGZHNpuhc0NBtn/yT7dUsi9UAMG4vyQxywXyEytPJzseSvkCFP/aZLK99xTE1wsQkaAYl9aPg59eLuaKmE/saNL2YZkoJwOA=="/> <input type="hidden" value="2a8239f20bf11282609a7a5d0fb900d6" id="jschl-vc" name="jschl_vc"/> <!-- <input type="hidden" value="" id="jschl-vc" name="jschl_vc"/> --> <input type="hidden" name="pass" value="1652346668.359-GRitOVYXok"/> <input type="hidden" id="jschl-answer" name="jschl_answer"/> </form> <script> //<![CDATA[ (function(){ var a = document.getElementById('cf-content'); a.style.display = 'block'; var isIE = /(MSIE|Trident\/|Edge\/)/i.test(window.navigator.userAgent); var trkjs = isIE ? new Image() : document.createElement('img'); trkjs.setAttribute("src", "/cdn-cgi/images/trace/jschal/js/transparent.gif?ray=70a2066eee2252f5"); trkjs.id = "trk_jschal_js"; trkjs.setAttribute("alt", ""); document.body.appendChild(trkjs); var cpo=document.createElement('script'); cpo.type='text/javascript'; cpo.src="/cdn-cgi/challenge-platform/h/b/orchestrate/jsch/v1?ray=70a2066eee2252f5"; window._cf_chl_opt.cOgUHash = location.hash === '' && location.href.indexOf('#') !== -1 ? '#' : location.hash; window._cf_chl_opt.cOgUQuery = location.search === '' && location.href.slice(0, -window._cf_chl_opt.cOgUHash.length).indexOf('?') !== -1 ? '?' : location.search; if (window._cf_chl_opt.cUPMDTk && window.history && window.history.replaceState) { var ogU = location.pathname + window._cf_chl_opt.cOgUQuery + window._cf_chl_opt.cOgUHash; history.replaceState(null, null, "\/?__cf_chl_rt_tk=4AEdswm23.t_D1Kw4CowdKfl.p2O_4HDm_Fqhdm4tdk-1652346667-0-gaNycGzNCH0" + window._cf_chl_opt.cOgUHash); cpo.onload = function() { history.replaceState(null, null, ogU); }; } document.getElementsByTagName('head')[0].appendChild(cpo); }()); //]]> </script> <div id="trk_jschal_nojs" style="background-image:url('/cdn-cgi/images/trace/jschal/nojs/transparent.gif?ray=70a2066eee2252f5')"> </div> </div> <div class="attribution"> DDoS protection by <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing/" target="_blank">Cloudflare</a> <br /> <span class="ray_id">Ray ID: <code>70a2066eee2252f5</code></span> </div> </td> </tr> </table> </body> </html> : 0
-
미해결ES6 문법과 함께하는 모던 Javascript(자바스크립트) 고급 Part.1
Set에서 entries를 사용해야 할 필요가 있나요?
결국 key, value가 같은 값으로 생성이 되는데, 굳이 entries로 뭔가 작업할 일이 있을까 싶어서요.
-
미해결모던 자바스크립트(javascript) 개발을 위한 ES6 강좌
로또 구현
const SETTING = { name: 'Lucky Lotto!', count: 6, maxNumber: 45 } function getSingleNum(min, max) { return Math.floor(Math.random() * (max - min + 1)) + 1 } function getLottoNum() { let numSet = new Set() let {count, maxNumber} = SETTING while(numSet.size !== count) { let num = getSingleNum(1, maxNumber) if(!numSet.has(num)) numSet.add(num) } return [...Array.from(numSet).sort((a, b) => a - b)] } console.log(getLottoNum())
-
미해결
수강기간 연장 문의
안녕하세요? 그동안 사정이 있어서 강의를 결제만 해 놓고 못 들었는데 오늘 보니까 유효기간이 1년이더라구요 ㅠㅠ 저는 평생강의인줄 알았어요.. 혹시 2~3달정도 더 연장이 안 될까요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
안녕하세요!!!몇가지 질문 드리려고 합니다!!!ㅎㅎ
현재 저는 Django restframework api 로 s3에 video파일을 업로드 하고 이를 처리하는 코드를 만들고 있습니다!! 여기서 저는 AWS Lambda(trigger), S3, Mediaconvert을 통해 업로드 되는 미디어 파일을 일괄 트랜스 코딩 작업을 해서 저장을 하려고 합니다!! 현재 동작방식은 (아직 제 장고서버에는 적용하지 않았지만 테스트 서버로써) s3 특정 버켓에 video파일이 올라가면 자동으로 lambda trigger를 동작시켜 제가 지정한 경로에 video파일이 transcoding이 되도록 작업을 해두었습니다!! (차후 아래 사항이 해결이되면 장고로 video가 업로드가 되면 위를 접목시킬 예정입니다) 1. 제 생각에는 비동기 처리가 순서대로 두번 이루어 지는것 같은데 첫번째로는 파일을 업로드하기위한 post요청시 응답을 비동기 처리 (장고에서 처리) , 두번째는 트랜스코딩 처리 이는 aws단에서 이루어지기 때문에 관련이 없을것같습니다. 그래서 첫번째 post요청시(create video) 비동기 처리를 해야하는데 이와 관련된 참고할만한 class나 자료가 있을까요?? (제가 modelviewset을 활용하고 있는데 create async기능 때문에 상속 class를 바꾸어서 modelviewset의 편리함을 다 포기해야할까요 ㅠㅠ? or 아예 async createapi만 따로 만들어서 처리를 해야할까요!!?? ) 즉!! redit을 보면 비디오 파일 업로드시 비동기처리가 되고 업로드가 완료되면 push알람이 오더라고요 ㅎㅎ 요론식으로 구현을 원해서 이와 관련된 서드파티라이브러리나 좋은 자료가 있을까요!!?? 2. 장고로 파일을 s3에 업로드 하면 저장이 되는데 그중 혹시라도 파일명이 겹칠 수 가 있자나요?? 이부분을 처리를 해야할것같은데 제가 생각한 방법은 전에 선생님께서 전에 알려주신 serializer에 to_representation 메소드를 이용해서 파일명을 임의로 변경해서 reponse하도록 하는것을 생각해 보앗는데 이게 문제는 없는 방법일까요!!?? 아니면 보통 이러한 경우는 어떻게 처리를 하나요!!?? ㅎㅎ 3. 마지막으로 장고랑은 좀 무관한 내용이지만 위와 관련해서 video 트랜스 코딩 과정사항을 알기 위해서 polling과정이 있어야 할텐데 클라이언트에서 polling 이루어지는 과정이 어떻게 되나요 ?? 제가 소속된 팀은 코틀린을 사용하고 있고요 꼭 코틀린이 아니더라도 어떻게 이루어지는 궁금합니다! 그냥 제 개인적인 예상은 몇초단위로? 계속 api요청을 보내서 status값이 completed면 이후 처리 .. 막 이런식으로 예상을 해보았는데 실제 서비스를 돌릴 때도 이러한 과정으로 비동기 처리에 대한 polling 이루어지나요!?? (위 과정이 맞다면 boto3를 활용해서 mediaconvert reponse status api를 따로 만들어주려고 합니다!) 질문이 다소 많았는데 파고들수록 어렵고 복잡해 지네요 ㅠㅠ 제가 경험이 부족하다보니 프로세스에 대하여 잘못 이해하고 있거나 이해가 안되시는 부분은 말씀해주시면 바로 자세하게 설명드리겠습니다!! ㅎㅎ 그리고 제 예상으론ㅎㅎ 사무실이 곧 or 이미 오픈하신것으로 아는데 너무너무 축하드리고요!! 선생님의 명품 장고 세미나 정말너무너무너무 기대하고 있습니다!! 항상 진심으로 감사드립니다!! ㅎㅎ