묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ResponseBody나 HttpEntity를 사용하는 경우
@ResponseBody나 HttpEntity를 사용해서 뷰를 렌더링하지 않는 경우에도HandlerAdapter에서 DispatcherServlet으로 ModelAndView를 반환하나요?만약 반환한다면 ModelAndView에는 그냥 빈 값이 들어 있는건가요?빈 값이 들어 있으면 DispatcherServlet은 이게 View Path가 빈 값인지 아닌지에 따라 View를 렌더링 할지 말지 결정하는 건가요??
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
npm init 을 터미널에 입력하면 사진과 같은 오류가 납니다.
3.3)Node.js 사용하기강의 3분10초입니다.npm init 을 터미널에 입력하면 사진과 같은 오류가 납니다.
-
미해결Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"
checkedbox 다중에서 ref 대신 reactive를 쓰면 v-model이 작동 안되는 이유가 궁금합니다.
배열이나 객체를 사용할 때는 reactive()를 사용하는 것으로 알고있습니다. 해당 코드에서는 reactive([]) 대신 ref([])를 사용했더라구요.const checkboxValues = ref([]) reactive([])를 사용하니 checkbox에 v-model이 제대로 동작하지 않았습니다. 그 이유는 무엇인가요?
-
미해결
REQUIRES_NEW와 예외 핸들링의 상관 관계
REQUIRES_NEW를 올바르게 사용하기 위해선, 다시 말해 외부 트랜잭션과 내부 트랜잭션(신규 트랜잭션)을 제대로 분리하기 위해선 아래와 같이 이해했습니다.외부 트랜잭션의 로직은 REQUIRES_NEW 로직에서 발생될 수 있는 예외를 반드시 핸들링 해야 한다. 이렇게 이해한 이유는 아래와 같습니다.가정: 트랜잭션A는 외부 트랜잭션, 트랜잭션B는 내부 트랜잭션(신규 트랜잭션)상황: 트랜잭션 A는 성공, 트랜잭션 B는 실패 트랜잭션B에서 발생된 예외가 트랜잭션A까지 전파되면, 결론적으로 트랜잭션A까지 실패한 것으로 취급된다.결국 의도했던 트랜잭션 A는 성공 -> 커밋, 트랜잭션 B는 실패 -> 롤백이 되지 않고,트랜잭션 A 실패 → 롤백, 트랜잭션 B 실패 → 롤백 되어버린다. 따라서, REQUIRES_NEW 를 본래의 의도대로 사용하기 위해선, 반드시 예외 핸들링을 하여 예외 정상처리(예외를 catch하여 먹어버림)해주어야 한다고 이해하였는데, 제가 이해한게 맞을지 여쭤보고 싶습니다 🙂
-
해결됨외워서 끝내는 네트워크 핵심이론 - 응용
연결 유지 상태에서의 이중화 노드 무중단 재기동 방법
안녕하세요.대외 통신 연계 업무를 맡고 있는 주니어입니다.네트워크 지식에 부족함을 느껴 강의를 수강하게 되었습니다.어렴풋이만 알고 있는 지식에 대해 살을 붙임에 있어 많은 도움이 되고 있습니다. 요즘은 거래량이 많이 급증함에 따라 연결 유지 세션(전용 망)으로 많은 대외 기관들과 연결되어 있습니다.노드는 이중화가 되어있으나, 연결 유지 세션에 대해서는 액티브-스탠바이로만 운영중입니다. 때문에 배포 등으로 재기동 시 순단이 발생하고 있어 이를 없애는게 주요 과업 중 하나입니다.대외기관 - L4 사이에는 연결유지 세션으로 유지한 상태로 무중단 재기동을 할 방법이 있을까요?
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
AxiosError {message: 'Request failed with status code 401/500', name: 'AxiosError', code: 'ERR_BAD_RESPONSE',
로그인 페이지에서 로그인을 하면 500, 커뮤니티 생성 페이지에서 생성을 하면 401 AxiosError가 뜹니다. <login.tsx>import axios from 'axios'; import InputGroup from '../components/InputGroup' import Link from 'next/link' import { useRouter } from 'next/router'; import React,{ FormEvent, useState } from 'react' import { useAuthDispatch } from '../context/auth'; axios.defaults.withCredentials = true; const Login = () => { let router = useRouter(); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [errors, setErrors] = useState<any>({}); const dispatch = useAuthDispatch(); const handleSubmit = async (event: FormEvent) => { event.preventDefault(); try{ const res = await axios.post("/auth/login", {password, username}, {headers: {'Access-Control-Allow-Origin': 'http://localhost:3000'}}) dispatch("LOGIN", res.data?.user); } catch(error: any){ //console.log(error); setErrors(error.response?.data || {}) } } return ( <div className='bg-white'> <div className='flex flex-col items-center justify-center h-screen p-6'> <div className='w-10/12 mx-auto md:w-96'> <h1 className='mb-2 text-lg font-medium'>로그인</h1> <form onSubmit={handleSubmit}> <InputGroup placeholder='Username' value={username} setValue={setUsername} error={errors.username} /> <InputGroup placeholder='Password' value={password} setValue={setPassword} error={errors.password} /> <button className='w-full py-2 mb-1 text-xs font-bold text-white uppercase bg-gray-400 border border-gray-400 rounded'> 로그인 </button> </form> <small> 아직 아이디가 없으신가요? <Link href="/register" legacyBehavior> <a className='ml-1 text-blue-500 uppercase'>회원가입</a> </Link> </small> </div> </div> </div> ) } export default Login<create.tsx>import axios from "axios"; import { GetServerSideProps } from "next"; import InputGroup from "../../components/InputGroup" import {useState, FormEvent} from "react"; import {useRouter} from "next/router" axios.defaults.withCredentials = true; const SubCreate = () => { const [name, setName] = useState(""); const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [errors, setErrors] = useState<any>({}); let router = useRouter(); const handleSubmit = async (event: FormEvent) => { event.preventDefault(); try { const res = await axios.post("/subs", {name, title, description}, {headers: {'Access-Control-Allow-Origin': 'http://localhost:3000'}}) router.push(`/r/${res.data.name}`); } catch (error: any) { // console.log(error); setErrors(error.response?.data || {}); } } return ( <div className="flex flex-col justify-center pt-16"> <div className="w-10/12 mx-auto md:w-96"> <h1 className="mb-2 text-lg font-medium"> 그룹 만들기 </h1> <hr /> <form onSubmit={handleSubmit}> <div className="my-6"> <p className="font-medium">Name</p> <p className="mb-2 text-xs text-gray-400"> 그룹 이름은 변경할 수 없습니다. </p> <InputGroup placeholder="이름" value={name} setValue={setName} error={errors.name} /> </div> <div className="my-6"> <p className="font-medium">Title</p> <p className="mb-2 text-xs text-gray-400"> 주제를 입력해 주세요. </p> <InputGroup placeholder="주제" value={title} setValue={setTitle} error={errors.title} /> </div> <div className="my-6"> <p className="font-medium">Description</p> <p className="mb-2 text-xs text-gray-400"> 그룹에 대한 설명을 입력해주세요. </p> <InputGroup placeholder="설명" value={description} setValue={setDescription} error={errors.description} /> </div> <div className="flex jstify-end"> <button className="px-4 py-1 text-sm font-semibold rounded text-white bg-gray-400 border" > 그룹 만들기 </button> </div> </form> </div> </div> ) } export default SubCreate<subs.ts>import {Router, Request, Response} from "express"; import jwt from "jsonwebtoken" import { User } from "../entities/User"; import userMiddleware from "../middlewares/user" import authMiddleware from "../middlewares/auth" import { AppDataSource } from "../data-source"; import Sub from "../entities/Sub"; import { isEmpty } from "class-validator"; const createSub = async (req: Request, res: Response, next) => { const {name, title, description} = req.body; try { let errors: any = {}; if (isEmpty(name)) errors.name = "이름은 비워둘 수 없습니다."; if (isEmpty(title)) errors.title = "제목은 비워둘 수 없습니다."; const sub = await AppDataSource.getRepository(Sub) .createQueryBuilder("sub") .where("lower(sub.name) = :name", { name: name.toLowerCase() }) .getOne(); if (sub) errors.name = "서브가 이미 존재합니다."; if (Object.keys(errors).length > 0) { throw errors; } } catch (error) { console.log(error); return res.status(500).json({ error: "문제가 발생했습니다." }); } try { const user: User = res.locals.user; const sub = new Sub(); sub.name = name; sub.description = description; sub.title = title; sub.user = user; await sub.save(); return res.json(sub); } catch (error) { console.log(error); return res.status(500).json({ error: "문제가 발생했습니다." }); } }; const router = Router(); router.post("/", userMiddleware,authMiddleware, createSub); export default router; <server.ts>import express, { response } from "express"; import morgan from "morgan"; import { AppDataSource } from "./data-source"; import authRoutes from './routes/auth' import subRoutes from './routes/subs' import cors from 'cors'; import dotenv from 'dotenv'; import cookieParser from "cookie-parser"; const app = express(); const origin = process.env.ORIGIN; const corsOption = { origin: "http://localhost:3000", credentials: true } app.use(cors(corsOption)) app.use(express.json()); app.use(morgan('dev')); app.use(cookieParser()); dotenv.config(); app.get("/", (_, res) => {res.send("running")}); app.use("/api/auth", authRoutes) app.use("/api/subs", subRoutes) console.log(process.env.ORIGIN) let port = 4000; app.listen(port, async () => { console.log('server running at http://localhost:${port}'); AppDataSource.initialize().then(async () =>{ console.log("database initialized") }).catch(error => console.log(error)) })
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
Image의 src에 경로를 작성하는 것과 import로 이미지를 가져와서 넣는 것의 차이가 궁금합니다!
<Image src="/logo.png" alt="로고" width={100} height={100} /> import Logo from "@/public/logo.png"; <Image src={Logo} alt="로고" width={100} height={100} />이 두가지 접근 방식의 차이가 있을까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
logit 모델 구성시 독립변수 교호작용은 안구해도 되는지요
logit 모델 구성시 독립변수 교호작용은 안구해도 되는지요?7회 1-2에서 강의에서는 주효과만 구해서 풀어주셔는데, 교호작용까지 하면 값이 좀 달라져서 문의드립니다
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
wrapper, bitstream 오류
안녕하세요 맛비님. 비트스트림을 완료해서 위에 ready가 떠도 초록색 바가 왔다갔다 하는게 안사라지고(generating hdl wrapper) 비트스트림도 write bitstream complete가 떠있는데 로딩창이 안사라집니다.뭐가 잘못된건지 궁금합니다
-
해결됨[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
[4-0] 로그인하고 아무 반응이 없어요/axios.ts
❗질문 작성시 꼭 참고해주세요현재 문제(또는 에러)와 코드(또는 github)를 첨부해주세요. 맥/윈도우, 안드로이드/iOS, ReactNative, Node 버전 등의 개발환경을 함께 적어주시면 도움이 됩니다. 에러메세지는 일부분이 아닌 전체 상황을 올려주세요. (일부만 자르거나 복사하지말아주세요.) 개발환경/코드에 대한 정보가 없을경우 답변이 어렵습니다.axios.ts에서 BaseURL 바꿔도 로그인이 안됩니다...
-
해결됨친절한 블렌더 - [LV.1] 기초 모델링
랜더링 걸었을때 결과물이 이상하게 나옵니다.
안녕하세요. 열심히 수업을 듣고있는 수강생입니다.도넛스토어를 만든 후에 랜더링을 걸어보고 궁금한 부분이 있어서 질문드립니다.뷰포트와 랜더링 결과물을 같이 찍은 스크린샷입니다도넛 아이싱이 렌더링 했을때 이상하게 나옵니다. 혹시 버그인가 해서 파일을 저장해서 다시 불러왔는데요솔리디파이 오프셋에 녹색이 칠해져 있고 아이싱이 뒤집혀있습니다. 옵션값 1로 바꿔서 제대로 바꾸어놓고 찍었는데도 이상하게 나옵니다. 혹시 이게 원인일까요? 또 녹색은 왜 생기는지 궁금합니다.앞서 파일을 저장했다가 다시 열었습니다. 색이 이상한 부분이 있어 수정하고 렌더를 걸었는데 수정 전 색깔로 결과물이 나옵니다. (창문유리,화초,바닥,빵색)이상해서 세이브하고 다시 껏다 켰는데 수정한게 반영이 안된 채로 리셋되어 있습니다. 왜 잘 안되는지 궁금합니다.상세하고 알차게 강의해주셔서 재미있게 잘 공부하고 있습니다. 앞으로도 잘 부탁드립니다:D!
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
공식 문서 링크가 바뀐 것 같습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]6. 데이터 접근 기술 - 스프링 데이터 JPA.pdf (v20240526) 4페이지에 나온 두 링크를 눌러도 주소가 바뀌어서 원래 페이지로 이동하지 않습니다. https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html#jpa.query-methods.query-creation https://docs.spring.io/spring-data/jpa/reference/repositories/query-methods-details.html#repositories.limit-query-result 이 링크로 바뀐 것 같습니다.
-
미해결스프링 시큐리티 OAuth2
강의 수강신청하고 듣기 전입니다 질문있습니다.
제가 만든 두 서버 사이트끼리 sso 인증으로 로그인을 공유하려고 합니다. 이 강의에 그것에 관한 내용이 있나요? 있다면 몇강쯤에 있나요?없다면 이 강의를 어떤식으로 활용해야 구현할 수 있을까요 ?
-
미해결퍼블리싱 핵심이론 PDF 교재 및 예제파일(HTML+CSS+FLEX+JQUERY)
비주얼 스튜디오 코드 Bracket Pair Colorizar 설치
비주얼 스튜디오 코드 필수 앱 설치 및 사용법 영상을 보고 있는데'Bracket Pair Colorizar' 이라는 프로그램이 기능 제공을 더 이상 하지 않는다고 적혀있습니다. 해당 프로그램 외에 어떤걸 설치 해야 하나요???
-
미해결[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형2 질문
작업형2 모델 분석 및 결과 제출에 대해 질문이 있습니다. 회귀분석을 예로들면 랜덤포레스트회귀, XGB회귀, 릿지, 라쏘 등 다양한 모델을 사용해서 모델 마다 도출하는 값이 다른고 그 중 가장 높은 값(r2값이나 mse 값 등 문제에서 평가로 제시된 지표)을 사용한다고 알고 있습니다. val데이터로 학습을하고 가장 높은 값을 찾아서 마지막에 pred = model.predict(test)로 대입하는데, 모델을 선택하는 과정이 없는 것 같습니다. 이렇게 두개의 모델을 사용해서 각각 값을 도출해서 위와 같은 값이 나왔고 이런식으로 test데이터를 예측값에 적용하는데 위 두개에 모델중에 더 나은 모델을 선택하는 과정이 없는건가요??두개의 모델이 다 활성화 되어있는데 저렇게 밑에 model.predict만 적어놓으면 이 모델이 xgb인지 랜덤포레스트인지 어떻게 인식하는걸까요?
-
미해결
ModelMapper에 대해 질문드립니다 !!
안녕하세요!엔티티 -> DTO, DTO -> 엔티티 변환 모두 STRICT 전략을 사용하는 modelMapper.map을 사용하고있습니다.DTO를 쓰는 이유 -> 엔티티가 바뀌어도, dto는 그대로이므로 api 스펙이 바뀌지않음.그런데 STRICT 전략을 쓰는 modelMapper를 사용하면,dto와 엔티티 필드이름이 정확하게 일치해야하므로엔티티가 바뀌면 dto 필드도 바뀌어야함. 이렇게 되면 엔티티 변경 시에 api 스펙이 바뀌지않는다는 장점이 없어지게됨이런 생각이 들었는데, 그럼 STRICT 전략은 지양해야하나요, 아님 다른 방법이 있는 것인가요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
판다스 환경설정
판다스 환경설정을 하라고 하셨는데 어떻게 해야set_option 코딩 없이 모든 컬럼을 한번에 볼 수 있는가요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
모의고사 문제3번 풀이
모의고사 문제 3번 풀이 관해서 질문 드려요!문제 3번 풀이가 방법이 총 세가지로 풀이 해주셨는데 ( replace, map, 조건)혹시 시험에서 저런 류의 문제에서 결측치랑 데이터값을 변경하라는 문제에서 어떤 특정한 풀이를 이용해서 풀라고도 나오기도 하나요?아니면 저 세개중에 한가지 방법만 사용해서 답만 구해도 상관 없는건가요!?
-
해결됨실전! 스프링 데이터 JPA
이런 상황에선 어떻게 구현 하시는 지 궁금합니다.
안녕하세요. 좋은 강의 항상 감사합니다.JPA 와 디비를 배우면서 적용 하는 과정에서 궁금한게 생겼습니다. @Transactional public Post getPostDetail(Long postId) { Post post = postRepository.findById(postId) .orElseThrow(() -> new CustomException(ErrorCode.POST_NOT_FOUND)); post.incrementViewCount(); // 조회수 증가 return post; }상세글 조회 시 조회수가 +1 되는 간단한 로직을 가정하겠습니다.트래픽이 크다고 가정 할 시 해당 로직 대로 하면 조회 시 마다 DB에 부하가 예상되서 질문 드립니다. 해당 로직대로 해도 DB에 크게 부하를 주지 않는 수준인가요?Redis를 써서 조회수 만 따로 캐시로 저장을 한다면 DB랑 데이터가 정합하지 않을 것으로 예상됩니다. 만약 조회수가 중요한 서비스라면 db 락을 이용하여 성능 저하를 감안 하고 하시는지..실무에선 어떻게 처리하시는 지 궁금합니다
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
querydsl Q class 이슈
plugins { id 'java' id 'org.springframework.boot' version '3.0.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id "org.asciidoctor.jvm.convert" version "3.3.2" } group = 'org.spring' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } asciidoctorExt } repositories { mavenCentral() } ext { snippetsDir = file('build/generated-snippets') } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.security:spring-security-crypto' implementation 'org.springframework.session:spring-session-jdbc' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.security:spring-security-test' implementation 'org.bouncycastle:bcprov-jdk15on:1.70' implementation 'com.querydsl:querydsl-core:5.0.0' implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor 'jakarta.persistence:jakarta.persistence-api' annotationProcessor 'jakarta.annotation:jakarta.annotation-api' implementation 'io.jsonwebtoken:jjwt-api:0.11.5' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5' runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5' annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" asciidoctorExt "org.springframework.restdocs:spring-restdocs-asciidoctor:3.0.0" testImplementation "org.springframework.restdocs:spring-restdocs-mockmvc:3.0.0" annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testCompileOnly "org.projectlombok:lombok" testAnnotationProcessor "org.projectlombok:lombok" runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.modelmapper:modelmapper:3.2.0' } tasks.named('test') { useJUnitPlatform() } test { outputs.dir snippetsDir } asciidoctor { inputs.dir snippetsDir configurations 'asciidoctorExt' dependsOn test } asciidoctor.doFirst { delete file("src/main/resources/static/docs") } bootJar { enabled = true dependsOn asciidoctor copy { from asciidoctor.outputDir into "src/main/resources/static/docs" } } jar { enabled = false } FAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':compileJava'.> Compilation failed; see the compiler error output for details.* Try:> Run with --info option to get more log output.> Run with --scan to get full insights.BUILD FAILED in 6s 안녕하세요querydsl 빌드 후 Q class 임포트 하는 곳에서 에러가 발생합니다 ㅠ구글링해서 이런 저런 방법 찾아서 혼지사 해보려고 했는데 쉽지않네요.. 그 밖에 캐시 지우고 재시작, java SDK 설정, 빌드설정 등 여러가지 방법을 해보았는데 잘 안됩니다 ㅠ두세시간 정도 삽질중인데 도움 좀 주실 수 있을까요..