묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
form태그의 action과 button의 onclick의 사용시기?
<div class="col"> <button class="w-100 btn btn-secondary btn-lg" type="button" th:onclick="|location.href='@{/items}'|"> 상품 관리 </button> </div> <div class="col"> <form th:action="@{/logout}" method="post"> <button class="w-100 btn btn-dark btn-lg" type="submit"> 로그아웃 </button> </form> </div> 상품관리 버튼에서는 button의 onclick을 이용해서 링크를 보내주고 로그아웃 버튼에서는 form태그의 action을 사용해서 링크로 보내주었는데 post의 형식으로 데이터를 보내줘야할때는 form의 action을 통해서 보내주고 get방식으로 보내줘야할때는 onclick을 이용해서 보내는 건가요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
/home 화면이 나오지 않습니다..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 화면이 출력되지 않습니다.... 질문 게시판에 다른 상황들을 보고 오타나 패키지를 잘못 설정했나 다시 보아도 찾지 못하였씁니다.... /home화면이 나오지 않습니다
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. @GetMapping("/api/v1/orders") public List<Order> orverV1() { List<Order> all = orderRepository.findAllByString(new OrderSearch()); for (Order order : all) { // LAZY 강제 초기화 역할 order.getMember().getName(); order.getDelivery().getAddress(); List<OrderItem> orderItems = order.getOrderItems(); orderItems.stream().forEach(o -> o.getItem().getName()); } return all; }orderItem의 item부분 LAZY 초기화 해주는 부분에서 orderItems.stream().forEach에서 stream()빼줘도 결과가 똑같이 나오던데 stream을 넣어주는 이유가 있나요??
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
mysql 포트 질문입니다.
안녕하세요, 좋은 강의 감사합니다.docker-compose에서 mysql설정할 때, ports를 사용해서 연결했습니다. (ubuntu 20.04)port는 호스트 내부의 컨테이너끼리는 컨테이너 포트로 특정 컨테이너에 접근할 수 있고,호스트 외부에서는 컨테이너 포트와 바인딩된(연결된) 호스트 포트를 통해 특정 컨테이너에 접근할 수 있다고 이해하고 있는데 보안을 위해서 port보단 expose를 사용해서 mysql에 내부 컨테이너들끼리 통신하도록 하는 것이 나을 지 궁금하여 질문을 남기게 되었습니다. 호스트: ubuntu 20.04, 내부 컨테이너: docker-compose에서 service 컨테이너들
-
미해결
파이썬으로 엑셀 파일에 있는 이미지를 개별 이미지 파일로 저장할수있나요?
안녕하세요 파이썬을 공부하고 있는 사람입니다.현재 파이썬으로 엑셀 파일에 이미지를 삽입하고 있는데이와 반대로 a열에는 파일명, b열에는 이미지가 있다고 할때b열에 있는 이미지 파일을 각각 a열의 파일명으로 저장할수있나요?구글에 아무리 검색해도 안나오네요…
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
강의 문의드립니다.
안녕하세요! 선생님 개설 강의중에 스파크로 배우는 머신러닝 문의드립니다.사내에서 데이터분석을 위해 파이썬과 파이스파크를 이용중인데,파이스파크 사용법에 익숙치 않습니다.. 선생님의 위 강의가, 파이스파크 강의인지 궁금합니다.감사합니다
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
이미지 업로드 시 data가 보내지지 않습니다..ㅠㅠ
안녕하세요. 강사님! 강의를 들으며 똑같이 작성했고 혹시 모를 오타가 있는지도 확인하면서 강사님 깃허브도 참조해보았는데 원인을 찾지 못하겠어서 문의드립니다. ㅠ ㅠ이미지 업로드를 하면 아래와 같이 오류가 뜨고 redux dev tools 로 확인해 보았을 때UPLOAD_IMAGES_REQUEST 만 처리되고 SUCCESS 로 넘어가지가 않아요.리퀘스트 되어 있는 데이터를 보면 빈 값인 것을 보니 데이터가 넘어가지 않는 것 같은데 도무지 원인을 모르겠습니다. 업로드를 하면 에러가 나면서 서버연결도 끊깁니다. ㅜㅜ제 코드에 뭐가 문제가 있는 건가요..?ㅠㅠ 확인 후 문제를 알려주시면 너무 감사할 것 같습니다..ㅠㅠㅠ[redux] import produce from "immer"; export const initialState = { mainPosts: [], // 이미지 업로드할 때 이미지의 경로들이 저장됨 imagePaths: [], uploadImagesLoading: false, uploadImagesDone: false, uploadImagesError: null, } export const UPLOAD_IMAGES_REQUEST = "UPLOAD_IMAGES_REQUEST"; export const UPLOAD_IMAGES_SUCCESS = "UPLOAD_IMAGES_SUCCESS"; export const UPLOAD_IMAGES_FAILURE = "UPLOAD_IMAGES_FAILURE"; const reducer = (state = initialState, action) => { return produce(state, (draft) => { switch (action.type) { case UPLOAD_IMAGES_REQUEST: draft.uploadImagesLoading = true; draft.uploadImagesDone = false; draft.uploadImagesError = null; break; case UPLOAD_IMAGES_SUCCESS: draft.imagePaths = action.data; draft.uploadImagesLoading = false; draft.uploadImagesDone = true; break; case UPLOAD_IMAGES_FAILURE: draft.uploadImagesLoading = false; draft.uploadImagesError = action.error; break; default: break; } }); }; export default reducer; [saga]import axios from "axios"; import { all, fork, put, takeLatest, throttle, call, } from "redux-saga/effects"; import { UPLOAD_IMAGES_FAILURE, UPLOAD_IMAGES_REQUEST, UPLOAD_IMAGES_SUCCESS, } from "../reducers/post"; function uploadImagesAPI(data) { return axios.post("/post/images", data); } function* uploadImages(action) { try { const result = yield call(uploadImagesAPI, action.data); yield put({ type: UPLOAD_IMAGES_SUCCESS, data: result.data, }); } catch (err) { console.error(err); yield put({ type: UPLOAD_IMAGES_FAILURE, error: err.response.data, }); } } function* watchUploadImages() { yield takeLatest(UPLOAD_IMAGES_REQUEST, uploadImages); } export default function* postSaga() { yield all([ fork(watchUploadImages), ]); }[components] import React, { useCallback, useEffect, useRef } from "react"; import { useSelector, useDispatch } from "react-redux"; import { Form, Input, Button } from "antd"; import { UPLOAD_IMAGES_REQUEST, REMOVE_IMAGE, ADD_POST_REQUEST, } from "../reducers/post"; import useInput from "../hooks/useInput"; const PostForm = () => { const dispatch = useDispatch(); const { imagePaths, addPostDone } = useSelector((state) => state.post); const [text, onChangeText, setText] = useInput(""); const imageInput = useRef(); useEffect(() => { if (addPostDone) { setText(""); } }, [addPostDone]); const onSubmit = useCallback(() => { if (!text || !text.trim()) { return alert("게시글을 작성하세요."); } const formData = new FormData(); imagePaths.forEach((p) => { formData.append("image", p); }); formData.append("content", text); return dispatch({ type: ADD_POST_REQUEST, data: formData, }); }, [text, imagePaths]); const onClickImageUpload = useCallback(() => { imageInput.current.click(); }, [imageInput.current]); const onChangeImages = useCallback((e) => { console.log("images", e.target.files); const imageFormData = new FormData(); [].forEach.call(e.target.files, (f) => { imageFormData.append("image", f); }); dispatch({ type: UPLOAD_IMAGES_REQUEST, data: imageFormData, }); }, []); const onRemoveImage = useCallback( (index) => () => { dispatch({ type: REMOVE_IMAGE, data: index, }); }, [] ); return ( <Form style={{ margin: "10px 0 20px" }} encType="multipart/form-data" onFinish={onSubmit} > <Input.TextArea value={text} onChange={onChangeText} maxLength={140} placeholder="어떤 신기한 일이 있었나요?" /> <div> <input type="file" name="image" multiple hidden ref={imageInput} onChange={onChangeImages} /> <Button onClick={onClickImageUpload}>이미지 업로드</Button> <Button type="primary" style={{ float: "right" }} htmlType="submit"> 짹짹 </Button> </div> <div> {imagePaths?.map((v, i) => ( <div key={v} style={{ display: "inline-block" }}> <img src={`http://localhost:3065/${v}`} alt={v} style={{ width: "200px" }} /> <div> <Button onClick={onRemoveImage(i)}>제거</Button> </div> </div> ))} </div> </Form> ); }; export default PostForm; [back - routes/post.js]const express = require("express"); const multer = require("multer"); const path = require("path"); const fs = require("fs"); const { Post, Image, Comment, User } = require("../models"); const { isLoggedIn } = require("./middlewares"); const router = express.Router(); try { fs.accessSync("uploads"); } catch (error) { console.log("uploads 폴더가 없으므로 생성합니다."); fs.mkdirSync("uploads"); } const upload = multer({ storage: multer.diskStorage({ destination(req, file, done) { done(null, "uploads"); }, filename(req, file, done) { // amanda.png const ext = path.extname(file.originalname); // 확장자 추출(.png) const basename = path.basename(file.originalname, ext); // amanda done(null, basename + "_" + new Data().getTiem() + ext); // amanda15653484.png }, }), limits: { fileSize: 20 * 1024 * 1024 }, // 20MB }); router.post( "/images", isLoggedIn, upload.array("image"), // single , array , none async (req, res, next) => { // POST /post/images console.log(req.files); res.json(req.files.map((v) => v.filename)); } ); router.post("/", isLoggedIn, upload.none(), async (req, res) => { // POST /post try { const post = await Post.create({ content: req.body.content, UserId: req.user.id, }); if (req.body.image) { if (Array.isArray(req.body.image)) { // 이미지를 여러 개 올리면 image: [제로초.png, 부기초.png] const images = await Promise.all( req.body.image.map((image) => Image.create({ src: image })) ); await post.addImages(images); } else { // 이미지를 하나만 올리면 image: 제로초.png const image = await Image.create({ src: req.body.image }); await post.addImages(image); } } const fullPost = await Post.findOne({ where: { id: post.id }, include: [ { model: Image, }, { model: Comment, include: [ { model: User, // 댓글 작성자 attributes: ["id", "nickname"], }, ], }, { model: User, // 게시글 작성자 attributes: ["id", "nickname"], }, { model: User, // 좋아요 누른 사람 as: "Likers", attributes: ["id"], }, ], }); res.status(201).json(fullPost); } catch (error) { console.error(error); next(error); } }); module.exports = router;
-
미해결마케터를 위한 구글 애널리틱스 실무
구글 애널리틱스 PDF 자료 및 슬랙 추가 요청 건
안녕하세요? 지금 막 완강을 하고 글을 올립니다. 강의해 주신 내용을 실무에 십분 활용할 수 있도록 저도 PDF자료와 슬랙 추가 부탁드립니다.daniel@cyberlogitec.com 좋은 강의 감사드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
entitymanagerFactory 오류
Consider defining a bean of type 'jakarta.persistence.EntityManagerFactory' in your configuration.이런식으로 오류가 뜨면서 실행이안됩니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
스프링 부트 시작 오류
강의와 동일하지만 스프링 부트 스타터 홈페이지에서 h2데이터 베이스 대신 mysql을 추가한 것 밖에 없는데 해당 오류가 출력됩니다. 구체적인 오류도 나오지 않아 해결하기가 힘드네요.. 어떤 문제가 있을까요? 압축파일을 풀고 따로 코드를 건드리지 않고 바로 실행을 했을 때 입니다. 추가적으로 자바는 17, 스프링부트는 3.0.5 입니다
-
해결됨GetX 기반 Flutter 앱 만들기
라우트 명은 어떻게 지정하나요?
/viewB 는 어디서 지정한건가요?
-
해결됨Flutter 앱 개발 기초
fit: BoxFit.cover
2회차 강의 도중에 질문드립니다fit: BoxFit.cover를 이용해서 이미지 비율을 유지하면서 잘라주는데, 원하는 부분만 잘라서 보여줄 수 없는건가요?처음부터 가운데 고정이 되어있는 상태로 이미지가 잘리는 것 같아서(왼쪽 정렬, 오른쪽 정렬로 이미지 자르는 방법도 알고 싶습니다)
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
문서 A의 내용을 문서B에 옮기는 방법
문서A의 내용을 문서B에다 전체 복사넣기 하다보니 문서A에서 적용된 폰트들이 다 깨져서 파이썬으로 활용하고자 합니다.제목 그대로 문서A의 내용(텍스트, 그림, 표 등)을 문서B에다 옮기는 기본 방법은 무엇인지요?
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
한글 물음창 제어
본 강의 덕분에 업무의 자동화가 목전에 왔습니다. 좋은 강의 열어주심에 감사드립니다.또 여쭤봅니다.파이썬에서 돌리는 와중에 표의 셀을 삭제할 때 한글에서 확인하는 창이 뜹니다."선택된 셀들을 지웁니다. 내용만 지우고 셀 모양은 남겨둘까요? 남김(Y)/지우기(N)/취소(C)"이 경우 자동화는 어떻게 하는지요?현재는 한글내 마크로를 정의해서 활용하고 있습니다만..다른 방법이 있는지요?
-
해결됨홍정모의 따라하며 배우는 C++
비동기 프로그래밍 관련 질문입니다.
int main() { // future and promsise { std::promise<int> prom; auto future = prom.get_future(); auto t = std::thread([](std::promise<int>&& prom) { prom.set_value(1 + 2); }, std::move(prom)); cout << future.get() << endl; t.join(); } }이건 수업중 코드입니다.살짝 햇갈려서 구글링으로 이것저것 검색해보던중https://modoocode.com/284이 사이트의 설명을 읽다가 몇가지 질문 남겨봅니다.링크에서 std::promise 와 std::future 부분입니다. 1.cout << future.get() << endl; 여기서 작업한 값들이 promise객체의 인스턴스에 저장되어 있고 이를 돌려받아야되는데 promise객체의 인스턴스에 대한 언급없이 딸랑 get()만 쓰면 promise객체의 인스턴스로부터 돌려받는다는것을 어떻게 알 수 있나요? std::future<string> data = p.get_future();이 부분에서 약속을 했으니 그냥 get함수하면 알아서 promise객체로부터 값을 받아오고 출력까지 하는건가요? 그냥 이렇게 이해하면 되는건가요? 2.1번질문의 연장선입니다.get을 한번 더 쓰면 오류가 나는 이유가 저 링크에 의하면future 에서 get 을 호출하면, 설정된 객체가 이동 하기 때문에 절대로 get 을 두 번 호출하면 안됩니다. 라던데 이게 무슨말인가요?get함수는 그냥 값을 받아오는건데 객체가 이동한다는건 뭔가요?? 3.연산수행후 돌려줄 내부 객체 타입을 정하고연산이 끝나면 future 객체에 값을 전달함. 값을 전달할 future객체는 get_future함수를 통해 설정함.여기까진 이해가 되었는데 그럼 get함수는 (1). 전달받은 값을 출력하는 함수다.get함수 호출전에 자동으로 값은 promise객체에서 future객체로 넘어간다.(2).promise객체로부터 future객체가 값을 전달받는 행위 자체를 하는 future객체의 함수다.get함수 호출전엔 값이 안넘어간다. (1),(2) 둘 중 어느것에 해당되나요?이걸 제가 왜 햇갈려서 질문드리냐면 링크를 밑으로 살짝 내려보시면 p->set_value("some data");위와 같이 promise 객체가 자신의 future 객체에 데이터를 제공한 후에; 이부분이 이해하기 애매해서 질문드립니다.저부분은 객체에 데이터를 제공하는게 아니라 그냥 promise 객체의 인스턴스에 값을 입력하는 과정이지 않습니까? 질문이 좀 난잡한점 양해부탁드립니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 전파에 대한 궁금증이 있어서 질문 드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]안녕하세요 선생님 제가 트랜잭션 전파 내용을 모두 완강하고 혼자 약간의 궁금증이 생기는 부분이 있어서 질문을 남깁니다.제가 궁금한 부분은 물리 트랜잭션을 시작하는 메서드 A가 있고 여기에 참여하는 메서드 B가 있는데 만약 트랜잭션 A가 먼저 커밋이 되면 그 후에 B가 어떤 상황이 오더라도 물리 트랜잭션에 영향을 줄 수 없을까요??제가 배운기억으로는 A 논리 트랜잭션 커밋 B 논리트랜잭션 커밋이 되는경우에 물리 트랜잭션이 커밋이 된다고 배웠던 것 같은데A 논리 트랜잭션만 커밋해도 물리 트랜잭션이 커밋이 될까? 하는 의문에 실험 해 본 결과 B 논리 트랜잭션은 커밋을 하지 않아도 커밋이 되더라구요(혹시 잘못된 테스트 일까요?)그럼 만약 A 논리 트랜잭션이 커밋이 되고 난 후 B 논리 트랜잭션이 롤백이 된다면 B 논리 트랜잭션이 참여는 했었지만 물리 트랜잭션을 시작한 A 논리 트랜잭션이 먼저 커밋이 되면 B의 롤백은 참여하고 있던 물리 트랜잭션에 영향을 줄 수 없을까요??(이 경우 앞에 다른 물리 트랜잭션을 시작하는걸 만들어 두개의 논리 트랜잭션을 이어 붙여서 트랜잭션 전파를 사용하는게 가장 좋다고 생각하지만 혹시나 하는 마음에 질문을 하게 되었습니다.)제가 테스트 해본 결과는 영향을 줄 수 없는데 혹시 제가 잘못된 방법으로 테스트를 한건지 제대로 테스트를 한건지 아니면 제가 잘못 이해한 내용이 있는건지 궁금해서 질문글을 작성하게 되었습니다.
-
미해결CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
로드밸런서에는 병목현상이 안생기나요?
강의에서 대규모 트래픽을 로드밸런서를 통해 분산한다고 했는데 그럼 로드밸런서 자체에 트래픽이 몰리면서 병목현상이 생기지는 않나요?요청 하나하나에 대해 적절한 응답을 해줄 필요가 없이 단순히 요청을 여러 서버로 나눠주는 역할만 해서 트래픽이 아무리 몰려도 딱히 병목현상이 없는걸까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
혹시 단계별로 완성된 코드를 받을 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]검증부분부터 듣고싶은데 코드가 다 완성되어있어요!혹시 단계별로 완성된 코드가 올라간 깃허브가있을까요..?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요 7강을 듣다가 질문 드립니다!
선생님 안녕하세요! 7강을 듣다가 아래 분과 같이 주소 페이지 오류가 떠서 질문글 남깁니다!댓글로 <스프링 프로젝트를 시작하는 첫 번째 방법>으로 하라고 하셨는데 강의에는 두 번째 방법만 올라와 있고 첫 번째 방법은 보이지 않네요..! 어디서 확인할 수 있을까요?!
-
해결됨독하게 되새기는 C 프로그래밍
바이너리 파일의 EOF 는 어떻게 알수있나요?
텍스트파일은 -1로 EOF 를 나타내고바이너리파일은 아니라고 하셨는데 그러면 바이너리파일의 EOF 는 무슨값인가요?