inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

통합 테스트 작성 방식에 대해 궁금한 점이 있습니다

해결됨

실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트

테스트는 내부 구현에 의존하지 않고 사용자 입장에서 작성하는게 좋다고 이해했습니다. 그런데 ProductFilter 컴포넌트의 통합테스트를 작성하시면서 "상품명을 수정하는 경우 setTitle 액션이 호출된다" , "최소 가격 또는 최대 가격을 수정하면 setMinPrice와 setMaxPrice 액션이 호출된다" 와 같이 사용자가 값을 변경할 때 특정 액션 함수가 호출되는지를 검증하셨는데, 이건 내부 구현에 의존적인 테스트라고 볼 수 없을까요? 추후 Store 내부 구조가 바뀌거나 아예 Store를 사용하지 않는 식으로 구현 방법이 바뀌더라도 사용자 입장에선 달라지는게 없으니 테스트가 실패하지 않는게 좋은 테스트가 아닌지 궁금합니다. 2. api를 호출하는 커스텀 훅을 사용하는 컴포넌트를 테스트하실 때 msw를 이용해 해당 api의 응답을 모킹하셨는데, 커스텀 훅 자체를 모킹해서 훅이 반환하는 값을 원하는대로 지정하는 것도 가능할 것 같습니다. 이렇게 api 대신 훅을 모킹하여 테스트하는 것에 대해 어떻게 생각하시는지 궁금합니다.

  • javascript
  • react
  • 소프트웨어-테스트
  • vitest
BB Dev 댓글 2 좋아요 0 조회수 291

DeadLock 테스트를 해봤지만, 정상작동?

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

visual studio 2022로 작업하고 있습니다. Interlocked(9강), Lock(10강), DeadLock(11강)에서 디버깅을 하면서 무한루프 또는 DeadLock(11강)에 디버깅이 안되는 것을 따라해보고 있었습니다. 이전 컴파일러 최적화 강의(6강)를 따라하면서 Debug모드를 relase로 할 때 visual studio에서 3가지의 선택사항이 나왔었습니다. 취소해도 다시떠서 디버깅을위해 내꺼를 제외하고? 를 선택했었습니다.(항목이 기억이 나지 않네요.. 뭐라고 검색해야할지도 모르겠고 프로젝트를 새롭게 만들어도 해당사항은 나오지 않았습니다..) 그러고 나서 영상처럼 이부분이 문제입니다 하는 부분들이 저는 이상이 없더라고요 여기서 중단점 잡아도 안잡히는 문제가 있다고 합니다. 그래서 WaitAll에서 스레드를 찾고 문제점을 찾으셨지만 제가 따라할 때는 중단점으로 넘어왔습니다. 제 생각에는 시간이 지나면서 C#이 업데이트 됐거나, 2019가 아닌 2022로 해서 해당 문제가 안생기는 걸까요? 이것 뿐만 아니라 이전꺼에서도 나왔는데 크게 문제될건 없지만 답답함에 질문드려봅니다.

  • C#
  • unity
  • 네트워크
전하늘 댓글 1 좋아요 0 조회수 152

11분 6초 Array.Copy 질문

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Array.Copy(Encoding.Unicode.GetBytes( this.name ), 0 , segment.Array, count, nameLen); 여기서 count가 아니라 segment.Offset + count가 되야 하는거 아닌가요?

  • C#
  • unity
  • 네트워크
명성 댓글 2 좋아요 0 조회수 168

섹션 4 리액트와 API서버 통신 조회기능 구현 화면 차이 문의 건

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요. 질문이 있습니다. 섹션 4 리액트와 API서버 통신 에서 조회기능 구현을 실행하였습니다. 강사님 화면과 달리 저의 화면은 아래와 같이 나옵니다. 위 부분중 차이 나는 부분을 아래 다시 캡춰했습니다. 현재 스프링 부트는 아래와 같이 실행되고 있습니다. 조금 확대해서 다시 아래 다시 캡춰했습니다. 강사님은 한 화면에서 두개가 나오는 거 같은데요. 제가 어떤걸 수정해야 하는지 알고 싶습니다. 위 섹션 4 리액트와 API서버 통신 에서 조회기능 구현에서 최초 연결 확인하는 부분까지 코드는 강의에 나온데로 진행하였습니다. 부탁드립니다. 감사합니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
사랑2 댓글 4 좋아요 0 조회수 273

