묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스스로 구축하는 AWS 클라우드 인프라 - 기본편
간단한 질문입니다.
좋은 강의 감사드립니다. 정상적으로 index3.html 과 로고가 올라오는데요 X-Cache 값이 Miss from cloudfront 로 올라오는 이유가 궁금합니다. 또한 새로고침시 url 주소가 cloud front의 Domain Name이 아닌 s3 주소로 변경되는 이유가 궁금합니다.
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
안녕하세요 개인 프로젝트를 하는데 같은 함수 호출이 여러번 됩니다.
import React, { useEffect, useState, useMemo, useCallback, useRef } from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { Row, Col, Button, Form, Input, Typography, Modal, Avatar, Upload, message } from 'antd'; import { useDropzone } from 'react-dropzone'; import ImgCrop from 'antd-img-crop'; import useInput from './hooks/useInput'; import { CHANGE_PROFILE_REQUEST, CHANGE_NICKNAME_REQUEST, CHANGE_INTRO_REQUEST } from '../reducers/user'; const { Dragger } = Upload; const { TextArea } = Input; const { Text } = Typography; const ProfileForm = () => { const { me, changeProfileLoading, changeNicknameLoading, changeNicknameDone, changeNicknameError, changeIntroLoading, changeIntroDone, changeIntroError, } = useSelector((state) => state.user); const [nickname, onChangeNickname] = useInput(me?.nickname || ''); const [intro, onChangeIntro] = useInput(me?.introduction || ''); const [profileImage, onChangeProfileImage, setProfileImage] = useInput(); const dispatch = useDispatch(); useEffect(() => { if (changeNicknameError) { Modal.error({ content: '닉네임 변경 중에 오류가 발생했어요.', }); } }, [changeNicknameError]); useEffect(() => { if (changeNicknameDone) { Modal.success({ content: '닉네임을 변경했어요!', }); } }, [changeNicknameDone]); useEffect(() => { if (changeIntroError) { Modal.error({ content: '자기소개 변경 중에 오류가 발생했어요.', }); } }, [changeIntroError]); useEffect(() => { if (changeIntroDone) { Modal.success({ content: '자기소개를 변경했어요!', }); } }, [changeIntroDone]); const beforeUpload = useCallback((file) => { console.log('beforeUpload'); if (file.type !== 'image/jpg' && file.type !== 'image/jpeg' && file.type !== 'image/png') { message.error('jpg jpeg png 사진만 가능해요!'); return false; } if (file.size > 2 * 1024 * 1024) { message.error('프로필 이미지는 2MB 이하만 가능해요!'); return false; } setProfileImage(file); return true; }); const onUpload = useCallback( (files) => { console.log('onUpload'); if (!changeProfileLoading) { const imageFormData = new FormData(); imageFormData.append('image', profileImage); console.log(profileImage); dispatch({ type: CHANGE_PROFILE_REQUEST, data: imageFormData, }); } }, [profileImage, changeProfileLoading] ); const onSubmitNickname = useCallback(() => { dispatch({ type: CHANGE_NICKNAME_REQUEST, data: nickname, }); }, [nickname]); const onSubmitChangeIntro = useCallback(() => { dispatch({ type: CHANGE_INTRO_REQUEST, data: intro, }); }, [intro]); const style = useMemo(() => ({ marginBottom: '20px', border: '1px solid #d9d9d9', padding: '20px' }), []); return ( <Row justify="center"> <Col xs={24} md={12}> <Form style={style} layout="vertical"> <Form.Item style={{ textAlign: 'center' }}> <ImgCrop rotate quality="0.8" modalTitle="이미지 조정" modalOk="저장" modalCancel="취소"> <Upload showUploadList={false} accept=".jpg,.jpeg,.png" onChange={onUpload} beforeUpload={beforeUpload}> <Avatar src={me?.profile ? `http://localhost:3100/${me?.profile}` : null} size={256}> {me?.profile ? null : me?.nickname[0]} </Avatar> </Upload> </ImgCrop> </Form.Item> <Form.Item label={<Text strong>이메일</Text>}> <Text type="secondary">{me?.email}</Text> </Form.Item> <Form.Item label={<Text strong>닉네임</Text>}> <Input value={nickname} onChange={onChangeNickname} maxLength="20" suffix={<Text type="secondary">{` ${nickname.length} / 20`}</Text>} /> <Button type="primary" onClick={onSubmitNickname} loading={changeNicknameLoading} disabled={me?.nickname === nickname}> 변경 </Button> </Form.Item> <Form.Item label={<Text strong>자기소개</Text>}> <TextArea placeholder="당신을 멋지게 소개해보세요!" value={intro} onChange={onChangeIntro} rows="5" spellCheck={false} style={{ resize: 'none' }} showCount maxLength="500" /> </Form.Item> <Form.Item style={{ textAlign: 'center' }}> <Button type="primary" shape="round" size="large" onClick={onSubmitChangeIntro} loading={changeIntroLoading} disabled={me?.introduction === intro} style={{ width: 200, }} > 저장 </Button> </Form.Item> </Form> </Col> </Row> ); }; export default ProfileForm; 강의를 듣고 나서 개인 프로젝트를 만드는 중인데, antd의 Upload 컴포넌트를 이용해서 이미지 업로드를 구현했습니다. 그런데 이미지를 업로드하면 onUpload 함수가 3번 실행됩니다. beforeUpload는 1번만 실행되는데, onUpload 만 3번 실행이 됩니다. 오늘 하루종일 찾아봤는데 문제점을 모르겠습니다. 혹시 어디가 문제일까요?
-
풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
css main 클래스 관련 질문
삭제된 글입니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Error creating bean EntityManagerFactory define in class 오류가 나옵니다.
build.gradle에 org.javassist를 추가해봤는데 서버 실행이 되지 않습니다. 꼭 알려주세요.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
회원 가입 리팩토링 및 테스트 영상 질문입니다.
@DisplayName("회원 가입 처리 - 입력값 정상") @Test void signUpSubmit_with_correct_input() throws Exception { mockMvc.perform(post("/sign-up") .param("nickname", "keesun") .param("email", "email@gmail.com") .param("password", "12345678") .with(csrf())) .andExpect(status().is3xxRedirection()) .andExpect(view().name("redirect:/")); assertTrue(accountRepository.existsByEmail("email@gmail.com")); BDDMockito.then(JavaMailSender).should().send(any(SimpleMailMessage.class)); } 회원 가입 처리 - 입력값 정상 테스트의 마지막줄인 BDDMockito.then(JavaMailSender).should().send(any(SimpleMailMessage.class)); 쪽이 인식을 못하고 빨간줄을 내보냅니다. 영상에서는 then(JavaMailSender).should().send(any(SimpleMailMessage.class)); 코드인데 then 앞에 BDDMockito.를 선언 안하면 아예 인식을 못하더군요. BDDMockito를 사용하여 then을 인식시키면 에러가 뜹니다. .send(any(SimpleMailMessage.class)); 센드쪽에서 any들어가는걸 인식 못하는것 같은데 junit을 써본적이 없어서 이부분을 잘 모르겠습니다. 어디가 잘못 된건지 알 수 있을까요??? spring boot version 2.4.2 입니다. java 11입니다. ======================================================================================= package com.studyolle; import static org.hamcrest.CoreMatchers.any; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; import javax.mail.internet.MimeMessage; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.mockito.BDDMockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.test.web.servlet.MockMvc; import com.studyolle.account.AccountRepository; @SpringBootTest @AutoConfigureMockMvc class AppTests { @Autowired private MockMvc mockMvc; @Autowired private AccountRepository accountRepository; @MockBean JavaMailSender JavaMailSender; @DisplayName("회원 가입 화면 보이는지 테스트") @Test void signUpForm() throws Exception { mockMvc.perform(get("/sign-up")) .andDo(print()) .andExpect(status().isOk()) .andExpect(view().name("account/sign-up")) .andExpect(model().attributeExists("signUpForm")); } @DisplayName("회원 가입 처리 - 입력값 오류") @Test void signUpSubmit_with_wrong_input() throws Exception { mockMvc.perform(post("/sign-up") .param("nickname", "keesun") .param("email", "email..") .param("password", "12345") .with(csrf())) .andExpect(status().isOk()) .andExpect(view().name("account/sign-up")); } @DisplayName("회원 가입 처리 - 입력값 정상") @Test void signUpSubmit_with_correct_input() throws Exception { mockMvc.perform(post("/sign-up") .param("nickname", "keesun") .param("email", "email@gmail.com") .param("password", "12345678") .with(csrf())) .andExpect(status().is3xxRedirection()) .andExpect(view().name("redirect:/")); assertTrue(accountRepository.existsByEmail("email@gmail.com")); BDDMockito.then(JavaMailSender).should().send (any(SimpleMailMessage.class)); } }
-
미해결홍정모의 따라하며 배우는 C언어
getchar() 에 관해 질문 드립니다.
위와 같은 코드를 실행하였을 때, 콘솔창에서 입력을 할 때 엔터를 누를 때 마다 엔터 전의 문자들이 출력이 됩니다. 엔터도 그냥 문자 '\n' 으로 인식해서 다음 줄에서 입력을 계속 할 수 있을 것으로 생각했는데 왜 그런 건가요?!
-
미해결단 두 장의 문서로 데이터 분석과 시각화 뽀개기
cumsum ratio 관련하여 다시 질문드립니다.
머리가 안돌아가네용..ㅠㅠ cumsum 이라는 누적 합 필드를 만들었는데 ratio 를 뒤로갈수록 커지는 우상향 선그래프로 그리고 막대그래프와 겹치고 싶어요 상기 이미지가 지금까지 한거고 그리고 싶은 그래프는 이거에요. 혹시 설명이 가능하실까요? ㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
OSIV 를 끈 상태에서 개발하면 지연 로딩만 조심하면 되나여?
1.osiv를 끈 상태에서는 지연 로딩 관련 로직들을 서비스 계층 이후로 트랜잭셔날의 영향권 아래에 있는 로직으로 옮기면 되는건가여? 지연 로딩 관련만 옮기면 되는건가여? 아니면 다른것들도 옮겨야 되나여?2.성능 극대화가 필요한 앱이면 로직 구성이 조금더 복잡해지고 어려워지는건가여? 아니면 서비스 계층에서 로직이 좀더 길어지는거 말고는 별 차이가 없는건가여 이부분도 간단하지는 않아 보이는데 v1, v2, v3, v4, v5 를 OSIV 를 끄고도 개발할수 있어야 되나여? 3.근데 스프링 부트 jpa가 원래 이렇게 어려운건가여 끝이 없네여 ㅋ; 기본편 스프링 data jpa , quer dsl 다 들어야 되요 ㅠ; 알려주신 스펙 다 적용해서 실전 어플리케이션은 언제 만들죠 ㅠ; 4.리액트나 스벨트까지 연동해서 풀스택 프로젝트 강의도 언제인가 만들어 주실건가요? 5.훌륭한 강의 만들어 주셔서 감사합니다 좋은 주말 되세여!
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
제가 구현해보았는데 제 코드는 어떤 부분이 잘못된 건지 알려주실 수 있으신가요?
import syssys.stdin = open("input.txt", "rt")def dfs(lev, q, w, e): global a_max if(lev == n): a_max = min(a_max, max(q,w,e)-min(q,w,e)) else: dfs(lev+1, q+a[lev], w, e) dfs(lev+1, q, w+a[lev], e) dfs(lev+1, q, w, e+a[lev])if __name__ == "__main__": n = int(input()) a = list() for _ in range(n): a.append(int(input())) a_max = 99999 dfs(0, 0, 0, 0) print(a_max)제가 구현해봤는데 어느 부분이 잘못된건지 궁금합니다.답은 1이나오더라구요
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
두번째 질문입니다 latest 했는데도 안되네요 ㅜㅜ
D:\desktop\ch9\9.5\nodebird> npm i passport-kakao@latest up to date, audited 380 packages in 1s 3 low severity vulnerabilities To address all issues, run: npm audit fix Run `npm audit` for details. D:\desktop\ch9\9.5\nodebird>npm start > nodebird@0.0.1 start > nodemon app [nodemon] 2.0.6 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node app.js` node:internal/modules/cjs/loader:928 throw err; ^ Error: Cannot find module './Strategy' Require stack: - D:\desktop\ch9\9.5\nodebird\node_modules\passport-kakao\dist\passport-kakao.js - D:\desktop\ch9\9.5\nodebird\passport\kakaoStrategy.js - D:\desktop\ch9\9.5\nodebird\passport\index.js - D:\desktop\ch9\9.5\nodebird\app.js at Function.Module._resolveFilename (node:internal/modules/cjs/loader:925:15) at Function.Module._load (node:internal/modules/cjs/loader:769:27) at Module.require (node:internal/modules/cjs/loader:997:19) at require (node:internal/modules/cjs/helpers:92:18) at Object.<anonymous> (D:\desktop\ch9\9.5\nodebird\node_modules\passport-kakao\dist\passport-kakao.js:6:34) at Module._compile (node:internal/modules/cjs/loader:1108:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1137:10) at Module.load (node:internal/modules/cjs/loader:973:32) at Function.Module._load (node:internal/modules/cjs/loader:813:14) at Module.require (node:internal/modules/cjs/loader:997:19) { code: 'MODULE_NOT_FOUND', requireStack: [ 'D:\\desktop\\ch9\\9.5\\nodebird\\node_modules\\passport-kakao\\dist\\passport-kakao.js', 'D:\\desktop\\ch9\\9.5\\nodebird\\passport\\kakaoStrategy.js', 'D:\\desktop\\ch9\\9.5\\nodebird\\passport\\index.js', 'D:\\desktop\\ch9\\9.5\\nodebird\\app.js' ] } [nodemon] app crashed - waiting for file changes before starting...
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
안녕하세요 노드버드 프로젝트하는중입니다
ch 9.5 다운받아서 했는데도 안되네요 ㅠㅠ D:\desktop\ch9\9.5\nodebird>npm start > nodebird@0.0.1 start > nodemon app [nodemon] 2.0.6 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node app.js` uploads 폴더가 없어 uploads 폴더를 생성합니다. node:internal/modules/cjs/loader:928 throw err; ^ Error: Cannot find module './Strategy' Require stack: - D:\desktop\ch9\9.5\nodebird\node_modules\passport-kakao\dist\passport-kakao.js - D:\desktop\ch9\9.5\nodebird\passport\kakaoStrategy.js - D:\desktop\ch9\9.5\nodebird\passport\index.js - D:\desktop\ch9\9.5\nodebird\app.js at Function.Module._resolveFilename (node:internal/modules/cjs/loader:925:15) at Function.Module._load (node:internal/modules/cjs/loader:769:27) at Module.require (node:internal/modules/cjs/loader:997:19) at require (node:internal/modules/cjs/helpers:92:18) at Object.<anonymous> (D:\desktop\ch9\9.5\nodebird\node_modules\passport-kakao\dist\passport-kakao.js:6:34) at Module._compile (node:internal/modules/cjs/loader:1108:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1137:10) at Module.load (node:internal/modules/cjs/loader:973:32) at Function.Module._load (node:internal/modules/cjs/loader:813:14) at Module.require (node:internal/modules/cjs/loader:997:19) { code: 'MODULE_NOT_FOUND', requireStack: [ 'D:\\desktop\\ch9\\9.5\\nodebird\\node_modules\\passport-kakao\\dist\\passport-kakao.js', 'D:\\desktop\\ch9\\9.5\\nodebird\\passport\\kakaoStrategy.js', 'D:\\desktop\\ch9\\9.5\\nodebird\\passport\\index.js', 'D:\\desktop\\ch9\\9.5\\nodebird\\app.js' ] } [nodemon] app crashed - waiting for file changes before starting...
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
loc가 더 연산이 빠른 이유
df[(df["시군구명"]=="강남구") & (df["상권업종대분류명"]=="음식")]["상권업종중분류명"].value_counts() 보다는 loc를 써서 df.loc[(df["시군구명"]=="강남구") & (df["상권업종대분류명"]=="음식"),"상권업종중분류명"].value_counts() 이렇게 하는게 연산이 더 빠르다고 하셨는데요.. 이유가 무엇인가요..??
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
왼쪽 상단에 표시되는 단축키
왼쪽 상단에 별도로 표시되는 단축키는 플러그인을 사용하신건가요? 아니면 인텔리제이에서 제공하는 기능인가요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
이상한게 뜸
글자를 쓸 때마다 마다 저런 빨간게 계속 뜸니다 어떻게 해야 하나요? 버전은 3.9 입니다
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
while문 이상해서 질문드립니다!!
안녕하세요. "섹션5. - 3번_후위표기식 만들기" 질문이 있습니다. for x in data: if x.isdecimal(): res += x else: if x == '(': stack.append(x) elif x == '*' or x == '/': while stack and (stack[-1] == '*' or stack[-1] == '/'): res =+ stack.pop() stack.append(x) ... ... ... 연산자가 곱셈(*)이랑 나눗셈(/)일때, while문에서는 아래의 다른 while문들과는 다르게, '(' 연산자가 나오면 멈춰야하는 != '(' 가 있는데 왜, 위에 쓴 while문에는 없는지 모르겠습니다. 똑같이 != '(' 를 입력해줬는데 돌아가긴 하더라구요. 혹시 넣어도 되는 부분인지, 아니면 넣어주면 안되는지 궁금합니다 ㅠㅠㅠ
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션5. - 3번_후위표기식 만들기 질문이요!
안녕하세요. "섹션5. - 3번_후위표기식 만들기" 질문이 있습니다. for x in data: if x.isdecimal(): res += x else: if x == '(': stack.append(x) elif x == '*' or x == '/': while stack and (stack[-1] == '*' or stack[-1] == '/'): res =+ stack.pop() stack.append(x) ... ... ... 연산자가 곱셈(*)이랑 나눗셈(/)일때, while문에서는 아래의 다른 while문들과는 다르게, '(' 연산자가 나오면 멈춰야하는 != '(' 가 있는데 왜, 위에 쓴 while문에는 없는지 모르겠습니다. 똑같이 != '(' 를 입력해줬는데 돌아가긴 하더라구요. 혹시 넣어도 되는 부분인지, 아니면 넣어주면 안되는지 궁금합니다 ㅠㅠㅠ
-
스프링 핵심 원리 - 기본편
클래스 데이터 타입...
삭제된 글입니다
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
실제 작동시 질문입니다.
안녕하세요 선생님, 제이쿼리 들어와서 헷갈리는 부분이 많아서 질문남깁니다. 1. jquery를 수업내용과 같이 작성하였을때 a tag에 마우스를 올리지 않더라도 a tag 보다 넓은 실제 li 영역에 마우스를 올리면 배경은 바뀌지만 a에 적용한 hover 효과는 작동하지 않았습니다. -> 이경우에 a에 길어져도 attr을 부여하거나 jquery에 parent()를 추가해야 호버와 함께 작동할 것 같은데 맞나요? ㅠㅠ 2. 해당예제를 한글로 변환해서 만들려고 하다가 궁금한 부분이 생겼습니다. a:before에 width 값을 0으로 주고, overflow를 주기전에 영문은 예제처럼 제자리에 있는 반면, 한글은 수직아래로 떨어집니다. 이때, heigh 값을 100%로 주고 overflow를 hidden 할 경우에 영문과 비슷하게 작동하지만 마지막 글자에서 부자연스럽게 채워지게 되는데 한글 메뉴로 구성했을때 다른 해결방법이 있는지 궁금합니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
코드를 이렇게 짜봤는데 코드 평가 한번해주시면 감사하겠습니다.
import syssys.stdin = open("input.txt", "rt")def dfs(lev, score): global a_max if(lev > n): return if(n == lev): a_max = max(score, a_max) else: dfs(lev+arr[lev][0], score+arr[lev][1]) dfs(lev+1, score)if __name__ == "__main__": n = int(input()) arr = list() for _ in range(n): a, b = map(int, input().split()) arr.append((a,b)) a_max = 0 dfs(0, 0) print(a_max)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
org.springframework.jdbc import 오류 문제
안녕하세요? 김영한 강사님의 스프링부트 입문편을 수강중에 jdbc import에서 계속 오류가 발생하여 문의 드립니다. build.gradle 에서 디펜던시 해줘야할 부분은 강의 통해 다 적용 하였으나, org.springframework.jdbc를 import하는 부분에서 계속 오류가 뜹니다... 오류 내용으로 resolved가 뜨는걸로 봐서는 해당 jdbc jar파일이 프로젝트에 없어서 그런거 같은데...다른 질무자님들의 답변글을 확인 하면서 프로젝트도 다시 새로 진행해보고 하였으나 여전히 같은 문제로 남아 있습니다... java8 환경이고 ide는 sts 이클립스 입니다. 어떻게 해결을 해야할가요...?import시 나타나는 오류 문구는 아래와 같습니다 Only a type can be imported. org.springframework.jdbc resolves to a package