migrate 후에도 데이터베이스가 생성되지 않습니다.
파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
삭제된 글입니다
- react
- python
- django
- docker
173만명의 커뮤니티!! 함께 토론해봐요.
파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
삭제된 글입니다
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
안녕하세요. 정리 강의를 들으면서 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가 이미 빈으로 등록되어서 중복 등록이 안된다고 써져있었습니다. 그래서 이에 대해 찾아본 결과를 공유하고자 글을 작성합니다. 아래 글은 제 블로그 에도 정리되어 있습니다. (홍보...ㅎㅎ..) @Configuration LogFilter - 로그 필터 @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를 설정할 수 있습니다. @Component LogFilter @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 + @ServletComponentScan LogFilter @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 + @Component LogFilter @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 은 스프링 빈으로 등록하는 방법 이기에, 다른 스프링 빈을 의존성 주입 받을 수 있습니다. 그런 경우에는 첫 번째 방법으론 할 수 없으니, 네 번째 방법을 사용하면 될 것 같습니다.
파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
선생님 안녕하세요. 강의 듣고있는 수강생 입니다. 다름이 아니라 파이썬 프로젝트하면 포트폴리오로 활용하기에도 실용적으로 쓰기에도 불필요한 너무 작은 단위의 게임, 메모앱을 만든다든지 기껏해야 블로그만들기만 잔뜩 있는것 같습니다. 어쩌다가 인스타그램 만들기가 있구요. 혹시 파이썬 장고를 활용한 쇼핑몰 만들기 강의 개설에 대해서 계획이 있으신가요?
15일간의 빅데이터 파일럿 프로젝트
Hive Warehouse와 Python을 연결하는 방법 (저사양 파일럿 환경 기준입니다.) 위의 과정 이후 싸이킷런이나 텐서플로우 같은 것들 통해서 분석 및 평가하시면 됩니다! ps) 혹시 안되는 경우 댓글 달아주세요!
대회 링크 1:1 문의하기를 이용해주세요.
https://dacon.io/forum/404171 파이썬 초보자도 쉽게 따라 할 수 있는 데이콘의 파이썬 교육 콘텐츠! 파이썬 데이터 분석과 머신러닝을 기초부터 차근차근 학습하실 수 있습니다 이제 배우기 시작하시는 분들도 따라 하면서 실력을 키워 데이콘 교육대회뿐만 아니라 일반 대회에 참여하실 수 있도록 데이콘캠프가 응원합니다! #데이터사이언스 #인공지능 #파이썬 #AI #tensorflow #pytorch #r #데이터분석가 #데이터 #머신러닝 #딥러닝 #데이콘 #경진대회 #데이터분석 #ML #DL #Python #Dacon #Kaggle #해커톤 #Hackathon #코딩 #코딩교육 #코딩기초교육 #기초코딩교육 #코딩기초 #머신러닝교육 #머신러닝기초 #데이터분석기초 이용해주세요.
[대회명] 산업제어시스템 보안위협 탐지 AI 경진대회 [주제] 산업제어시스템 보안위협 탐지 [배경] 최근 국가기반시설 및 산업시설의 제어시스템에 대한 사이버 보안위협이 지속적으로 증가하고 있습니다. 국가 중요시설에 대한 사이버 공격은 국가와 사회에 돌이킬 수 없는 막대한 피해를 일으킬 수 있어, 세계 각국은 이에 대한 보안기술 개발에 전념하고 있습니다. 현장 제어시스템의 특성을 반영하고, 다양한 유형의 제어시스템 사이버 공격을 포함하는 산업제어시스템 보안 데이터셋은 AI기반 보안기술 연구를 위한 필수적인 요소입니다. 국가보안기술연구소는 이러한 연구현장의 요구에 발맞추어 GE, Emerson, Siemens 등의 산업용 제어기기, 센서, 액추에이터를 이용한 발전 모사 제어시스템 테스트베드를 2019년에 구축하였습니다. 이를 기반으로 산업제어시스템 보안데이터셋(HAI)를 지속적으로 개발하고 있으며, HAI 20.07과 HAI 21.03 데이터셋을 공개( https://github.com/icsdataset/hai ) 하여 연구현장의 데이터 부족 해소를 위해 노력하고 있습니다. HAICon 경진대회는 HAI 보안데이터셋을 활용하여 AI 기반 제어시스템 보안위협 탐지연구를 활성화하고 기술 보급하기 위한 목적으로 2020년에 이어 두 번째 대회를 개최하게 되었습니다. 대회용 데이터셋은 대회 종료 후 참가자들의 피드백을 반영하여 공개되며, 대회 입상팀들의 우수 탐지모델을 공개하여 관련 기술 이 한 단계 성숙하는데 도움이 되고자 합니다. [주최/주관/후원] 주최·주관 : 국가정보원, 국가보안기술연구소 후원 : 한국정보보호학회 [참가 대상] 내국인은 누구나 참여 가능 외국인은 내국인과 팀을 이루어야 참여 가능 단체(학교, 기업, 교육업체 등)는 별도 신청 총 상금 2,000만원 1 등 : 1,000만원 2 등 : 500만원 3 등 : 300만원 4 등 : 100만원 5 등 : 100만원 6~10등 : 소정의 부상 특별상 (3팀 이내) : 소정의 부상 모든 수상팀에게는 '한국정보보호학회장상' 수여 [안내사항] 상장, 상금, 부상은 팀 대표 1인에게 지급 단, 팀장이 팀원 전체의 '지급 동의서'를 수령 전 제출
📰 2021 빅데이터 통신 플랫폼 경진대회 🎫 코로나 시대와 함께하는 국민의 음식, 배달 문화 변화에 대한 시각화 처리 📅 대회 기간 : 2021년 07월 28일 ~ 2021년 08월 26일 🏆 총 상금 400만원(충북대 총장 또는 사업단장상 등 수상) 🌄 주최: 충북대학교, KT 통신 빅데이터 플랫폼 🔗링크: https://bit.ly/3kZnsyw #데이터사이언스 #인공지능 #tensorflow #pytorch #r #데이터분석가 #데이터 #머신러닝 #딥러닝 #데이콘 #경진대회 #데이터분석 #파이썬 #ML #DL #Python #Dacon #코로나 #해커톤 #Hackathon #충북대학교 #시각화 #KT
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하 🌏 [데이콘] 자연어 기반 기후기술분류 AI 경진대회 오픈! 🍀 탄소중립 실현을 위한 기후기술 연구는 어떤 기술일까요? ! 📅 대회 기간 : 2021년 6월 21일 ~ 2021년 8월 16일까지 🏆 총 상금 600만원 🌄 주최: 녹색기술센터(GTC) 🔗링크: http://bit.ly/dacon_gtc #데이터사이언스 #인공지능 #GTC #녹색기술센터 #tensorflow #pytorch #r #데이터분석가 #데이터 #머신러닝 #딥러닝 #데이콘 #경진대회 #데이터분석 #파이썬 #ML #DL #Python #Dacon #Kaggle #해커톤 #Hackathon 기를 이용해주세요.
DACON_101: 머신러닝이 처음이라면 [데이터 다운로드] 부터 ️[대회 제출] 까지 데이콘 머신러닝 교육 콘텐츠 https://dacon.io/competitions/open/235698/overview/description