inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

174만명의 커뮤니티!! 함께 토론해봐요.

제공텍스트

미해결

[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드

선생님 어디 있는지 못 찾겠습니다. A : Navigation 제공된 PDF 파일 4)사이트맵 참고

  • 웹 디자인
  • jquery
  • HTML/CSS
bimil1121 댓글 1 좋아요 1 조회수 236

18:43 jquery 파일 들고오는 부분 에러납니다.

미해결

스프링 시큐리티

강사님 코드처럼 제이쿼리파일을 헤드안에 다 두면 크롬 소스탭으로 보면 제이쿼리 파일이 보이질 않아서 헤드 시작전에 따로 제이쿼리 불러오는 헤드 밖으로 뺏습니다. 그런데 아래와 같은 에러가 계속 나고있습니다. 원인을 모르겠습니다..

  • java
  • Spring Security
  • spring-boot
bigger 댓글 1 좋아요 0 조회수 562

3.11강 21분

미해결

홍정모의 따라하며 배우는 C언어

0x1.1P1을 0xb.aP1로 바꿨는데 어떻게 1.1이 b.a가 되는건가요?

  • c
jdna1009 댓글 1 좋아요 0 조회수 266

하나의 컨슈머가 서로 다른 토픽을 subscribe하면

미해결

카프카 완벽 가이드 - 코어편

강의 예시로 들어주신 것 처럼 하나의 컨슈머가 서로 다른 토픽을 subscribe해서 서로 다른 메시지를 취합(?)해서 새로운 데이터를 생성하여 DB에 적재하거나 다른 토픽으로 전송하신다고 하셨는데요. A 토픽에 들어오는 메시지와 B 토픽에 들어오는 메시지의 짝(?)을 어떻게 맞출 수 있나요...? 예시처럼 A 토픽에서 poll한 메시지의 order-id 는 1인데, B토픽에서 poll한 메시지의 order-id는 2인 경우에는 취합할 수 없는 데이터이기 때문에, B토픽에서 poll하는 메시지의 order-id가 1이 나올 때까지 어떠한 조치를 취해야 하지 않을까라는 생각이 들었습니다.

  • 데이터 엔지니어링
  • Kafka
이화평 댓글 2 좋아요 0 조회수 653

.env 와 Config 원리

미해결

배달앱 클론코딩 [with React Native]

어째서 .env에 적힌 키=값이, Signup.tsx에서 Config.키 = 값으로 사용될 수 있는지 궁금합니다. react-native-config 모듈이 자동적으로 파일중에 .env파일을 찾아서, 그 안에 있는 값을을 Config.키 로 접근할 수 있게 해주는 건가요?

  • react-native
이민석 댓글 1 좋아요 0 조회수 311

selenium 부분에서 문제가 있는 것 같습니다.

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

과제 수행 중 selenium을 이용한 크롬 실행이 안되는것같아 기존에 정상적으로 작동했던 코드도 돌려보니 실행이 되지 않고 이런 메세지가 뜹니다. 브라우저 버전문제라고 하는것같아서 셀리니움 기본설정 코드로 자동 업데이트도 실행해보았는데 그 코드는 정상적으로 작동하지만 여전히 같은 메세지가 발생합니다. 어떻게 해결해야 하나요?

  • python
  • 웹-크롤링
ljmean0327 댓글 1 좋아요 1 조회수 245

트와이스 앱 만들기 '==' 에러

미해결

[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)

