묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Gateway와 Discovery를 사용한 무중단 서비스 방법
안녕하세요 선생님? 강의 정말 잘보고있습니다. 감사합니다. 다름이 아니라 강의 내용처럼 따라서 잘구성해보았습니다. 잘돌아갑니다. 그런데 해결하고 싶은게 있습니다.동일 서비스 중 하나가 중단됬을때 Gateway가 LB방식이라 중단된줄 모르고 중단된 서비스로 요청이 들어갑니다. 그러다보니 Connection 오류가 납니다. 대략 30초에서 1분 이후부터는 살아있는 서비스로만 요청이가서 잘 동작합니다. 만약 운영중이라면 30초에서 1분동안은 서비스가 불안할텐데 어떡하면 해결할 수 있을까요? 시스템 구성은 다음과 같습니다. GW <-> Discovery <-> 동일서비스 #3개(만약 #2번이 다운됬을때 #2번 서비스가 호출되어 서비스가 됬다 안됬다 하는 현상발생)좋은 방법이나 예제가 있으면 감사하겠습니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
next와 spring
안녕하세요 . 제로초님 . 제가 친구랑 토이프로젝트 중인데 친구는 spring으로 백을 구현했는데 제가 back에서 데이터를 가져와 ui를 구성하려면 어떤식으로 코드를 짜야하나요
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
카프카 에러 시
카프카 설정을 잘못하여 에러를 발생시켜 보았는데 아래와 같은 메세지를 출력하며 계속 연결을 시도하는 것을 확인했습니다.Connection to node -1 (/127.0.0.1:9092) could not be established. Broker may not be available.Bootstrap broker 127.0.0.1:9092 (id: -1 rack: null) disconnectedNode -1 disconnected.혹시 이러한 경우 몇번만 연결을 시도하고 예외를 발생시킨다거나 하는 방법이 있을까요?? 추가로 이런 상황에서는 보통 어떤식으로 장애 대응을 하는지 궁금합니다. 브로커의 수를 늘리는 것도 이러한 상황을 방지할 수는 있겠지만, 결국 언제나 문제는 생길 수 있다고 생각하여 질문드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의 문제 난이도
안녕하세요, 이번 달에 강의를 듣기 시작한 학생입니다. 현재 알고리즘에 대한 지식이 있고 이전부터 코딩테스트 문제들을 조금씩 풀어본 상태입니다. 강사님의 강의를 아직 많이 들어보진 않았지만, 초반부를 듣다보니 궁금한 점이 생겨 이렇게 여쭤봅니다.강사님께서 강의를 하시는 문제들이 백준에서 어느정도 난이도인지 궁금합니다...보통 대기업의 코딩테스트를 보려면 '골드 몇 이상, 실버 몇 이상, 플레 몇 이상'이라고 하는데,제가 수강한 강의 앞부분은 대체로 쉬워서인지 대기업을 준비하는 입장의 난이도는 아니라고 생각합니다...혹시 뒷부분에 있는 문제 난이도가 어느정도인지 알 수 있을 까요??감사합니다.
-
미해결스프링 시큐리티
타임리프 강의도 있나요?
타임리프 강의도 찍으실 생각있으신가요?저는 공식문서보고 하기에는 너무 어렵네요..타임리프 강의는 유튜브에도 없고 JSP 강의는 많은데..타임리프 강의는 한개도 없는것 같습니다..
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
사가 부분 계속 확인했는데도 로그인이 안됩니다. ㅠ
```sagas/user.ts import axios from "axios"; import { all, delay, fork, put, takeLatest } from "redux-saga/effects"; import { LOG_IN_FAILURE, LOG_IN_REQUEST, LOG_IN_SUCCESS, LOG_OUT_FAILURE, LOG_OUT_REQUEST, LOG_OUT_SUCCESS, SIGN_UP_FAILURE, SIGN_UP_REQUEST, SIGN_UP_SUCCESS, } from "../reducers/user"; function loginAPI(data: any) { return axios.post("/api/login", data); } function* logIn(action: any) { try { yield delay(1000); yield put({ type: LOG_IN_SUCCESS, data: action.data, }); } catch (error: any) { yield put({ type: LOG_IN_FAILURE, error: error.response.data, }); } } function logoutAPI() { return axios.post("/api/login"); } function* logOut() { try { yield delay(1000); yield put({ type: LOG_OUT_SUCCESS, }); } catch (error: any) { yield put({ type: LOG_OUT_FAILURE, error: error.response.data, }); } } function signUpAPI() { return axios.post("/api/signUp"); } function* signUp() { try { yield delay(1000); yield put({ type: SIGN_UP_SUCCESS, }); } catch (error: any) { yield put({ type: SIGN_UP_FAILURE, error: error.response.data, }); } } function* watchLogin() { console.log("사가로그인 리스너 "); yield takeLatest(LOG_IN_REQUEST, logIn); } function* watchLogOut() { yield takeLatest(LOG_OUT_REQUEST, logOut); } function* watchSignUp() { yield takeLatest(SIGN_UP_REQUEST, signUp); } export default function* userSaga() { yield all([fork(watchLogin), fork(watchLogOut), fork(watchSignUp)]); } ``` ```sagas/index.ts import { all, fork } from "redux-saga/effects"; import postSaga from "./post"; import userSaga from "./user"; export default function* rootSaga() { yield all([fork(postSaga), fork(userSaga)]); } ``` ```reducers/user.ts export const initialState = { logInLoading: false, logInDone: false, logInError: null, logOutLoading: false, logOutDone: false, logOutError: null, signUpLoading: false, signUpDone: false, signUpError: null, changeNicknameLoading: false, changeNicknameDone: false, changeNicknameError: null, me: null, signUpData: {}, loginData: {}, }; export const LOG_IN_REQUEST = "LOG_IN_REQUEST"; export const LOG_IN_SUCCESS = "LOG_IN_SUCCESS"; export const LOG_IN_FAILURE = "LOG_IN_FAILURE"; export const LOG_OUT_REQUEST = "LOG_OUT_REQUEST"; export const LOG_OUT_SUCCESS = "LOG_OUT_SUCCESS"; export const LOG_OUT_FAILURE = "LOG_OUT_FAILURE"; export const SIGN_UP_REQUEST = "SIGN_UP_REQUEST"; export const SIGN_UP_SUCCESS = "SIGN_UP_SUCCESS"; export const SIGN_UP_FAILURE = "SIGN_UP_FAILURE"; export const CHANGE_NICKNAME_REQUEST = "CHANGE_NICKNAME_REQUEST"; export const CHANGE_NICKNAME_SUCCESS = "CHANGE_NICKNAME_SUCCESS"; export const CHANGE_NICKNAME_FAILURE = "CHANGE_NICKNAME_FAILURE"; export const FOLLOW_REQUEST = "FOLLOW_REQUEST"; export const FOLLOW_SUCCESS = "FOLLOW_SUCCESS"; export const FOLLOW_FAILURE = "FOLLOW_FAILURE"; export const UNFOLLOW_REQUEST = "UNFOLLOW_REQUEST"; export const UNFOLLOW_SUCCESS = "UNFOLLOW_SUCCESS"; export const UNFOLLOW_FAILURE = "UNFOLLOW_FAILURE"; const dummyUser = (data: any) => ({ ...data, nickname: "GIYEON", id: 1, Posts: [], Followings: [], Followers: [], }); //action export const loginRequestAction = (data: any) => { return { type: LOG_IN_REQUEST, data, }; }; export const logoutRequestAction = () => { return { type: LOG_OUT_REQUEST, }; }; const reducer = (state: any = initialState, action: any) => { switch (action.type) { case LOG_IN_REQUEST: return { ...state, logInLoading: true, logInError: null, logInDone: false, }; case LOG_IN_SUCCESS: return { ...state, logInLoading: false, logInDone: true, me: dummyUser(action.data), }; case LOG_IN_FAILURE: return { ...state, logInLoading: false, logInError: action.error, }; case LOG_OUT_REQUEST: return { ...state, logOutLoading: true, logOutDone: false, logOutError: null, }; case LOG_OUT_SUCCESS: return { ...state, logOutLoading: false, logOutDone: true, me: null, }; case LOG_OUT_FAILURE: return { ...state, logOutLoading: false, logOutError: action.error, }; case SIGN_UP_REQUEST: return { ...state, signUpLoading: true, signUpDone: false, signUpError: null, }; case SIGN_UP_SUCCESS: return { ...state, signUpLoading: false, signUpDone: true, }; case SIGN_UP_FAILURE: return { ...state, signUpLoading: false, signUpError: action.error, }; case CHANGE_NICKNAME_REQUEST: return { ...state, changeNicknameLoading: true, changeNicknameDone: false, changeNicknameError: null, }; case CHANGE_NICKNAME_SUCCESS: return { ...state, changeNicknameLoading: false, changeNicknameDone: true, }; case CHANGE_NICKNAME_FAILURE: return { ...state, changeNicknameLoading: false, changeNicknameError: action.error, }; default: return state; } }; export default reducer; ``` logInLoading true까지 되고 로그인 무한 로딩이 걸립니다.뭐가 문제일까요 ..
-
미해결
IntelliJ 설치 후 실행 오류
이번에 스프링을 배워보고자 인프런을 찾게 되었습니다.강의 내용에 따라 자바 11버전을 다운 받고 IntelliJ 커뮤니티 버전을 설치해서 실행을 하려는데아래 문장이 뜨면서 실행 자체가 안되네요 검색을 해봐도 나오질 않아서 해결방법이 있나 여쭙습니다. Internal error. Please refer to https://jb.gg/ide/critical-startup-errorsjava.lang.SecurityException: Could not open windows registry node Software\JavaSoft\Prefs at root 0xffffffff80000001: Access denied at java.prefs/java.util.prefs.WindowsPreferences.openKey(WindowsPreferences.java:554) at java.prefs/java.util.prefs.WindowsPreferences.openKey(WindowsPreferences.java:516) at java.prefs/java.util.prefs.WindowsPreferences.openKey(WindowsPreferences.java:502) at java.prefs/java.util.prefs.WindowsPreferences.removeSpi(WindowsPreferences.java:703) at java.prefs/java.util.prefs.AbstractPreferences.remove(AbstractPreferences.java:336) at com.intellij.ide.Prefs.put(Prefs.java:19) at com.intellij.ide.gdpr.EndUserAgreement.setAccepted(EndUserAgreement.java:80) at com.intellij.ide.gdpr.Agreements$applyUserAgreement$2.invoke(Agreements.kt:60) at com.intellij.ide.gdpr.Agreements$applyUserAgreement$2.invoke(Agreements.kt) at com.intellij.ide.gdpr.AgreementUi$setAcceptButton$1.actionPerformed(AgreementUi.kt:219) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972) at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2313) at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405) at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6648) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3392) at java.desktop/java.awt.Component.processEvent(Component.java:6413) at java.desktop/java.awt.Container.processEvent(Container.java:2266) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5022) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2802) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:781) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:730) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:724) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:754) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:752) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:751) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:402) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:121) at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234) at java.base/java.security.AccessController.doPrivileged(AccessController.java:318) at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234) at java.desktop/java.awt.Dialog.show(Dialog.java:1080) at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:712) at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:453) at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1672) at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1630) at com.intellij.ide.gdpr.Agreements.showEndUserAndDataSharingAgreements(Agreements.kt:19) at com.intellij.idea.StartupUtil.lambda$showEuaIfNeeded$25(StartupUtil.java:607) at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:779) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:730) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:724) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:749) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:402) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)-----Your JRE: 17.0.4+7-b469.53 amd64 (JetBrains s.r.o.)C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.2.2\jbr
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
저도 낙관락쪽 테스트케이스 돌리면 무한루프 빠지는데 봐주실 수 있으신가요?
도움 부탁드립니다. (_ _)https://github.com/KIYOUNGYI/stock
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
코틀린 관련 서적 질문드려요
초보자용 입문서로 좋은 책 있을까요?
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
boardMapper sql 쿼리문 작성 질문
<select id="boardContent" resultType="kr.board.entity.Board"> select * from myboard where idx=#{idx} </select><delete id="boardDeLete" parameterType="int"> delete from board where idx=#{idx} </delete> BoardMapper.xml에서 쿼리문을 작성할 때parameterType="int"는 단일변수라서 생략해도되고 안해도되는것은 알겠는데delete문에선 resultType="kr.board.entity.Board"는 왜 안들어가는지 궁금합니다.
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Response 클래스
안녕하세요! Response 클래스가 필요하다는 것은 잘 이해했습니다.그런데 Response 클래스를 서비스가 아닌 컨트롤러에서 변환하는 것은 어떻게 생각하시나요? 서비스에서는 리포지토리에서 엔티티를 반환받아서, 컨트롤러에 엔티티를 전달하고 컨트롤러에서 엔티티를 Response로 변환하여 리턴하는 식으로 현재 개발을 해봤는데요. 생각을 좀 해보니까, 엔티티를 Response로 변환하는 것을 비즈니스 로직이라고 생각하면 서비스에 포함시키는게 맞는것 같고..뭔가 Response는 화면UI 에 따라 자주 변할 수 있는 가능성이 많으니까 차라리 서비스는 항상 엔티티만 리턴하고 컨트롤러에서 UI에 맞게 변환만 해서 반환하는 것도 나쁘지 않다고 생각했는데요. 혹시 어떤 방법이 실무에서 자주 쓰이는지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
modelAttribute를 사용하여 객체를 생성하는것과 커맨드 객체를 사용하여 객체를 생성하는것은 어떤 차이점이 있나요?
스프링을 학습할때 modelAttribute와 비슷한 기능을 수행하여주는커맨드 객체 라는것을 학습한적이 있었습니다둘다 요청받은 파라매터를 사용하여 자동으로객체를 만들어 준다는것 까지 똑같은거 같은데modelAttribute가 model에 자동으로 바인딩 시켜준다는것 이외에커맨드 객체와의 차이점이 있나요?
-
미해결15일간의 빅데이터 파일럿 프로젝트
VM 버전
VM 5.0.40 버전이 다운이 클릭이 안됩니다 다른 버전으로 하면 안되나요?
-
미해결홍정모의 따라하며 배우는 C언어
int_least_t
이번 강의에서 배운 int_least8_t, int_fast_f 등등과 같은것들은 많이 사용되는 것들인가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일
일대일에서 외래키에 유니크 제약 조건을 추가한다고 되어 있는데 자바 코드 내에서는 그런조건을 안줘도 데이터베이스 내부에서 자동으로 주는 건가요?
-
미해결스프링 시큐리티
안녕하세요. 강사님 문의 드릴게 있습니다.
제가 스프링으로 사이트를 제작하다가 부족함을 느끼고, 강좌를 찾았는데 너무 좋은 강좌를 찾게 된거 같습니다. 그래서 제가 공부를 정리하려고 만든 블로그가 있는데 그곳에 강좌에서 배운 내용을 정리해서 올려도 괜찮을까요? 출처도 표기하겠습니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
연습문제(달팽이) 21분:59초 질문
int nextX = x+ dx[dir];로 선언해주셨는데, 만약에 cin >> N 값에 3을 입력하면 dir이 Right의 방향을 가리키고 있다가 down으로 nextX=3이 되면 방향이 전환된 후 int nextX = x+ dx[dir];을 거치면 nextX 가 2값을 갖게 되는 데 왜 그런지 잘 모르겠습니다..
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
persistence.xml, pom.xml 오류 발생 및 entity 적용 불가 관련 질문드립니다
앞선 강의에서 사용했던 persistence.xml, pom.xml을 그대로 복사해서 붙였는데 에러가 납니다.1. persistence.xml 의 경우 xmlns="http://xmlns.jcp.org/xml/ns/persistence" URI is not registeded2. pom.xml 의 경우dependency 부분에서 invalid content was found~ 라고 에러 메시지가 뜹니다3. Member 클래스 Entity 어노테이션이 적용되지 않습니다* jdk, java 언어는 모두 11임을 확인했습니다persistence.xmlpom.xmlEntity 어노테이션 적용 불가 관련
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]
WAR 파일이 생성이 안됩니다.
현재 지금 eGovFrame-4.0.0 을 사용하고 있는 중입니다., 강의 내용대로 EXPORT 하기 위해 WAR file을 생성해준 뒤,C드라이브에 들어가보면war파일이 정상적으로 생성이 되지 않습니다.(압축 풀기 이런것도 없습니다.) 이것 저것 연결 프로그램도 바꿔보면서 해보았는데,해결책을 찾지 못하였습니다. 어떻게 해야하나요?
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
질문 있습니다 ㅠ mysql 관련이요 ㅠ
수업에는 없는 내용이긴 한데 ㅠsequelize 안쓰고 mysql로 연동을 해보았는데요 ㅠ로컬에서는 정상 작동 하는데 배포를 하면 mysql 연동이 안됩니다 ㅠ코드는// db>index.js const mysql = require('mysql2') module.exports = mysql.createConnection({ // host: process.env.HOST || 'localhost', host: '127.0.0.1', user: 'root', password: process.env.DBPWD, database: process.env.SCHEMA, multipleStatements: true }) // .env DBPWD = "password" SCHEMA = "usedb" HOST = "127.0.0.1" // routes > main.js const router = express.Router(); const sql_con = require('../db/index'); router.get('/test', async (req, res) => { let testSql = `SELECT * FROM application_form`; // const results = await sql_con.promise().query(testSql) sql_con.query(testSql, (err, result) => { console.log(result); }) res.send('testtestsetsetset') }) 로컬에서는 정상 작동 하는데 배포를 하면 mysql 연동이 안되는데 ㅠ설정에 문제가 있는걸까요??현재 3060포트 물려서 HTTPS 로 돌리고 있는데 그것때문에 그런걸까요?? ㅠ혹시나 해서 host를 127.0.0.1:3306이렇게 해봤는데도 데이터를 못읽습니다 ㅠ어떤게 문제고 어떻게 해결해야할까요?? ㅠㅠㅠㅠ