new Span<byte>에서 3번째 인자(length) 질문

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

success &= BitConverter.TryWriteBytes(new Span<byte>(s.Array, s.Offset + size, s.Count - count) 이런 코드가 있는 s.Count - count가 아니라 그냥 type의 사이즈만큼 주면 안되는건가요? 우리가 필요한 부분은 딱 사이즈만큼 이라고 생각해서 그렇습니다! s.Count - count 는 4094? 이런식으로 나오는 굳이 그만큼 받아와야 하는지 궁금합니다.

  • C#
  • unity
  • 네트워크
명성 댓글 1 좋아요 0 조회수 145

Render Texture 관련 문의

미해결

[Unity] 함께 만들어가는 방치형 게임 개발

안녕하세요. 강의 잘 수강하고 있습니다. 다름이 아니라 Render Texture에서 RawImage에 Texture #Heroes 를 넣었을 때 모양이 저와는 다르게 나와서 문의드립니다. 강사님과 동일한 값으로 카메라 및 Circle 컴포넌트 값을 입력해도 저는 아래와 같은 모습이 나옵니다. 반면 영상에서는 Circle이 더 작게 표시되는데, 혹시 이유가 궁금해서 질문 드립니다. 감사합니다.

  • C#
  • unity
  • firebase
  • 게임기획
  • json-parsing
JOONBUM 댓글 2 좋아요 0 조회수 185

pub/sub 연결하기 문의

해결됨

Azure Native로 나만의 GPT 만들기

안녕하세요. 프론트와 pub/sub 연결하는 부분 강의 듣다가 에러가 생겨 질문 드립니다ㅠ 이렇게 favicon.ico 에러가 뜨면서 연결이 안되는데 어떻게 해결해야 할까요....?

  • javascript
  • python
  • mongodb
  • azure
  • FastAPI
황윤주 댓글 2 좋아요 1 조회수 306

네이버 쇼핑 크롤링 1 코드 사용 시, 접속 제한됐을 때의 해결 방법이 궁금합니다.

미해결

실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용

import requests from bs4 import BeautifulSoup keyword = input("검색할 상품을 입력하세요 : ") url = f"https://search.shopping.naver.com/search/all?&query={keyword}" user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" headers = {"User-Agent" : user_agent} req = requests.get(url, headers=headers) html = req.text soup = BeautifulSoup(html, "html.parser") print(soup) 위 코드 사용 시 아래와 같은 결과가 나타납니다. keyword = input("검색할 상품을 입력하세요 : ") url = f"https://search.shopping.naver.com/search/all?&query={keyword}" user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" headers = {"User-Agent" : user_agent} req = requests.get(url, headers=headers) # req = requests.get(url, headers=headers) # print(req.request.headers) html = req.text soup = BeautifulSoup(html, "html.parser") print(soup) <title>네이버쇼핑</title> </head> <body> <div class="content_error"> <div class="head">쇼핑 서비스 접속이 일시적으로 제한되었습니다. </div> <div class="desc"> 네이버는 안정적인 쇼핑 서비스 제공하고자 시스템을 통해 아래와 같은 비정상적인 접근이 감지될 경우 해당 네트워크의 접속을 일시적으로 제한하고 있습니다. </div> <ul class="reason"> <li>상품 구매, 탐색과 무관한 외부 이벤트를 통한 접속</li> <li>짧은 시간 내에 너무 많은 요청이 이루어진 IP</li> <li>VPN을 사용하여 접속한 IP</li> <li>특정 확장 프로그램 이용 시</li> </ul> <div class="footer">위와 같은 접근이 아님에도 접속이 제한된 경우,네이버앱을 업데이트 또는 <a href="https://help.naver.com/service/30016/category/5278" target="_blank"> 원클릭 진단</a>을 부탁드립니다.<br/> 해당 방법을 통해서도 접속이 불가한 경우 <a href="https://help.pay.naver.com/mail/form.help?alias=shopping_stop" target="_blank">네 이버쇼핑 고객센터</a>로 문의 부탁드립니다.</div> </div> </body> </html> 이런 상황에서 대안이 있을까요?

  • python
  • 웹-크롤링
  • selenium
  • beautifulsoup
댓글 1 좋아요 0 조회수 3359

rtm.start() 오류

미해결

날씨를 알려주는 나만의 SlackBot 만들기 (파이썬)

아래와 똑같은 질문입니다. 19번 라인 trm.start부분에서 계속 오류가 납니다. 아래 질문의 답변을 통해 Classic Slack App으로 생성하지 않아(현재 불가능) 발생한 것으로 파악하였습니다. 강의 업데이트 공지 상으로 6월 중으로 완료될 예정이라고 하셨는데 아직 강의가 업데이트 되지 않은 것 같아 질문 드립니다. 업데이트 된 강의는 언제 올라올 예정인가요? 오류 해결 방법을 알고 싶습니다.

  • python
  • slack
  • github-actions
  • playwright
  • httpx
dudzw623 댓글 1 좋아요 0 조회수 132

다익스트라 코드 중에 궁금한 것이 있습니다.

해결됨

코딩테스트 [ ALL IN ONE ]

def dijkstra(graph, start, final): costs = {} # 방문 여부 pq = [] # 우선순위 큐 heapq.heappush(pq, (0, start)) # 시작 노드 추가 while pq: cur_cost, cur_v = heapq.heappop(pq) if cur_v == final: return cur_cost if cur_v not in costs: # 방문여부 확인 costs[cur_v] = cur_cost # 인접 노드 탐색하면서 비용 업데이트 for next_v, cost in graph[cur_v]: # 현재노드와 연결된 인접노드와 그 비용 next_cost = cur_cost + cost heapq.heappush(pq, (next_cost, next_v)) return costs[final] 정말 사소한건데요, while pq: 내용 중 for cost, next_v in graph[cur_v]: 를 for next_v, cost in graph[cur_v]: 로 고쳐도 되는지 묻고 싶습니다. 우선순위 큐는 비용을 기준으로 하니까 (E,V)가 맞는거 같은데요. 그래프가 G=(V,E) 수식을 따르다 보니까 그래프로 초기화할 때도 ("A", 3)과 같이 노드와 비용 순서대로 하잖아요? 그래서 이러한 논리를 for문에도 적용하면 훨씬 이해하기 쉽지 않을까 개인적으로 생각이 듭니다. (아! 이건 제 개인적인 생각이니 코드를 고쳐달라고 요구를 하는 건 절대 아닙니다 😅 )

  • python
  • 코딩-테스트
  • 알고리즘
Ambition 댓글 1 좋아요 1 조회수 166

보스턴 집값 강의에서 csv 파일이 없습니다.

미해결

파이썬으로 시작하는 머신러닝+딥러닝(sklearn을 이용한 머신러닝부터 TensorFlow, Keras를 이용한 딥러닝 개발까지)

안녕하세요 훌룡한 강의 잘 수강하고 있습니다. 보스턴 집값 예측 강의에서 csv 파일이 없습니다. 말씀 주신 링크에서도 찾을 수가 없습니다ㅠㅠ jm90.hong@gmail.com 제 메일이긴 하는데 csv 파일 보내 주셔도 됩니다 감사합니다^^

  • python
  • 머신러닝
  • 딥러닝
  • keras
  • sklearn
홍정민 댓글 3 좋아요 0 조회수 289

filter, rename axis 기본값

해결됨

5분빨리 퇴근하자! 파이썬 데이터 분석, 시각화, 웹 대시보드 제작하기

filter의 경우에는 axis 기본값이 1이 설명대로 맞는거 같은데, rename 메서드 설명에도 axis 기본값이 1로 작성되어 있습니다. 하지만 실제로 수행해보니 rename의 경우에는 axis의 기본값이 0인것 같은데 제가 잘못이해한걸까요?

  • python
  • pandas
  • seaborn
  • plotly
  • matplotlib
  • data-visualization
  • streamlit
이동훈 댓글 1 좋아요 0 조회수 169

UI 연동방식에 대해서 질문드립니다.

미해결

[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작

하나의 예시를 들자면 HP를 UI에 표시할때 저는 Playercontroller에서 프로퍼티로 set를 해주었는데 강사님께서 올려주신 프로젝트를 보니 action을 통해서 해당 UI 스크립트에서 처리하신 것 같더라구요.. 제가 한 방식으로 구현을 해도 되는지 궁금해서 질문을 드립니다... 강사님께서 하신 방식은 어디서 구독 신청을 해줬는지 찾기가 너무 어렵더라구요 ㅠㅠ

  • C#
  • unity
  • object-pooling
황보민 댓글 1 좋아요 0 조회수 197

에러만 나와요

미해결

처음 만난 리액트(React)

깃 복붙도 해봤는데 계속 저래요... ㅜㅜ

  • HTML/CSS
  • javascript
  • react
진영 댓글 2 좋아요 1 조회수 213

블록 상하로 데칼코마니가 되고 있습니다.

미해결

따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 02

게임에서 블록을 배치 하면 상하가 반전 되어 컬러가 찍히네요; 어디서 잘못 되었는지 찾기가 힘듭니다 ㅠ,.ㅠ. 블록을 아래쪽에 배치 하면 포그라운드 컬러가 뒤집혀서 데칼 코마니가 되고 있어요; 어느 부분을 봐야 할까요

  • C#
  • unity
ClarkRose 댓글 2 좋아요 0 조회수 192

전일비 상승,하락때문에 int화를 못하고 있는데

미해결

내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)

5.4 영상보면 전일비는 숫자로만되어있네요 영상보면 전일비는 숫자로만되어있네요 제 코드는 아래와 같고 어떻게 상승,하락을 없애는지 모르겠습니다. import requests import bs4 import re import time total_data_list = [] # 추출하고자 하는 데이터 리스트를 모아놓을 곳 page_number = 1 pre_data_time_set = set() # 이전 페이지에서 추출한 데이터를 모아놓는 곳 cuz 중복되면 그만두게 하기 위해 while True: # 특정 조건이 만족하면 break로 루프 끝냄 # 페이지 번호를 포함한 url 생성 - {}.format을 사용해서 동적으로 사용 url2 = "https://finance.naver.com/item/sise_day.naver?code=453450&page={}".format(page_number) # 해당 url로 요청 res2 = requests.get(url=url2, headers=headers2) # 요청한 정보를 .text로 만든 뒤 파싱 soup3 = bs4.BeautifulSoup(res2.text, "lxml") tr_eli = soup3.select("table.type2 > tr[onmouseover='mouseOver(this)']") current_time_set = set() # 현재 페이지의 날짜 데이터를 저장할 set for a in tr_eli: # tr_eli라는 ResultSet에서 하나씩 추출 td_eli = a.select("td") # a.select("td") = 위에서 추출한 것에서 'td' 태그를 포함한 것을 추츨하고 ResultSet으로 반환 # a는 태그지만 td_eli는 ResultSet이다 : data_list = [] # 추출한 데이터를 담을 리스트 for i, td_real2 in enumerate(td_eli): # 추출한 ResultSet(열)들과 인덱스를 같이 순회 clean_data = re.sub(r'\s+', " ", td_real2.text.replace(",","")) # 숫자가 아닌 모든 문자를 제거 if clean_data == " ": break if i == 0: # 첫 번째 인덱스는 무조건 날짜임 current_time_set.add(clean_data) data_list.append(clean_data) if len(data_list) > 0: # data_list가 빈칸이 아닐경우에 total에다가 추가 total_data_list.append(data_list) else: # eliment를 가져오는거 자체를 그만두게 하는 것 break # 이전에 수집한 날짜와 현재 페이지의 날짜가 동일하면 루프 중단 if pre_data_time_set == current_time_set: print("끝났다", page_number) break else: pre_data_time_set = current_time_set # 현재 페이지의 날짜로 업데이트 time.sleep(3) # or random.random() * 2 page_number += 1 # 페이지 번호를 1씩 증가 # 결과 출력 for data in total_data_list: # total_data_list는 리스트 형식이라 리스트안에 리스트를 빼내는 작업하는 것 print(data) # 중복되는 내용 없애는거는 나중에 DataFrame 사용하면 편한데 로직내에서도 가능하긴 하다.

  • python
  • 웹-크롤링
김은준 댓글 1 좋아요 0 조회수 150

강의 리뉴얼 언제될까요??

미해결

[2025] 비전공자도 가능한 React Native 앱 개발 마스터클래스

학습에 관련된 질문만 해주세요. 질문은 상세하게 무엇이 궁금한지 작성해주세요. 질문은 '마크다운'을 사용하여 할 수 있습니다. 유사한 질문이 있었는지 살펴보고 질문 해주세요. 부담갖지 말고 강의에서 궁금하신 점 전부 질문해주세요 :)

  • javascript
  • react
  • node.js
  • react-native
  • typescript
