묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결프론트엔드 개발환경의 이해와 실습 (webpack, babel, eslint..)
webpack5부터 optimize-css-assets-webpack-plugin 말고 css-minimizer-webpack-plugin 사용
제목처럼 webpack5부터는 css-minimizer-webpack-plugin이 사용한다고 합니다 https://www.npmjs.com/package/optimize-css-assets-webpack-plugin npm 문서확인해보시면 css-minimizer-webpack-plugin 를 이용하라고 권고하네요 webpack5로 실습 진행하시는분들은 참고해주세요 ~
-
미해결함수형 프로그래밍과 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-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"/> <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달정도 더 연장이 안 될까요?