묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의 화면이 나오지 않고 소리만 납니다.
섹션1의 'Cloud Native Architecture', 'Cloud Native Application' 강의에서 영상이 나오지 않는데 원래 그런건가요? 아래처럼 까맣게 아무것도 안나오고 소리만 납니다.
-
해결됨Spring Boot와 React로 배우는 초간단 REST API 게시판 만들기
SpringBoot 초기세팅 수강중 오류가 있어 문의드립니다.
안녕하세요?처음 수강중인데 오류가 있어 문의드립니다.SpringBoot 초기세팅 수강중인데 서버 실행시 아래와 같이 오류가 발생합니다.이런경우 어떻게 처리해야 하나요?
-
미해결스프링 웹 MVC 완전정복
질문 있습니다.
안녕하세요 강사님,양질의 강의 감사합니다.현재 servlet 수강중입니다.강의에서 디버그 찍어서 보여주시는 데이 부분에 대해서시간과 여유가 되신다면디버그를 어떻게 찍는지영상으로 알려주셨으면 좋겠습니다. 환절기 감기 조심하세요.긍정적인 답변 기다리겠습니다!
-
해결됨스프링 부트 - 핵심 원리와 활용
외부설정 @ConfigurationProperties의 내부 클래스에서 static을 사용하는 이유를 알고 싶습니다.
외부 설정 쪽을 보고 있는데요. application.yml 에서 설정한 값을 safe 하게 사용하기 위한 코드인데요. 내부 클래스에 static 을 사용한 이유가 있을까요? @Data@ConfigurationProperties("my.datasource")public class MyDataSourcePropertiesV1 { private String url; private String username; private String password; private Etc etc = new Etc(); @Data public static class Etc { private int maxConnection; private Duration timeout private List<String> options = new ArrayList<>(); }}
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
노션자료
노션같은것은 어디서 확인하나요? 코드같은거 복사해서 빠르게 넘어가고 싶은데 자료를 찾을 수 없네요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Automatic Build 설정 방법 질문
위 사진과 같이 Build 가 자동으로 되도록 세팅을 변경하고 인텔리제이를 리부팅 해도 설정 적용이 잘 되지 않습니다.코드를 변경 후 Shift + Command + F9 를 눌러 수동으로 Build 하지 않고 그냥 실행할 경우 변경사항이 제대로 적용되지 않은 채 코드가 실행이 됩니다. 해결 방법이 있을까요?수동으로 Build 하면 잘 실행되는 것으로 보아 코드 문제는 아닌 것 같습니다...ㅠ
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
소켓 메모리낭비
안녕하세요. 강의를 보고 소켓이 연결될 때 로그를 남겨봤는데, 살펴보니 이유 없이 소켓 연결이 많이 생성되어 있는 것을 확인했습니다.이런 경우 선생님께서는 어떻게 해결하셨나요?소켓 메모리 낭비를 해결하셨다고 들었던 것 같아서 여쭤봅니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
ArticlePageResponse 클래스 질문
안녕하세요 강의 듣다가 문득 궁금한점이 생겨서 질문드립니다. ArticlePageResponse 클래스에 List<ArticleResponse> articles; 를 구성으로 하여 클래스를 생성해주셨는데ArtlcieResponse를 상속하여 만들어진 ArticlePageResponse를 활용하여도 상관 없을까요?? 자바, 스프링을 동시에 공부하고 있다보니.. 주니어의 허접한 질문에 답변해주시면 감사드리겠습니다..
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
강의 수강에 대한 질문입니다,
선생님 강의 정말 잘 듣고 있고, 설명도 천천히 상세히 해주셔서 열심히 듣고 있습니다. 그러나 듣으면서 개념 자체는 이해가 가는데 코딩과정에서 순수하게 코드 자체가 문법적으로 이해가 안되면 일단 이 강의는 접어두고 자바부터 다시 시작해야 할까요? ㅜㅜ
-
미해결실전! 스프링 데이터 JPA
UsernameOnlyDto 타입 type mismatch 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.UsernameOnly 인터페이스 타입과 지네릭스 타입으로 결과는 문제 없이 동작하지만UsernameOnlyDto 타입으로 결과 값을 받으려고 findProjectionsByUsername를 호출하면 type mismatch 오류가 생깁니다. Specified result type [study.datajpa.dto.UsernameOnlyDto] did not match Query selection type [study.datajpa.entity.Member] - multiple selections: use Tuple or arrayList<UsernameOnlyDto> result = memberRepository.findProjectionsByUsername("m1");package study.datajpa.dto; public class UsernameOnlyDto { private final String username; public UsernameOnlyDto(String username) { this.username = username; } public String getUsername() { return username; } }// List<UsernameOnly> findProjectionsByUsername(@Param("username") String username); List<UsernameOnlyDto> findProjectionsByUsername(@Param("username") String username); <T> List<T> findProjectionsByUsername(@Param("username") String username, Class<T> type); org.springframework.orm.jpa.JpaSystemException: Specified result type [study.datajpa.dto.UsernameOnlyDto] did not match Query selection type [study.datajpa.entity.Member] - multiple selections: use Tuple or array at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:341) at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:241) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:560) at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:343) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:160) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:136) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) at jdk.proxy2/jdk.proxy2.$Proxy149.findProjectionsByUsername(Unknown Source) at study.datajpa.repository.MemberRepositoryTest.projections(MemberRepositoryTest.java:403) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Suppressed: org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:804) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:758) at org.springframework.test.context.transaction.TransactionContext.endTransaction(TransactionContext.java:135) at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:272) at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:488) at org.springframework.test.context.junit.jupiter.SpringExtension.afterEach(SpringExtension.java:275) ... 2 moreCaused by: org.hibernate.query.QueryTypeMismatchException: Specified result type [study.datajpa.dto.UsernameOnlyDto] did not match Query selection type [study.datajpa.entity.Member] - multiple selections: use Tuple or array at org.hibernate.query.sqm.internal.SqmUtil.throwQueryTypeMismatchException(SqmUtil.java:1272) at org.hibernate.query.sqm.internal.SqmUtil.verifyResultType(SqmUtil.java:1209) at org.hibernate.query.sqm.internal.SqmUtil.verifySelectionType(SqmUtil.java:1159) at org.hibernate.query.sqm.internal.SqmUtil.verifySingularSelectionType(SqmUtil.java:1114) at org.hibernate.query.sqm.internal.SqmUtil.checkQueryReturnType(SqmUtil.java:1088) at org.hibernate.query.sqm.internal.SqmUtil.checkQueryReturnType(SqmUtil.java:1049) at org.hibernate.query.sqm.internal.SqmUtil.validateQueryReturnType(SqmUtil.java:1040) at org.hibernate.query.sqm.tree.select.SqmSelectStatement.validateResultType(SqmSelectStatement.java:153) at org.hibernate.query.sqm.internal.QuerySqmImpl.<init>(QuerySqmImpl.java:240) at org.hibernate.internal.AbstractSharedSessionContract.createCriteriaQuery(AbstractSharedSessionContract.java:1483) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:1443) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:143) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320) at jdk.proxy2/jdk.proxy2.$Proxy136.createQuery(Unknown Source)
-
해결됨코드로 배우는 React 19 with 스프링부트 API서버
access Token 만료 후 todo/list 접속시도 에러 처리
안녕하세요.access Token 정보 만료 후에 서버에서 보내는 메시지가 401 메시지로 옵니다.그래서인지 jwtUtil.js 파일에서 처리를 못하는 문제가 있는 것이 맞을까요?responseFail 을 아래와 같이 수정하는게 맞는지 무엇을 놓치고 있는 것인지 모르겠습니다.http://localhost:3000/todo/list 를 10분 이상 경과후 실행했을 때 에러 메시지를 출력했었습니다.import axios from "axios"; import {getCookie, setCookie} from "./cookieUtil"; import {API_SERVER_HOST} from "../api/hostApi"; const jwtAxios = axios.create() const refreshJWT = async (accessToken, refreshToken) => { const host = API_SERVER_HOST const header = {headers: {"Authorization": `Bearer ${accessToken}`}} const res = await axios.get(`${host}/api/member/refresh?refreshToken=${refreshToken}`, header) console.log("----------------------") console.log(res.data) return res.data } //before request const beforeReq = (config) => { console.log("before request.............") const memberInfo = getCookie("member") if (!memberInfo) { console.log("Member NOT FOUND") return Promise.reject( { response: { data: {error: "REQUIRE_LOGIN"} } } ) } const {accessToken} = memberInfo // Authorization 헤더 처리 config.headers.Authorization = `Bearer ${accessToken}` return config } //fail request const requestFail = (err) => { console.log("request error............") return Promise.reject(err) } //before return response const beforeRes = async (res) => { console.log("before return response...........") console.log(res) //'ERROR_ACCESS_TOKEN' const data = res.data if (data && data.error === 'ERROR_ACCESS_TOKEN') { const memberCookieValue = getCookie("member") const result = await refreshJWT(memberCookieValue.accessToken, memberCookieValue.refreshToken) console.log("refreshJWT RESULT", result) memberCookieValue.accessToken = result.accessToken memberCookieValue.refreshToken = result.refreshToken setCookie("member", JSON.stringify(memberCookieValue), 1) //원래의 호출 const originalRequest = res.config originalRequest.headers.Authorization = `Bearer ${result.accessToken}` return await axios(originalRequest) } return res } //fail response const responseFail = async (err) => { console.log("response fail error.............") console.log(err) const originalRequest = err.config; // 토큰 만료로 인한 401 응답이라면 → refresh 시도 if ( err.response && err.response.status === 401 && !originalRequest._retry // 무한 루프 방지 ) { originalRequest._retry = true; const memberCookieValue = getCookie("member"); try { const result = await refreshJWT( memberCookieValue.accessToken, memberCookieValue.refreshToken ); // 토큰 저장 memberCookieValue.accessToken = result.accessToken; memberCookieValue.refreshToken = result.refreshToken; setCookie("member", JSON.stringify(memberCookieValue), 1); // 원래 요청 재시도 originalRequest.headers.Authorization = `Bearer ${result.accessToken}`; return await axios(originalRequest); } catch (refreshError) { console.error("Refresh 실패, 로그아웃 처리 필요"); // 로그아웃 로직 연결 가능 localStorage.removeItem("token"); return Promise.reject(refreshError); } } return Promise.reject(err); } jwtAxios.interceptors.request.use(beforeReq, requestFail) jwtAxios.interceptors.response.use(beforeRes, responseFail) export default jwtAxios
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
"업로드 및 배포" 후 에러 메시지가 뜨지 않네요..
교재 561페이지를 따라가면서, 위의 메시지까지 받았습니다. 그리고 나서 10여분이 지났는 데도, 교재에서 얘기하는 것처럼 에러 메시지가 출력되지 않네요. 에러 메시지가 없어도 정상적으로 진행이 된 것인가요?
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
bootJar가 어디에 있지요?
교재 560페이지에서 "API 서버 프로젝트에서는 Gradle의 'bootJar'를 실행합니다'라고 되어 있는데, bootJar가 어디에 있지요?
-
미해결실습으로 배우는 선착순 이벤트 시스템
프로젝트 진행할때 모듈로 추가하는 이유가 궁금합니다!
프로젝트 처음 진행할때 보면, spring init에서 프로젝트를 만든 후 src파일을 삭제하고 대신 new Module로 api라는 디렉토리를 만들어서 진행하는데요.... 혹시 이렇게 하는 이유가 있나요??? 이런 방식은 처음봐서 질문 드립니다 !
-
해결됨1시간만에 치킨콤보값으로 배우는 서버 배포
에러
ubuntu@ip-172-31-44-131:~$ docker run -d -p 8080:8080 kimoon515/neoUnable to find image 'kimoon515/neo:latest' locallylatest: Pulling from kimoon515/neodocker: no matching manifest for linux/amd64 in the manifest list entries.See 'docker run --help'.이런 에러가 발생되는데 어떻게 해야할가요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
Comment 최상위 entity에서 parentCommentId를 자기 자신의 id를 두는 이유가 궁금합니다.
안녕하세요!강의 늘 잘 듣고 있습니다, 감사합니다.다름이 아니고, Comment 테이블 관련한 질문인데요.일전에 비슷한 경우를 보았는데, parentCommentId를 null로 둔걸 본 것 같습니다.(용량절약을 위한 목적이였다고 들었습니다)혹시 최상위 자신의 commentId로 parentComentId를 지정한 부분에 대해 궁금해서 글 올리게 되었습니다.감사합니다.
-
해결됨실전 jOOQ! Type Safe SQL with Java
Routines 관련 질문
안녕하세요!이번에 jooq를 도입하게 되어 강의를 보며 천천히 따라해보고 있습니다.현재 Flyway + DDLDatabase(testcontainers 사용안함) 방식으로 dsl을 생성하는 것을 테스트하고 있는데요..flyway migration 파일(.sql)에 프로시저와 함수 생성문을 넣고 코드 생성을 실행 하니 상용 버전을 이용하라고 메시지가 나오며 실행이 안되길래 공식 문서를 확인해보니 오픈소스 에디션에서는 지원을 하지 않는다고 되어있더군요 ㅠㅠ 섹션2 - 생성된 DSL 구조 살펴보기 강의에서는 DB 스캔 방식이지만 Routines 클래스가 잘 생성되는 것을 볼 수 있는데 혹 강사님께서는 시 상용 버전을 사용하신 걸까요?? 아니면 DB 스캔 방식은 상용 버전 상관없이 Routines 클래스가 생성이 되는 걸까요?
-
미해결스프링 부트 - 핵심 원리와 활용
서블릿 컨테이너 초기화1 강의 관련 질문입니다~
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 스프링부트 톰캣 내부에 서블릿 컨테이너도 있고 스프링 컨테이너도 같이 존재하는 건가요?그래서,API 호출이 오면 서블릿 컨테이너 내부의 DispatcherServlet이 스프링 컨테이너로 연결시켜서 컨트롤러 빈으로 매핑하도록 한다고 보면 될까요?
-
미해결실습으로 배우는 선착순 이벤트 시스템
Redis 활용하기 문제점 해결하기 부분이 이해가 잘 안됩니다...
위 도표를 보여주시면서 설명을 해주실때,10시 정각에 스레드 1이 쿠폰 발급 로직을 시작10시 2분에 완료가 된다면,스레드 2는 스레드 1의 작업이 모두 종료될때까지 기다렸다림.스레드 2는 10시 2분에 작업을 시작 이렇게 설명해주셨는데, 이게 잘 이해가 안됩니다... 제 생각에는 아래와 같이 10시에 동시에 처리되는 흐름이 되어야 할 것 같은데요... 즉, 스레드2는 쿠폰 생성 로직이 끝날 때까지 기다리지 않고,스레드 1이 쿠폰 발급 로직을 수행 중이라도 스레드 2는 곧바로 Redis 값을 받고 독립적으로 로직을 수행할 수 있을 것 같은데 아닌가요?? 레디스 자체는 싱슬스레드이니 레디스를 찌를때는 무조건 하나씩만 들어가겠지만 스레드 1은 레디스에 찌르고 값을 받아온 후 본인의 비즈니스 로직 수행할때 스레드2가 레디스 서버에 찌를 수는 없는건가요? 제가 이렇게 이해한 부분이 잘못된 것인지, 아니면 제가 강의 설명을 오해한 것인지 혼란스러워 질문을 드리게 되었습니다.
-
미해결스프링 부트 - 핵심 원리와 활용
Thread Config Max 패널 설정 변경 질문
tomcat_threads_config_max_threads로 설정을 했는데 왜 200이 안뜨고 계속 N/A 로 되어있는지 의문입니다. 서버, 프로메테우스도 다 켜져있는데 뭐가 문제일까요?