묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
네트워크 강의 개선점 및 추가할 만한 점 올립니다.
안녕하세요, 올려주신 양질의 강의 잘 듣고 있습니다. 다름이 아니라 7시간 정도에 이르는 네트워크 강의를 들으며 제 나름대로 '이런 점은 개선되었으면 한다.', '이런 점은 추가 설명이 필요하다.' 싶었던 내용을 정리하여 올립니다. 강사님께서 확인하시고 강의 내용을 보강해 주신다면 추후에 학습하는 분들에게 큰 도움이 될 것입니다. 영어로 된 용어는 발음이 명확했으면 합니다: 일례로 "Status"를 "스테투스"라고 발음하시는 것을 들었는데, 전공자와 비전공자를 가리지 않고 듣는 강의인 만큼 용어의 발음은 정확해야 한다고 생각합니다. 특히 CS의 기본적인 지식에는 영어 단어가 많기 때문에 더욱 중요합니다. 어학 능력도 보는 기업이 적지 않은 만큼 이 부분에 있어선 개선을 부탁드립니다.XSS, CSRF에 대한 내용도 구체화되었으면 합니다: CORS 강의에서 CSRF에 대한 내용이 간단하게만 언급되고 넘어갔는데, 네트워크에서 가장 중요한 부분은 보안이라는 것에 강사님께서도 공감하실 것입니다. 그러나 네트워크 강의에서 보안에 관한 내용이 부족했던 것 같아 이에 대한 개선을 부탁드립니다.실습 파일명이 명확했으면 합니다: 서버 파일명을 a.js, b.js와 같이 명명하시는 것보다는 client.js, server.js, JWTLoginServer.js, sessionLoginServer.js 등 어떤 내용에 대한 실습인지 알 수 있는 파일명으로 명명해 주시면 학습이 조금 더 원활할 것입니다. 현재는 a.js가 뭘 하는 서버이고, b.js가 뭘 하는 서버인지 파악하는 데서 불필요한 시간과 인지적 자원이 소모된다는 느낌을 받았습니다. 이에 대한 개선을 부탁드립니다.강의자료가 조금 더 교정되었으면 합니다: 기본적인 오탈자 교정은 빠른 시일 내에 꼭 이루어져야 한다고 보고, 이외에도 구조적인 측면에서 학습자가 머릿속에 내용을 구조화하기 쉽도록 보완이 되었으면 합니다. 지금도 충분히 괜찮지만 더 좋아질 수 있는 강의자료라고 생각합니다. 좋은 강의 제공해 주셔서 감사합니다. 강의 초반부에 말씀해 주신 것처럼 며칠 몰아서 듣지 않고 하루 30분 학습하고 해당 내용 복습하면서 잘 흡수하고 있습니다!! 파이팅입니다 ^^
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberForm을 받아오는 것과 Member에 바로 저장하는 것의 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에서답변을 보면, @PostMapping("/members/new") public String create(MemberForm form){ Member member = new Member(); member.setName(form.getName()); memberService.join(member); return "redirect:/"; }위와 같이 코드를 작성하면, "members/new"로 POST 메소드가 호출되었을 때, 스프링이 create() 메서드를 실행하기 위해 MemberForm 객체를 만들어야 하고, setter를 불러와서 멤버변수에 파라미터를 주입한다고 이해했습니다.그런데, 한가지 의문이 들었습니다. MemberForm에 name을 저장하고, 그 값을 다시 Member 객체에 저장할거면, 한번에 Member에 저장하면 안되나? Member에도 멤버변수로 name이 있고, setter도 있으니, 안될 건 없다고 생각했습니다. 그래서 아래와같이 코드를 작성했습니다.@PostMapping("/members/new") public String create(Member member){ memberService.join(member); return "redirect:/"; }이렇게 작성하고 회원가입, 회원목록 기능을 모두 수행해본 결과, 똑같이 잘 작동했습니다. 혹시 강사님께서 굳이굳이 MemberForm을 거쳐서 Member 객체를 만드신 이유가 있나요? 어떤 성능상의 이점이 있는 건가요? 아님 두번째 방법이 위험한 방법이라서 그런건가요? 왜 그런건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
memset 사용법
교안 공부를 하다가 질문이 있어. 이곳에 남깁니다.a로 초기화를 하기위해서 똑같이 따라쳤는데 출력값이 a가 아닌 이상한 숫자가 나옵니다. 이것은 왜그런것일까요..?
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
질문이 있습니다.
강사님 안녕하세요. 강의를 보다보면 배워야할 점이 많이 보입니다. - 채팅방 그룹 이름을 만들 때 staticmethod 장식자를 활용한다던지- 해당 강의에서 Room 모델 안에서 다른 필드와 섞이는 것을 방지하기 위해 별도의 추상화 클래스를 만든다던지파이썬의 고급 기술? 이라고 해야할까요? 이런 걸 잘 사용하려면 결국엔 의식적으로 사용하려고 하고 연습해야 할거 같은데 추천하시는 강의나 서적이 있을까요?
-
해결됨[풀스택 완성] Supabase로 웹사이트 3개 클론하기 (Next.js 14)
Next.js Part 2 - Server Action, Metadata
안녕하세요 ~해당 강의 8:26 즘에 http://localhost:3000/users 검색했을때 저는 타입에러가 뜨면서 강좌에서 처럼 결과가 검색이 안되는데 어떻게 해야 할까요 ?
-
미해결[2024 업데이트] UX/UI 시작하기 : Figma 입문 (Inflearn Original)
UX/UI 시작하기 : Figma 입문 (Inflearn Original) 강의 중
섹션 3. 컴포넌트 이해와 활용 중에서 "컴포넌트를 만드는 방법" 강의를 듣다이해가 잘 안 되는 것이 있어 질문합니다.컴포넌트를 만들 때는 더이상 쪼개지지 않는 단위부터 만드는 게 좋다고 하셨는데조합형 컴포넌트를 만든다고 가정했을 때 (가령 ㅁ1+ㅁ2를 조합하여 컴포넌트를 만든다고 했을 때)그 안에 요소가 마스터의 성격을 가질 수 있다라고 하면 기초 단위 마스터를 다시 만들어서조합형 컴포넌트 안에 일반 ui요소를 컴포넌트 방식으로 교체해주면 된다고 하셨던 걸 토대로 한다면ㅁ1+ㅁ2에서 ㅁ1, ㅁ2도 각각 컴포넌트 처리를 해야한다는 소리인가요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ArrayEx4 질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]package array.ex; import java.util.Scanner; public class ArrayEx4 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] numbers = new int[5]; int total = 0; System.out.println("5개의 정수를 입력하세요: "); for (int i = 0; i < numbers.length; i++) { numbers[i] = scanner.nextInt(); total += numbers[i]; } System.out.print("입력한 정수의 합계: " + total); System.out.println(); double average = (double) total / numbers.length; System.out.println("입력한 정수의 평균: " + average); } }선생님이 풀어주신 코드랑은 다른데 제 코드도 답이 될수있는지 궁금합니다
-
미해결피그마(Figma)를 활용한 UI디자인 입문부터 실전까지 A to Z
강의 교안 요청
좋은 강의 잘 듣고 있습니다.강의 교안 공유 요청하고 싶어 문의 글 남깁니다!jjjunn@naver.com 입니다.감사합니다!
-
미해결비전공 기획자 및 관리자를 위한 IT 필수 지식
강의 교안 요청드립니다!
좋은 강의 잘 듣고 있습니다. 강의 교안 신청하고 싶어 문의글 남깁니다!jjjunn@naver.com 입니다. 감사합니다!!
-
미해결Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
Interceptor에서 reactor Context 유지하는 방법
외부에서 들어온 요청 헤더 정보를 Reactor Context에 저장하고, 내부적으로 grpc호출 할때 clientInterceptor에서 저장된 Context를 읽어오고 싶은데, Context0과 함께 읽지 못하는 문제가 있습니다.Interceptor에서도 읽어오려면 어떻게 해야할까요 ㅜㅜ외부 요청 헤더를 Context에 저장하는 코드@Component class RequestHeaderFilter() : WebFilter { companion object { const val X_REQUEST_ID_KEY = "X-Request-Id" } override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> { val requestId = exchange.request.headers.getFirst(HeaderNames.REQUEST_ID) return chain.filter(exchange) .contextWrite { context -> context.put(X_REQUEST_ID_KEY, requestId ?: "test!!") } .doFinally { } .subscribeOn(Schedulers.boundedElastic()) } }grpc 요청 interceptor에서 reator Context 조회하여 grpc Metadata에 추가하는 코드class CustomHeaderInterceptor() : ClientInterceptor { companion object { const val X_REQUEST_ID_KEY = "X-Request-Id" val X_REQUEST_ID_HEADER_KEY: Metadata.Key<String> = Metadata.Key.of("x-request-id", Metadata.ASCII_STRING_MARSHALLER) } override fun <ReqT : Any, RespT : Any> interceptCall( method: MethodDescriptor<ReqT, RespT>, callOptions: CallOptions, next: Channel ): ClientCall<ReqT, RespT> { return object : ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(next.newCall(method, callOptions)) { override fun start(responseListener: Listener<RespT>, headers: Metadata) { Mono.deferContextual { context -> val requestId: String = context.getOrDefault(X_REQUEST_ID_KEY, fallbackRequestId()) ?: fallbackRequestId() headers.put(X_REQUEST_ID_HEADER_KEY, requestId) delegate().start(responseListener, headers) Mono.just(requestId) }.subscribe() } } } private fun fallbackRequestId() = "${UidUtils.generateUid()}"
-
미해결Practical Testing: 실용적인 테스트 가이드
병렬 테스트 시 DB처리
안녕하세요 강의 정말 잘 듣고 있습니다~!한가지 궁금한 점이 있는데,테스트 병렬 실행 시에 db는 어떻게 관리되는지 궁금합니다.테스트가 많아지면서 병렬로 실행하고 싶은데,db는 지금 h2 mem db 한군데만 바라보고 있어서테스트 간 같은 항목에 대한 처리들을 하면 실패로 이어집니다.어떻게 병렬로 실행할 수 있게 하는지 궁금합니다 ㅎㅎ그리고 인수테스트(RestAssured)도 진행중인데,인수테스트는 병렬 실행을 포기하는 편인지도 궁금하네요..
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
비교연산자와 반복문+조건문 문제 풀이
11:00 문제에서 count += i; 이게 2의배수이면서 3의배수가 아닌 값일 떄에 count 와 i 값을 더해주면 되는건가요??비전공자라서 설명이 너무 부족합니다 ㅠㅠ
-
미해결아두이노와 떠나는 사물인터넷 여행 - 아두이노 입문부터 IoT 중급까지!
wifi 연결이 안됩니다ㅜㅜ
wifi이름이랑 비밀번호도 제대로 적었는데 계속 '.' 만 나오면서 시도만 하고 와이파이 연결이 안되네요ㅠㅠ 이건 무슨 문제인가요,,? (맥북으로 연결하면서 실습중입니다..)
-
미해결프로젝트로 배우는 Python 챗봇 & RAG - LangChain, Gradio 활용
RAG에서의 chain 코드
chain 연결하는 | 문법을 사용하지 않는 이유가 있을까요?
-
해결됨Next + React Query로 SNS 서비스 만들기
connect.sid 삭제가 되지 않습니다.
개별적으로 서버를 만들어서 진행중입니다.// 로그인시 서버에서 발급하는 코드 response.cookie('connect.sid', accessToken, { httpOnly: true, sameSite: 'none', secure: false, }); // 프론트에서 아래와 같이 저장 if (res.ok && res.status === 204) { let setCookie = res.headers.get("set-cookie"); if (setCookie) { const parsed = cookie.parse(setCookie); cookies().set("connect.sid", parsed["connect.sid"]); const user = jwtDecode(parsed["connect.sid"]); return { ...user, }; } } // 서버에서 삭제하는 코드 logout(request: any, response: Response) { const { user } = request; response.clearCookie('connect.sid', { httpOnly: true, sameSite: 'none', secure: false, }); ... }로그인 하면 서버에서 쿠키 설정 -> 프론트에서 저장을 진행한 후, 로그아웃시 위 코드처럼 삭제하도록 하고있습니다.강의 하단부에 작성해주신것 처럼 아래와 같이 events부분에 작성하였는데 쿠키 삭제가 되지 않습니다 ㅠㅠ events에 넣지 않고 강의 그대로 했을 때는 s%3..으로 바뀌어서 삭제되지 않습니다. events에 넣었을때는 아예 값도 바뀌지 않고 삭제되지 않습니다. 어떤 작업이 필요할까요 ㅠㅠ //auth.ts events: { signOut: async (data) => { const token = cookies().get("connect.sid"); if (!token) return; const res = await logout(token.value); console.log("signOut"); }, }, // logout fetch export const logout = async (token: string) => { const res = await fetch(`${BASE_URL}/logout`, { method: "POST", headers: { Authorization: `Bearer ${token}`, }, credentials: "include", }); return res; };
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
api 서버를 만들 때 로그인 하지 않은 사람이 인터셉터에 걸린 경우
1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이런 경우는 api 서버라 로그인 페이지로 리다이렉트 시킬 수도 없는데 사용자가 요청이 거절되었다는 것을 어떻게 알려줘야 하나요?
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
스켈레톤 사용 불가
현재 제가 사용하고 있는 플러터 버전(3.22 stable)에서Theme.of(context).backgroundColor가 deprecated 된 것 같은데 스켈레톤 라이브러리 가장 최신버젼에서 해당 코드를 사용하고 있어 라이브러리를 땡겼을 시 에러가 나는 것같습니다.제가 잘못 알고 있는 부분이 있다면 알려주시면감사하겠습니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4주차는 개념강의만 들어도 괜찮을까요?
오랜시간 고민하다 강의를 보면서 힌트를 받아 4-A를 풀었습니다.허나 정말 빠르게 취준을 목표로 삼고있다면 비트마스킹은 스킵해도 될까요? 선택과 집중을 하고싶습니다,,물론 다 알아가면 좋지만 bfs나 dfs나 dp같은 문제들을 더 풀어보는게 좋을지 비트마스킹은 간단하게 알고 지나가도 괜찮은지 궁금합니다..항상 좋은 강의 감사합니다.
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
연결리스트 숙제
prev와 tail을 이용해서 만들어 봤습니다! 궁금한점이 하나 있는데 remove 메서드의 if (current)의 else 부분은 필요하지 않은것 같아서 구현하지 않았는데 문제가 있지는 않나요?class LinkedList { length = 0; head = null; tail = null; add(value) { const newNode = new Node(value); if (this.head) { this.tail.next = newNode; this.tail = newNode; } else { this.head = newNode; this.tail = newNode; } this.length++; return this.length; } search(index) { return this.#search(index)[1]?.value; } prevSearch(index) { return this.#search(index)[0]?.value; } #search(index) { let count = 0; let prev; let current = this.head; while(count < index) { prev = current; current = current?.next; count++; } return [prev, current]; } remove(index) { const [prev, current] = this.#search(index); if (current) { if (prev) { prev.next = current.next; } if (current.next) { current.next.prev = prev; } if (current === this.tail) { this.tail = prev; } } this.length--; return this.length; } } class Node { next = null; prev = null; constructor(value) { this.value = value; } } const li = new LinkedList(); li.add(1); li.add(2); li.add(3); li.add(4); li.add(5); li.add(6); console.log(li.prevSearch(2)); console.log(li.remove(4)); console.log(li.search(4)); console.log(li.tail.value); console.log(li.remove(3)); console.log(li.tail.value); console.log(li.remove(3)); console.log(li.tail.value); console.log(li.remove(2)); console.log(li.remove(1)); console.log(li.tail.value); console.log(li.remove(0));
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Atomic 변수와 Lock을 둘 다 사용하는 이유가 궁금합니다
Atomic 변수를 사용함으로써 Distribute 함수에 하나의 쓰레드만 들어오는게 보장된 것 같은데 굳이 Lock 또 다시 사용하는 이유는 Distribute 함수 말고도 다른 곳에서 items 라는 컨테이너에 접근할까봐(지금은 아니지만) 이렇게 작업하신걸까요?