묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전 리액트 프로그래밍
React.memo 관련 질문이 있습니다.
React.memo 가 props 비교를 통해 리렌더링을 막아줄 수 있는 유용한 기능이라는 것을 알게되었는데요,그렇다면 리액트에서는 왜 React.memo 적용을모든 컴포넌트에 default로 제공하지 않는지 궁금합니다.제가 구글링을 해본 결과2년 전에 Dan Abramov가 트위터에 이런 글을 올렸더라구요.. ``` Ask yourself: Why don’t you put Lodash memoize() around every function? Wouldn’t that make all functions faster? Do we need a benchmark for this? Why not?```저는 React.memo가 특정 컴포넌트의 이전 상태의 props를 기억하고 있다가 새로 렌더되어야할 상황에 전달된 props와의 비교를 통해 선택적으로 렌더링을 결정하는것이라고 생각했는데, 저 트위터를 보면 마치 React.memo가 컴포넌트 전체를 메모리 어딘가에 기억해야하고 이 작업이 오히려 성능에 악영향을 줄 수 있다는 뉘앙스로 들렸습니다.횡설수설 서론이 길어진 것 같아서 죄송합니다. React.memo를 왜 모든 컴포넌트에 적용하면 안좋은지 궁금합니다!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
queryDsl Cannot find symbol이라고 뜹니다
이렇게 찾을 수 없다고 뜨는데 이유를 모르겠습니다 또한 위에 있는 코드로 했을 경우에는 QOrder 등 파일이 생성이 되는데 밑에있는 코드로 했을 경우는 generated 파일 자체가 생성이 안되고 완료했다는 코드만 뜹니다ㅠ
-
해결됨코딩으로 학습하는 GoF의 디자인 패턴
enum 객체는 멀티쓰레드 환경에서 안전한가요?
안녕하세요. 기선님. 좋은 강의 감사합니다. 이번 수업을 들으면서 궁금한 점이 생겨 질문 남깁니다. 1:34초쯤 Settings enum 클래스에 number 필드 및 게터 세터를 생성하셨는데, 이러한 상황에서도 동기화 블록없이 커스터마이징된 enum 객체가 쓰레드-세이프한건가요? 답변 부탁드립니다. 감사합니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
상품 결제? 관계질문입니다.
안녕하세요 제로초님 유저가 결제한 목록을 db에 저장하려합니다. 결제 목록의 관계는 Cart와 User 간의 다대다 관계로 만들었습니다. ( 카트에 담긴 아이템에서 체크한 아이템들을 보내고 유저아이디와 함께 결제목록을 만들기 위해서) 유저가 결제 버튼을 누를때 Cart에서 체크 한 cart item id 값들을 백엔드로 배열로 보내고 이 값들을 payment table의 CartId에 등록하려합니다. (CartId와 UserId를 제외한 컬럼은 모두 payment table의 기본 값입니다.) payment table의 기본값을 가지고 배열로 받은 CartId의 값만 다르게 데이터를 여러 개를 만들고 싶은데 잘 되지 않습니다 . 아래와 같이 코드를 작성해보았습니다.
-
미해결게임 프로그래머 취업 전략 가이드
게임회사 취업 목적 시 강의 수강 문의
안녕하세요 루키스님. 저는 게임프로그래머 취업을 목적으로 루키스님 강의를 듣고 있는 수강생입니다. 다음달부터 1년동안 쥬신게임학원에 다닐 예정이고, 지금은 루키스님의 C++/언리얼 강의 part1을 들으며 준비중인데요. 프로그래머로서 성장할 수 있는 제대로된 게임 회사에 클라이언트 프로그래머로 취업을 하려면 루키스님의 강의중 어떤 강의들을 수강하면 좋을지 여쭙고 싶습니다. 가령 C#/유니티 강의도 듣는게 좋을지, C++/언리얼 강의는 모든 강의들을 다 듣는게 좋을지 등을 알려주시면 정말 감사하겠습니다. 저는 비전공자이고, 대학 강의 및 프로그래밍 학원 등을 통해 C, C++, 자료구조를 약 1년 정도 공부하였고, C# 및 Java는 문법 정도만 아는 상태이며 운영체제, 컴퓨터 구조 등 컴공 전공 지식은 없는 상태입니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
serverSide Cookie 질문 드립니다. (axios interceptor)
안녕하세요. 강의 잘 듣고있습니다. 다름이 아니라 getServerSideRendering을 할 때 쿠키를 사용하여 사용자 정보를 얻는 로직을 처리하고 있는데 궁금증이 생겨서 질문드립니다. 우선 문제 상황은 axios interceptor를 사용하여 쿠키를 보낼 때 request Header에 쿠키값이 담기지 않는다는 것 입니다. 구글링 등 반나절 한거같은데 정확한 원인을 모르겠어서 질문드립니다.. 1. serverSideProps 쪽 코드 입니다 2. saga file 입니다. 여기서 문제가 발생했던 곳이 interceptor 내부에 있는 innerApi.loadMyInfo를 호출 할 때 request Header에 cookie값이 적용이 안되더라구요 config에 withCredential : true로 적용을 했는데도요.. 여기까지가 문제였고 정상적으로 데이터를 받아오는 소스는 아래와 같습니다 위 이미지와 같이 interceptor를 활용 안하고 바로 불러오면 Header에 Cookie가 담겨서 API 콜이 정상적으로 되더라구요.. 의심이라고 할만한곳은 Host에서 차이가 있는 부분밖에 없는데 (interceptor는 포트포워딩을 한 서버의 IP / port가 나오고 아닌경우는 localhost라고 나오더라구요) 이해가 안가는게 interceptor는 withCredentials 설정까지 해줘도 안되고 그냥 호출한 부분은 아무런 코드작성 없이도 정상적으로 된것입니다... 개인적으로 모든 Api 콜을 interceptor를 활용하여 하고싶은데 혹시 방법이 있을까요? 긴 글 읽어주셔서 감사드립니다..
-
미해결팝스타 공식 뮤비 제작 & 유튜브 2천만 뷰 크리에이터의 애니메이트 X 이모티콘 클래스
그룹을 합치려면 어떻게 해야 하나요?
'나만의 캐릭터를 만들자 - 애니메이트의 캐릭터 드로잉 방법'에서 12분 경에 채색을 하는 파트를 하고 있는데요, 제가 처음에 드로잉을 할때 머리 따로, 앞머리 따로 그룹을 해놔서 그런지 머리 그룹을 선택해서 페인트칠을 하니 앞머리 라인은 보이지 않고 머리통 가득 보라색이 채워졌습니다 ㅎ.. 일단 머리와 앞머리가 같은 그룹이어야 분리를 하든 할 수 있을 것 같은데 두 그룹을 합칠 수는 없나요? 드래그를 하려니 얼굴 표정이랑 들어올린 손도 같이 선택돼서 저 두개만 선택할 수가 없네요ㅜㅜ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문있습니다
``` @Transaction ```
-
미해결
해외결제
해외에서 인프런 강의를 결제하려고합니다. (해외 master) 잘못된 인증 방식이라고 나와서요. 혹시 다른 방법이 없을까요? 감사합니다.
-
해결됨Redux vs MobX (둘 다 배우자!)
리덕스 툴킷에서 rejected 일 때 에러메세지 처리하기
안녕하세요 제로초님! 궁금한 게 있어서 질문 남깁니다! 로그인을 처리하는 로직에서 error 발생시 직접 정의한 에러 메시지를 보여주고 싶은데요.. 툴킷을 사용하기 전에는 axios에 error.response를 통해서 직접 정의한 메세지를 뽑아 사용했었는데 rejected에서 action.error.message 를 담아도 원하는 값이 안나오네요 "존재하지 않는 이메일입니다!" 라는 문구를 logInError에 넣고싶습니다! 방법을 알 수 있을까요? 감사합니다! 혹시 몰라서 코드도 같이 올리겠습니다! import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { ResUserData } from 'api/user/types' import { userLogin } from 'store/user/action' interface UserState { logInLoading: boolean logInDone: boolean logInError: string | null user: ResUserData | null } const initialState: UserState = { logInLoading: false, logInDone: false, logInError: null, user: null } const userSlice = createSlice({ name: 'user', initialState, reducers: {}, extraReducers: bulid => bulid .addCase(userLogin.pending, (state: UserState) => { state.logInLoading = true state.logInDone = false state.logInError = null }) .addCase( userLogin.fulfilled, (state: UserState, action: PayloadAction<ResUserData>) => { state.logInLoading = false state.logInDone = true state.user = action.payload } ) .addCase(userLogin.rejected, (state: UserState, action) => { state.logInLoading = false state.logInError = action.error.message! }) }) export default userSlice.reducer
-
미해결mongoDB 기초부터 실무까지(feat. Node.js)
강의 잘 보고 있습니다! 한가지 궁금한 점이 있는데요
오브젝트 아이디를 검증하실 때 isValidObjectId() 함수로 하시는데요 ~ 프론트에서 params로 넘어오는 값은 "61c07d24bb241609ebfe7fff" 이러한 문자열 값일텐데 저 함수가 어떤식으로 이게 ObjectId("61c07d24bb241609ebfe7fff")값인지 검증해주는 걸까요 ? 혹시 back에서 front로 넘겨줬던 아이디가 ObjectId("") 이기때문에 front에서 params로 넘겨주는 값도 ObjectId("") 형태인건가요 ? 리액트로 프론트 작업 도중 넘어오는 아이디값을 보면 "" 문자열 형태이고 넘기는 값도 그냥 문자열인데 오브젝트 아이디로 구별되는게 몽구스가 해주는건지 궁금하네요 ㅎㅎ
-
미해결홍정모의 따라하며 배우는 C++
delete, 소멸자
안녕하세요 delete는 꼭 소멸자 안에서 실행이 돼야 하는것인가요? constructor에 delete를 넣어주면 안되는 것인지 여쭤봅니다. 감사합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
lock 질문입니다.
저는 한쪽에만 lock을 걸으면 어떻게 될까? 라는 생각을 가지고 Thread_1에는 lock을 걸고, Thread_2에는 lock을 걸지 않았습니다. Thread_2에서는 lock을 걸지 않아서 lock의 영향을 받지 않기 때문에 Thread_1에서 작업중인 number에 접근할 수 있고, Thread_1에서도 Thread_2에서 작업중인 number에 접근할 수 있어서 난수가 나올 것이라고 예상했습니다. 하지만 몇번을 돌려봐도 결과는 난수가 아닌 0이 나왔습니다. 그리고 질문들을 살펴보다 보니 새로운 object _obj2를 만들어서 Thread_2에 lock을 했을 때는 난수가 나온다는 것을 알았습니다. 서로 다른 object를 통해 lock을 하면 난수가 나온다는 것은 이해했고 이게 제가 예상했던 결과인데, 한쪽에만 lock을 걸었을 경우에는 왜 0이 나오는지 잘 모르겠습니다.
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
배포에서 에러가 발생합니다.
강의에 나오는 모든 과정을 따라하고 나니, travis ci 는 성공하였는데 elastic beanstalk 에서 다음과 같은 에러가 나오면서 주소로 들어가보면 502 상태입니다.Environment health has transitioned from Info to Severe. ELB processes are not healthy on all instances. Application update completed 65 seconds ago and took 4 minutes. ELB health is failing or not available for all instances. 그래서 올려주신 코드와의 차이를 보니, 지금까지 만든 docker-compose.yml 파일이 강사님의 코드에는 docker-compose-dev.yml이 되어있고, docker-compose.yml 에는 다음과 같은 코드가 들어가있네요. version: "3" services: react: build: context: . dockerfile: Dockerfile ports: - '80:80' volumes: - /usr/src/app/node_modules - ./:/usr/src/app stdin_open: true 여태까지 만든건 개발용인거 같은데 둘중 어떤걸 사용하는게 맞는건가요?그리고 docker-compose.yml은 docker-compose up으로 실행이 가능했는데,docker-compose-dev.yml은 어떻게 실행하나요?
-
해결됨[기초-응용] 다양한 환경을 앤서블(Ansible)로 관리하기 with 베이그런트(Vagrant)
windows2012r2 구성관련
안녕하세요 강의를 잘보고있습니다!windows를 vagrant를 이용해서 구성하려고하니 403오류가 발생하여(opentable/win-2012r2-standard-amd64-nocm) 다음 vagrant box를 가지고 진행하였습니다. (devopsgroup-io/windows_server-2012r2-standard-amd64-nocm) 그랬더니 ip가 제가 할당하지않은 ip가 자동으로 할당되며 방화벽도 해제되지 않는것을 확인하였습니다 오류는 다음과같이 timeout이 발생하였습니다. ==> ansible-node05: Waiting for machine to boot. This may take a few minutes... ansible-node05: SSH address: 127.0.0.1:19215 ansible-node05: SSH username: vagrant Timed out while waiting for the machine to boot. This means that Vagrant was unable to communicate with the guest machine within the configured ("config.vm.boot_timeout" value) time period. If you look above, you should be able to see the error(s) that Vagrant had when attempting to connect to the machine. These errors are usually good hints as to what may be wrong. If you're using a custom box, make sure that networking is properly working and you're able to connect to the machine. It is a common problem that networking isn't setup properly in these boxes. Verify that authentication configurations are also setup properly, as well. If the box appears to be booting properly, you may want to increase the timeout ("config.vm.boot_timeout") value. 제가 실수한 부분이있는지 궁금합니다! 감사합니다!
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
네이버 header_parms
안녕하세요! 패턴으로 실습하며 익히기: 네이버 Open API로 크롤링하기 부분 6:40초에서 질의드립니다! naver_open_api = "https://openapi.naver.com/v1/search/shop.json?query=갤럭시노트10" header_params = ("X-Naver-Client-id":client_id, "X-Naver-Client-Secret":client_secret) res = requests.get(naver_open_api, headers=header_params) 위 코드 부분에서 requests.get 파라미터에 naver_open_api 이부분은 그대로 변수를 넣으셨는데, headers=header_params 이부분은 왜 headers에 다시 넣어주는지 궁금합니다! header_params = ("X-Naver-Client-id":client_id, "X-Naver-Client-Secret":client_secret) 여기 변수를 headers로 지정하면 되지 않을까 해서 시도해보았는데 에러가 나오더라구요.. 왜 그럴까요?
-
미해결청소년을 위한 로블록스 개발 첫걸음
제 다리는 에러가..
local bridge = game.Workspace.BridgePart local touchPart = script.Parent function showBridge() bridge.CanCollide = true bridge.Transparency = 0 wait(5) bridge.CanCollide = false bridge.Transparency = 1 end touchPart.Touched:Connect(showBridge) 로 계속 보고 따라 하고 있는데 플레이를 할 때 다리가 터치를 하기 전에 이미 생성이 되어 있네요 ㅜㅜ 뭐가 문제일까요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
시퀄라이즈 여러 쿼리 보내기, Promise async await 개념
안녕하세요. 항상 강의 보면서 도움 많이 받고 있습니다. 프론트에서 체크박스로 제품을 열람가능한 유저를 선택해서 DB에서 기존 데이터를 삭제하고 체크한 유저를 다시 추가해주는 식으로 제품열람가능 유저를 업데이트 하려고 하는데요 제품모델과 유저 모델은 Item.associate = (db) => { // 릴레이션(관계) 정의 db.Item.belongsTo(db.User); // 제품 등록한 유저 db.Item.belongsToMany(db.User, { through: 'ItemUsers', as: 'ItemViewUsers'}); // 제품 노출할 유저 }; .................. User.associate = (db) => { // 릴레이션(관계) 정의 db.User.belongsToMany(db.User, { through: 'UsersRelation', as: 'Providers', foreignKey: 'customerId' }); // 판매자-구매자 관계 db.User.belongsToMany(db.User, { through: 'UsersRelation', as: 'Customers', foreignKey: 'providerId' }); // 판매자-구매자 관계 db.User.belongsToMany(db.Item, { through: 'ItemUsers', as: 'UserViewItems' }); // 열람가능한 제품 }; 이런식입니다. 프론트는 Form과 Checkbox로 단일 ItemId와 UserId 배열을 보내주고 백에서 req.body로 받는 데이터는 { id: '1', values: { customerIds: [ 'tttt', 'ttt3' ] } } 이런식으로 받습니다. // 제품에 열람가능한 고객 등록 router.post('/add-customer', isLoggedIn, async (req, res, next) => { try { console.log('고객등록 req.body',req.body); console.log(req.user.id) const item = await Item.findOne({ where: { id: req.body.id} }); if (!item) { return res.status(404).send('해당 제품이 존재하지 않습니다.'); } if (item.UserId !== req.user.id) { return res.status(404).send('권한이 없습니다.'); } const itemViewUsers = await item.getItemViewUsers(); //제품 열람가능한 유저 전부 제거 if (itemViewUsers) { await Promise.all( itemViewUsers.map( customer => { console.log('\x1b[36m 유저 제거 시도', customer.id); item.removeItemViewUsers(customer.id); }) ); } // 제품 열람가능한 유저 추가 (체크박스로 체크된) if(req.body.values.customerIds){ await Promise.all( req.body.values.customerIds.map( customerId => { console.log('\x1B[31m 유저 추가 시도', customerId); const user = User.findOne({ where: { id: customerId }}) if (!user){ return res.status(404).send('해당 유저가 존재하지 않습니다.'); } item.addItemViewUsers(customerId); }) ); } res.status(200).json(item); } catch (error) { console.error(error); next(error); // status 500 } }); 유저 tttt가 이미 등록된 상태에서 유저 tttt, ttt3 를 선택해서 등록하면 DB에는 ttt3만 등록된 결과가 나옵니다... 실제 INSERT 문도 하나만 실행되네요. 항상 이런건 아니고 될때도 있습니다. 비동기 부분이 꼬여서 그런것같은데 제가 promise 개념이 약해서 어떤식으로 해결할 수 있을지 궁금합니다. Promise, async, await 부분은 제로초님 강의 꼭 다시 보겠습니다. 백엔드 로그는 이러합니다. 고객등록 req.body { id: '1', values: { customerIds: [ 'tttt', 'ttt3' ] } } tester1 Executing (default): SELECT `id`, `codeName`, `name`, `packageName`, `unit`, `msrp`, `supplyPrice`, `imgSrc`, `createdAt`, `updatedAt`, `UserId` FROM `Items` AS `Item` WHERE `Item`.`id` = '1'; Executing (default): SELECT `User`.`id`, `User`.`password`, `User`.`company`, `User`.`name`, `User`.`phone`, `User`.`email`, `User`.`role`, `User`.`createdAt`, `User`.`updatedAt`, `ItemUsers`.`createdAt` AS `ItemUsers.createdAt`, `ItemUsers`.`updatedAt` AS `ItemUsers.updatedAt`, `ItemUsers`.`ItemId` AS `ItemUsers.ItemId`, `ItemUsers`.`UserId` AS `ItemUsers.UserId` FROM `Users` AS `User` INNER JOIN `ItemUsers` AS `ItemUsers` ON `User`.`id` = `ItemUsers`.`UserId` AND `ItemUsers`.`ItemId` = 1; 유저 제거 시도 tttt 유저 추가 시도 tttt 유저 추가 시도 ttt3 Executing (default): DELETE FROM `ItemUsers` WHERE `ItemId` = 1 AND `UserId` IN ('tttt') Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'tttt'; Executing (default): SELECT `createdAt`, `updatedAt`, `ItemId`, `UserId` FROM `ItemUsers` AS `ItemUsers` WHERE `ItemUsers`.`ItemId` = 1 AND `ItemUsers`.`UserId` IN ('tttt'); POST /item/add-customer/ 200 9.485 ms - 236 Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'ttt3'; Executing (default): SELECT `createdAt`, `updatedAt`, `ItemId`, `UserId` FROM `ItemUsers` AS `ItemUsers` WHERE `ItemUsers`.`ItemId` = 1 AND `ItemUsers`.`UserId` IN ('ttt3'); Executing (default): INSERT INTO `ItemUsers` (`createdAt`,`updatedAt`,`ItemId`,`UserId`) VALUES ('2021-12-22 05:56:16','2021-12-22 05:56:16',1,'ttt3'); Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'tester1'; Executing (default): SELECT `User`.`id`, `User`.`company`, `User`.`name`, `User`.`phone`, `User`.`email`, `User`.`role`, `User`.`createdAt`, `User`.`updatedAt`, `Customers`.`id` AS `Customers.id`, `Customers`.`company` AS `Customers.company`, `Customers`.`name` AS `Customers.name`, `Customers->UsersRelation`.`createdAt` AS `Customers.UsersRelation.createdAt`, `Customers->UsersRelation`.`updatedAt` AS `Customers.UsersRelation.updatedAt`, `Customers->UsersRelation`.`customerId` AS `Customers.UsersRelation.customerId`, `Customers->UsersRelation`.`providerId` AS `Customers.UsersRelation.providerId` FROM `Users` AS `User` LEFT OUTER JOIN ( `UsersRelation` AS `Customers->UsersRelation` INNER JOIN `Users` AS `Customers` ON `Customers`.`id` = `Customers->UsersRelation`.`customerId`) ON `User`.`id` = `Customers->UsersRelation`.`providerId` WHERE `User`.`id` = 'tester1'; Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'tester1'
-
미해결스프링 핵심 원리 - 기본편
싱글톤 방식의 주의점 강의의 질문입니다.
강의를 듣고 스프링 프레임워크에 의하여 생성되든 사용자가 Java 코드를 이용해 생성하든 Singleton 방식으로 구현된 객체는 1개의 객체가 여러 곳에서 재사용하기 때문에 무상태(stateless) 형태로 설계해야 한다는 것을 잘 알게 되었습니다. 강의에서도 예시를 들어주시면서 Class 내 Member 변수가 아닌 Method 내 지역 변수로만 값을 핸들링하며 return 시켜주시며 무상태(stateless)의 적절한 구현방법을 설명해주셨는데요. 한가지 의문이 들었습니다. 만약 Singleton 객체 내부에 선언된 공유 가능한 변수(강의 내에서는 Class의 Member 변수)에 상태값이 남을 수 있다면 함수도 Singleton 형태로 사용되는 것인가요? 만약 객체의 무상태(stateless)만 신경쓰고 개발하다가 아주 짧은 시간 내에 Singleton 객체 내부에 있는 A라는 함수에 동시다발적으로 호출이 몰리게 되면 A 함수 내부에 선언된 지역변수도 공유될 가능성이 존재하는 것인가요?
-
미해결15일간의 빅데이터 파일럿 프로젝트
혹시 [참고] 붙은 환결설정 ppt 교육자료 공유 가능할까요>?
안녕하세요 유익한 강의로 많은 도움 받고 있습니다. 혹시 [참고] 붙은 환경설정 가이드 ppt 파일 공유 가능할지 문의드립니다.