이야기를 나눠요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
그림으로 쉽게 배우는 운영체제
이거는 그냥 공부하면서 궁금했던 내용입니다.
제가 운영체제 공부를 하면서 궁금한 내용입니다..어떤 교수님 강의를 보니까 working set을 구성하는 페이지가 [t-델타, t]여서 최근에 참조된 것을 찾으려면 t-델타부터 t까지 델타+1개를 살펴보고 set을 구성하는 방식이더라구요.근데 다른 책이나 서적을 찾아보면 델타개만큼을 보고 set을 판단하더라구요.t-델타 부터 t까지의 범위에서 참조된 페이지를 set으로 한다고 하는데,다른 사람들이랑 얘기해보니까 t이전에 참조된 델타개의 페이지를 set으로 한다고 그래서요..멘붕왔어요..그러니까 델타값이 4라고 가정하고, t(현재 시간)를 5라고 했을 때, 아래 중에 어떤 것이 맞는 방법 인가요?1) 현재 시간 포함하지 않고 최근 참조한 델타개의 참조열을 본다. ( 1234를 보고 working set 결정 )2) 현재 시간을 포함하여 최근 참조한 델타개의 참조열을 본다. ( 2345를 보고 working set 결정 )3) 현재 시간을 포함하여 최근 참조한 델타 +1개의 참조열을 본다. ( 12345를 보고 working set 결정 )
-
10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요 큰돌님
안녕하세요 큰돌님 큰맘먹고 알고리즘 코테강의와 CS전공지식 강의 질렀습니다. 중소기업 직장인인데 더 깊이있는 공부와 기회가 되면 더 좋은환경에 일하고 싶어서 믿고 공부해보려고 합니다 강의수강이 무제한이여서 감사하네요 주말에 틈틈히 공부하겠습니다. 이직은 언제가 될지 모르겠지만 좋은 후기로 돌아오겠습니다 화이팅!
-
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
junit5에서는 @Test 에노테이션에서 expected를 지원하지 않는 것 같습니다.
Assertions.assertThrows(IllegalStateException.class, () -> { memberService.join(m2); // Exception 터져야 돼. }); 혹시 junit5 쓰시는 분들은 위와 같이 수정하여서 돌려도 괜찮은 것 같습니다.
-
그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
자료구조와 알고리즘 관련 책 추천해주실 수 있을까요?
안녕하세요. 선생님기본편을 완강했고, 계속 복습할 예정입니다!심화편도 이제 수강할 예정입니다. 책도 한 권 구매해서 같이 공부하고 싶은데, 추천해주실 수 있을까요?감사합니다.
-
@시코 - Java 제대로 배우기 (완벽한 기본기)
저작권?? 문의 드립니다
안녕하세요.강의 내용들을 정리 및 복습차원에서 간략하게나마 Tistory에 올리고있습니다.현재는 카테고리 전체를 비공개로 해 둔 상태이기도하고 공개로 돌릴 생각도 없습니다.다만 종종 구직중일때 다른 개발소스나 학습데이터들을 토대로 깃허브와 함께 포토폴리오로 사용하게 될때 단기간 공개로 바꾸어야할 경우가 있습니다.그 기간중 강의자료로 작성하신 소스코드나 학습 내용들이 단기간동안 공개되어도 괜찮으신지 여쭙고 싶습니다.출처는강의제목 / 강의자명 으로 간략하게 표기해둔 상태입니다상세하고 좋은강의 감사합니다..!
-
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Spring Boot 3.0.2를 사용 중이신 분들이 설정하면 좋은 것
application.properties에 다음 설정을 추가해주세요.logging.level.org.springframework.core.LocalVariableTableParameterNameDiscoverer = error이 것은 Controller가 처음 실행될 때 나오는 로그인,WARN 10382 --- [nio-8080-exec-1] ocalVariableTableParameterNameDiscoverer : Using deprecated '-debug' fallback for parameter name resolution. Compile the affected code with '-parameters' instead or avoid its introspection: hello.springcoremvc211.controller.SpringUploadController를 없애줍니다.이것의 대한 자세한 내용은 https://github.com/spring-projects/spring-framework/issues/29612 에 있으며, Spring 6.0.3에서 고쳐지는 내용입니다.
-
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
안녕하세요 김영한 강사님 봐주실수있을까요 절실해요ㅠ
삭제된 글입니다
-
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Filter를 등록하는 4가지 방법
안녕하세요. 정리 강의를 들으면서 Filter를 스프링 빈으로 등록하는 방법을 따라하다 버전 차이인지, 스프링 부트의 설정 차이인지, 에러가 발생하더군요.The bean 'logFilter', defined in class path resource [hello/springcoremvc26/config/FilterConfig.class], could not be registered. A bean with that name has already been defined in file [/project/java/spring/spring-core-mvc2-6/out/production/classes/hello/springcoremvc26/web/filter/LogFilter.class] and overriding is disabled.이유를 읽어보니, logFilter가 이미 빈으로 등록되어서 중복 등록이 안된다고 써져있었습니다.그래서 이에 대해 찾아본 결과를 공유하고자 글을 작성합니다. 아래 글은 제 블로그에도 정리되어 있습니다. (홍보...ㅎㅎ..)@ConfigurationLogFilter - 로그 필터@Slf4j public class LogFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LogFilter init()"); } @Override public void destroy() { log.info("LogFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LogFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LogFilter doFilter End", requestURI); } } }LoginCheckFilter - 로그인 필터@Slf4j public class LoginCheckFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LoginCheckFilter init()"); } @Override public void destroy() { log.info("LoginCheckFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LoginFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LoginFilter doFilter End", requestURI); } } }FilterConfig - Filter 등록@Configuration public class FilterConfig { @Bean public FilterRegistrationBean<Filter> logFilter() { FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>(); bean.setFilter(new LogFilter()); bean.setOrder(1); bean.addUrlPatterns("/*"); return bean; } @Bean public FilterRegistrationBean<Filter> loginCheckFilter() { FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>(); bean.setFilter(new LoginCheckFilter()); bean.setOrder(2); bean.addUrlPatterns("/*"); return bean; } }실행 결과[/] LogFilter doFilter Start [/] LoginFilter doFilter Start [/] LoginFilter doFilter End [/] LogFilter doFilter End특징강의에서 나온 방법입니다.설정을 위한 별개의 파일(@Configuration 이 붙은 객체)이 필요합니다.setOrder() 를 통해 순서를 정할 수 있습니다.addUrlPatterns() 을 통해 베이스 URL 및 Whitelist를 설정할 수 있습니다.@ComponentLogFilter@Slf4j @Component @Order(1) public class LogFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LogFilter init()"); } @Override public void destroy() { log.info("LogFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LogFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LogFilter doFilter End", requestURI); } } }LoginCheckFilter@Slf4j @Component @Order(2) public class LoginCheckFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LoginCheckFilter init()"); } @Override public void destroy() { log.info("LoginCheckFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LoginFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LoginFilter doFilter End", requestURI); } } }실행 결과[/] LogFilter doFilter Start [/] LoginFilter doFilter Start [/] LoginFilter doFilter End [/] LogFilter doFilter End특징컴포넌트 스캔을 이용하기 때문에 설정을 위한 별개의 파일이 필요하지 않습니다.@Order 애노테이션을 이용해 순서를 설정할 수 있습니다.기본 URL Pattern이 /* 이며 설정할 수 없습니다.@WebFilter + @ServletComponentScanLogFilter@Slf4j @WebFilter public class LogFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LogFilter init()"); } @Override public void destroy() { log.info("LogFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LogFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LogFilter doFilter End", requestURI); } } } LoginCheckFilter@Slf4j @WebFilter public class LoginCheckFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LoginCheckFilter init()"); } @Override public void destroy() { log.info("LoginCheckFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LoginFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LoginFilter doFilter End", requestURI); } } } MainApplication@ServletComponentScan @SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(SpringCoreMvc26Application.class, args); } } 실행 결과[/] LogFilter doFilter Start [/] LoginFilter doFilter Start [/] LoginFilter doFilter End [/] LogFilter doFilter End 특징설정을 위한 별개의 파일이 필요하지 않습니다.대신, 애플리케이션 실행되는 메인 객체위에 @ServletComponentScan 을 사용해야 합니다.@Order를 이용한 순서 등록을 사용할 수 없습니다.각 필터에 대한 순서를 보장할 수 없습니다.@WebFilter 의 value 나 urlPatterns 파라미터를 이용해 whitelist 방식으로 베이스 URL을 설정할 수 있습니다.@WebFilter("/filter/*")@WebFilter({"/login", "/items"})@WebFilter(urlPatterns = "/filter/*")@WebFilter(urlPatterns = {"/login", "/items"})@WebFilter + @ComponentLogFilter@Slf4j @WebFilter @Component @Order(1) public class LogFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LogFilter init()"); } @Override public void destroy() { log.info("LogFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LogFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LogFilter doFilter End", requestURI); } } } LoginCheckFilter@Slf4j @WebFilter @Component @Order(1) public class LoginCheckFilter implements Filter { @Override public void init( FilterConfig filterConfig ) throws ServletException { log.info("LoginCheckFilter init()"); } @Override public void destroy() { log.info("LoginCheckFilter destroy()"); } @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String requestURI = req.getRequestURI(); log.info("[{}] LoginFilter doFilter Start", requestURI); try { chain.doFilter(request, response); } finally { log.info("[{}] LoginFilter doFilter End", requestURI); } } } 실행 결과[/] LogFilter doFilter Start [/] LoginFilter doFilter Start [/] LoginFilter doFilter End [/] LogFilter doFilter End 특징두 번째 방법과 세 번째 방법을 모두 사용하는 방법입니다.설정을 위한 별개의 파일이 필요하지 않습니다.컴포넌트 스캔 방식을 사용하기 때문에 @ServletComponentScan 도 필요없습니다.@Order 애노테이션을 이용해 순서를 설정할 수 있습니다.@WebFilter 의 value 나 urlPatterns 파라미터를 이용해 베이스 URL이나 Whitelist 방식으로 설정할 수 있습니다.@WebFilter("/filter/*")@WebFilter({"/login", "/items"})@WebFilter(urlPatterns = "/filter/*")@WebFilter(urlPatterns = {"/login", "/items"})애노테이션이 기본으로 3개가 필요합니다.정리결론필터를 사용하기 위한 4가지 방식을 알아보았습니다.첫 번째 방법(@Configuration + FilterRegistrationBean)과 두 번째, 세 번째 방법을 합친 네 번째 방법(@WebFilter + @Component) 중에서 고려하면됩니다.저의 경우에는 @Configuration + FilterRegistrationBean을 더 맘에 드는데, 이유는 Filter Class 위에 애노테이션을 여러개 붙이는 것 보다, 별도의 생성 파일을 하나 만들어서 관리하는게 더 편할 것 같아서였습니다.하지만, @WebFilter + @Component은 스프링 빈으로 등록하는 방법이기에, 다른 스프링 빈을 의존성 주입 받을 수 있습니다. 그런 경우에는 첫 번째 방법으론 할 수 없으니, 네 번째 방법을 사용하면 될 것 같습니다.
-
스프링 DB 2편 - 데이터 접근 활용 기술
내부 트랜잭션이 여러 개 있을 때 롤백 실험
내부 트랜잭션이 여러 개 있을 때 앞쪽 내부 트랜잭션이 롤백될 경우 이후의 내부 트랜잭션은 로직을 수행하는지, 아니면 이후 로직은 수행되지 않고 바로 물리 트랜잭션을 롤백시키는지 의문이 들어 확인해보았습니다. 구조외부 트랜잭션내부 트랜잭션 1내부 트랜잭션 2 코드: 내부 트랜잭션1 - 롤백, 내부 트랜잭션2 -커밋결과결과를 확인해보면 내부 트랜잭션1을 롤백하는 코드가 실행될 때 물리 트랜잭션을 rollback-only로 마킹하고 해당 내부 트랜잭션이 실패합니다. -> 트랜잭션 동기화 매니저에 마킹을 합니다.(이후 강의 내용)하지만 이후 로직을 수행하러 갑니다.수행하러 가서 내부 트랜잭션2 커밋 호출문을 만나면 글로벌(물리) 트랜잭션이 rollback-only로 마킹되어있기 때문에 커밋할 수 없다고 합니다. 계속 가서 마지막에 외부 트랜잭션 커밋이 호출되면 UnexpectedRollbackException 예외가 발생하면서 "rollback-only로 마킹되어있기 때문에 해당 트랜잭션은 롤백되었다"는 로그가 뜹니다. 해당 예외의 조상에는 발생시 트랜잭션이 롤백되는 RuntimeException 예외가 있었습니다. 결론내부 트랜잭션 수행 중 롤백 발생시에 바로 물리 트랜잭션이 롤백되는게 아니다.물리 트랜잭션 -> 트랜잭션 동기화 매니저가 rollback-only의 체크 유무로 롤백 여부를 판단하고, 예상치 못한 상황(rollback-only 마킹돼 있는데 물리 트랜잭션을 커밋하려고 할 때)에서 UnexpectedRollbackException을 발생시켜 롤백을 수행한다. 아직 모르는게 많아서 결론이 맞지 않을 수도 있습니다! 이후 강의를 수강하면서 부족한 점을 채우러 가겠습니다~!
-
✨스위그(SWYG)에서 메타 콘텐츠를 찾습니다✨
메타 콘텐츠 공유 및 호스팅 플랫폼 스위그(SWYG)에서 메타 콘텐츠를 찾습니다!*메타 콘텐츠는 심리테스트, 온라인 방탈출, 인터랙티브 웹, 온라인 전시, 미니게임 등 코딩을 기반으로 만들어진 웹 콘텐츠입니다.‘스위콘’ 이란?제작해 둔 메타 콘텐츠가 있지만 아직 배포하지 않았거나 자체 도메인이 없는 메타 콘텐츠를 SWYG에서 복잡한 절차와 비용 없이 쉽고 빠르게 배포할 수 있는 프로그램입니다. SWYG에서는 위와 같은 메타 콘텐츠를 깃허브 연동 후 ‘배포 버튼’ 클릭 한 번으로 배포가 가능합니다. 또 원하는 도메인을 제공하고, 광고를 부착할 수 있어 수익 창출까지 가능합니다.이런 콘텐츠도 가능한지 고민이 되신다구여❓- 처음 만들어본 것도 가능할까?- 한 페이지인데 상관없을까?- 디자인이 예쁘지 않은데 괜찮을까?- 콘텐츠가 별로인 것 같은데 괜찮을까?- 콘텐츠로 수익을 창출할 수 있을까?위에 해당되는 콘텐츠도 모두 오케이 👌※ 선정적이거나 폭력성, 사행성 요소가 많이 포함된 콘텐츠는 출시가 불가능할 수 있습니다.🤷왜 스위그에서 출시를 해야 하나요?🔥콘텐츠 출시 Benefit🔥- 웹 호스팅 및 도메인 제공- 복잡한 심사 절차 없이 광고 부착 가능- 트래픽이 많이 발생할 수 있도록 전담 마케팅 제공- 사용자 유입 데이터 제공- 스위그의 자동 SEO를 통한 검색엔진 최상단 노출 가능- 콘텐츠의 고도화를 위한 인프라 지원👉 혜택 자세히 알아보기 https://swyg.link/h5j_0📅 일정- 지원 마감: ~ 2/21(화)- 콘텐츠 등록 결과 안내 : 2/23(목) 15:00📌 지원서https://swyg.link/A5YV9✨[SWYG 요약 소개]✨SWYG에서 심리테스트, 미니게임, 인터랙티브 콘텐츠와 같은 특색 있는 메타 콘텐츠를 즐기고, 직접 만든 콘텐츠를 호스팅하여 많은 사용자들을 유입시킬 수 있습니다.🔗SWYG 홈페이지https://www.swygbro.com🔗SWYG 인스타그램https://www.instagram.com/swyg_official🙋문의Kakao: https://open.kakao.com/me/swyg_contentEmail: shlee@swygbro.com
-
2023 USG+ AI·데이터 문제해결 제조혁신 경진대회 ~ 3월 6일 접수마감
○ 참가 안내- 대회 및 참가 안내 : https://aifactory.space/competition/detail/2261 ○ 개요- USG+ 참여대학 소속 학생들을 대상으로 제조혁신을 위한 제조 AI·데이터를 활용하여 제조현장의 제조성공 여부, 불량률 예측분석 등 제조 ICT 모델 개발 및 적용 과제를 운영합니다.- USG+ (University System of Gyeongnam + Ulsan)는 경남과 울산지역의 대학, 기업, 지자체가 협력하여 만든 공유형 대학으로 학교·학과의 장벽을 없애고 모든 대학을 하나의 캠퍼스처럼 공유하는 교육시스템- 소속대학(17개) : 경상국립대학교, 경남대학교, 창원대학교, 인제대학교, 울산대학교, 영산대학교, 경남도립거창대학교, 경남도립남해대학교, 창원문성대학교, 마산대학교, 거제대학교, 동원과학기술대학교, 연암공과대학교, 진주보건대학교, 김해대학교, 한국승강기대학교, 울산과학대학교 ○ 추진배경- 울산∙경남 지역의 제조업 혁신을 위한 제조ICT 산업의 육성을 위해 ICT/SW융합 응용 기술을 개발할 수 있는 직무역량, 현장 문제해결 역량의 실무 능력을 갖춘 혁신 인재를 육성하고자 합니다. ○ 대회 목적- 울산∙경남의 제조혁신을 위해 AI·데이터를 발굴하고 USG+ 참여대학 소속 참가자들이 AI·데이터 기술을 활용해 제조 현장의 문제를 해결하고자 합니다. ○ 주최/주관/운영- 주최·주관: (재)경남테크노파크, 울산·경남지역혁신플랫폼 스마트제조ICT사업단- 운영: 인공지능팩토리 ○ 참가대상- 참가대상: USG+ 소속대학을 포함한 울산∙경남 지역 대학 재학생 누구나 (대학원생 포함)- 팀(2인 이상 최대 4인), 최소 2인 이상 (✽팀 빌딩은 참가신청 이후에 태스크 내에서 진행하실 수 있습니다)- (필수) 팀 구성시 USG+ 소속대학 학생 2인 이상 참여 필수- 대회 문제 : 출제 문제 및 평가지표는 경진대회 오픈 시 공개 ○ 기간 및 일정 (UTC+ 9(한국) 기준)- 접수기간: 2. 20.(월) ~ 3. 6.(월) 20:00 까지- 온라인설명회: 3. 7.(화) 17:00- 온라인설명회 링크: https://youtube.com/live/PL9CKeFIiXk?feature=share- 대회기간: 3. 8.(수) 15:00 ~ 3. 13.(월) 17:00 까지- 심사기간: 3. 14.(화) ~ 3. 21.(화)- 수상 발표: 3. 21.(화) 17:00 이후- 시상식: 4. 13.(목)(예정)※ 상기일정은 원활한 대회운영을 위해 일부 조정될 수 있습니다. ○ 시상내역 (총 8개팀 선발, 참가자 모두에게 기념품 제공)- 대상(1팀): 경남대학교 총장상- 최우수상(2팀): 경남대학교 총장상- 우수상(2팀): 울산·경남지역혁신플랫폼 총괄운영센터장상- 장려상(3팀): 울산·경남지역혁신플랫폼 총괄운영센터장상 ○ 문의- 울산·경남지역혁신플랫폼 스마트제조ICT사업단: oouooya@kyungnam.ac.kr / ☏ 여성일 T. 055-259-5983
-
CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
포트폴리오 첨삭 이벤트 신청했습니다!
삭제된 글입니다
-
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
PathPattern에 대한 몇가지 예시입니다.
설명PathPattern 공식 문서?: 한 문자 일치/pages/t?st.htmlYES: /pages/test.html, /pages/tXst.htmlNO : /pages/toast.html*: 경로(/) 안의 모든 문자 일치/resources/*.pngYES: /resources/photo.pngNO : /resources/favority.ico**: 하위 경로 모든 문자 일치/resources/**/resources/image.png, /resources/css/spring.css{spring}: spring 이라는 변수로 캡처/resources/{path}/resources/robot.txt -> path변수에 "robot.txt" 할당@PathVariable("path")로 접근 가능{*spring}: 하위 경로 끝까지 spring변수에 캡쳐/items/{*path}/items/1/add -> path변수에 "/1/add" 할당{spring:[a-z]+}: 정규식 이용/items/{path:[a-z]+}YES: /items/robotsNO : /items/123 예제 1 - {*spring}@GetMapping("/hello/{*name}") @ResponseBody public String handleTest( @PathVariable String name ) { log.info("name = {}", name); return name; }GET http://localhost:8080/hello/path-test -> name = /path-test === GET http://localhost:8080/hello/path-test/other -> name = /path-test/other 예제 2 - 정규식@GetMapping("/static/{name:[a-z-]+}-{version:\\d\\.\\d\\.\\d}{ext:\\.[a-z]+}") @ResponseBody public String handle( @PathVariable String name, @PathVariable String version, @PathVariable String ext ) { log.info("name = {}", name); log.info("version = {}", version); log.info("ext = {}", ext); return "/" + name + "/" + version + "/" + ext; }GET http://localhost:8080/pathtest-1.0.0.jar -> name = pathtest version = 1.0.0 ext = .jar 잘못된 사용@GetMapping("/static/{*fullpath}{name}") @ResponseBody public String runtimeError( @PathVariable String fullpath, @PathVariable String name ) { log.info("fullpath = {}", fullpath); log.info("name = {}", name); return name; } Description: Invalid mapping pattern detected: /static/{*fullpath}{name} ^ No more pattern data allowed after {*...} or ** pattern element{*...} 또는 ** 패턴 요소 다음에는 다른 패턴 데이터를 사용할 수 없습니다.
-
실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
동적 페이지의 크롤링 강의도 추가될 계획이 있으신가요??
실무에서 하다보니 상당히 많은 사이트들이 동적 페이지라서 셀레니움을 사용해야만 하는 경우가 많습니다그런데 셀레니움 반복적으로 사용하니 컴퓨터가 느려지는 효과를 경험하고 있습니다...json 데이터를 가져오는 법을 배워보고 싶은데 향후 강의에 추가될 계획이 있으신지요? :))
-
UIKit - iOS14 실무 가이드 <iOS앱 진짜 개발자 되기>
MovieApp 빌드 시 UISearchDisplayController... 에러 나시는 분들 참고
MovieApp 빌드 할 때UISearchDisplayController is unavailable when deploying to iOS 13.0 or later이런 에러 나온다면,storyboard에서 해당 아이콘 중에 'UISearchDisplayController'이 있는지 보시고 삭제하시면 빌드 됩니다.(삭제는 storyboard오른쪽에 View Controller Scene 하단에 있는 'UISearchDisplayController'을 클릭하고 back space 누르시면 됩니다.) 에러의 이유는 13이후 버전에서는 아예 없어진 것인데 붙어있어서 빌드가 안되는 것 같았습니다. 혹시 나중에 터질지는 모르겠지만, 제가 찾아봤을 때 뾰족한 해결법이 없어서 일단 공유 해봅니다.
-
선배님들, 부트캠프 하차 후 국비지원... 괜찮을까요?
현재 온라인 부트캠프에서 구르고 있는 백수입니다.사전에 아무런 준비도 없이 무턱대고 부트캠프에 들어가서 한달 넘게 식겁했습니다.지금은 겨우 적응해서 중상위권 성적으로 간신히 버티는 중 입니다.그런데 진도가 너무 빨라서 머리에 남는게 없을까봐 너무 두렵습니다.이대로면 취업하고도 일을 돕기는 커녕 민폐나 끼치지 않을까 걱정이 앞섭니다. 그래서 일부를 제한 수강료를 환불 받고 현재 부트캠프에서 하차한 후에3월이나 4월에 시작하는 온라인 국비지원 부트캠프로 옮기는 것을 고려하고 있습니다.취업이 다소 늦어지더라도 국비지원을 받을테니 비용 측면에서는 피차일반이지만,제가 온전히 공부만 할 수 있는 기간을 조금 더 늘릴 수 있다는 이점이 있습니다. 한 달 남짓 기간이 있는 만큼 독학으로 기본기를 좀 더 다지고 싶다는 마음이 커지고 있습니다.이런 이유로 인프런 강의를 통한 독학과 국비지원 부트캠프를 병행하고자 합니다. 제가 어린 나이라면 고민없이 후자를 택하겠지만,나이도 먹을 만큼 먹은 상태여서 올해 하반기 취업시장을 놓치는데 대한 아쉬움도 큽니다.그래서 결정을 내리지 못 하고 고민을 거듭하고 있습니다. 선배님들이 보시기엔 어떤가요?이러한 전학(?)은 미친 짓일까요?진심 어린 조언을 간곡히 부탁드립니다. (_ _)
-
CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
순수(바닐라) 자바스크립트에서 외부 api key를 은닉할 수 없을까요?
open api 강의를 듣고, open api 찾아서 간단한 앱을 만들어 보려고 하는데, api key가 있더라구요. 그래서 회원가입을 하고 키를 발급받은 후 fetch 를 통해서 데이터를 받아와서 만들긴 했는데, 갑자기 이 생각이들더라구요. api key는 은닉이 되어야 하는게 맞지 않나? 라는거요 (사실 리액트 ,뷰 같은 라이브러리 혹은 프레임워크를 사용하면 배운대로 자연스레 하는 것이지만, 자바스크립트 자체적으로 건드려 본 적은 없다는 사실을 깨달았어요.). 그 후 은닉을 어떻게 하면 할 수 있는가 찾아봤는데, 서버 측에서 가능한 dotenv 를 다운 받아서 쓰거나 아니면 무료로 도메인을 등록해주는 사이트 자체의 옵션을 건드려서 하는 방법(서버리스?)은 있는데, 순수 자바스크립트 자체적으로 하는 방법은 안 보이더라구요. 결론적으로 순수 자바스크립트 자체만으로 , 발급 받은 api key를 은닉할 수는 없는 걸까요?
-
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
코팩님 지도 관련 재밌어요!!!
지도 강의에서 재밌으면 댓 남겨달라고 하신걸 듣고댓글 남겨요더 추가 원해요!아주 api사용 하는거 재밌어요
-
엑셀로 끝내는 보고서 차트 실무 강의
좋은 강의,,,,
정말 좋은 강의였습니다.다음에도 좋은 강의 부탁드립니다.
-
[입문] Qt 6 프로그래밍 2편
내부에서 사용할 용도로 만들면 라이센스가 어떻게 되는지요
그냥 단순 궁금해서 질문합니다.만약에 회사에서 판매 목적이 아니고 내부에서만 사용할 용도로 만든 프로그램은 라인센스가 어떻게 되는지 문의합니다.