안녕하세요! 강의 수강 중에 질문이 있어 글 남깁니다. 마지막 문제에서 저는 SELECT main_category, items.provider, AVG(items.dis_price), AVG(items.discount_percent), COUNT(*) FROM items INNER JOIN ranking ON items.item_code = ranking.item_code GROUP BY items.provider HAVING COUNT(*) >= 20 ORDER BY main_category, COUNT(*) DESC; 이렇게 판매자별로만 그룹을 지정해서 문제를 접근했었는데요. 강사님께서 작성해주신 아래 쿼리문을 기준으로 다시 돌려보니 결과값이 상이하게 나와서 궁금해졌습니다. SELECT ranking.main_category, items.provider, AVG(items.dis_price), AVG(items.discount_percent), COUNT(*) FROM items INNER JOIN ranking ON items.item_code = ranking.item_code GROUP BY items.provider, ranking.main_category HAVING COUNT(*) >= 20; 그룹핑을 다르게 했으니 결과값은 상이하게 나오는게 당연하겠지만... 왜 상이하게 나오는지에 대해 바로 이해가 잘 되지 않아서요 ㅠㅠ.. 제 추측으로는 그룹핑을 provider라는 하나의 기준으로만 시키는 바람에, 다른 메인 카테고리에 있는 똑같은 값들이 ALL에 다 포함되어서 출력되어서 그런것 아닐까 싶은데... 제가 이해한게 맞는지 모르겠습니다 ㅠㅠ! <질문자 코드 결과> <강의 코드 결과>
안녕하세요 강사님! 커리큘럼에서 스프링 데이터 JPA까지 들었습니다. 강의내용에서나 커뮤니티 답글에 종종 MSA 관련 설명도 들었는데요. 강의 들으면서 최적화와 관련된 내용을 많이 봤는데 이런 MSA 환경에선 어떻게 해결하셨는지 궁금해 질문 남깁니다. 서비스 구성은 예를들면 이렇습니다. Member: 멤버만 관리하는 서비스 Order: 주문 정보 관리하는 서비스 admin: 관리자용 서비스 서비스별 DB는 분리되어있습니다. Member DB : Member(id,name) Order DB : Order(id, memberId, title) // memberId는 다른 db의 pk이므로 fk는 없습니다. 관리자용 서비스에서 멤버별 주문횟수와 최근 주문 제목을 리스트로 보여주려 합니다. 페이징이 있는 리스트이며 멤버이름 또는 주문 제목 또는 둘다(통합검색)으로 검색,정렬 할 수 있습니다. 만약 모놀리틱 서비스인 경우에는 pageable을 request로 받아서 spring data jpa를 활용하여 repository에서 Page 객체를 반환하는 기능과 JPQL이나 QueryDSL로 페이징과 검색을 해결 할 수 있을것 같은데요 MSA에서는 DB가 분리되어있다보니 어떻게 해결할지 고민입니다. 제가 생각한 방법은 3가지정도가 있는데요. 1. member 정보들을 member db에 쌓지만 각 db(주문, 배송 등)에 따로 또 쌓고(주문에서 사용되는 멤버만) 이벤트 드리븐 아키텍쳐 등으로 동기화한 뒤 jpql, querydsl 사용한다. 2. 엘라스틱 서치 등을 사용한 검색용 서비스를 만든다. (하지만 큰 기능이 아니라면??) 3. Order서비스에서 Member 서비스에 이름으로 검색 요청을 한 뒤 결과로 id값들을 받아서 Order 서비스에서 쿼리를 만들어 사용한다. (이름 검색이 아닐경우에는 Order 서비스에서 검색한 뒤 나온 id값들을 Member서비스에 요청해 매핑한다.) 어떤 방법이 정석적인 방법일까요?? 요청이 많지 않은 admin 서비스는 3번으로 데이터가 많아 통합 검색이 필효한 서비스는 2번으로 요청이 많지만 데이터는 많지 않은 서비스는 ?? 으로 생각하고 있는데 괜찮은 방법일까요?
1. 마스터프로세스는 코어 하나를 점유하지 않나요? 강의에서 제로초님 컴퓨터는 cpu가 6개(코어를 의미하신 거겠죠?)라고 하셨습니다. 그리고 cluster.js를 실행했을 때 process.pid가 7개가 출력됩니다. (마스터 프로세스 하나 워커 프로세스 6개) 이때 마스터 프로세스는 어느 코어에서 실행 되는건가요? 2. 클러스터와 child_process 차이가 뭔가요? 둘다 멀티 프로세스이지만 child_process는 메인 프로세스에서 다른 프로그램을 실행 시킬 수 있는 제어권을 주는 개념이고 클러스터는 효율을 위해 메인에서 워커에게 일을 분배해준다고 이해했습니다. 여기서 cluster.js의 else부분을 다른 파일로 만들고 부모 프로그램에서 child_process로 else부분 파일을 실행시킨다면, 부모 프로세스에서 listen하므로 포트를 공유하고 데이터를 넘겨주며 멀티프로세스를 사용할 수 있는데 이런 식으로 child_process를 이용해 클러스터를 구현한다면 클러스터와 어떤 차이가 있는건가요?
먼저 spring boot 2.6X 버전 java17 로 하고있습니다. 영상 13:41 에 BycryptPasswordEncoder 를 주입하면 Spring 순환 참조가 걸리지 않는지 궁금해서 질문 남깁니다. 저는 순환참조에 걸려 PricipaOauth2UserService 에서 new BycryptPasswordEncoder 로 생성을하여 따로 주어서 해결을 했습니다. 감사합니다.
인벤토리 실습을 따라하는 도중에 빨간줄이 떠서 무슨오류인가하고 살펴봤더니 강사님의 c#스크립트에는 뜨지않은 오류가 떴습니다. UI_Base의 Get함수도 살펴보고 다시 첨부터 돌려봤는데 어디서 잘못작성한것인지 감을 잡지 못하겠습니다.. 무엇을 잘못했는지 지적해주실 수 있으실까요?
선생님께서 하신대로 그대로 따라했는데 다음과 같은 오류가 뜹니다 PS D:\Visual Studio> pip install openpyxl WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: EE certificate key too weak (_ssl.c:997)'))': /simple/openpyxl/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: EE certificate key too weak (_ssl.c:997)'))': /simple/openpyxl/ WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: EE certificate key too weak (_ssl.c:997)'))': /simple/openpyxl/ WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: EE certificate key too weak (_ssl.c:997)'))': /simple/openpyxl/ WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: EE certificate key too weak (_ssl.c:997)'))': /simple/openpyxl/ Could not fetch URL https://pypi.org/simple/openpyxl/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/openpyxl/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: EE certificate key too weak (_ssl.c:997)'))) - skipping ERROR: Could not find a version that satisfies the requirement openpyxl (from versions: none) ERROR: No matching distribution found for openpyxl Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: EE certificate key too weak (_ssl.c:997)'))) - skipping
안녕하세요 수업 정말 잘 듣고 있습니다. DataFrame 값을 다루는 unique, count, value_counts 부분을 듣다가 의문점이 생겼습니다. Sector 명이 완전히 똑같지 않고 '반도체'라는 단어가 들어간 모든 Sector들에 해당하는 데이터들을 DF 형태로 보려면 어떻게 해야 될까요? If문으로 돌려봤지만 아무값도 나오지 않아 질문드립니다. 감사합니다!
안녕하세요! 좋은 강의 정말 잘 듣고 있습니다ㅎㅎ 다름이 아니라 Dispatch Barrier강의를 듣던 중 궁금한 점이 생겼습니다. get, set 각각 다른큐로 sync, async하게 넘기는 예시를 보았습니다. 여기서 궁금한 점이 생겼는데 get을 하는데 굳이 큐로 sync하게 넘기는 이유가 있을까요? 현재 쓰레드에서 그대로 get을 하면 다른 쓰레드로 넘어가는 낭비를 하지않고 그대로 받아 올 수 있지 않나요? 여기서 조금 더 나아가서 현 쓰레드에서 큐(다른 쓰레드)로 굳이 sync하게 넘어가야할 이유를 모르겠습니다. 어차피 현 쓰레드가 동작하지 못하고 기다릴 바에야 현 쓰레드에서 모든 걸 처리하면 되지 않나요?
월별 수익률 관련 질문 드립니다. 월별 수익률을 구할때, 월의 전체 날짜들을 고려하는 것이 아니라 월말 (30,31일)의 change 만 가지고 비교한다는 것이 직관적으로 잘 이해가 가지 않습니다. 왜 월 전체가 아니라 월말 하루의 change를 가지고 월별 수익률을 구하는 것인지 알 수 있을까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 새로운 개념(역할들)이 나오면서 제가 잘 이해하고 있는게 맞는지 의문이 들어 질문을 남기게 되었습니다. domain : 비즈니스 객체 스키마와 비슷하다고 생각했는데, 스키마 자체는 아니고 프로그램 전반에서 쓰이는 데이터를 추상화한 비스니스 객체라고 이해했습니다. 지금의 프로젝트는 회원관리만 지원하지만, 만약 도서관서비스로 확장을 한다면 책에 관련된 새 도메인 객체가 필요하고 도메인 객체를 선언할 파일도 필요하다고 이해하고 있는데 맞을까요? controller : 외부 요청을 관리 컨트롤러가 붙은 파일들은 스프링 컨테이너에서 제일 먼저 외부 요청을 확인한다고 이해했습니다. HomeController와 Membercontroller가 나뉜 이유는 각각의 역할이 다르기 때문으로, 전자는 홈과 관련된 컨트롤러고, 회원가입은 Member 도메인 객체에 어떠한 로직과 역할이 뚜렷해서 따로 빠져있다고 이해했습니다. ~Form : 컨트롤러 -> html -> 태그의 속성값을 받아온 후에 처리 사실상 하는 역할은 도메인 객체와 비슷하다고 생각합니다... 다만 비즈니스 객체는 아니고, html태그를 통해 들어온 값을 스프링에서 사용할 수 있도록 해준 중간다리라고 이해했습니다. 각 파일이 최소한의 자기 역할만 하도록 설계되어 이렇게 파일들이 나뉘어져있다고 이해했는데, ~Form 파일이 controller 폴더에 있는 점은 아직 완전히 이해가 가진 않습니다..ㅠㅠ... 이 역시 외부에서 들어온 요청의 일부로 판단된 이유일까요? 추상적으로는 느낌적인 느낌으로 이해가 가지만 이게 제대로 이해를 하고 있는가에 대해선 자신이 없어 질문을 남겼습니다. 감사합니다!
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. a = 15; b = -8 wrong = a+b; correct = $signed({1'b0,a}) + b; 에서 질문 1 : $signed({1'b0,a})는 5비트 b는 4비트인데 피연산자의 비트길이가 다른데 연산이 가능한가요 ? correct가 5비트로 선언되었으므로 a에 0을 결합하여 5비트를 만들 필요없이 그냥 $signed(a) + b; 만 해줘도 되지 않나요?
안녕하세요, 좋은강의 감사합니다. 벌써 몇개째 듣는지 모르겠네요 충분한 값어치 이상의 강의 감사드립니다.ㅎㅎ(영한님꺼 1개인가 2개빼고 전부 구입완료)..ㅎ 영한님 스타일은 항상 태초의?코드를 작성 후 버전을 올리면서 순차적으로 이렇게 이렇게 되서 결국은 이런식 이러한 강의 스타일이라 알고있습니다. 다름아니라 현재 프로젝트는 v2에서 정리단계로 넘어간후 로컬쓰레드로 넘어가는데 커리큘럼을 보니, aop쪽에서 로그를 만질껏 같긴한데 v3,v4, v5 - 에 해당하는 목차를 현재 목차를 만드신 스타일로 보면 3개정도 빼실것같은데..없는것 같아 "누락"인지, 혹은 뒷부분에서 계속 진행되는지 궁금해서 글 남겼습니다. 해당 강의 마지막 부분에서 다음시간에는 이러이러한 문제점을 개선하신다는 말을 듣고 v3,,v4,,v5,,식으로 나와야할 목차같은데 없어서 그러합니다..
안녕하세요. 항상 좋은 강의와 답변 주셔서 감사합니다. 강의를 다 듣지 못해서 ㅠㅠ... 죄송하지만.. 여기에 글을 적게 되었습니다. 제가 JPA의 DB쪽 동시성 병렬성 문제를 고민하던 중... @Lcok이라는 기능을 통해 DB쪽 문제까지 해결할 수 있다는 것을 알게 되어서... @LOCK을 순수 Repository나 Service에 걸려고 했었습니다. 그런데 하다 보니 @Lock이 Spring Data JPA 패키지에 있더라구요. 그래서 구글링을 해보니 많은 분들께서 JPA Repository 구현체에다가 @Lock을 적용하시는 것 같았습니다. 혹시 Spring Data Jpa Repository의 구현체가 아닌 순수 JPA에서도 @Lock 어노테이션을 정상적으로 사용할 수 있을까요? 제가 비관적 락을 걸고, Version으로 관리하는 코드를 작성해서 돌려봤는데... 비관적 락이 아니라, default인 낙관적 락으로 계속 돌아가는 것 같습니다... 다른 분들이 자겅한 코드를 확인해보니, JPA Repository 구현체에서는 정상적으로 @Lock이 먹히는 거 같습니다... 혹시 바쁘시겠지만... 알려주시면 너무 감사드리겠습니다...! 엔티티 코드 @Entity @Data public class MyEntity { @Id @GeneratedValue private Long id ; private Long num ; @Version private Long version ; } 리포지토리 코드 @Repository @RequiredArgsConstructor public class MyRepository { private final EntityManager em ; @Transactional @Lock (value = LockModeType. PESSIMISTIC_FORCE_INCREMENT ) public MyEntity save (MyEntity entity) { em .persist(entity) ; return entity ; } public MyEntity findById (Long entityId) { return em .find(MyEntity. class, entityId) ; } } 서비스 코드 @Service @RequiredArgsConstructor public class MyService { private final MyRepository myRepository ; @Transactional public MyEntity save (MyEntity entity) { entity.setNum(entity.getNum() + 1 ) ; myRepository .save(entity) ; return entity ; } @Transactional public MyEntity saveEntity (Long entityId) { MyEntity entity = myRepository .findById(entityId) ; entity.setNum(entity.getNum() + 1 ) ; myRepository .save(entity) ; return entity ; } } 테스트 코드 --> 돌리는 도중 낙관적 락에 의한 예외 코드 발생하며 종료 @SpringBootTest public class MyEntityTest { private static final ExecutorService service = Executors. newFixedThreadPool ( 3 ) ; @Autowired private MyRepository myRepository ; @Autowired private MyService myService ; private long accountId ; private Long entityId ; @BeforeEach public void setUp () { MyEntity myEntity = new MyEntity() ; myEntity.setNum( 10L ) ; myService .save(myEntity) ; entityId = myEntity.getId() ; } @Test public void raceCond () throws InterruptedException { CountDownLatch latch = new CountDownLatch( 3 ) ; for ( int i = 0 ; i < 3 ; i++) { service .execute(() -> { myService .saveEntity( entityId ) ; latch .countDown() ; }) ; } latch.await() ; System. out .println( "myRepository.findById(entityId) = " + myRepository .findById( entityId )) ; } 항상 좋은 강의와 답변 감사드립니다.