복치님 안녕하세요 if(getData == "2") 이 부분이 에러가 뜨는데 문자열로 바꾸라는것 같은데 "2" 이게 문자열 아닌가용 도저히 뭐를 어떻게 바꿔야 하는지를 모르겠어요 ㅜㅜ package com.example.twiceapplication import android.os.Bundle import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity class ImageInsideActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_imageinside) val getData = intent.getStringArrayExtra("data") val memberImage = findViewById<ImageView>(R.id.memberImageArea) // Toast.makeText(this, getData, Toast.LENGTH_LONG).show() if(getData == "1"){ memberImage.setImageResource(R.drawable.member_1) } if(getData == "2") { memberImage.setImageResource(R.drawable.member_2) } if(getData == "3") { memberImage.setImageResource(R.drawable.member_3) } if(getData == "4") { memberImage.setImageResource(R.drawable.member_4) } if(getData == "5") { memberImage.setImageResource(R.drawable.member_5) } if(getData == "6") { memberImage.setImageResource(R.drawable.member_6) } if(getData == "7") { memberImage.setImageResource(R.drawable.member_7) } if(getData == "8") { memberImage.setImageResource(R.drawable.member_8) } if(getData == "9") { memberImage.setImageResource(R.drawable.member_9) } } }

  • firebase
  • android
  • kotlin
안현정 댓글 2 좋아요 0 조회수 310

Gateway와 Discovery를 사용한 무중단 서비스 방법

해결됨

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

안녕하세요 선생님? 강의 정말 잘보고있습니다. 감사합니다. 다름이 아니라 강의 내용처럼 따라서 잘구성해보았습니다. 잘돌아갑니다. 그런데 해결하고 싶은게 있습니다. 동일 서비스 중 하나가 중단됬을때 Gateway가 LB방식이라 중단된줄 모르고 중단된 서비스로 요청이 들어갑니다. 그러다보니 Connection 오류가 납니다. 대략 30초에서 1분 이후부터는 살아있는 서비스로만 요청이가서 잘 동작합니다. 만약 운영중이라면 30초에서 1분동안은 서비스가 불안할텐데 어떡하면 해결할 수 있을까요? 시스템 구성은 다음과 같습니다. GW <-> Discovery <-> 동일서비스 #3개(만약 #2번이 다운됬을때 #2번 서비스가 호출되어 서비스가 됬다 안됬다 하는 현상발생) 좋은 방법이나 예제가 있으면 감사하겠습니다.

  • msa
  • Kafka
  • spring-boot
  • architecture
  • JPA
  • spring-cloud
Jin J 댓글 1 좋아요 1 조회수 572

next와 spring

미해결

[리뉴얼] React로 NodeBird SNS 만들기

안녕하세요 . 제로초님 . 제가 친구랑 토이프로젝트 중인데 친구는 spring으로 백을 구현했는데 제가 back에서 데이터를 가져와 ui를 구성하려면 어떤식으로 코드를 짜야하나요

  • redux
  • express
  • react
  • nodejs
  • Next.js
박경빈 댓글 2 좋아요 0 조회수 263

카프카 에러 시

미해결

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) disconnected Node -1 disconnected. 혹시 이러한 경우 몇번만 연결을 시도하고 예외를 발생시킨다거나 하는 방법이 있을까요?? 추가로 이런 상황에서는 보통 어떤식으로 장애 대응을 하는지 궁금합니다. 브로커의 수를 늘리는 것도 이러한 상황을 방지할 수는 있겠지만, 결국 언제나 문제는 생길 수 있다고 생각하여 질문드립니다.

  • msa
  • Kafka
  • JPA
  • spring-boot
  • architecture
  • spring-cloud
신동훈 댓글 1 좋아요 0 조회수 756

강의 문제 난이도

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요, 이번 달에 강의를 듣기 시작한 학생입니다. 현재 알고리즘에 대한 지식이 있고 이전부터 코딩테스트 문제들을 조금씩 풀어본 상태입니다. 강사님의 강의를 아직 많이 들어보진 않았지만, 초반부를 듣다보니 궁금한 점이 생겨 이렇게 여쭤봅니다. 강사님께서 강의를 하시는 문제들이 백준에서 어느정도 난이도인지 궁금합니다... 보통 대기업의 코딩테스트를 보려면 '골드 몇 이상, 실버 몇 이상, 플레 몇 이상'이라고 하는데, 제가 수강한 강의 앞부분은 대체로 쉬워서인지 대기업을 준비하는 입장의 난이도는 아니라고 생각합니다... 혹시 뒷부분에 있는 문제 난이도가 어느정도인지 알 수 있을 까요?? 감사합니다.

  • C++
  • 코테 준비 같이 해요!
