묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
커넥션 풀 관련 질문 드립니다.
안녕하세요 항상 강의 잘 듣고 있습니다. 커넥션풀을 기본으로 사용해야된다고 이해를 했는데hikaricp 의 경우 기본이 10개입니다.그런데 tomcat thread 의 경우 기본이 200개던데요청이 많이 오는 경우 둘다 기본으로 사용하면 thread pool에 비해 thread가 너무 많이 생성이 돼서 서비스 운영시 문제가 될거 같은데실 서비스에서 저렇게 기본 값으로 많이 사용하는지 궁금합니다!
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
SentenceActivity에서 Binding 사용 안됨(?)
안녕하세요 :) 수업 잘 듣고 있습니다!질문 내용은...1. SentenceActivity에서는 binding을 사용하지 않으신 이유가 궁금합니다.2. 혼자서 해봤는데SentenceActivity에서는 binding에서 listview의 id 값이 찾아지질 않더라구요..이유가 궁금합니다.미리 감사드립니다. :)좋은 하루되세요.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
weightTextField에서 엔터를 눌러도 키보드가 안내려가는 문제(활용앱 37강 07:00)
extension ViewController: UITextFieldDelegate { func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if Int(string) != nil || string == "" { return true }// 글자 입력을 허용 return false // 글자 입력을 허용하지 않음 } func textFieldShouldReturn(_ textField: UITextField) -> Bool { // 두개의 텍스트필드를 모두 종료 (키보드 내려가기) if heightTextField.text != "", weightTextField.text != "" { weightTextField.resignFirstResponder() return true // 두번째 텍스트필드로 넘어가도록 } else if heightTextField.text != "" { weightTextField.becomeFirstResponder() return true } return false } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { heightTextField.resignFirstResponder() weightTextField.resignFirstResponder() } } 위와 같이 입력을 했는데 두 텍스트필드를 입력하고 엔터를 누르면 밑 사진처럼 숫자 입력 키보드에서 한글 입력 키보드로 바뀌기만 할 뿐 키보드가 내려가지 않습니다.. 무엇이 문제일까요??저 상태에서 화면 다른 부분을 터치했을 때 내려가긴 합니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
post 에서 작성 후 mainPosts.map 에서 key={post.id} 가 undefined 로 나옵니다.
에러메세지:ADD_POST_SUCCESS 까지 잘 되었고 content 에 id 도 잘 들어가 있는걸로 보입니다. pages/index.jsimport React, { useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; import AppLayout from "../components/AppLayout"; import PostCard from "../components/PostCard"; import PostForm from "../components/postForm"; import { LOAD_POSTS_REQUEST } from "../reducers/post"; import { LOAD_USER_REQUEST } from "../reducers/user"; const Home = () => { const me = useSelector((state) => state.user.me); const { mainPosts, hasMorePosts, isLoadingPosts } = useSelector( (state) => state.post ); const dispatch = useDispatch(); useEffect(() => { dispatch({ type: LOAD_USER_REQUEST, }); dispatch({ type: LOAD_POSTS_REQUEST, }); }, []); useEffect(() => { function onScroll() { if ( window.scrollY + document.documentElement.clientHeight > document.documentElement.scrollHeight - 300 ) { if (hasMorePosts && !isLoadingPosts) { dispatch({ type: LOAD_POSTS_REQUEST, }); } } } window.addEventListener("scroll", onScroll); return () => { window.removeEventListener("scroll", onScroll); }; }, []); return ( <AppLayout> {me && <PostForm />} {mainPosts.map((post) => ( <PostCard key={post.id} post={post} /> ))} </AppLayout> ); }; export default Home; reducers/post.jsimport produce from "immer"; export const initialState = { mainPosts: [], imagePaths: [], hasMorePosts: true, isAddingPost: false, isAddedPost: false, isAddPostErr: null, isRemovingPost: false, isRemovedPost: false, isRemovePostErr: null, isAddingComment: false, isAddedComment: false, isAddCommentErr: null, isRemovingComment: false, isRemovedComment: false, isRemoveCommentErr: null, isLoadingPosts: false, isLoadedPosts: false, isLoadPostsErr: null, }; export const LOAD_POSTS_REQUEST = "LOAD_POSTS_REQUEST"; export const LOAD_POSTS_SUCCESS = "LOAD_POSTS_SUCCESS"; export const LOAD_POSTS_FAILURE = "LOAD_POSTS_FAILURE"; export const ADD_POST_REQUEST = "ADD_POST_REQUEST"; export const ADD_POST_SUCCESS = "ADD_POST_SUCCESS"; export const ADD_POST_FAILURE = "ADD_POST_FAILURE"; export const REMOVE_POST_REQUEST = "REMOVE_POST_REQUEST"; export const REMOVE_POST_SUCCESS = "REMOVE_POST_SUCCESS"; export const REMOVE_POST_FAILURE = "REMOVE_POST_FAILURE"; export const ADD_COMMENT_REQUEST = "ADD_COMMENT_REQUEST"; export const ADD_COMMENT_SUCCESS = "ADD_COMMENT_SUCCESS"; export const ADD_COMMENT_FAILURE = "ADD_COMMENT_FAILURE"; export const addPost = (data) => ({ type: ADD_POST_REQUEST, data, }); const reducer = (state = initialState, action) => { return produce(state, (draft) => { switch (action.type) { case ADD_POST_REQUEST: draft.isAddingPost = true; draft.isAddedPost = false; draft.isAddPostErr = null; break; case ADD_POST_SUCCESS: draft.isAddingPost = false; draft.mainPosts.unshift(action.data); draft.isAddedPost = true; break; case ADD_POST_FAILURE: draft.isAddingPost = false; draft.isAddedPost = false; draft.isAddPostErr = action.error; break; case REMOVE_POST_REQUEST: draft.isRemovingPost = true; draft.isRemovedPost = false; draft.isRemovePostErr = null; break; case REMOVE_POST_SUCCESS: draft.isRemovingPost = false; draft.mainPosts = state.mainPosts.filter((v) => v.id !== action.data); draft.isRemovedPost = true; draft.isRemovePostErr = null; break; case REMOVE_POST_FAILURE: draft.isRemovingPost = false; draft.isRemovedPost = false; draft.isRemovePostErr = action.error; break; case ADD_COMMENT_REQUEST: draft.isAddingComment = true; draft.isAddedComment = false; draft.isAddCommentErr = null; break; case ADD_COMMENT_SUCCESS: draft.isAddingComment = false; const post = draft.mainPosts.find((v) => v.id === action.data.PostId); post.Comments.unshift(action.data); draft.isAddedComment = true; break; case ADD_COMMENT_FAILURE: draft.isAddingComment = false; draft.isAddedComment = false; draft.isAddCommentErr = action.error; break; case LOAD_POSTS_REQUEST: draft.isLoadingPosts = true; draft.isLoadedPosts = false; draft.isLoadPostsErr = null; break; case LOAD_POSTS_SUCCESS: draft.isLoadingPosts = false; draft.mainPosts = draft.mainPosts.concat(action.data); draft.isLoadedPosts = true; break; case LOAD_POSTS_FAILURE: draft.isLoadingPosts = false; draft.isLoadedPosts = false; draft.isLoadPostsErr = action.error; break; default: break; } }); }; export default reducer;sagas/post.jsimport { delay, all, fork, put, takeLatest, call } from "redux-saga/effects"; import axios from "axios"; import { ADD_POST_REQUEST, ADD_POST_SUCCESS, ADD_POST_FAILURE, ADD_COMMENT_FAILURE, ADD_COMMENT_SUCCESS, ADD_COMMENT_REQUEST, REMOVE_POST_REQUEST, REMOVE_POST_SUCCESS, REMOVE_POST_FAILURE, LOAD_POSTS_REQUEST, LOAD_POSTS_SUCCESS, LOAD_POSTS_FAILURE, } from "../reducers/post"; import { ADD_POST_TO_ME, REMOVE_POST_FROM_ME } from "../reducers/user"; function addPostAPI(data) { return axios.post( "/post", { content: data }, { withCredentials: true, } ); } function* addPost(action) { try { const result = yield call(addPostAPI, action.data); yield put({ type: ADD_POST_SUCCESS, content: result.data }); yield put({ type: ADD_POST_TO_ME, data: result.data.id, }); } catch (err) { console.log(err); yield put({ type: ADD_POST_FAILURE, error: err.response.data, }); } } function removePostAPI(data) { return axios.delete("/post", data); } function* removePost(action) { try { yield delay(1000); yield put({ type: REMOVE_POST_SUCCESS, data: action.data, }); yield put({ type: REMOVE_POST_FROM_ME, data: action.data, }); } catch (err) { yield put({ type: REMOVE_POST_FAILURE, error: err.response.data, }); } } function addCommentAPI(data) { return axios.post(`/post/${data.postId}/comment`, data); //POST /post/1/comment } function* addComment(action) { try { const result = yield call(addCommentAPI, action.data); yield put({ type: ADD_COMMENT_SUCCESS, data: result.data }); } catch (err) { console.log(err); yield put({ type: ADD_COMMENT_FAILURE, error: err, }); } } function loadPostsAPI() { return axios.get(`/posts`); } function* loadPosts(action) { try { const result = yield call(loadPostsAPI, action.data); yield put({ type: LOAD_POSTS_SUCCESS, data: result.data }); } catch (err) { console.log(err); yield put({ type: LOAD_POSTS_FAILURE, error: err.response.data, }); } } function* watchAddPost() { yield takeLatest(ADD_POST_REQUEST, addPost); } function* watchRemovePost() { yield takeLatest(REMOVE_POST_REQUEST, removePost); } function* watchAddComment() { yield takeLatest(ADD_COMMENT_REQUEST, addComment); } function* watchLoadPosts() { yield takeLatest(LOAD_POSTS_REQUEST, loadPosts); } export default function* postSaga() { yield all([ fork(watchAddPost), fork(watchRemovePost), fork(watchAddComment), fork(watchLoadPosts), ]); }routes/posts.jsconst express = require("express"); const { Post, Image, User, Comment } = require("../models"); const router = express.Router(); router.get("/", async (req, res, next) => { // GET /posts try { const posts = await Post.findAll({ limit: 10, order: [ ["createdAt", "DESC"], [Comment, "createdAt", "DESC"], ], include: [ { model: User, attributes: ["id", "nickname"], }, { model: Image, }, { model: Comment, include: [{ model: User, attributes: ["id", "nickname"] }], }, ], }); res.status(200).json(posts); } catch (err) { console.error(err); next(err); } }); module.exports = router; sql 테이블도 잘 들어가있고, 새로 고침 하면 포스팅은 잘 되어 있습니다.
-
미해결[핵집] 2025 빅데이터 분석기사(필기)_과목 3~4
3~4과목 파일
1~2과목 교안 통합 파일은 받았습니다~3~4과목 파일도 요청드립니다!goodtc377@gmail.com입니다. 감사합니다.
-
미해결스프링 핵심 원리 - 고급편
자동 프록시 생성용 빈 후처리기의 반환된 프록시 빈 타입
토비의 스프링을 참고로 스프링 AOP를 공부하는 중 막히는 부분이 있어서 질문 남깁니다.현재 DefaultAdvisorAutoProxyCreator라는 자동 프록시 생성기를 스프링 빈으로 등록하고, 포인트컷과 트랜잭션 부가기능을 적용할 어드바이스를 조합한 Advisor를 통해 트랜잭션이 적용되는지 테스트를 하고 있습니다. 빈 후처리기를 이용한 프록시 자동생성 방식에서 빈 후처리기는 프록시 적용 대상에 대해 프록시를 생성하고, 생성된 프록시 오브젝트를 컨테이너에게 돌려준다고 알고 있습니다. 현재 프록시 자동생성기를 이용해 예외상황에서 트랜잭션 롤백이 되는지 테스트를 돌려보았고, 여기까지 잘 통과했습니다. 그리고 나서 컨테이너가 돌려준 서비스 빈의 타입을 확인하는 과정에서 질문이 있어 남깁니다.토비의 스프링 책에서 확인해보니 자동 프록시 생성기에 의해 프록시 오브젝트가 생성되어 돌려주기 때문에 해당 빈의 타입이 java.lang.reflect.Proxy.class이어야 한다고 했습니다. 그래서 다음과 같이 테스트를 진행했더니 오류가 발생했습니다.혹시 프록시 생성기를 통해 돌려줘야 하는 빈의 타입이 Proxy.class 타입이 맞는 것인지, 제 코드에 문제가 있어서 오류가 발생한 것인지 알고 싶습니다. 트랜잭션 롤백 테스트를 통과한 것을 보면 프록시가 잘 생성되어 어드바이저와 연결된 것 같은데, 어째서 타입이 다르다고 나오는지 알고 싶습니다.#추가스프링의 AOP 프록시를 찾다보니, 프록시를 만드는 방법이 JDK와 CGLIB 두 방식이 있는 것 같습니다. ProxyFactoryBean의 Proxy.newInstance 방식으로 만든 프록시가 아닌 경우 프록시가 CGLIB 방식으로 만들어지는 것인지 궁금합니다. 빈 후처리기가 내장된 프록시 생성기를 통해 프록시를 생성한다고 했는데, DefaultAdvisorAutoProxyCreator 후처리기는 CGLIB 방식을 사용하는 것일까요? 질문이 다소 두서없지만,, 답변 기다리겠습니다. 항상 감사합니다 :)##추추가JDK 다이내믹 프록시를 이용한 트랜잭션 테스트에 대해서 프록시 빈 타입을 확인해보니 java.lang.reflect.Proxy.class와 동일한 것을 확인했습니다!!! DefaultAdvisorAutoProxyCreator 후처리기가 반환하는 프록시는 CGLIB proxy가 맞는 걸 보아하니 스프링은 JDK 다이내믹 프록시가 아닌 프록시 생성은 CGLIB가 디폴트일까요?@Test public void advisorAutoProxyCreator() { assertThat(testUserService).isInstanceOf(java.lang.reflect.Proxy.class); }제 질문만으로 이해가 부족할 것 같아서 테스트 관련한 코드들을 같이 올립니다.@Configuration public class BeanPostProcessorConfig { @Bean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { return new DefaultAdvisorAutoProxyCreator(); } }@Configuration public class TxAdvisorConfig { private final TransactionAdvice advice; private final UserService userService; @Autowired public TxAdvisorConfig(TransactionAdvice advice, @Qualifier("userServiceImpl") UserService userService) { this.advice = advice; this.userService = userService; } @Bean public NameMatchClassMethodPointcut pointcut() { NameMatchClassMethodPointcut pointcut = new NameMatchClassMethodPointcut(); pointcut.setMappedClassName("*ServiceImpl"); pointcut.setMappedName("upgrade*"); return pointcut; } @Bean public DefaultPointcutAdvisor advisor() { return new DefaultPointcutAdvisor(pointcut(), this.advice); } }@Component public class TransactionAdvice implements MethodInterceptor { private PlatformTransactionManager transactionManager; @Autowired public void setTransactionManager(PlatformTransactionManager transactionManager) { this.transactionManager = transactionManager; } /** * 타깃을 호출하는 기능을 가진 콜백 오브젝트를 프록시로부터 받는다. * 덕분에 어드바이스는 특정 타깃에 의존하지 않고 재사용 가능하다. */ @Override public Object invoke(MethodInvocation invocation) throws Throwable { TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition()); try { /** * 콜백을 호출해서 타깃의 메서드를 실행한다. * 타깃 메서드 호출 전후로 필요한 부가기능을 넣을 수 있다. * 경우에 따라서 타깃이 아예 호출되지 않게 하거나 재시도를 위한 반복적인 호출도 가능하다. */ Object ret = invocation.proceed(); this.transactionManager.commit(status); return ret; } catch (RuntimeException e) { this.transactionManager.rollback(status); throw e; } } }@Service public class UserServiceImpl implements UserService { public static final int MIN_LOGCOUNT_FOR_SILVER = 50; public static final int MIN_RECOMMEND_FOR_GOLD = 30; private final UserDao userDao; private UserLevelUpgradePolicy policy; @Autowired public UserServiceImpl(UserDao userDao) { this.userDao = userDao; } @Autowired public void setPolicy(UserLevelUpgradePolicy policy) { this.policy = policy; } public void add(User user) { if (user.getLevel() == null) { user.setLevel(Level.BASIC); } userDao.add(user); } public void upgradeLevels() { List<User> users = userDao.getAll(); for (User user : users) { if (policy.canUpgradeLevel(user)) { policy.upgradeLevel(user); } } } }@Autowired @Qualifier("testUserService") private UserService testUserService; @Autowired private UserDao userDao; @Component @Primary @Qualifier("testPolicy") static class TestUserLevelPolicy extends UserLevelUpgradePolicyImpl { private String id = "madDitto"; @Autowired private TestUserLevelPolicy(UserDao userDao, EmailPolicy emailPolicy) { super(userDao, emailPolicy); } public void upgradeLevel(User user) { if (user.getId().equals(this.id)) throw new TestUserPolicyException(); super.upgradeLevel(user); } } @Component @Qualifier("testUserService") static class TestUserServiceImpl extends UserServiceImpl { private UserLevelUpgradePolicy testPolicy; @Autowired public TestUserServiceImpl(UserDao userDao, @Qualifier("testPolicy") UserLevelUpgradePolicy testPolicy) { super(userDao); this.testPolicy = testPolicy; super.setPolicy(this.testPolicy); } } @Test @DisplayName("자동 프록시 생성 테스트") public void upgradeAllOrNothingAutoProxy() { userDao.deleteAll(); for (User user : users) { userDao.add(user); } try { this.testUserService.upgradeLevels(); fail("TestUserPolicyException expected"); } catch (TestUserPolicyException e) { } checkLevelUpgraded(users.get(1), false); }
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
.next파일
로컬에서 Next를 빌드해서 aws 인스턴스에서 Npm start를 하려고 하는데 .next파일을 git에 푸쉬했을때 문제가 생기는 부분이 있을까요? 보안이라던지
-
미해결지금 당장 데브옵스 AWS
Aurora 대신 DynamoDB를 사용해도 되는지요?
예제에서 Aurora와 DynamoDB를 사용했을 때의 장/단점에 대해 알려주시면 감사하겠습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿 내장객체 관련 질문 드립니다
저는 request, response가 서블릿 내장 객체라고 알고 있었는데요, 강의 내용에 따르면 request와 response는 요청마다 새로 생성되고 서블릿 객체는 요청마다 생성되지 않고 싱글톤으로 재사용한다고 알게 되었습니다.그럼 서블릿 내장 객체와 서블릿 객체가 다른 것인가요? 지금까지는 서블릿 내장 객체라는 것이 서블릿 객체 안에 포함되어 있다고 생각했는데 이건 아닌 것 같고 ..서블릿 컨테이너가 서블릿 객체를 관리하는 것이면 서블릿 내장 객체는 누가 관리해주나요? 서블릿 내장 객체와 서블릿 객체의 차이점을 알고 싶습니다.
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
이미지가 나오지 않습니다
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>DropDown Navigation</title> <style> @import url('https://fonts.googleapis.com/css2?family=Black+Han+Sans&display=swap'); body { font-family: 'Black Han Sans', sans-serif; color: #222; line-height: 1.5em; } a{ color: #222; text-decoration: none; } </style> </head> <body> <div class="items"> <div class="item"> <img src="인프런/assets/product-01.png" alt=""> <div class="caption"> <h2>Rirakuma doll 25cm</h2> <p> The owner of the most popular and cute looks Rilakkuma ~! Rilakkuma giant - It is size sale to small size. </p> <p>Price : <s>$12</s> → $10</p> <a href=""></a> </div> </div> </div> </body> </html>
-
미해결인터랙티브 웹 개발 제대로 시작하기
질문있습니다!
3개의문 2 강의 중에서 일분이 이미지를 가릴 때 transition을 사용하셔서 처음 위치에서 오른쪽으로 100% 이동을 시키셨잖아요?그 때 처음 두개의 문에 있던 일분이는 문 뒤에 가혀 보이지 않게 되었는데 세번째 문에 있던 일분이는 <div class = 'stage'> </div> 위에 보였습니다.그렇다면 처음 두개 문에 있던 일분이는 이동한 후에 레이어 상에서 이웃한 문 뒤에 위치해서 보이지 않는건가요?
-
해결됨파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part2
fdr.DataReader 오류
ValueError: "Timestamp" is not a supported functionfinancedatareader를 import 하면 되는데, 실제로 데이터를 불러오면 저런 에러가 뜹니다.예 : df1 = fdr.DataReader("005930", '2018-01-02', '2018-10-30') 인터넷을 뒤져도 해결책이 잘 나오지 않는데 도움이 필요합니다
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
intent flags가 먹지 않습니다.
val intent = Intent(this, MainActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP startActivity(intent) 영상에서 뒤로가기를 해도 강사님처럼 앱이 종료되는 것이 아닌 기존 페이지가 다시 나타납니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
V1과 V2의 차이
V1은 컨트롤러에서 바로 렌더링을 진행하는 거고 V2는 MyView 객체를 생성해서 MyView에서 렌더링을 진행하는데요 이러면 얻는 이점이 뭐가 있나요? 코드만 더 작성해야되는데 손해 아닌가요 ?
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
리스트뷰 아이템 클릭 잘 안되네요.ㅠ.ㅠ
게시글 보기 페이지 공부하고 있어요응용해서 만들고 있는데요리스트뷰 아이템 글릭 코딩에서 에러가 나와요context이부분이 계속 빨간색으로 나오더라구요import 해도 저렇게 뜨구요problems 에서는Unresolved reference : context이렇게 뜨네요.. 흠.. 잘모루겠어요도와주세요
-
미해결인터랙티브 웹 개발 제대로 시작하기
이미지를 넣을 때 div 안에 background-img를 넣으시는이유
저는 어떤 이미지를 넣을 때 바로 img 태그를 이용해 넣을거같은데 강사님은 항상 div 태그 안에 background-img를 넣으시더라구요 혹시 그렇게 하시는 이유가 따로 있으신가요? 궁금합니닷!
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
개체 여백 조정 방법
표 혹은 그림이든 개체 여백조정을 하고자 합니다.매크로정의하고 코드편집에 따라서 해보았는데요 잘 동작하지 않네요..ㅠㅠ아래는 개체 바깥 여백조정을 위한 함수를 만들어 본 예제입니다. 바깥 윗여백만 조정하는 것으로 했습니다.def Change_Object_Blank(): hwp.HAction.GetDefault("CellBorderFill", hwp.HParameterSet.HCellBorderFill.HSet) hwp.HParameterSet.HCellBorderFill.Hset.SetItem("ApplyTo", 1) hwp.HAction.Execute("CellBorderFill", hwp.HParameterSet.HCellBorderFill.HSet) hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet) hwp.HParameterSet.HShapeObject.OutsideMarginTop = hwp.MiliToHwpUnit(0.0) hwp.HParameterSet.HShapeObject.Hset.SetItem("ShapeType", 6) hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet) return
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
IllegalStateException
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니요)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의들으면서 코드를 따라쳐도 안되서 프로젝트 파일 삭제후 강의 자료에 있는 코드들을 복사해서 해도 계속 같은 오류가 나옵니다. 해결방법 알려주시면 감사하겠습니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
pending이 true면 어떨 때 args.Completed.Invoke()가 실행되는 건가요??
public void Init(IPEndPoint endPoint) { // 문지기(가 들고있는 휴대폰) _listenSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // TCP로 할 때 설정 // 문지기 교육 _listenSocket.Bind(endPoint); // 식당 주소와 후문인지 정문인지 기입을 해준 것 // 영업 시작 // backlog : 최대 대기수 _listenSocket.Listen(10); SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted); RegisterAccept(args); } void RegisterAccept(SocketAsyncEventArgs args) { bool pending = _listenSocket.AcceptAsync(args); if (pending == false) // 운 좋게 바로 클라이언트가 접속했을 경우 OnAcceptCompleted(null, args); } void OnAcceptCompleted(object sender, SocketAsyncEventArgs args) { }클라이언트가 접속을 하면 pending이 false가 되어서 OnAcceptCompleted가 직접 실행이 되지만 클라이언트가 접속을 안해서 pending이 true인 경우는 직접 실행이 안되고, args.Completed.Invoke()일 때 실행이 되는 건데 진짜로 완료 되었을 때란 어떨 때라고 할 수 있을까요?
-
미해결Vue3 완벽 마스터: 기초부터 실전까지 - "실전편"
computed가 정확히 뭔지요?
computed를 빼고 하면 오류가 나더라구요. 그냥은 할당이 안되는건가요?const totalCount = response.value.headers['x-total-count'] const totalCount = computed(() => response.value.headers['x-total-count']); //전체개수