묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Slack 클론 코딩[실시간 채팅 with React]
POST http://localhost:3090/api/users net::ERR_INTERNET_DISCONNECTED
제로초님, 코드는 정확히 따라 한 거 같은데, 무엇이 문제인지 판단이 안되네요...리액트 v18, 타입스크립트 v18, axios는 1.2.3 입니다. webpackimport path from 'path'; import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin'; import webpack, { Configuration as WebpackConfiguration } from "webpack"; import { Configuration as WebpackDevServerConfiguration } from "webpack-dev-server"; interface Configuration extends WebpackConfiguration { devServer?: WebpackDevServerConfiguration; } import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'; const isDevelopment = process.env.NODE_ENV !== 'production'; const config: Configuration = { name: 'sleact', mode: isDevelopment ? 'development' : 'production', devtool: !isDevelopment ? 'hidden-source-map' : 'eval', resolve: { extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'], alias: { '@hooks': path.resolve(__dirname, 'hooks'), '@components': path.resolve(__dirname, 'components'), '@layouts': path.resolve(__dirname, 'layouts'), '@pages': path.resolve(__dirname, 'pages'), '@utils': path.resolve(__dirname, 'utils'), '@typings': path.resolve(__dirname, 'typings'), }, }, entry: { app: './client', }, module: { rules: [ { test: /\.tsx?$/, loader: 'babel-loader', options: { presets: [ [ '@babel/preset-env', { targets: { browsers: ['IE 10'] }, debug: isDevelopment, }, ], '@babel/preset-react', '@babel/preset-typescript', ], env: { development: { plugins: [['@emotion', { sourceMap: true }], require.resolve('react-refresh/babel')], }, production: { plugins: ['@emotion'] } }, }, exclude: path.join(__dirname, 'node_modules'), }, { test: /\.css?$/, use: ['style-loader', 'css-loader'], }, ], }, plugins: [ new ForkTsCheckerWebpackPlugin({ async: false, // eslint: { // files: "./src/**/*", // }, }), new webpack.EnvironmentPlugin({ NODE_ENV: isDevelopment ? 'development' : 'production' }), ], output: { path: path.join(__dirname, 'dist'), filename: '[name].js', publicPath: '/dist/', }, devServer: { historyApiFallback: true, // react router port: 3090, devMiddleware: { publicPath: '/dist/' }, static: { directory: path.resolve(__dirname) }, proxy: { '/api/': { target: 'http://localhost:3095', changeOrigin: true, }, }, }, }; if (isDevelopment && config.plugins) { config.plugins.push(new webpack.HotModuleReplacementPlugin()); config.plugins.push(new ReactRefreshWebpackPlugin()); } if (!isDevelopment && config.plugins) { } export default config; index.tsximport useInput from "@hooks/useInput"; import React, { useCallback, useState } from "react"; import { Form, Label, Input, LinkContainer, Button, Header, Error} from './styles' import axios from "axios"; const SignUp = () => { const [email, onChangeEmail] = useInput('');//useInput은 커스텀 훅 const [nickname, onChangeNickName] = useInput(''); const [password, setPassword] = useState(''); const [passwordCheck, setPasswordCheck] = useState(''); const [mismatchError, setMismathError] = useState(false); const onChangePassword = useCallback((e: any) => { setPassword(e.target.value); setMismathError(e.target.value !== passwordCheck); // 함수 기준으로 외부 변수만 deps에 적어줌 내부 변수는 x }, [passwordCheck]); const onChangePasswordCheck = useCallback((e: any) => { setPasswordCheck(e.target.value); setMismathError(e.target.value !== password) }, [password]); const onSubmit = useCallback((e: React.FormEvent) => { e.preventDefault(); if(!mismatchError && nickname){ console.log('서버로 회원가입하기'); axios.post('/api/users', { email, nickname, password, }) .then((response) => { console.log(response); })//요청이 성공하면 실행 .catch((error) => { console.log(error.response); })//요청이 실패하면 실행 .finally(() => {});//성공하든 실패하든 실행시키고 싶은 것 } console.log(email, nickname, password, passwordCheck) }, [email, nickname, password, passwordCheck, mismatchError]); return ( <div id="container"> <Header>Sleact</Header> <Form onSubmit={onSubmit}> <Label id="email-label"> <span>이메일 주소</span> <div> <Input type="email" id="email" name="email" value={email} onChange={onChangeEmail} /> </div> </Label> <Label id="nickname-label"> <span>닉네임</span> <div> <Input type="text" id="nickname" name="nickname" value={nickname} onChange={onChangeNickName} /> </div> </Label> <Label id="password-label"> <span>비밀번호</span> <div> <Input type="password" id="password" name="password" value={password} onChange={onChangePassword} /> </div> </Label> <Label id="password-check-label"> <span>비밀번호 확인</span> <div> <Input type="password" id="password-check" name="password-check" value={passwordCheck} onChange={onChangePasswordCheck} /> </div> {mismatchError && <Error>비밀번호가 일치하지 않습니다.</Error>} {!nickname && <Error>닉네임을 입력해주세요.</Error>} {/* {signUpError && <Error>{signUpError}</Error>} */} {/* {signUpSuccess && <Success>회원가입되었습니다! 로그인해주세요.</Success>} */} </Label> <Button type="submit">회원가입</Button> </Form> <LinkContainer> 이미 회원이신가요? <a href="/login">로그인 하러가기</a> </LinkContainer> </div> ); }; export default SignUp;이렇게 따라 한 후에 회원 가입 누르면 아래 같은 화면이 뜹니다.
-
미해결실전! 스프링 데이터 JPA
하나의 작업을 여러 서비스 계층에서 나눠서 할때 트랜잭션 처리
예를들면 하나의 게시글을 처음 작성하며 여러 태그도 함께 붙이는 내용을 구현할 때 게시글 관련해서 PostService, 태그 관련해서 TagService로 처리를 한다고 가정해보겠습니다. public ResponseEntity(@RequestBody PostRequest postRequest) {Post post = postService.post(postRequest.toPost());tagService.addTag(postRequest.toTag());return ResponseEntity ...;}이런 형태이고 post() 메서드를 통해 게시글을 저장하고addTag() 메서드를 통해 태그를 저장한다고 할때 서로 다른 서비스 클래스의 메서드에 @Transactional 이 걸려있어서 만약 Post 엔티티를 저장한 후 Tag 엔티티를 저장해야 하는 상황에서 중간에 문제가 발생한다면 Tag는 저장이 안되었지만 Post는 저장이 되는 문제가 발생합니다. 간단하게 상황 설명만을 위해 작성한 예시라 내용이 이상하지만 이런 상황에서 트랜잭션을 한번에 처리할 방법이 있을까요? 결국 하나의 트랜잭션에서 처리해야할것 같아서 위 예시의 경우 postService에서 TagService의 addTag를 호출하는 형태로 하면되지 않을까 고민해 봤습니다.보통 이런식으로 한번에 처리해야 하는 로직이 여러 서비스 계층에 나누어 있는 경우? 처리를 어떤식으로 하는지 어떤 방법들이 있는지 궁금합니다.
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
인터프리터 설정 할 때 이렇게 뜹니다
인터프리터 누르니까 이렇게 뜹니다3.8.6 선택해도 말씀하신 것처럼 왼쪽 아래에 버전이 뜨지 않고 0표시만 있네요어떻게 해야 하나요?이상태로 수업 받아도 되나요?
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
refreshToken 도 만료가 되었을 경우 로그아웃인가요?
일반적으로 refreshToken 도 만료가 되었을 경우 로그아웃인가요?일반 앱에서는 계속적으로 로그인이 유지가 되는데, 이건 특수한 경우로 refreshToken 도 새롭게 받는 것 인가요?
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]
선생님 server.xml 컨텍스트 path에 대해서 질문드립니다.
MVC04 를 실행시키려면 이 코드로는 진행이 안됩니다. 여기가 문제인 것 같은데 어떤 게 올바른 코드인지 말씀 부탁드립니다 ㅠㅠ!
-
미해결[입문자를 위한 UE5] Part3. 언리얼 엔진 3D 게임 개발 입문
혹시 리타게팅 방법이 아예 달라졌을까요??
영상대로 따라 했는데강의 16:51분부턴 영상속처럼 안되네요둘이 똑같은 모션이 아니라벨리카 에셋 혼자서 한쪽팔 들고 스샷처럼 행동만하고탭도 영상이랑 다르던데혹시 패치가 되서 안되는걸까요??
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
강의 내용중 말씀하신게 서로 상반되서 문의 드립니다.
명강의 항상 감사드립니다.공부하는 와중에 이해를 못하는 부분이 있어서, 문의 드립니다.강의 영상 1분54초 부터 2분 16초까지 입니다.아래는 말씀하신내용을 그대로 적었습니다.도커 컴포즈로 한번에 실행한 도커들은 내부 네트웍망이 구축이 되서, 서로 접속을 할수가 있습니다. 하지만 해당 이미지가 이런 포트를 아예 오픈해 놓지 않는다면 해당 컨테이너로 접속할수 있는 창구가 없겠죠제가 이해하지 못하는 부분은도커 컴포즈는 내부 네트워망이 구축이 되서 접속을 할수가 있다 라고 말씀해 주셨는데, 포트를 오픈해 놓지 않으면 접속 할수 있는 창구가 없다라고 말씀을 해주셨습니다.접속할수 있는데 접속할수 있는 창구가 없다 라는게 이해가 잘안가는데네트워크로는 접속 할수 있고, 포트로는 접속을 못한다 라고 이해하면될까요?
-
해결됨토비의 스프링 부트 - 이해와 원리
Springboot version(start.spring.io)
https://start.spring.io/현재는 2.7.6은 보이지 않아, 우선 인텔리제이에서의 프로젝트 생성 마법사로 설정하거나, springboot cli로 설치해야 할 것 같아 공유드립니다.
-
미해결다양한 사례로 익히는 SQL 데이터 분석
고객별 연관 상품 추출 수업 관련 질문
안녕하세요, 주변별 고객별 연관 상품 추출 sql 구하기 -02 수업 관련해서 질문 드리겠습니다.해당 쿼리문 결과값 중 'cnt' 열에 해당되는 횟수가 출력이 되는데, 예를 들면 위 사진에 보이는 출력 열 'cnt' 3에 해당되는 user_id 를 알고 싶을 때는 어떤 쿼리를 작성해야되나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
assertThrows() 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]assertThrows 메서드를 사용해 주문 취소 테스트 예를 실행하던 중 궁금한 점이 생겨 질문을 남깁니다.배송 완료 상황일 때는 취소가 되지 않는 예외를 적용한 것에 대해 제가 작성한 테스트인데요. 아래 코드를 통해 말씀드리겠습니다.// given Member member = createMember(); Item item = createBook("JPA", 10000, 10); int orderCount = 2; int curStock = item.getStockQuantity(); Long orderId = orderService.order(member.getId(), item.getId(), orderCount); // when // 배송 완료 상태면 취소가 안됨 Order getOrder = orderRepository.findOne(orderId); getOrder.getDelivery().setStatus(DeliveryStatus.COMP); IllegalStateException e = assertThrows(IllegalStateException.class, () -> orderService.cancelOrder(orderId)); Assertions.assertThat(e.getMessage()).isEqualTo("이미 배송완료된 상품은 취소가 불가능합니다."); // order 취소되는 경우를 가정하고 위에서 테스트했다고 쳤을 때 어떤 상태인지 보고 싶음! System.out.println(orderRepository.findOne(orderId).getStatus()); 아래와 같이 getStatus를 출력해보면 CANCLE이 아닌 ORDER라고 출력이 됩니다.getOrder.getDelivery().setStatus(DeliveryStatus.COMP); IllegalStateException e = assertThrows(IllegalStateException.class, () -> orderService.cancelOrder(orderId)); Assertions.assertThat(e.getMessage()).isEqualTo("이미 배송완료된 상품은 취소가 불가능합니다."); // order 취소되는 경우를 가정하고 위에서 테스트했다고 쳤을 때 어떤 상태인지 보고 싶음! System.out.println(orderRepository.findOne(orderId).getStatus());바로 이 부분인데요. assertThrows 내에서 orderCancle을 진행해서 테스트를 진행하는데 왜 주문의 상태가 CANCLE이 아닌 ORDER로 출력이 되는 지 알 수 있을까요?객체의 얕은 복사, 깊은 복사와 관련이 있는 것인지 궁금합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
인텔리제이 무료 버전도 학습에 지장없나요?
지장없다는 말도 있고 있다는 말도 있던데 저는 김영한님 로드맵 2개 다 들을 예정인데 강의가 몇십 개 있더라구요 인텔리제이 무료 버전을 써서 막히는 부분들이 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-S
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.고민하다가 이렇게 하면 될 거 같아서 해봤는데, 런타임 에러가 발생합니다. 논리만 보면, 강사님이랑 비슷한 거 같은데, 완전 잘못간것일까요??http://boj.kr/34380871ba87499d9065179a1e49a024
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]복습 중 궁금한 것들이 생겨서 질문 드립니다. 1. @Repository 어노테이션을 붙이면 이 클래스는 EntityManager 가 관리하는 클래스가 된다는 걸 의미하나요? 2. @Transactional(readOnly = true) 를 이용하면 영속성 컨텍스트에 관리를 받지 않게 된다고 하는데 이것이 어떤 이점이 있는지 궁금합니다. 3. MemberController 에서는 @Valid 를 사용했는데 ItemController 의 create 메서드에서는 왜 @Valid 를 사용하지 않았는지 궁금합니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
해당 코드 schemetic 질문
안녕하세요 맛비님해당 Code를 Schemetic을 했을 때 Flip Flop을 보고 의문이 생겼습니다.제가 알기로 D Flip Flop은 입력으로 CLK와 D(입력)를 받아 출력 Q 를 내보낸다고 알고 있습니다.하지만 schemetic을 띄웠을 때 위와 같이 Filp Flop에 CLK, D 뿐만이 아니라, RST가 붙은 경우도 있고, SET과 RST 둘 모두가 붙은 경우도 봤습니다. Q) SET or RST이 붙어있는 Flip Flop은 D F/F인가요? 아니면 J-K F/F인가요? (J = Set 역할, K = Reset 역할)D F/F에 게이트들이 추가적으로 붙은 D F/F인가요?J-K(S-R) F/F이 아니라면 이유가 무엇인지 궁금합니다. 감사합니다
-
해결됨선형대수학개론
[질문] 1.5. Linear Equations in Linear Algebra 5page
안녕하세요. 해당 강의를 듣다 궁금한점이 있어 질문드립니다.질문은 다음과 같습니다..! 5페이지 부분을 강의하실 때 Ax=0(homogeneous linear system)의 solution set은 항상 span {V1, V2, ..., Vp}로 표현된다고 하시고, A는 m by n 행렬, 벡터 V는 R^m 스페이스에 있다고 하셨는데 벡터 V는R^m이 아니라 R^n 스페이스 내에 있는게 아닌지요,,? 언제나 좋은 강의 감사드립니다 ( ◡̉̈ )
-
해결됨곰책으로 쉽게 배우는 최소한의 운영체제론
Application Program 설계 시 multi-process vs. multi-thread
안녕하세요, 늘 좋은 강의 감사드립니다.강의 중 Process=Program 이라고 생각하면 된다고 하셨는데,하나의 Application Program을 설계 할 때 동시에 수행되어야 하는 task에 대해 multi-process로 동작하도록 할 것 인가 multi-thread로 동작하도록 할 것 인가는 설계자의 선택의 문제인가요?Process=Program 개념으로 생각하면 설계자 입장에서 하나의 Application Program 내에 여러개의 Process를 만드는 것은 불가능 한 것인가? 이렇게 생각이 들기도 하는데 궁금해서 여쭤봅니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
강의에 나온 GqlAuthAccessGuard가 상속 받는 AuthGuard('myGuard')에 대해 궁금한게 있습니다.
강의자료 중 >> 회원 조회 API - 인가 << 해당 부분에서 이해가 가지 않는 게 있습니다.해당 강의 자료에서 아래와 같은 내용이 있는데요. AuthGuard와 GqlAuthAccessGuard는 부모-자식의 관계이고 getRequest 부분만 오버라이딩 한거라고 생각됩니다(요청이 rest-api가 아닌 gql이기 때문에). 그래서 AuthGuard의 기능이 GqlAuthAccessGuard에도 똑같이 있는 거라고 생각되는데 해당 자료에는 GqlAuthAccessGuard가 실행 된 뒤에 AuthGuard가 실행된다고 나와있는데요. 이 부분이 이해가 되질 않네요...
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
리액트 안에 gql 적용시 설치 패키지 질문
질문1 리액트에 gql 적용시 영상과다르게 아래와같이 단색으로 프로그래밍 됩니다어떤 패키지를 적용해야 할까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Future<RestaurantDetailModel> 타입을 정해주면 RestaurantDetailModel.fromJson 을 사용하여 인스턴스를 생성하는 것은 factory 키워드 때문인가요?
Future<RestaurantDetailModel> 타입을 정해주면 RestaurantDetailModel.fromJson 을 사용하여 인스턴스를 생성하는 것은 factory 키워드 때문인가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part3: 자료구조와 알고리즘
pos 구조체 초기화 문제
강의 코드대로 중괄호({})로 pos 구조체 변수를 생성, 초기화 하면 항상Pos{ -1, 0 } >> 이 부분에서error C2440: 'initializing': cannot convert from 'initializer list' to 'Pos'note: No constructor could take the source type, or constructor overload resolution was ambiguous에러가 뜹니다.해결 하긴 했는데Pos 구조체 안에서 int32 y = 0; int32 x = 0;로 초기화 시키지 않고 int32 y; int32 x;로 바꾸니까 바로 되더라구요.우선 동작은 잘 되는데 혹시 뭐가 문제인건지 알 수 있을까요?