wlsdnr929 댓글 1 좋아요 0 조회수 341

타임리프 강의도 있나요?

미해결

스프링 시큐리티

타임리프 강의도 찍으실 생각있으신가요? 저는 공식문서보고 하기에는 너무 어렵네요.. 타임리프 강의는 유튜브에도 없고 JSP 강의는 많은데.. 타임리프 강의는 한개도 없는것 같습니다..

  • Spring Security
  • spring-boot
  • java
bigger 댓글 1 좋아요 0 조회수 313

사가 부분 계속 확인했는데도 로그인이 안됩니다. ㅠ

미해결

[리뉴얼] 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까지 되고 로그인 무한 로딩이 걸립니다. 뭐가 문제일까요 ..

  • Next.js
  • nodejs
  • redux
  • express
  • react
김주호 댓글 1 좋아요 0 조회수 285

IntelliJ 설치 후 실행 오류

미해결

이번에 스프링을 배워보고자 인프런을 찾게 되었습니다. 강의 내용에 따라 자바 11버전을 다운 받고 IntelliJ 커뮤니티 버전을 설치해서 실행을 하려는데 아래 문장이 뜨면서 실행 자체가 안되네요 검색을 해봐도 나오질 않아서 해결방법이 있나 여쭙습니다. Internal error. Please refer to https://jb.gg/ide/critical-startup-errors java.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

zerg_dark 댓글 0 좋아요 0 조회수 537

코틀린 관련 서적 질문드려요

미해결

[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)

초보자용 입문서로 좋은 책 있을까요?

  • kotlin
  • firebase
  • android
citadels1 댓글 1 좋아요 0 조회수 261

boardMapper sql 쿼리문 작성 질문

미해결

스프링 프레임워크는 내 손에 [스프1탄]

<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"는 왜 안들어가는지 궁금합니다.

  • jsp
  • MVC
  • Spring Security
  • spring
김성규 댓글 1 좋아요 0 조회수 262

Response 클래스

미해결

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

안녕하세요! Response 클래스가 필요하다는 것은 잘 이해했습니다. 그런데 Response 클래스를 서비스가 아닌 컨트롤러에서 변환하는 것은 어떻게 생각하시나요? 서비스에서는 리포지토리에서 엔티티를 반환받아서, 컨트롤러에 엔티티를 전달하고 컨트롤러에서 엔티티를 Response로 변환하여 리턴하는 식으로 현재 개발을 해봤는데요. 생각을 좀 해보니까, 엔티티를 Response로 변환하는 것을 비즈니스 로직이라고 생각하면 서비스에 포함시키는게 맞는것 같고.. 뭔가 Response는 화면UI 에 따라 자주 변할 수 있는 가능성이 많으니까 차라리 서비스는 항상 엔티티만 리턴하고 컨트롤러에서 UI에 맞게 변환만 해서 반환하는 것도 나쁘지 않다고 생각했는데요. 혹시 어떤 방법이 실무에서 자주 쓰이는지 궁금합니다.

  • Spring Security
  • vuejs
  • spring-boot
  • JPA
  • aws
잠꾸 댓글 2 좋아요 2 조회수 501

modelAttribute를 사용하여 객체를 생성하는것과 커맨드 객체를 사용하여 객체를 생성하는것은 어떤 차이점이 있나요?

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

스프링을 학습할때 modelAttribute와 비슷한 기능을 수행하여주는 커맨드 객체 라는것을 학습한적이 있었습니다 둘다 요청받은 파라매터를 사용하여 자동으로 객체를 만들어 준다는것 까지 똑같은거 같은데 modelAttribute가 model에 자동으로 바인딩 시켜준다는것 이외에 커맨드 객체와의 차이점이 있나요?

  • MVC
  • spring
class hura 댓글 1 좋아요 0 조회수 289

인기 태그

인프런 TOP Writers

주간 인기글