묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
질문 드립니다!!
빈 클래스 생성시에, 디폴트 생성자, 생성자, getter setter를 만들어야하는 이유를 알 수 있을까요...? helloWorldBean 예제에서는 생성자만 만들어도 될 것 같은데 getter setter 도 추가적으로 필요한건지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테이블 아이디 설계 및 hidden 태그 관련 질문 드립니다.
항상 명강의 감사합니다. 강의를 들을때마다, 강사님에 노고가느껴지니, 매번 소름이 돋네요. ㅎㅎ 오늘도 강의 잘 듣고 있습니다. 2가지 질문을 드립니다. 1. 테이블 아이디 설계 저는 회원 테이블을 설계할때, 기본키를 '아이디' 로 설정했었습니다. 아이디가 유니크 하기 때문에 기본키로 잡았었는데, 강의에서는 엔티티에서 기본키를 따로 잡으시고(기본키는 자동으로 값을 셋팅) 진행을 하시던데 실무에서도 회원 테이블을 설계하신다면 '회원 아이디' 와는 별개로 기본키 필드를 설계하고 @GereratedValue 로 자동으로 값을 할당하도록 진행하시나요.? 2. hidden 태그(다소 부족한 질문일수도 있습니다.)강의 내 코드를 보면, 회원에 대한 아이디를 hidden 태그에 노출하는데, 이게 보안상에 문제가 될 여지는 없을 까요.? 물론 서버단에서 회원에 권한을 체크한다면 문제가 되지 않는다고는 생각하지만, 노출된다는게 꺼림칙해서요.....(단순히 제생각입니다.) 아니면 hidden 태그를 사용하지 않고, 구현하는 방법이 따로 있을까요.?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
헤메고 있어 질문드립니다.
이런 식으로 질문드리는 게 문제라는 점을 알면서도 어디서부터 건드려야 할 지 감이 오지 않아 질문드립니다. bind 함수에서 다른 유형은 문제 없는데 bind<Image>(typeof(Images)) 로 바인드 할 경우 문제가 발생합니다. 디버그를 해보니 Bind<T>로 이동하여 typeof(T) == typeof(gameObject) 조건을 만족하지 않아 else 문 FindChild<T>로 이동합니다. 그 다음 go == null 조건 만족하지 않고 리커시브도 트루기에 맨 아래 foreach문으로 이동하는데 디버깅을 해보니go.GetComponentsInChildren<T>()을 가져온 component에 ItemIcon이 아닌 PointButton이 들어갑니다. 이게 무슨 까닭으로 이리 되는 건지 가닥을 잡을 수 없어 장황하게 질문 남깁니다.
-
해결됨스스로 구축하는 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문에는 없는지 모르겠습니다. 똑같이 != '(' 를 입력해줬는데 돌아가긴 하더라구요. 혹시 넣어도 되는 부분인지, 아니면 넣어주면 안되는지 궁금합니다 ㅠㅠㅠ
-
스프링 핵심 원리 - 기본편
클래스 데이터 타입...
삭제된 글입니다