묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Next.js 시작하기(feat. 지도 서비스 개발)
a tag 질문 !
안녕하세요 !강의 중에 a tag를 감싸고 있는 컴포넌트를 만들경우라고 하셨는데 useRouter나 Link를 쓰게 되면 a tag를 굳이 안써도 되지 않을까 생각하는데 그럼에도 불구하고 a tag를 쓰는 경우가 있을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿 필터 -인증 체크 강의 중 로그인 오류 시 리다이렉트 url
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 수업 중 궁금점이 생겨 질문 남깁니다. 필터로 확인하여 로그인중이 아닐시 로그인 화면으로 넘어왔습니다.이후 여기서 로그인 에러가 났을 경우 @PostMapping("/login") public String loginV4(@Validated @ModelAttribute LoginForm form, BindingResult bindingResult, @RequestParam(defaultValue = "/") String redirectURL, HttpServletRequest request) { if (bindingResult.hasErrors()) { return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(), form.getPassword()); if (loginMember == null) { bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다."); return "login/loginForm"; } //로그인 성공 처리 //세션이 있으면 있는 세션 반환, 없으면 신규 세션을 생성 HttpSession session = request.getSession(); //세션에 로그인 회원 정보 보관 session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember); return "redirect:" + redirectURL; } 맨 윗줄에 bindingResult.hasErrors()로 인해 "login/loginForm"으로 이동되는데 이때 redirectURL은 유지가 됩니다. 이 이유를 오류가 있을 시 url을 새로 받는 것이 아니라 또는 redirect가 아닌 return으로 view만 바꿔주었기에 그런 것이라고 이해하는게 맞을까요?
-
미해결ChatGPT 실무에 100% 활용하기
이버 쇼핑 최저가 검색 코드를 ChatGpt에게 문의하는 부분
네이버 쇼핑 최저가 검색 코드를 ChatGpt에게 문의하는 부분에서 강사님과 다른 코드를 작성해 답변해 줍니다.import requestsfrom bs4 import BeautifulSoup# Naver 쇼핑에서 특정 제품의 최저 가격 정보를 검색하려면 Python을 사용할 수 있습니다.# 아래는 시작하기 위한 Python 코드 예제입니다.# 특정 제품에 대한 Naver 쇼핑 검색 결과 페이지의 URL을 지정합니다.product_url = 'https://search.shopping.naver.com/search/all?query=여기에_제품_이름_입력'# URL로 GET 요청을 보냅니다.response = requests.get(product_url)# 요청이 성공했는지 확인합니다 (상태 코드 200).if response.status_code == 200: # 페이지의 HTML 내용을 파싱합니다. soup = BeautifulSoup(response.text, 'html.parser') # 제품 이름 및 가격과 같은 제품 정보를 포함하는 요소를 찾습니다. product_elements = soup.find_all('div', class_='basicList_info_area__17Xyo') if product_elements: # 최저 가격과 제품 이름을 추적하는 변수를 초기화합니다. lowest_price = None product_name = None for product in product_elements: # 제품 이름과 가격을 추출합니다. name = product.find('a', class_='basicList_link__1MaTN').text.strip() price = product.find('span', class_='price_num__2WUXn').text.strip() # 가격을 정수로 변환합니다 (화폐 기호, 쉼표 등을 제거합니다). price = int(price.replace('원', '').replace(',', '')) # 최저 가격을 찾았거나 또는 최저 가격이 아직 없는 경우 업데이트합니다. if lowest_price is None or price < lowest_price: lowest_price = price product_name = name if lowest_price is not None and product_name is not None: # 최저 가격과 제품 이름을 출력합니다. print(f"'{product_name}' 제품의 최저 가격은 {lowest_price} 원입니다.") else: print("제품 정보를 찾을 수 없습니다.") else: print("페이지에서 제품 정보를 찾을 수 없습니다.")else: print("웹페이지 검색에 실패했습니다. URL 또는 네트워크 연결을 확인하세요.")이런 코드를 gpt가 제공하는데 어떻게 해야 강사님과 같은 코드가 출력 될까요?
-
미해결React 기반 Gatsby로 기술 블로그 개발하기
프로젝트 명 무엇으로 작성하였나요?
npx gatsby-cli new "[프로젝트]" 프로젝트 무엇으로 작성하셨나요?
-
미해결스프링 핵심 원리 - 기본편
스프링 빈 등록과 의존관계 설정
안녕하세요. 스프링 컨테이너에 스프링 빈이 등록되는 과정이 두 단계로 이루어진다고 설명해주셨는데요. 어떤 방식으로 이루어 지는지 궁금합니다. memberService : 덤프객체1orderService : 덤프객체2memberRepository : 덤프객체3discountPolicy : 덤프객체 4스프링 빈 등록 단계 -> 스프링 빈 이름 : 의미없는 객체 스프링 빈 의존관계 주입 단계 -> 객체 생성 시 주입 받을 필요가 없는 기본 생성자 객체부터 생성한다. 그 이후 생성자 주입이 필요한 객체들을 생성한다. memberService : new MemberServiceImpl( ??? )orderService : new OrderServiceImpl( ???, ??? )memberRepository : new MemoryMemberRepository()discountPolicy : RateDiscountPolicy()스프링 빈 등록 단계 -> 스프링 빈 이름 : 객체 생성. 하지만 생성자 주입을 받아야하는 객체들은 스프링의 어떠한 조치로 인해 ???인자로 채워 넣음으로 의존관계 설정 유보스프링 빈 의존관계 주입 단계 -> 생성자 주입이 필요한 객체들에 맞게 의존관계 주입 memberService : new MemberServiceImpl (MemberRepsotory)orderService : new OrderServiceImpl(MemberRepository, DiscountPolicy)memberRepository : new MemoryMemberRepository();discountPolicy : new RateDiscountPolicy();스프링 빈 등록 단계 -> 스프링 빈 이름 : 순서대로 메소드 호출하며, 생성자 주입이 필요하다면 해당 객체부터 생성 후 주입 받아서 객체 생성 전 이 세가지가 떠오르는데 어떤 방법으로 나뉘어 실행되는지 도움 부탁드립니다. 감사합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:field 에서 id 가 override 되지 않는 문제
강의 내용을 조금 테스트 하던 중name 과 value 는 input tag 에 미리 정의되어있든 정의되어있지 않든 th:field 에서 의도한 대로 나오지만id 는 미리 정의되어있는경우 field 가 override 하고 있지 않아보입니다. 원래 이런건가요 아님 새로 바뀐건가요?버전은 spring boot, spring-boot-starter-tymeleaf, spring-boot-starter-web 전부 2.4.4 이고 내용대로 미리 전달받은 프로젝트로 실행했습니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
백트레킹 (냅색) 코드!
재귀 안에 answer 변수를 사용하려면 global answer 로 지정 해줘야 하지 않나요?
-
해결됨MS 문서/메일 보안 - AIP (Azure Information Protection)
MIP 적용을 위한 라이선스 업그레이드 방법
강의를 잘 들었습니다.실제 회사에 MS 365 standard 라이선스가 200여개 있는데MIP를 적용하려면 모든 라이선스를 MS 365 business premium 으로 업그레이드를 해야 할까요?아니면 일부만 업그레이드를 해도 될까요? 다른 회사는 보통 어떤 식으로 운영하는지 궁금합니다.
-
미해결[아임웹] 나만의 비즈니스 랜딩페이지 만들기
오픈 채팅방 링크가 변경되었나요?
오픈 채팅방 링크가 변경되었나요?
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
의존성조언에서 UserService의 login은 Clock에 의존하는지 모르지 않나요?
의존성 조언 두번째 방법에서 문제점이 UserService.login은 여전히 의존성이 감춰져있다. 위와 마찬가지로 Userservice.login을 테스트할 때 clock에 의존하고 있는지 알 수 없다. 이거였는데 세번 째 방법도 UserService를 사용하는 메서드는 login(user)만 남겨서 user가 Clock에 의존하는지 모르지 않나요?아까 맥도날드 예제에서는 인터페이스를 사용하면 일을 시킨다고 설명하셨는데 이것도 인터페이스를 사용해서 일을 시키는거니 이렇게 구현하면 내부에서 clockHolder를 사용해도 외부에서 몰라도 되나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
동등성 동일성
안녕하세요, 강의 내용중 질문이 있어 질문 드립니다. PDF 13~14 쪽에 있는, MemberRepositoryTest 파일을 보면, Assertions.assertThat(findMember).isEqualTo(member); //JPA 엔티티 동일성 보 장이라고 나와 있습니다.해당 테스트를 통과 하는데 있어서는 문제가 없지만, 이는 정확히 말해서 동일성이 보장 된게 아니라, 동등성이 보장 되어야 하는거 아닌가요? 그리고 테스트 중간에 @Test @Transactional @Rollback(false) public void testMember(){ Member member = new Member(); member.setName("memberA"); memberRepository.save(member); em.flush(); em.clear(); Member findMember = memberRepository.findOne(member.getId()); Assertions.assertThat(findMember).isEqualTo(member); }이것과 같이 진행하면 false 가 나옵니다.Member.class 를 @Entity @Data @EqualsAndHashCode(onlyExplicitlyIncluded =true) public class Member { @Id @GeneratedValue @Column(name="member_id") @EqualsAndHashCode.Include private Long id; @NotEmpty //-->@valid로 체크 private String name; @Embedded //@Embadable.... private Address address; @JsonIgnore // 양방향 참조시에 한쪽에 해줘야함 그래서 연쇄 호출안함 @OneToMany(mappedBy = "member") //읽기만 가능 private List<Order> orders = new ArrayList<>(); } 이렇게 고치니까 통과가 되었습니다. 질문 정리 1) .isEqualsTo 는 동일성이 아닌 동등성 보장인가요?2) @Data를 사용했다고 해서, equals, hashCode가 정확하게 작동하지 않을때도 있나요?
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강 기간 연장 가능할까요..?
최근 다른 일과 공부를 하다보니 강의를 들을 시간이 없어서 미루다가 이제 하려니 기간이 얼마 안 남았네요.. 기간 연장 한번만 부탁드립니다..!
-
미해결홍정모의 따라하며 배우는 C++
seekg 질문입니다.
안녕하세요, 초반 seekg로 abcd.....z 저장된 txt읽는 코드를 동일하게 실행하였는데요,두번째 seekg 로 읽어올때 l 이 아닌 m을 읽어옵니다.원인이 무엇일까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-Q 1344 문제 질문입니다!
7-Q 1344 문제 질문입니다!#include <bits/stdc++.h> using namespace std; double A,B,ret; // 1~18까지 소수가 아닌 수로 배열 선언 int arr[11]={1,4,6,8,9,10,12,14,15,16,18}; int main() { cin >> A >> B; // 2차원 배열을 통해 18 combination n을 구현 for (int i=0;i<11;i++){ for (int j=0;j<11;j++){ double A_com=1,B_com=1; double per=1,A_per=1,B_per=1; //A_com으로 A가 arr[i](소수가 아닌 수만큼) 번 득점했을 때의 경우의 수를 구함 //A_per은 arr[i]만큼 득점했을 확률, 18-arr[i]만큼 득점 못했을 확률을 곱함 for (int k=0;k<arr[i];k++){ A_com*=(18-k); A_com/=(k+1); A_per*=(A/100); } for (int k=0;k<18-arr[i];k++){ A_per*=(100-A)/100; } //B도 마찬가지 for (int k=0;k<arr[j];k++){ B_com*=(18-k); B_com/=(k+1); B_per*=(B/100); } for (int k=0;k<18-arr[j];k++){ B_per*=(100-B)/100; } //A_com*A_per은 A가 arr[i]만큼 득점할 확률 //B_com*B_per은 B가 arr[j]만큼 득점할 확률 //모두 곱하면 A와 B 모두 소수가 아닌 숫자만큼 득점할 확률 per*=A_com*A_per*B_com*B_per; ret+=per; } } // 1-(A와 B모두 소수가 아닌 숫자만큼 득점할 확률)=적어도 한 팀이 소수로 득점할 확룰 printf("%f",1-ret); }문제 해설과는 다르게 조합을 이용해서 풀었는데 결과가 맞지 않습니다. 예제 1번과 2번은 맞는데 어떤 부분이 잘못되었는지 알려주시면 감사하겠습니다 ㅠㅠ
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
어떻게 저것만 작성했는데 동적으로 삭제가 되는지 이해가 안가요
'북마크 동적으로 삭제'강의에서bookmarkIdList.remove(key)만 추가했더니 ui상에서 지워지는지 이해가 안갑니다! if(bookmarkIdList.contains(key)) { contentRvItemBinding.bookmarkArea.setImageResource(R.drawable.bookmark_color) } else { contentRvItemBinding.bookmarkArea.setImageResource(R.drawable.bookmark_white) } // setOnClickListener가 여기 아래에 있고 색깔 칠하는 로직은 그위에 있음 contentRvItemBinding.bookmarkArea.setOnClickListener { if(bookmarkIdList.contains(key)) { bookmarkIdList.remove(key) // 북마크 동적으로 삭제하는코드 위의 코드에서 bookmarkIdList에 따라 색깔을 칠할지 안칠할지 결정하는 코드는 아래 코드이고 if(bookmarkIdList.contains(key)) { contentRvItemBinding.bookmarkArea.setImageResource(R.drawable.bookmark_color) } else { contentRvItemBinding.bookmarkArea.setImageResource(R.drawable.bookmark_white) } setOnClickListener 밖에 있습니다. 근데 북마크버튼을 클릭을 하면 저코드가 실행되어서 색깔을 칠해주거나 없애줍니다.제 생각으로는 북마크를 클릭하면 setOnClickListener안에서만 코드가 돌아야되는거 아닌가 생각했는데 왜 밖에 있는 코드가 실행되는지 이해가 안갑니다!!
-
미해결[게임 프로그래머 도약반] DirectX11 입문
RenderTarget Group 적용
DX12에서 썼던 방법으로 RenderTargetGroup을 적용하는데SwapChain 옵션 중 SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; 로 주니까SwapChain의 버퍼 카운트를 2로 했는데도SwapChain->GetBuffer(index, IID_PPV_ARGS(&resource)); 이 부분에서 index가 0이 아니면 resource를 반환해주지를 않는데, DX11에서는 DX12때 처럼 SwapChain의 BackBufferIndex를 이용해서 수동으로 관리하는게 불가능한가요
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
문의 드립니다.
# 랜덤 패턴 가지고오기 def get_random_pattern(isMobile=True): ret_pattern = [] if isMobile: with open("./mobile_scroll.txt","r") as f : while True: line = f.readline() if not line: break ret_pattern.append(line.rstrip()) selected_pattern = random.choice(ret_pattern) _,sx,sy,delay = selected_pattern.split("#") if abs(int(sy)) < 15 or float(delay) < 0.25: #너무 적은 값 return get_random_pattern(isMobile) return int(sx), int(sy), float(delay) else: # PC 패턴 with open("./pc_scroll.txt", "r") as f: while True: line = f.readline() if not line: break ret_pattern.append(line.rstrip()) pc_scroll_px = 114 # 100, 114 selected_pattern = random.choice(ret_pattern) _,dx,dy,delay = selected_pattern.split("#") if float(delay) < 0.25: return get_random_pattern(isMobile) return int(dx),int(pc_scroll_px), float(delay) 질문1. 위 패턴에서 pc_scroll_px 를 114로 하는 이유를 잘 모르겠습니다. 저는 모바일 말고 pc로 작업을 해보려고하는데 114씩만 올라갔다 내려갔다 스크롤되는데 전혀 사람처럼 보이지 않고 부자연스러워 보입니다. ㅜ def random_move(driver,direction="down",count=1,isMobile=True): for _ in range(count): # [O] 사람패턴 ~ 사람이 얼마나 스크롤을 움직였는지 # randY = random.randrange(200,300) randX,randY,_delay = get_random_pattern(isMobile) sx = random.randrange(100,270) sy = random.randrange(250,500) if direction == "up": randY = -randY if random.random() > 0.9 : #10%의 확률로 randY = -randY print(f"Scroll 한다 {randY}") ActionChains(driver).scroll_by_amount(0, randY).perform() # [O] 사람패턴 ~ 스크롤 하는 텀 prob = random.random() if prob < 0.5: dt = random.uniform(_delay*0.1, _delay*0.3) elif prob < 0.8: dt = random.uniform(_delay*0.2, _delay*0.6) else: dt = random.uniform(_delay*0.5, _delay*1.2) time.sleep(dt) time.sleep( 0.5) 질문2. 매개변수로 count를 받고있는데 이 부분을 넣은 이유를 정확하게 모르겠네요. ㅜ그리고 sx = random.randrange(100,270)sy = random.randrange(250,500)이렇게 받아둔 변수를 어떻게 활용하는지 강사님께서는 어떻게 사용하는지 궁금합니다.
-
해결됨하루만에 배우는 aws 서버리스
Mysql db 질문입니다.
다음과 같은 양식으로 남겨주세요.질문을 한 배경 : 강의 초반부 'AWS 서버리스 서비스 개요'에서 DynamoDB Table를 보고 질문합니다.질문내용 : 안녕하세요. Java Spring으로 공부하고 이번에 개인적으로 준비한 프로젝트는 Mysql 이용하여 서버 배포만 남은 상태인 취업 준비생입니다. AWS에 대해 초보자이고 유튜브에서 보고 강의 결제를 했습니다. 초반부에 'AWS 서버리스 서비스 개요'부분에서 DynamoDB를 사용한다고 하셨는데요. 이미 Mysql로 사용해서 프로젝트를 만들었고, AWS 서버리스를 이용해서 하고 싶은데 DynamoDB대신에 Mysql로 써서 해도 될까요?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
import error 질문
터미널에 socket 설치 후 부터 모든 import에 저 에러가 뜨는데 이유를 모르겠습니다Parsing error: DeprecationError: 'originalKeywordKind' has been deprecated since v5.0.0 and can no longer be used. Use 'identifierToKeywordKind(identifier)' instead
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
파이썬 코루틴활용 영상 질문
코드를 실행해보니까 naver쪽 데이터만 불러오는 것같습니다. 속도도 너무 빠르고 뭐가 문제일까요? 그리고 할때마다 시간이 다르네요 ㅠㅠ aiohttp 버전도 3.7.3으로 설치했습니다