dlawnsdlekd 댓글 2 좋아요 0 조회수 283

AccessDeniedHandler가 작동하지않습니다

미해결

코드로 배우는 React 19 with 스프링부트 API서버

@Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { try { 생략... SecurityContextHolder.getContextHolderStrategy().getContext().setAuthentication(token); filterChain.doFilter(request, response); } catch (Exception e) { log.info("---------------JWT ERROR!------------"); log.info(e); log.info(e.getMessage()); ObjectMapper mapper = new ObjectMapper(); String jsonStr = mapper.writeValueAsString(Map.of("error", "ERROR_ACCESS_TOKEN")); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); writer.println(jsonStr); writer.close(); } } 강의의 JWT와 @PreAuthorize 이용하기 파트 후반부에 강의처럼 USER권한만 가진 사용자로 ADMIN권한이 필요한 메소드에 접근하니 포스트맨에서 AccessDenied exception이 뜨지않고 catch (Exception e)가 예외를 잡아버려서 { "error": "ERROR_ACCESS_TOKEN" } 결과가 이렇게 나옵니다 이미 AccessDenied 핸들러도 시큐리티에 등록 시킨후 입니다 ADMIN권한을 가진 사용자 토큰으로 요청을 보내면 원하는 데이터도 잘 나옵니다 catch로 잡아서 예외를 던질까 시도해봤는데 이유는 모르겠지만 Exception에서만 예외가 잡힙니다ㅠ 그래서 여러가지 해결책을 알아봤는데 첫번째 catch (RuntimeException e) { log.info("---------------JWT ERROR!------------"); log.info(e); log.info(e.getMessage()); ObjectMapper mapper = new ObjectMapper(); String jsonStr = mapper.writeValueAsString(Map.of("error", "ERROR_ACCESS_TOKEN")); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); writer.println(jsonStr); writer.close(); } 이렇게 RuntimeException으로하면 { "error": "ERROR_ACCESSDENIED" } AccessDenied 핸들러가 잘 작동하구요 두번째 SecurityContextHolder.getContextHolderStrategy().getContext().setAuthentication(token); } catch (Exception e) { log.info("---------------JWT ERROR!------------"); log.info(e); log.info(e.getMessage()); ObjectMapper mapper = new ObjectMapper(); String jsonStr = mapper.writeValueAsString(Map.of("error", "ERROR_ACCESS_TOKEN")); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); writer.println(jsonStr); writer.close(); } filterChain.doFilter(request, response); doFilter를 try catch 밖에 두어도 AccessDenied 핸들러가 잘 작동합니다 세번째 @ExceptionHandler(AccessDeniedException.class) public ResponseEntity<?> notAuthorized(AccessDeniedException e) { return ResponseEntity.status(HttpStatus.FORBIDDEN).body(e.getMessage()); } RestControllerAdvice로 하면 핸들러가 작동안하긴해도 예외처리가 가능했습니다 근데 문제는 왜 원래코드에서 영상처럼 작동을 안하는지 이유를 모르겠습니다 제가 빠트린부분이 있을까요? 스프링부트 버전도 똑같이 맞춰보기도 했습니다

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
고래돌 댓글 1 좋아요 0 조회수 252

반복문 강의

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

반복문강의 20:40초 for 과 while 반복문 풀이를 할때 for문은 i=5까지 반복한다하셨는데요. 어떻게 출력값이 짝수기준으로 while 출력물이 나오는지 이해가 안갑니다. i=1일때 for문으로 현재숫자:1 출력은 이해가 가구요. 그다음 while로 넘어갔는데 조건식이 false여서 다시 for문으로 돌아오는 것인가요? 왜 돌아가는지 이해가 안가서요. 그다음 2일땐 while 조건식이 True 여서 출력되고break로 빠져나오고 다시 for문으로 돌아가는건가요.

  • python
  • java
  • c
  • 정보처리기사
ghkd1118 댓글 1 좋아요 0 조회수 152

Destroy() 지연 파괴에 관하여

미해결

[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템

QuestSystem구현 강의에서 12:51쯤에 Destroy(quest, Time.deltaTime)을 사용했는데 바로 파괴해도 될 것 같은데 한 프레임을 쉬는 이유가 있나요? 즉시 파괴할 경우 이벤트나 다른 참조하는 곳에서 error가 날까봐 그런건가요?

  • unity
코리니 댓글 1 좋아요 0 조회수 156

인기 태그

인프런 TOP Writers

주간 인기글