묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결뉴욕 프로덕트 디자이너가 알려주는, 입문자를 위한 UX디자인 개론
ux과제(마켓컬리 vs 프립)
안녕하세요, 저는 이커머스 CRM 마케팅 분야에서 일하고 있는 20대 사회초년생이구요. 직무전환을 위해 이것저것 공부하다가 UX디자이너라는 새로운 꿈을 가지게 되었습니다🙂 UX공부는 디자이너님 강의로 처음 시작하게 되었어요. 좋은 강의 감사드립니다. <좋은 ux와 나쁜 ux 찾기 과제> 업로드합니다. 좋은사례 - '마켓컬리' 마켓컬리를 이용할 때마다 군더더기 없이 깔끔하다는 느낌을 많이 받았습니다. 메인 탭에서 신상품/베스트/알뜰쇼핑 으로 상품을 나눈 점이 좋았습니다. 식품을 살 때 소비자가 크게 고려하는 점을 잘 나누어서 메인탭으로 배치한 느낌이 들었습니다. 특히나 알뜰쇼핑 탭을 따로두어 소비자가 가격대별로 합리적인 상품을 볼 수 있었던 점이 소비자의 구매경험을 더욱 편리하게 해준다는 느낌이였습니다. 컬리는 카테고리 설계가 매우 잘된 앱이라고 생각합니다. 국산/수입상품으로 나눈 점도 합리적이였고 신선식품의 경우 제철식품이 있기 마련인데, 카테고리로 따로 둔 점이 흥미로웠습니다. 개인적인 경험이지만 저는 요리에 관심이 있는데 제철재료를 늘 기억할 수가 없어서 검색을 하고 구매하곤 했습니다. 하지만 컬리에서는 제철음식을 카테고리로 따로두어 구매결정에 시간이 절약되고 편리했습니다. 나쁜사례 - '프립' : 프립은 여가 액티비티 플랫폼입니다. 나쁜 ux사례를 떠올렸을 때 가장 먼저 프립이 떠올랐습니다. 아무래도 스타트업에서 만든 플랫폼이다보니 개선점이 많은 것 같습니다. 사용자 입장에서 경험할 때는 불편해서 화나는 점이 많았는데, UX를 공부하는 입장이 되니 공부할 점이 많아 갑자기 좋아지네요(?) 정보설계 부족 배운 바에 따르면, 정보설계란 카테고리를 잘 나누어 사용자가 서비스에 대해 쉽게 학습할 수 있도록 하는 것인데요. 이 점이 부족하다는 생각을 했습니다. 상단 추천항목을 보시면 '밀키트' 카테고리를 볼 수 있습니다. 그런데 이 밀키트의 상위 카테고리를 찾는데 어려움이 있었습니다. 밀키트가 음식을 조리하는 것이기 때문에 요리 카테고리의 하위 카테고리가 아닐까 생각했는데 상기 이미지를 보시면 밀키트 카테고리 옆에 요리 카테고리가 있는 것을 알 수 있습니다. 그럼 밀키트는 단독 카테고리로 분류되어 있는건가 생각했습니다. 왼쪽 상단의 사이드 카테고리 바를 눌러 전체 카테고리를 확인하였습니다. 그런데 어느 곳에도 밀키트 카테고리는 없었습니다. 알고보니 밀키트 카테고리는 최상단 배움 카테고리 > 언택트 > 밀키트 이 순서로 들어가야 발견할 수 있었습니다. 이 점에서 의문점이 들었습니다. 프립에서 제공하는 강의 대부분은 오프라인 활동입니다. 따라서 밀키트처럼 혼자서도 체험할 수 있는 분야인 '언택트'는 배움 카테고리 안이 아니라 그 자체로 최상위 카테고리에 있는 것이 더 나은 설계라고 생각합니다. 특히나 최근에는 코로나19 여파로 언택트 활동에 대한 수요가 높아졌기 때문에, 배움 카테고리 안이 아니라 단독 카테고리로 만들어서 사용자 유입을 좀 더 용이하게 하는 것이 좋지 않을까 생각했습니다. 2. 정보 제공방식의 통일성 부족 대부분의 앱은 구매 상세정보를 클릭했을 때 보통 배송정보, 결제정보 크게 두 가지 정보가 카테고리화 되어있습니다. 하지만 프립은 결제정보만 눈에 확 들어오는 점이 문제입니다. 배송 기본정보는 '배송 정보'로 카테고리화도 되어있지 않을 뿐더러 마치 앱 하단의 사업자 정보마냥 회색의 작은 글씨로 제공되고 있습니다. 구매자가 최종적으로 구매 후 확인해야 할 중요한 정보이기에 정보제공 방식이 잘못된 것 같습니다. 친절하지 않은 정보제공 제품을 구매하니 사용가능 tab 에 상품이 뜹니다. 그런데 '유효기간' 부분이 의문스러웠습니다. 구매일로부터 7일까지라는 말이 어떤 의미인지 모르겠습니다. (여기저기 찾아봐도 알 수가 없었습니다..) 아마도 프립은 오프라인 체험을 주로 제공하는 플랫폼이기에 체험권을 구매하면 유효기간이 7일인 것 같습니다. 그런데 밀키트 제품같은 택배상품에도 체험권과 동일하게 유효기간을 표기한 의도가 무엇인지 모르겠습니다. 구분이 필요하다고 생각합니다. 저는 두 번째 주문이라 유효기간을 무시할 수 있었는데, 처음 구매를 했을 때는 모르는 정보가 많아서 불안했습니다. 대부분의 소비자들이 이런 감정을 느낄 것 같습니다. 오프라인 체험을 제공하는 프립이지만 코로나19로 인해 밀키트와 같이 언택트로 체험할 수 있는 상품을 판매하는 것이 불가피하다고 생각합니다. 하지만 앱의 모든 tab이 오프라인 코스에 맞추어져 있기때문에 언택트 상품을 구매하는 소비자들은 분명 불편함을 느낄 것이고, 프립에서 언택트 상품을 구매할 이유가 없는 것 같습니다.
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
처음부터 vscode로 하지 않으신 이유가 궁금합니다
아톰보다 vscode 기능이 더 방대하다면 처음부터 vscode로 하지 않고 아톰을 설치한 이유가 무엇인가요?
-
미해결홍정모의 따라하며 배우는 C언어
안녕하세요, parmeter 변수에 관해 질문 드립니다.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #define LEN 30 struct name_count { char first[LEN]; char last[LEN]; int num; }; void receive_input(struct name_count* nc); void count_characters(struct name_count* nc); void show_result(struct name_count* nc); char* s_gets(char* st, int n); int main() { struct name_count yours; receive_input(&yours); count_characters(&yours); show_result(&yours); return 0; } 안녕하세요! 위 코드는 강의 내용의 코드입니다! (함수의 body는 이 질문에서 상관 없는 듯 하여 작성하지 않았습니다.) 다름이 아니고, 지난 수업들을 통해 지역변수의 영역, 또한 함수 헤더의 영역에 대해 배운 바로는 함수 parameter들도 지역변수이고, 함수가 끝나면 사라지는 것으로 알고 있습니다! 위 코드의 nc의 주소를 찍어보았습니다. 앞 강의에서 함수의 parameter는 호출할때마다 서로 다른 객체이지만, 스택에 다른 변수가 없어서?? 다른 작업을 딱히 하지 않아서 ?같은 주소를 출력한다고 하셨던 것 같습니다! 그래서 디버거를 통해 nc의 메모리를 들여다 봤는데, 세 함수의 &nc가 모두 같은 주소가 나오는 것은 이해했지만, 메모리에 저장된 값이 함수를 빠져나와도 소멸되지 않는 것이 의아했습니다!! 어떻게 이해하는것이 좋을까요 ? automatic storage duration이 object자체가 아닌 identifier에 대한 것인가요???
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
cascade = CascadeType.ALL + orphanRemoval = true 에 대한 질문입니다.
안녕하세요 김영한님 CascadeType.ALL , orphanRemoval = true 와 CascadeType.PERSIST , orphanRemoval = true 의 동작에 있어서 차이가 있는지 궁금합니다.
-
미해결따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
방생성자 생성시 DM 에서의 오류가 발생합니다
방생성자를 안쓰거나 하는 방법말고는 답이없는 부분이조?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
웹서버 질문이 있습니다
약간 별개의 질문이긴한데요 현재 언리얼에서 플레이펩이라는 클라우드 웹서버로 방치형 키우기 게임을 위해 사용중입니다. 웹서버가 제공하는 API로 UpdatePlayerData: 클라의 변수를 서버로 업로드 ExecuteCloudScript: 클라우드 스크립트 실행 이렇게 두개의 함수가 있는데요 방치게임의 공격력 레벨을 업그레이드 한다고 했을때 Update와Exec중 Exec로 서버에서 플레이어 데이터를 처리해야 치트,핵유저를 방지할수있을까요? 사실상 대부분의 게임기능이 CloudScript를 사용해야하는것인가요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
신규 강의 일정 질문
안녕하세요. 이 강의랑은 살짝 상관 없을 수 있지만... 제가 유튜브에 댓글은 알림이 잘 안와서, 인프런 질문하기로 질문합니다.. 현재 유튜브에서 슬랙 클론 코딩 강의를 진행중이신데, 기존에 html, css, javascript, python backend, mysql, mongodb 에 대한 선지식이 있는 상태에서, 제로초님의 node.js 강의(유료), 리액트 웹게임 강의(무료)를 수강하였고, 현재 리액트 nodebird(유료) 를 수강하고 있습니다. 슬랙 클론 코딩 강의를 듣기에 사전 지식이 충분할지 궁금합니다. 아니면 추가적으로 어느 강의를 듣고 와야 수월할지 궁금합니다. 또한, 헤당 슬랙 클론 코딩 강의가 인프런에는 언제 정도 업로드 되며, 가격은 어느 선일지 궁금합니다.
-
미해결자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌
jsp 수업에서는 jdbc6파일을 jre라이브러리 폴더에 복사했었는데 스프링에서는 안해도 되는건가요??
jsp 수업에서는 jdbc6파일을 jre라이브러리 폴더에 복사했었는데 스프링에서는 안해도 되는건가요??
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
enum 사용하는 이유
강의 잘 보고있습니다~ 궁금한것이 있는데 왜 굳이 enum을 사용하나요? 그냥 이름을 비교해서 찾는거라면 string[] texts = {"PointText", "ScoreText"}; 같이 스트링배열로 저장한다음 Bind<Button>(texts); 스트링배열을 넘겨서 바인드를 하면 안되나요? 강의에서도 바인드함수에서 제일 처음하는 일이 어떤타입의 Enum이 가지고 있는 이름들을 string 배열로 옮기는데 (string[] names = Enum.GetNames(type); ) 굳이 enum을 사용하는 이유가있나요?
-
미해결초보자도 만들 수 있는 스크롤 인터렉션. 1편 자바스크립트
섹션에서만 100vh로 스크롤 할 경우
안녕하세요. 강의 잘 듣고 있습니다. 섹션 5의 업그레이드 버전을 스스로 만들어 보고 있는데요. animate의 비동기 방식때문에 젤 밑까지 스크롤 되어지는거 같은데 어떻게 해결 해야 할까요...? https://jsfiddle.net/Lret1yxf/
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
로그아웃 부분 에러
로그아웃에서 다음과 같은 에러가 발생합니다. 강의 몇 번째 되돌려봤는데 틀린 부분은 없어보이는데 어디가 문제인거죠? import React, { useCallback } from 'react';import {Avatar, Card, Button} from 'antd';import {useDispatch} from "react-redux";import logoutAction from '../reducers'const UserProfile = () => { const dispatch = useDispatch(); const onLogOut = useCallback(() => { dispatch(logoutAction()); }, []); return ( <Card actions={[ <div key="twit">내용<br/>0</div>, <div key="followings">팔로잉<br/>0</div>, <div key="followers">팔로워<br/>0</div>, ]} > <Card.Meta avatar={<Avatar>YK</Avatar>} title="TEST" /> <Button onClick={onLogOut}>로그아웃</Button> </Card> );};export default UserProfile; import {HYDRATE} from "next-redux-wrapper";const initialState = { user: { isLoggedIn: false, user: null, signupData: {}, loginData: {}, }, post: { mainPosts: [], }};export const loginAction = (data) => { return { type: 'LOG_IN', data, }}export const logoutAction = () => { return { type: 'LOG_OUT', }}const rootReducer = (state = initialState, action) => { switch (action.type) { case HYDRATE: console.log('HYDRATE', action); return {...state, ...action.payload}; case 'LOG_IN' : return { ...state, user: { ...state.user, isLoggedIn: true, user: action.data, }, }; case 'LOG_OUT' : return { ...state, user: { ...state.user, isLoggedIn: false, user: null, }, }; default: return state; }};export default rootReducer; 빠른 답변 부탁드립니다..
-
해결됨도커 쓸 땐 필수! 도커 컴포즈
restart와 wait_for_it.sh 중 어떤 것을 추천하시나요?
회사에서 django-postgresql로 구성할 때 구글링을 해보니 wait_for_it.sh를 사용하는 방법이 있어서 적용해서 서비스 중인데요. 강의에서 설명하신 restart와 비교했을때 어떤 것을 더 추천하시나요? 물론 wait_for_it.sh 보다는 restart가 간편해보이지만요. 그리고 restart: always로 설정하니 로컬 개발환경에서 재부팅 후 docker를 다시 실행하면 자동으로 해당 컨테이너가 켜집니다. docker-compose 명령어로 실행을 안했는데도요. 이런 문제는 해결 할 수 있는 방법이 있나요?
-
미해결홍정모의 따라하며 배우는 C언어
scanf 반환값이 무시되었습니다 자꾸 떠요
강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. 안녕하세요 교수님 강의를 보면서 따라하는데 자꾸 오류가 생겨서 혼자서 도저히 해결을 못할 것 같아 문의드립니다! #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int i = 0, j = 0; printf("input two integers"); scanf("%d%d", &i, &j); printf("%d %d\n",i,j); return 0; } 정말 교수님이랑 같은 코드로 코딩을 했는데 scanf 반환값이 무시되었습니다라고 오류가 뜹니다.. 혹시 해결 가능할까요?ㅜ
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
말줄임시 em b문의
Em b 태그는 인라인태그라서 원래 width값을 text의 양만큼만 가지는 걸로 알고 있는데요, width값을 각각 65% 30%씩 줄 수 있는 이유는 그 부모태그인 a태그가 display : block으로 바뀌었기 때문인건가요..?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
이동 시 회전 문제
이동 키 입력 시 회전이 이상하신분들은 Tank 밑에 있는 Body, Top, Canon의 Position을 확인해 보세요 PlayerController가 Tank에 추가되었으므로 Tank의 Position 값을 기준으로 Rotation하게 됩니다. Body, Top, Canon의 Position 값은 Tank의 위치에 상대적이기 때문에 X,Y좌표가 크게 차이날 경우 Tank를 기준으로 원을 그리며 이동하게 보입니다.
-
미해결운영체제 공룡책 강의
Blocking Send에 대한 궁금한 점이있습니다.
Blocking Send 하는 경우에, 다른 프로세스에서 Receive가 완료되어야 Blocking Send의 작업이 종료되고 제어가 돌아오나요? 메시지 패싱방식이라, Send만 완료되어도 다시 제어가 돌아와야하는거 아닐까 하고 궁금합니다.
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
AppLayout에서 질문 있습니다.
안녕하세요 제로초님. 오류가 난 것은 아니지만 궁금한 점이 생겨서 질문드립니다. AppLayout.js에서 const isLoggedIn = useSelector( (state) => state.user.isLoggedIn); 이 부분이 이해가 잘 안됩니다. 이 파일의 import문에는 어디에도 configurStore이나 reducers 디렉토리가 보이지 않는데 저 useSelector는 어떻게 알고 state를 찰떡같이 initialState로 들고오는 건가요...? store의 기능같기는 한데 store라는 개념이 완전히 처음이라서 모르겠습니다 ㅠㅠ
-
해결됨모던 자바스크립트(ES6+) 기본
Arrow Function 에서 Scope 관련 질문이 있습니다.
안녕하세요. 예전에 이해하고 넘어갔으나 다시 잘 안떠올라서 돌아왔는데, 또 뭔가 새롭습니다. 몇 가지 혼란스러운 부분이 있어 질문하고자 합니다. var value = 1000; function Node(value) { this.value = value; } Node.prototype.getValueByArrow = () => { console.log("this: ", this); console.log(this.value); }; Node.prototype.getValueByFunc = function () { console.log("this: ", this); console.log(this.value); let hello = "hi"; const hi = () => { console.log(this); console.log(hello); }; hi(); }; Node.prototype.getValueTest = function () { console.log("this: ", this); console.log(this.value); const arrowTest = () => { console.log("arrow this in func: ", this); }; arrowTest(); }; new Node(100).getValueByArrow(); new Node(300).getValueByFunc(); new Node(300).getValueTest(); 1️⃣ Arrow Function의 this는 Arrow Function이 속해있는 object의 ThisBindingComponent를 따라가는 건가요? 위의 코드로 테스트 해보니, 'getValueTest'의 this와 안에 있는 'arrowTest'의 this가 같음을 확인했습니다. 그렇다면 ThisBindingComponent를 따라간다고 해석해도 될까요?2️⃣ 정리하자면, "일반함수(function name() {...})의 this는 호출할 때 앞의 object가 scope로 되고(ex: obj.name()), Arrow Function은 자기가 속해있는 object의 this(ThisBindingComponent)를 참조한다." 이렇게 해석해도 될까요? 3️⃣ this는 함수가 호출될 때 결정이 된다고 알고있습니다. 그렇다면 Arrow Function은 Engine에 의해 만들어질 때, 정해진다고 봐도 될까요? 답변 주시면 감사하겠습니다.
-
미해결실전 리액트 프로그래밍
선생님 질문있습니다 !
const reducer = createReducer(init, { [types.ADD]: (state, action) => state.timelines.push(action.timeline) , [types.REMOVE]: (state, action) => state.timelines = state.timelines.filter(timeline => ( timeline.id !== action.timeline.id )) , [types.EDIT]: (state, action) => { const index = state.timelines.findIndex(timeline => timeline.id === action.timeline.id); if (index >= 0) { state.timelines[index] = action.timelines; } }, [types.INCREASE_NEXT_PAGE]: (state, action) => (state.nextPage += 1), [types.ADD_LIKE]: (state, action) => { const timeline = state.timelines.find( item => item.id === action.timelineId ); if (timeline) { timeline.likes += action.value; } }, [types.SET_LOADING]: (state, action) => (state.isLoading = action.isLoading), [types.SET_VALUE]: setValueReducer }); export default reducer; 다른곳에서는 (state,action) 2개를 적어줬는데 setValueReducer 에서는 단순 함수만 호출해주었는데도 setValueReducer(state,action) 이렇게 state와 action 사용이 가능한건가요 ???
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Data저장 관련 질물입니다!
게임 종료시 Stat Data를 저장하고 다시 로드할때 json으로 변환해서 저장하고 재실행하면 저장된 json을 파싱해서 사용하면 될까요?? 그리고 Dictionary로 Stat 을 만들어 주셨는데 json으로 저장할때 리스트로 저장해야 되는건지 ..감이 잡히질 않아서 질문 남깁니다!