묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ScannerWhileEx4 문제를 switch문으로 풀어보았습니다
결과는 동일하게 나오는데 정확한가요??
-
미해결UX/UI 시작하기 : Figma 입문 (Inflearn Original)
현재 일자 버전의 Inspect
2024-01-05 현재 일자 버전의 Inspect는 dev mode 토글로 전환하는 것인가요?
-
미해결스프링 핵심 원리 - 기본편
스프링 부트를 쓰지 않는 단위 테스트의 모범 사례가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요. 김영한님의 강의를 들으며 스프링 부트를 활용한 웹 어플리케이션 개발을 진행하고 있는데, 단위 테스트 코드 작성 시 모범 사례(?)가 있는지 궁금해 질문하게 되었습니다. 영한님의 강의에서 "좋은 테스트는 단위 테스트부터 출발하며, 단위 테스트를 잘 만드는 것이 좋은 테스트의 출발이다."라는 의미의 말을 기억하며 단위 테스트 코드를 다음과 같이 작성해보았습니다. AppConfig 코드@Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } // ... } 단위 테스트 대상 (서비스 컴포넌트)@Component public class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } // ... } 위 서비스 컴포넌트를 단위 테스트 하기 위해 아래와 같은 테스트 코드를 작성했습니다.class MemberServiceImplTest { @Test @DisplayName("사례1") void case1() { // @SpringBootTest를 사용하진 않지만 ApplicationContext를 사용 ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); // Bean 가져오기 MemberService memberService = ac.getBean(MemberService.class); MemberRepository memberRepository = ac.getBean("memberRepository", MemberRepository.class); // 가져온 것 확인하기 Assertions.assertThat(memberService).isInstanceOf(MemberService.class); Assertions.assertThat(memberRepository).isInstanceOf(MemberRepository.class); } @Test @DisplayName("사례2") void case2() { // 순수 자바로 가져오기 MemberRepository memberRepository = new MemoryMemberRepository(); MemberService memberService = new MemberServiceImpl(memberRepository); // 멤버 서비스 테스트 세팅 Member newMember = new Member(1L, "Test", Grade.VIP); memberService.join(newMember); // 멤버 서비스 테스트 검증 Member findMember = memberService.findMember(1L); Assertions.assertThat(newMember.getId()).isEqualTo(findMember.getId()); } }// 두 테스트 모두 테스트를 통과합니다.제가 궁금한 것은사례1은 과연 유닛 테스트라고 할 수 있을까요? @SpringBootTest를 붙여주지 않았을 뿐이지 스프링 컨테이너를 사용하기 때문에 유닛 테스트가 아닌 스프링 부트를 사용하는 통합 테스트라고 봐야하는거 아닌지 궁금합니다.사례2는 순수하게 자바로 인스턴스를 생성해 테스트를 진행합니다. 따라서 완전히 스프링에서 독립된 유닛 테스트라고 볼 수 있을 것 같습니다. 그런데 이 경우, 스프링의 도움을 받지 않기 때문에 의존성 주입을 직접 해줘야 한다는 점이 걸립니다. 따라서 사례2 처럼 직접 인스턴스를 선언하여 생성자로 주입해주는 것이 좋은 코드인지 의문이 듭니다.MemberServiceImpl 코드를 보면 생성자에 자동 의존 주입이 명시되어있는데, 만약 사례2처럼 생성할때 직접 수동으로 삽입한다면 @Autowired는 무시되는 것인가요?
-
해결됨Flutter로 SNS 앱 만들기
UI - State - Provider - Repository의 관계
안녕하세요. 기존에 제가 코딩할 때는 provider 파일에서 모든 동작, 상태변화를 한번에 처리했는데, 이 강좌에서는 이를 세분화하여 state, provider, repository 파일로 나눈 것 같습니다. 제가 초보여서 잘 모르겠지만, 플러터 업계에서는 이러한 작업패턴이 존재하는 것인가요? 정확한 명칭이 있나요? 제가 각 파일의 역할을 이해하지 못해서 구글링을 해봐도 원하는 답변을 찾을 수가 없어서 문의드립니다. 혹시 UI - State - Provider - Repository 관계를 개념적으로 설명해주시면 많은 도움 될 것 같습니다.
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
coroutine에 대한 질문
sequential하게 처리되어햐만 하는 경우가 아니면 무조건 coroutine을 적용하는게 좋은건지 궁금합니다!그리고 multithread/multiprocess도 언제 사용해야할지 판단하시는 기준이 있으실까요?
-
해결됨Next + React Query로 SNS 서비스 만들기
Login시 signIn 함수 리다리이렉트 오류
loginForm 컴포넌트에서 로그인시 '/' path로 보내려고 하는데 위와같은 오류가 뜨면서 진행대지 않습니다. baseUrl 찾아보니 default 값이 localhost:3000으로 설정된걸 확인했습니다. 진짜 이리저리 찾아봤는데도 해결방법을 찾아볼수없어서 문의드립니다.구글링한 방법중에 await 말고 then catch로 하면 댄다는글도 봐서 해봤는데도 오류가 그대로 나왔습니다.서버랑 문제없이 잘됩니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
StrCat질문 있습니다.
StrCat함수에 이렇게 작성했는데출력할 때 HelloW만 출력되고 끝나는데어디에 문제점이 있는지 파악하기 어려워서 여쭤봅니다.어셈블리어를 까도 j는 멀쩡히 증가하는데 뭐가 문제인지 모르겠습니다...
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
산술 연산 #2 연습 코딩 중 코드의 흐름이 좀 이상합니다
강의에 올려주신 대로 int a = 10; int b = ++a; 결과값이 11이 나오는걸로 이해했습니다 심심해서 추가적으로 작성을 좀 해보았는데 int a = 10; int b = ++a; // 10 + 1 == 11 int c = ++b; // 11 + 1 == 12 int d = ++c; // 12 + 1 == 13 Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); Console.WriteLine(d); 라는 식으로 코딩을 했을 때 주석처리 한게 제 예상 결과값 인데실제로는 a,b,c,d에 11, 12, 13, 13 이라는 숫자가 저장되서보여주더라고요 혹시 코드를 읽는 흐름이 제가 이해하는 것과 다른걸까요?
-
미해결
CAN 통신 제어기 구매
CANoe 실습을 하려고 하는데 제어기는 VECTOR사에서 구매할 수 있나요? J1939라는 것이 있던데 이것을 사면 되는건가요? 제어기 종류와 어디서 구매 가능한지 알려 주시면 감사하겠습니다.
-
미해결무차별 대입 공격(bruteforce attack) with Python
코드가 이상하게 실행돼요 ㅜㅜ
# 서버측 코드 server.py from http.server import HTTPServer, BaseHTTPRequestHandler import urllib.parse as parse class ServerHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('content-type', 'text/html') self.end_headers() self.wfile.write('<p>hello world</p>'.encode()) self.wfile.write(self.path.encode()) self.wfile.write('<br>'.encode()) if '?' in self.path: self.wfile.write(str(self.path.split('?')[1].split('&')).encode()) print(parse.parse_qsl(self.path.split('?')[1].encode())) print(dict(parse.parse_qsl(self.path.split('?')[1].encode()))) def do_POST(self): pass PORT = 8080 server = HTTPServer(('', PORT), ServerHandler) print(f"서버가 {PORT}으로 서비스 되고 있습니다.") server.serve_forever()# 브루트포스 코드 # import itertools import requests 로그인패킷 = { 'id': 'hojun', 'pw': '1234', } address = requests.get('https://127.0.0.1:8080/?id=hojun&pw=1234') # 문자열 = '0123456789' # for 패스워드길이 in range(1, 5): # for password in itertools.product(문자열, repeat=패스워드길이): # print(password) # print(''.join(password))여기서 문제가 어딘지 하나도 모르겟습니다 ㅠ127.0.0.1 - - [05/Jan/2024 17:53:47] "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03üiQ\x89\x03\x14ðw`ÕéKÔ\x955\\\x0d°\x9e \x1b\x87¦½'°ß´üT¯+ ý:FþYrTJðøþ\x99;Æ®§®Å-\x05M3EEà\x06õ"\x9c½ý_\x00$\x13\x02\x13\x03\x13\x01À,À0À+À/̨̩À$À(À#À'\x00\x9f\x00\x9e\x00k\x00g\x00ÿ\x01\x00\x01\x8f\x00\x0b\x00\x04\x03\x00\x01\x02\x00" 400 -서버측에선 이렇게 뜨구 400 이라니까 오류인가요? 브루트포스 코드에선 (여기 파일 있었음), line 73, in get return request("get", url, params=params, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ line 59, in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ , line 589, in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ , line 703, in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ line 517, in send raise SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /?id=hojun&pw=1234 (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1006)'))) 이러는데 어떻게 해야하나요? ㅠ
-
미해결Next + React Query로 SNS 서비스 만들기
page.module.css 가 깃허브에 없어요
page.module.css 가 깃허브에 없어요 제가 설치한 page.module.css와 다소 달라서 복붙할려고 했떠니 제로초님 깃허브에는layout.module.css 가 있네요일단 css적용이 안되지만 진행해보겠습니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-O 해설코드 질문입니다.
http://boj.kr/c022d7bcbd21411da64c4a03dbe40cd5안녕하세요 선생님자세한 질문은 공유코드 주석으로 있습니다.해설코드에서 1줄만 바꿔봤는데 왜 틀렸는지 도저히 모르겠습니다.항상 좋은 강의 감사합니다
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
올려두신 github 레포지토리를 그대로 실행 시 오류가 발생합니다.
맨 처음 클론하고 나면 chats.gateway.ts에서 socket.user라는 프로퍼티를 찾을 수 없다는 에러가 뜨고 있습니다.에러가 나는 로직을 전체 주석시키고 나면, CommentsService에서 CommonService의 의존성을 찾을 수 없다는 에러가 뜹니다. ("Nest can't resolve dependencies of the CommentsService (CommentsModelRepository, ?)")CommonSerivce 의존성을 해결하고 나니 "TypeORMError: Entity metadata for UsersModel#postComments was not found." 라는 에러가 뜹니다.위 에러를 고치고 나니 또 다른 에러가 뜨고 있습니다.혹시 github 레포지토리 clone 해보셨을 때 문제 없는지 확인 가능 하실까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
store 변수가 왜 안 가져와지나요?
섹션 3 중 회원 레포지토리 테스트 케이스 작성 수업 듣던 중 store 변수가 계속 안 가져와지네요. 어떻게 해결해야 하나요? bukwon/SpringBoot_a (github.com)에러 브랜치에 푸쉬해놨습니다. 확인 해주시면 감사하겠습니다!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
map 을 두개 만들기
제가 강의 듣기전에 미리 풀어봤는데선생님 코드와 다르게 저의 경우function solution(str1, str2) { let answer = "YES", m1 = new Map(), m2 = new Map(); for (let i = 0; i < str1.length; i++) { m1.has(str1[i]) ? m1.set(str1[i], m1.get(str1[i]) + 1) : m1.set(str1[i], 1); m2.has(str2[i]) ? m2.set(str2[i], m2.get(str2[i]) + 1) : m2.set(str2[i], 1); } for (let [key, value] of m1) { if (!m2.has(key)) return "NO"; if (m2.get(key) !== value) return "NO"; } return answer; } str1 , str2 각각 map으로 만든뒤 for문 돌려서 비교했는데 이렇게 풀면 메모리 낭비가 심한 풀이일까요 ? 근데 그다음 영상 '모든 아나그램 찾기' 문제에션 두 문자를 map으로 변형한뒤 비교한 것 같은데, 어떤 상황일 때 어떤 풀이 방법을 선택해야하는지 알수있을까요?
-
해결됨비전공자를 위한 진짜 입문 올인원 개발 부트캠프
강의에 사용되는 노션 링크가 어디있을까요?
다른 수강생분들에게도 문제 해결에 도움을 줄 수 있도록 좋은 질문을 남겨봅시다 :) 1. 질문은 문제 상황을 최대한 표현해주세요.2. 구체적이고 최대한 맥락을 알려줄 수 있도록 질문을 남겨 주실수록 좋습니다. 그렇지 않으면 답변을 얻는데 시간이 오래걸릴 수 있습니다 ㅠㅠex) A라는 상황에서 B라는 문제가 있었고 이에 C라는 시도를 해봤는데 되지 않았다!3. 먼저 유사한 질문이 있었는지 꼭 검색해주세요! 강의에 사용하시는 노션 링크가 영상 하단에 있다고 커뮤니티에서 찾아보았는데, 아무리 찾아도 없어서, 혹시 어디서 찾아볼수있을까요?
-
미해결Next + React Query로 SNS 서비스 만들기
zLogo 가 변수 명으로 보이는데 변수 링크 없이 어떻게 단독 사용한건가요?
zLogo 가 변수 명으로 보이는데 변수 링크 없이 어떻게 단독 사용한건가요? <Image src={zLogo} > 이부분이 잘 이해가 안가는데const zLogo = 'path/zLogo.png' 이런식으로 변수명도 없이 어떻게 저렇게 쓰인건지 찾아봐도 특별히 확인이 안되는데 궁금합니다! zLogo / 이것이 public 폴더 안에 있는 zLogo.png 파일 맞을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-B 유기농 배추 배열 크기 질문입니다.
문제에서 N과 M의 범위가 1 < <50 인데 왜 배열크기를 50으로 잡지 않고 51로 잡으셨는지 궁금합니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
save() 테스트관련 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]savedMember 에는 id, username, age 가 세개 모두 입력된 객체가 findMember 에는 username 과 age 만 가지고 있는 Member 타입 객체가 생성되는 것이 아닌가요?.get() 메서드 설명 읽어보면 value 를 반환한다고 되어있고.save() 메서드에서는 시퀀스로 id 값까지 채워넣은 객체를 반환하고 있는걸로 보여서욤저 @21fd... 는 객체 주소인거지요? 가져오는 데이터가id, username, age / username, age 이렇게 다르지만같은 주소값에 저장되어있다 라는걸 확인하는건가요?
-
미해결스프링 핵심 원리 - 기본편
전체코드 어디서 볼 수 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.