이야기를 나눠요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
휘뚜루마뚜루
슉수수수수슉
-
아무것도 모르고 시작하는 C#
DirectoryInfo 안될 때 방법
using System.IO; 추가해야 DirectoryInfo 사용 할 수 있음
-
파이썬(Python) 기초부터 실무까지 part.2
강사님 정말 인간적이시네요
편집이라도 하시지ㅠㅠㅋㅋㅋ
-
파이썬(Python) 기초부터 실무까지 part.2
23:50에서, 41번 line에 scores[:] -> scores_index[:] 여야합니다.
수정하지 않으면 48번 라인 결과에 영향을 주네요. 단순히 복사한 리스트와 원본 리스트의 요소가 다른 것을 확인하기 위한 시간이었지만 혹시나 궁금해하시는 분들이 있을 것 같아 남깁니다.
-
대세는 쿠버네티스 (초급~중급편)
와 정말 잘봤습니다
이번 강의 특히나 명강의네요... 진짜 한판 정리 대박입니다!!
-
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ExceptionHandler 우선순위
ExceptionResolver의 우선순위가 왜 ExceptionHandlerExceptionReosolver, ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver의 순서로 되어잇는지 코드를 확인해봤습니다. ExceptionResolver의 우선 순위를 확인할 수 있는 코드는 아래와 같습니다. WebMvcConfigurationSupport 클래스에 addDefaultHandlerExceptionResolvers 메소드는 아래처럼 정의되어 있습니다. protected final void addDefaultHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers, ContentNegotiationManager mvcContentNegotiationManager) { ExceptionHandlerExceptionResolver exceptionHandlerResolver = createExceptionHandlerExceptionResolver(); exceptionHandlerResolver.setContentNegotiationManager(mvcContentNegotiationManager); exceptionHandlerResolver.setMessageConverters(getMessageConverters()); exceptionHandlerResolver.setCustomArgumentResolvers(getArgumentResolvers()); exceptionHandlerResolver.setCustomReturnValueHandlers(getReturnValueHandlers()); if (jackson2Present) { exceptionHandlerResolver.setResponseBodyAdvice( Collections.singletonList(new JsonViewResponseBodyAdvice())); } if (this.applicationContext != null) { exceptionHandlerResolver.setApplicationContext(this.applicationContext); } exceptionHandlerResolver.afterPropertiesSet(); exceptionResolvers.add(exceptionHandlerResolver); ResponseStatusExceptionResolver responseStatusResolver = new ResponseStatusExceptionResolver(); responseStatusResolver.setMessageSource(this.applicationContext); exceptionResolvers.add(responseStatusResolver); exceptionResolvers.add(new DefaultHandlerExceptionResolver());} 위의 빨간색으로 표시한 순서대로 List에 add를 하고, 나중에 DispatcherServlet의 processExceptionHandler 메소드에서 List를 순회하기 때문에 이 우선순위대로 동작한다고 이해하시면 좋을 것 같습니다. 당연히 많이들 아시는 내용이고 간단한 내용이라 글 쓰는게 맞나. 부담스러운 부분도 있지만, 저처럼 모르시는 분들을 위해 글써봤습니다.
-
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
왜 null을 반환하면 계속 진행되고, null 이 아니면 예외를 처리하는지 확인해봤습니다
왜 HandlerExceptionResolver에서 ModelAndView를 null로 하면 에러가 그대로 진행되고, 빈 ModelAndView를 생성하면 예외가 처리되는지 코드를 한번 열어봤습니다. 궁금하실 분도 있을 것 같아서 글 남깁니다. 아래는 DispatcherServlet의 processHandlerException 메소드 입니다. @Nullableprotected ModelAndView processHandlerException(HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex) throws Exception { // Success and error responses may use different content types request.removeAttribute(HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE); // Check registered HandlerExceptionResolvers... ModelAndView exMv = null; if (this.handlerExceptionResolvers != null) { for (HandlerExceptionResolver resolver : this.handlerExceptionResolvers) { exMv = resolver.resolveException(request, response, handler, ex); if (exMv != null) { break; } } } if (exMv != null) { if (exMv.isEmpty()) { request.setAttribute(EXCEPTION_ATTRIBUTE, ex); return null; } // We might still need view name translation for a plain error model... if (!exMv.hasView()) { String defaultViewName = getDefaultViewName(request); if (defaultViewName != null) { exMv.setViewName(defaultViewName); } } if (logger.isTraceEnabled()) { logger.trace("Using resolved error view: " + exMv, ex); } else if (logger.isDebugEnabled()) { logger.debug("Using resolved error view: " + exMv); } WebUtils.exposeErrorRequestAttributes(request, ex, getServletName()); return exMv; } throw ex;} 이 전체코드에서 우리가 구현한 resolveException 처리하는 부분만 떼보면 // Check registered HandlerExceptionResolvers...ModelAndView exMv = null;if (this.handlerExceptionResolvers != null) { for (HandlerExceptionResolver resolver : this.handlerExceptionResolvers) { exMv = resolver.resolveException(request, response, handler, ex); if (exMv != null) { break; } }} 이렇게 됩니다. 코드를 열어보니 정말 간단하게도 exMv를 null로 초기화해놓고 등록된 resolver들을 돌면서 resolveException을 호출하여 결과가 null 이 아니면 break하는 것을 볼 수 있습니다. 이렇게 만들어진 exMv(모델앤뷰)가 null 이면 (모든 HandlerExceptionResolver 를 다 돌고도 null) 아래의 if문 if (exMv != null) { if (exMv.isEmpty()) { request.setAttribute(EXCEPTION_ATTRIBUTE, ex); return null; } // We might still need view name translation for a plain error model... if (!exMv.hasView()) { String defaultViewName = getDefaultViewName(request); if (defaultViewName != null) { exMv.setViewName(defaultViewName); } } if (logger.isTraceEnabled()) { logger.trace("Using resolved error view: " + exMv, ex); } else if (logger.isDebugEnabled()) { logger.debug("Using resolved error view: " + exMv); } WebUtils.exposeErrorRequestAttributes(request, ex, getServletName()); return exMv;}throw ex; 조건에 걸리지 않아 throw ex;로 에러를 던지게 됩니다. exMv가 null이 아니면 exMv의 여러 상태에서 따라 request에 attribute를 설정하거나, viewName 등록, 로깅 등의 처리를 하는 것을 볼 수 있습니다. 이처럼 코드를 열어보니 설명해주신 내용에 대해 더 이해가 잘 되는 것 같아 이렇게 글로 남겨서 공유합니다!
-
스프링 핵심 원리 - 고급편
영한님 사용하시는 키보드 기종이 어떻게 되시나요?
타건하는 소리가 좋아서 궁금해지네요!
-
갖고노는 MySQL 데이터베이스 by 얄코
잘못된 Tablename을 입력했을때 나오는 Northwind의 설명
안녕하세요! 데이터베이스를 처음 공부하기 시작한 대학생입니다. 이런 저런 실습을 해보다보니 테이블명을 잘못쳤을때, 대소문자를 다르게 쳐보거나하면 Northwind.잘못친테이블명 해서 오류가 나오더라구요. 그런거 누가 몰라 싶을 수도 있는데, Northwind가 뭐지? 싶어서 찾아보니 실습 페이지에 있는 샘플 데이터베이스의 데이터가 마이크로소프트가 제공하는 Northwind 지역의 정보라 데이터베이스 이름인 것 같더라구요. 아무도 질문한 적 없는 것 같아 남겨봅니다. 출처 : https://www.outsystems.com/forge/component-overview/7058/northwind-db 감사합니다.
-
it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
다르게 한번 풀어봤어요
char a[101], b[101]; int ary[256]; scanf("%s", a); scanf("%s", b); for (int i = 0; a[i] != '\0'; i++) { ary[a[i]]++; } for (int i = 0; b[i] != '\0'; i++) { ary[b[i]]++; } bool flag = false; for (int i = 0; i < 256; i++) { if (ary[i] % 2 != 0) { flag = true; break; } } if (flag) printf("NO"); else printf("YES");
-
Slack 클론 코딩[실시간 채팅 with React]
상태관리 질문입니다
안녕하세요 항상 높은 퀄리티의 강의 감사합니다. 강의와 조금 떨어진 내용인데요, 검색을 해봐도 잘 모르겠어서 질문 남깁니다. 만약 리액트에서 상태관리를 위해 redux를 사용할 때 (미들웨어는 saga) 상태로 관리하지 않아도 되는 데이터를 서버에 요청할 경우(비동기 로직) 이 요청 또한 saga에 포함되어야 할까요? 혹은 컴포넌트에서 useEffect를 사용해서 fetching 후에 바로 사용하는 편인가요?
-
[구버전] 웹 애플리케이션 개발을 위한 IntelliJ IDEA 설정 (2020 ver.)
소리가 너무작아요
볼륨최대로 다 올려도 소리가 너무 작네요
-
파이썬(Python) 기초부터 실무까지 part.2
이 강사분 예제 풀 때는 정말 풀이하기 딱 직전까지 다 들어봐야함.
첫번째 예제 포즈걸고 해보라해서 답 작성해보고 포즈 풀고 강의 이어보는데 새로운 조건이 추가되네욬ㅋㅋㅋㅋ하참 알고도 또 당하네
-
파이썬(Python) 기초부터 실무까지 part.2
성적처리프로그램 만들어봤어요~
from statistics import meanfrom copy import deepcopydef main() : score = [[100, 100, 100], [20, 20, 20], [30, 30, 30], [40, 40, 40], [50, 50, 50]] score = make_tablelist(score) print_table(score) print()def make_tablelist(li1): kuksum = 0 engsum = 0 matsum = 0 temp = deepcopy(li1) for i in range(0, len(li1)): temp[i].insert(0, i + 1) temp[i].append(sum(li1[i])) temp[i].append(float(mean(li1[i]))) kuksum += temp[i][1] engsum += temp[i][2] matsum += temp[i][3] temp.insert(0, ['번호', '국어', '영어', '수학', '총점', '평균']) temp.append(['총점', kuksum, engsum, matsum, sum([kuksum, engsum, matsum]), mean([kuksum, engsum, matsum])]) return tempdef print_table(pli) : for i in range(len(pli)) : for j in range(len(pli[i])) : if j == len(pli[i])-1 : print("{:>6}".format(pli[i][j])) else : print("{:>6}\t".format(pli[i][j]),end='') if i == 0 or i == len(pli) - 2: print("-" * 50)if __name__=="__main__" : main()-------------------------------------------------------------------응용해서 나중에 성적을 순서대로나 개별로 입력받아서 등록할 수 있는 기능등도 추가할 수 있을 것 같아요~강의 감사합니다~
-
파이썬(Python) 기초부터 실무까지 part.2
0,1 체크보드 만들어봤습니다
# 0과 1이 반복되는 10x10 체크보드형상 2차원리스트 만들기ckbd = [([0]+[1])*5 for x in range(5)]for i in range(1,10,2) : ckbd.insert(i,([1]+[0])*5)for x in range(10) : print(ckbd[x],sep='\n')
-
파이썬(Python) 기초부터 실무까지 part.2
선택정렬 만들어봤어요~
def select_sort(li1) : for i in range(len(li1)) : for j in range(i+1,len(li1)) : if li1[i] > li1[j] : li1[i], li1[j] = li1[j], li1[i]odd_num = [7,15,9,13,71,3,1]print("정렬 전 :",odd_num)select_sort(odd_num)print("정렬 후 :",odd_num,"\n")
-
파이썬(Python) 기초부터 실무까지 part.2
친구리스트 코드 만들어봤어요~
def main() : show_menu() print("종료되었습니다.")def show_menu() : frdlist = [] menulist = ["1","2","3","4","9"] menu='' while menu != '9' : print("-"*20) print("1. 친구리스트 출력") print("2. 친구추가") print("3 친구삭제") print("4. 이름변경") print("9. 종료") menu = input("메뉴를 선택하시오: ") if menu not in menulist : print("-" * 20) print("잘못입력하셨습니다.") else : match menu : case '1' : print_friends(frdlist) case '2' : append_friend(frdlist) case '3' : delete_friend(frdlist) case '4' : change_name(frdlist) print("-" * 20)def print_friends(list) : print("-" * 20) if not len(list) : print("저장되어 있는 친구가 없습니다.") else : print("저장되어 있는 친구는",list,"입니다.")def append_friend(list) : print("-" * 20) frdname = input("이름을 입력하시오: ") list.append(frdname) print("'{}'이름이 친구리스트에 추가되었습니다.".format(frdname))def delete_friend(list) : print("-" * 20) frdname="" while True : print(list) frdname = input("위 리스트 중 삭제하고 싶은 이름을 입력해주세요 : ") if frdname in list : break else : print("리스트 중에 없는 이름입니다.") print("-" * 20) list.remove(frdname) print("'{}'이름이 삭제되었습니다.".format(frdname))def change_name(list) : print("-" * 20) frdname = "" while True: print(list) frdname = input("위 리스트 중 바꾸고 싶은 이름을 입력해주세요 : ") if frdname in list: break else: print("리스트 중에 없는 이름입니다.") print("-" * 20) yesorno = ['네', '아니오'] flag = True while flag: cngname = input("어떤 이름으로 변경할까요?: ") while True: print("변경하고 싶은 이름이 '{}' ".format(cngname),end='') confirm = input("맞나요?(네/아니오): ") if confirm not in yesorno : print("'네/아니오'로만 입력해주세요.") else : if confirm == '네' : print("이름이 '{}'에서 '{}'로 변경되었습니다.".format(frdname, cngname)) ind = list.index(frdname) list[ind] = cngname flag = False breakif __name__=='__main__' : main()
-
파이썬(Python) 기초부터 실무까지 part.2
리스트 어프리헨션으로 구구단 리스트를 만들어봤어요~
list1 = [x for x in range(2,10)]list2 = [" x "]list3 = [y for y in range(1,10)]list4 = [" = "]list5 = [str(x)+a+str(y)+b+str(x*y) for x in list1 for a in list2 for y in list3 for b in list4]print(list5,"\n")
-
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
스프링 데이터 접근기술은 언제 나오나요??
스프링 데이터베이스 접근 기술에 대해 깊이 공부하고싶은데 언제 강의가 나오는지 알 수 있을까요?
-
변수 -1
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요 보통 int result = -1로 변수로 두던데 왜 int result=0으로 안하고 -1로 하나요??