묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
querydsl 의 offset 정의가 헷갈립니다.
repository에 1,2,3,4,5를 차례로 저장하고offset을 1로, limit을 2로해서 조회하면 [2,3], [4,5]가 조회되는건가요? 아니면 [3,4] ,[5]가 조회되는건가요? offset이 0부터시작인데 1로 지정하면 2페이지부터 조회한다는건지? 두번째 데이터부터 페이징을 시작한다는건지요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
리눅스를 사용하는 이유가 궁금합니다.
안녕하세요 며칠전까지 마이크로프로세서응용이라는 과목을 학교에서 zybo-Z7-20보드를 컴퓨터에 연결하여 vivado상 sdk를 주로쓰는 수업을 수강하였고, 다음학기에 ai가속기설계라는 과목을 수강할 예정이라 강사님의 강의를 방학동안 따라가면서 디지털회로설계자가 되기위해 노력하는 학생입니다. 오늘 강의를 처음 수강하였는데요, 저는 기존에 그냥 c드라이브에 vivado를 다운받아서 사용하였는데, 강사님은 리눅스 환경에서 새로 받아서 설치하시길래 그 이유가 궁금해서 이렇게 질문을 남기게 되었습니다. (다행이 무사 설치후 hello world가 프린트되는거까지 잘 확인했습니다!) 좋은 강의 감사드리며, 잘 따라가보겠습니다!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
/api/v1/members 버그
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강사님처럼 코드를 다음과 같이 작성했습니다.MemberApiController.javapackage jpabook.jpashop.api; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import jpabook.jpashop.domain.Member; import jpabook.jpashop.service.MemberService; import lombok.AllArgsConstructor; import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.stream.Collectors; @RestController @RequiredArgsConstructor public class MemberApiController { private final MemberService memberService; @GetMapping("/api/v1/members") public List<Member> membersV1() { return memberService.findMembers(); } @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) { Long id = memberService.join(member); return new CreateMemberResponse(id); } @PostMapping("/api/v2/members") public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request) { Member member = new Member(); member.setName(request.getName()); Long joinedMemberId = memberService.join(member); return new CreateMemberResponse(joinedMemberId); } @PutMapping("/api/v2/members/{id}") public UpdateMemberResponse updateMemberV2(@PathVariable("id") Long id, @RequestBody @Valid UpdateMemberRequest request) { Member member = new Member(); member.setName(request.getName()); memberService.update(id, request.getName()); return new UpdateMemberResponse(id, request.getName()); } @Data static class CreateMemberRequest { @NotEmpty private String name; } @Data @AllArgsConstructor static class CreateMemberResponse { private final Long id; } @Data static class UpdateMemberRequest { @NotEmpty private String name; } @Data @AllArgsConstructor static class UpdateMemberResponse { private Long id; private String name; } } MemberService.javapackage jpabook.jpashop.service; import jpabook.jpashop.domain.Member; import jpabook.jpashop.repository.MemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class MemberService { private final MemberRepository memberRepository; /* * 회원 가입 * */ @Transactional public Long join(Member member) { validateDuplicateMember(member); // 중복 회원 검증 memberRepository.save(member); return member.getId(); } /* * 중복 확인 메서드 * */ private void validateDuplicateMember(Member member) { List<Member> findMembers = memberRepository.findByName(member.getName()); if (!findMembers.isEmpty()) { throw new IllegalStateException("이미 존재하는 회원입니다."); } } // 회원 전체 조회 public List<Member> findMembers() { return memberRepository.findAll(); } public Member findOne(Long memberId) { return memberRepository.findOne(memberId); } @Transactional public void update(Long id, String name) { Member member = memberRepository.findOne(id); member.setName(name); // 영속성 컨텍스트에서 엔티티를 수정하면 트랜잭션 커밋 시점에 변경 감지(Dirty Checking)가 동작한다. } } MemberRepository.javapackage jpabook.jpashop.repository; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import jpabook.jpashop.domain.Member; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import java.util.List; // 컴포넌트 스캔에 의해 // 스프링 빈에 자동으로 등록 @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; public void save(Member member) { em.persist(member); } public Member findOne(Long id) { return em.find(Member.class, id); } public List<Member> findAll() { return em.createQuery("select m from Member m", Member.class) .getResultList(); } public List<Member> findByName(String name) { return em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); } } Member.javapackage jpabook.jpashop.domain; import jakarta.persistence.*; import jakarta.validation.constraints.NotEmpty; import lombok.Getter; import lombok.Setter; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; @NotEmpty private String name; @Embedded private Address address; @OneToMany(mappedBy = "member") private List<Order> orders = new ArrayList<>(); } 그리고 postman으로 localhost:8080/api/v1/members로 호출을 하게 되면 다음과 같이 무지막지하게 많은 양의 결과가 나옵니다. 왜 그러는 걸까요?
-
미해결카프카 완벽 가이드 - 코어편
안녕하세요
안녕하세요 맥북 m2 사용자라 utm에서 ubuntu 설치하고 진행하는데 주소, 네트워크 주소, 게이트웨이(찾아보니 yaml 하라고 해서 )부터 너무 막히는데 하나씩 utm 방법으로 찾아서 진행해야하는 건지 아니면 다른 방법이 있는지 궁금합니다
-
미해결실리콘밸리 엔지니어와 함께하는 샐러리(Celery)
DLQ에 저장하는 패턴에 대해 질문 드립니다.
DLX에서 consumer가 DLQ에 에러를 저장하는 과정에 대해 이해가 잘 안되는 부분이 있습니다.에러가 발생하면 DLQ에 넣는다.다음 처리를 하는데 들어온 이벤트의 타입을 DLQ의 에러가 발생한 이전 이벤트 타입과 동일한지를 비교하여 같다면 있다면 DLQ에 넣는다2번 처리에서 consumer는 모든 작업을 수행하기 전 이벤트 타입을 DLQ에 있는 모든 이벤트 타입과 비교하는 작업을 한다는 전제인가요? 그렇다면 일반적으로 DLQ에 누적되는 각기 다른 이벤트 타입의 수가 많지 않을 것이기 때문에 (동일한 이벤트 타입들은 사실 1개로 처리) 이벤트 실행 중 발생하는 에러 결과를 DLQ에 넣는 것 보다, 작업 전 이미 발생한 에러 이벤트 타입과 비교하여 동일한 이벤트 들은 처리를 하기 전, DLQ에 넣는게 전체적으로 효율성이 높기 때문이라 볼 수 있는 것일까요?
-
미해결SignalR + ASP.NET Core [+MAUI +WPF +JWT]
builder.WebHost.UseUrls("http://0.0.0.0:8080");
builder.WebHost.UseUrls("http://0.0.0.0:8080");로 하는 경우 서버가 열리지 않아요.localhost로 했을 때는 정상적으로 동작이 되었어요...
-
미해결실리콘밸리 엔지니어와 함께하는 샐러리(Celery)
DLX에 대한 질문입니다.
message들은 아래와 같은 경우가 원인이 될 수 있다고 말씀 하셨습니다.1. consumer가 거절하는 경우2. 시간이 너무 오래 걸려 acknowledgment timeout이 발생한 경우3. 처리를 하는 동안 에러가 발생한 경우첨부된 pdf나 코드상에서 최종 언급되는 방법으로 3번에 대한 항목만 있는 것 같은데요두 가지 질문이 있습니다.1번 질문으로 1,2번 항목은 사실 consumer가 처리할 수 없는거 아닌가 생각되는데 redis를 사용하는 지금 프로젝트에서 따로 처리를 하는 방법이 방법이 어떻게 있을지 알고 싶습니다. 2번 질문으로 제가 알고 있기로 rabbitMQ에서 ack와 관련한 기능이 있는 것으로 알고 있습니다. 혹시 해당 작업을 해보신적이 있으시다면 어떻게 처리, 구현 하셨는지 알고 싶습니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
네이버쇼핑 질문 있습니다!
네이버쇼핑크롤링을 연습도중 상품썸네일 링크를 가져와보고싶어서 연습을해봤는데 아래링크처럼했을때 첫번째 상품의 이미지링크만 가져오게되고 나머지 이미지썸네일 링크는 여러가지 다른선택자를 이용해서 시도를 해봤지만 이와같이 한개의 이미지썸네일 링크만 가져와져서 이럴때 어떻게 해야될지 궁금합니다!from selenium import webdriver import time from bs4 import BeautifulSoup import re from urllib.parse import urlparse, urlunparse driver = webdriver.Chrome() driver.get('https://search.shopping.naver.com/search/all?adQuery=%EB%8B%AD%ED%84%B8%EB%BD%91%EB%8A%94%EA%B8%B0%EA%B3%84&origQuery=%EB%8B%AD%ED%84%B8%EB%BD%91%EB%8A%94%EA%B8%B0%EA%B3%84&pagingIndex=1&pagingSize=40&productSet=overseas&query=%EB%8B%AD%ED%84%B8%EB%BD%91%EB%8A%94%EA%B8%B0%EA%B3%84&sort=review&sps=N×tamp=&viewType=list') last_height = driver.execute_script("return document.body.scrollheight") while True: #스크롤끝까지 내리기 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height: break last_height = new_height html = driver.page_source soup = BeautifulSoup(html, 'html.parser') items = soup.select(".product_item__MDtDF") for item in items: # 이미지 URL 찾기 img = item.select_one(".product_img_area__cUrko img") print(img)
-
미해결토비의 스프링 6 - 이해와 원리
개발환경 세팅에서 질문있어요.
안녕하세요. 토비님.좋은 강의 만들어주셔서 감사합니다.질문이 하나 있습니다.개발환경 세팅에서 bash 명령어를 추천해주는 툴? 플러그인을 사용하고 있는것으로 보이는데요.무엇인지 알려주시면 좋겠습니다.
-
해결됨[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
애뮬레이터 오류
안녕하세요 3개월?만에 플러터 다시 진행하고자 들어왔는데 에뮬레이터에 문제가 생겼습니다..에뮬레이터를 실행하면 작업표시줄에는 뜨는데 화면에는 안 뜨더군요. 클릭해도 틀어지지가 않습니다.그래서 마우스 오른쪽 클릭으로 qemu-system-x86_64 들어가보면위 4개와 같은 오류창이 뜹니다..강의도 최신버전으로 업뎃되었겠다 관련 프로그램들도 최신버전들이 나와서 기존의 플러터, 안드로이드 등 그냥 깔끔하게 다 삭제하고git부터 새로 다 깔았는데도 동일한 오류가 뜹니다..어떤게 문제일까요??
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
vivado 설치 에러
안녕하세요. 컴퓨터를 새로 구매하여 다시 vivado를 다운받으려고 하는데 오류가 발생하여 질문드립니다. 우선 Vivado의 경우 영상에서 사용한 이전 버전을 다운 받을 수 없어 아래와 같은 최신 버전의 것을 다운 받았습니다.이후 영상을 따라 mobaxterm에서 코드를 입력하였습니다. 그런데 vivado 설치 시 아래와 같은 오류가 발생하였습니다. 구글링을 하여 에러에 대해 찾아봤지만, 해결책이 되는 건 없었습니다. 어떻게 해결해야 할까요?
-
미해결김영한의 실전 자바 - 중급 1편
지역 클래스-지역 변수 캡쳐2 질문
안녕하십니까 깊은 내용 쉽게 가르쳐 주셔서 정말 감사합니다.질문이 있습니다.public static void main(String[] args) { OuterClassV2 outerClassV2 = new OuterClassV2(); Printer innerPrinter = outerClassV2.process(1); innerPrinter.print(); Field[] fields = innerPrinter.getClass().getDeclaredFields(); System.out.println(fields.length); for (Field field: fields) { System.out.println(field.getName()); } }위 메서드 실행시에 public Printer process(final int paramVal) { int localVal = 2; // 여기 class InnerPrinter implements Printer{ private final int val = 3; @Override public void print() { System.out.println("val = " + val); System.out.println("localVal = " + localVal); System.out.println("paramVal = " + paramVal); System.out.println("outerClassVal = " + outerClassVal); } } return new InnerPrinter(); }위와 같이 int localVal = 2 처럼 암묵적 final을 이용하면 지역 클래스에 캡쳐되는게 확인 됩니다 하지만final int localVal = 2 처럼 명시적으로 하면 지역클래스가 캡쳐되지 못하는데 이유가 무엇일까요?크게 중요한 문제는 아니지만 궁금하였습니다.감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
build.gradle 에러
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]build.gradle에서 에러가 발생합니다 자바 버전 17 사용했습니다Could not apply requested plugin [id: 'io.spring.dependency-management', version: '1.1.5'] as it does not provide a plugin with id 'io.spring.dependency-management'. This is caused by an incorrect plugin implementation. Please contact the plugin author(s).> Plugin with id 'io.spring.dependency-management' not found.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
html주소를 다른 컴터에서도 접속하기
html기초 강의에서 만들어진 웹페이지를 제 컴터에서 크롬키고 주소 복붙하면 들어가지는데핸드폰(아이폰) 크롬앱으로 주소 복붙하면 안들어가지네요다른 컴터에서도 url만으로 들어가지는 웹을 만들고싶은데..음 웹 강의를 따로 들어야할까요?아니면 여기서 간단히 무엇만 추가하면 될까요
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
yml파일 설정, 그리고 tomcat 서버로 작동
gateway.routes 형식이 아니라 위 사진 처럼중간에 mvc가 들어가는 데 버전 업 되면서 문법이 바뀐걸 까요?apigateway-service 동작할 때 netty 서버로 동작하지 않고 tomcat 으로 작동하는데 이것도 버전으로 인해 바뀐 걸 까요?
-
해결됨디자인 시스템 with 피그마
테이블만들때 컴포넌트 구성
안녕하세요아래 라인만 있는 리스트 테이블을 만들려고 하는데요 오토레이아웃을 활용할경우 컴포넌트 구성을 어떻게 해야할지 궁금합니다
-
해결됨[코드팩토리] [초급] 8시간만에 끝내는 코드팩토리의 Typescript 완전정복 풀코스
12_experimental_decorator, class decorator
1) 가장 먼저 궁금한 것은 decorator 자체에 대한 부분입니다. 일단 class decorator로 한정지어서 질문드리자면 아래 코드에서 ChangeClass라는 함수는 결국 어떤 이름도 없는 class 자체를 반환할 뿐인데 어떻게 이 ChangeClass가 기존의 Idol 클래스를 덮어쓰는지 자체가 의문입니다. 그냥 그게 class decorator의 역할이라고 한다면 납득해야겠지만 뭔가 찝찝한 구석이 남아있는 듯한 느낌입니다...function ChangeClass<T extends { new (...args: any[]): {} }>(constructor: T) { return class extends constructor { groupName = "아이브"; constructor(...params: any[]) { super(...params); console.log("constructor instantiated"); } }; } 2) ChangeClass에 대한 질문입니다.아래 코드는 에러가 납니다. ChangeClass라는 함수를 class decorator로써 사용했다면 결국 실제로 인스턴스를 생성할 때 이 ChangeClass에서 리턴한 클래스에 따라서 인스턴스가 생성된다는 것인데 왜 groupName 이란 프로퍼티에 값을 미리 초기화시키는 것은 괜찮고 인스턴스 생성시에 추가적인 프로퍼티에 대한 입력을 받는 것은 왜 불가능한지 의문입니다.function ChangeClass<T extends { new (...args: any[]): {} }>(constructor: T) { return class extends constructor { groupName: string; constructor(...params: any[], groupName: string) { super(...params); this.groupName = groupName; console.log("constructor instantiated"); } }; }
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
DCL 강의 파트 CLI 입력 창에서 잘못 입력 시 취소하는 방법
안녕하세요,수업을 들으면서 간혹 타자를 잘못 치게 되는 경우가 있는데이럴때 입력 창에서 어떻게 뒤로 가기를 하거나 빠져나갈 수 있는 방법이 있을까요? 예를들어 제가 exit을 입력해야 하는데 잘못하여 'by'로 잘못 입력 후 엔터를 치니화살표가 뜨면서 계속 해당 칸에서만 입력이 가능합니다.이런 경우 어떻게 원래 입력위치로 돌아가서 'exit'으로 입력을 할 수 있을까요?현재로서는 방법을 알지 못하여 창을 아예 껐다가 모든 명령어를 다시 입력 후 재진행하고 있으나혹시 이와 같은 상황에서 명령어로 수정이 가능할 지 궁금하여 문의드립니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
동생이 도착한 시간 - 수빈이가 도착한 시간 이 짝수일 때
http://boj.kr/c287b933ed0442d4ba02329f7601b61b선생님, 안녕하세요.동생의 위치를 미리 구해놓고, 수빈이가 그 위치에 갈 수 있는지를 구하는 식으로 했습니다.bfs를 이용했고, bfs의 로직 안에 현재 수빈이가 동생보다 빨리 방문했을 때를 처리하는 로직을 넣었는데요. 강의에서 설명해주셨던 것처럼, +1 -1을 하면 제자리로 돌아올 수 있고, 이때 2초가 걸리기 때문에 시간차가 반드시 짝수여야만 수빈이가 동생을 찾을 수 있기 때문에,동생이 오는 시간 - 현재 수빈이가 오는 데 걸린 시간 이 짝수 일때, 동생이 오는 시간을 최소값으로 넣는 로직을 넣었습니다.그런데 답이 틀렸다고 나와서, 1)왜그런건지? 2)visited배열을 2차원으로 한거랑 무슨 차이가 있는지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
동생이 도착한 시간 - 수빈이가 도착한 시간 이 짝수일 때
http://boj.kr/c287b933ed0442d4ba02329f7601b61b선생님, 안녕하세요.동생의 위치를 미리 구해놓고, 수빈이가 그 위치에 갈 수 있는지를 구하는 식으로 했습니다.bfs를 이용했고, bfs의 로직 안에 현재 수빈이가 동생보다 빨리 방문했을 때를 처리하는 로직을 넣었는데요. 강의에서 설명해주셨던 것처럼, +1 -1을 하면 제자리로 돌아올 수 있고, 이때 2초가 걸리기 때문에 시간차가 반드시 짝수여야만 수빈이가 동생을 찾을 수 있기 때문에,동생이 오는 시간 - 현재 수빈이가 오는 데 걸린 시간 이 짝수 일때, 동생이 오는 시간을 최소값으로 넣는 로직을 넣었습니다.그런데 답이 틀렸다고 나와서, 1)왜그런건지? 2)visited배열을 2차원으로 한거랑 무슨 차이가 있는지 궁금합니다.