[리뉴얼] 처음하는 파이썬 백엔드와 웹기술 입문 (파이썬 중급, flask[플라스크] 로 이해하는 백엔드 및 웹기술 기본) [풀스택 Part1-1]
위에 코드와 같이 웹서버를 열 때 처음 실행만 정상적으로 뜨고 두 번째부터는 로드중으로 계속 화면에 아무것도 안 뜹니다. 주피터 노트북과 아나콘다 프로그램을 완전히 종료하고 다시 접속해 위에 코드를 입력하면 다시 처음만 정상실행되고 두번째부터는 무한로드중으로 뜹니다. 다른 컴퓨터로 실행해봤을 때는 정상적으로 화면에 출력되는 것을 확인했고 제 노트북만 이러네요. 이거 때문에 아나콘다도 다시 설치해보고 윈도우에 내장되어 로컬호스트 주소도 확인하고 윈도우도 재설치해보고 컴퓨터 자체를 포맷해봤는데도 계속 같은 증상이네요. 혹시 문제가 무엇일까요? 이거 때문에 수업 진도를 못 나가고 있어요. 도와주세요ㅠㅠ
안녕하세요 colab을 이용하던 도중에 갑자기 이상한 현상이 생겨서 질문 남깁니다! 영어를 사용하면 별 문제가 없는데 이상하게 한글만 사용하면 글씨색도 변하고 위의 사진 처럼 셀의 화면이 내려가거나 확대 됩니다. 주석뿐만 아니라 코드에도 한글을 넣으면 똑같은 현상이 발생합니다. 작성시에는 화면이 보이지 않지만 작성후 방향키나 공백을 넣으면 다시 원래 화면으로 돌아옵니다. ㅠㅠㅠㅠ 너무 거슬려서 주석을 작성 할 수 가 없습니다ㅠㅠㅠ 해결책이 있을까요 이것저것 옵션 다 만져봤지만 해결이 안돼서 여쭙니다.
안녕하세요 강사님. 본 강의에서 BindingResult를 처리하기 위해 아래와 같이 AOP를 적용하셨습니다. 제가 궁금한 점은 다음과 같습니다. 위의 AOP 적용을 위한 validationAdvice는 구체적으로 언제 (joinPoint 전 or 후 ?) 실행되는지 궁금합니다. joinPoint의 전후제어라고 설명해주셨는데, joinPoint의 전에 실행되는 것인지 후에 실행되는 것인지가 궁금합니다. 예를 들어, 사용자가 컨트롤러 Post or Put 요청 시 유효성 검사를 통과하지 못한 에러가 bindingResult에 담깁니다. 그리고 위의 AOP validationAdvice 코드 내부는 이미 BindingResult에 에러가 담긴 이후의 코드를 실행하도록 되어있습니다. 이때의 로직 흐름은 다음과 같은 실행 순서로 보면 될까요? 만약 맞다면, joinPoint의 후에 실행되는 것으로 보면 될까요? "컨트롤러 진입 및 실행할 Post or Put 메서드 탐색 -> 해당 api 메서드 호출을 위해 http body의 데이터들을 ReqDto 객체로 변환 -> 유효성 검사 실패로 인한 bindingResult에 담김 -> 해당 api 호출 실패 -> 해당 api 호출이 실패로 끝났으므로 이후 AOP validationAdvice 호출 (joinPoint 후처리) -> Exception 발생 위와 같이 BindingResult 처리를 AOP 대신 필터나 인터셉터를 적용하여서는 해결할 수 없을까요 ?? 필터와 인터셉터는 여러 차이가 있지만 대표적으로 호출 순서에 차이가 있다고 알고 있습니다. 디스패처 서블릿 이전에 필터가 실행되며, 디스패처 서블릿 이후에 인터셉터가 실행되는 것으로 알고 있습니다. 위에 작성한 코드처럼 AOP 적용 위치는 개발자가 지정할 수 있는 것으로 보여집니다. 실제 컨트롤러가 호출되기 전에 필터나 인터셉터 호출되므로 BindingResult 검사를 할 수 없어서 AOP로 적용하신 것인지 궁금합니다. 만약 해결할 수 있다면, AOP로 적용한 이유가 궁금합니다. 추가적으로, Jwt Filter에서 필터를 이용하여 구현하셨습니다. UsernamePasswordAuthenticationFilter와 같이 이미 제공해주는 시큐리티가 있어서 그것을 활용하여 보다 편리하게 구현할 수 있는 것 같습니다. 그러나, 필터 대신 AOP나 인터셉터로도 Jwt 서버를 구현하는 것이 가능한지 궁금합니다. 좋은 강의를 듣다보니 자연스레 질문이 많아지는 것 같습니다. 정말 많이 배우고 있습니다. 감사합니다 !
안녕하세요, 강사님. "계좌등록 컨트롤러 테스트" 강의에서 AccountController Test 코드 작성 시, 아래와 같이 saveAccount_test()에 궁금한 점이 있습니다. 위의 테스트 코드에서 @WithUserDetails(value = "ssar", setupBefore = TestExecutionEvent.TEST_EXECUTION) 어노테이션을 선언해줘야 하는 이유를 설명해주셨습니다. 그리고 request가 JWT 토큰이 없다고 하더라도 아래의 doFilterInternal 메서드를 실행하며 if문을 통과하지 못하더라도 chain.doFilter를 통해, 결국 컨트롤러단까지 간다고 말씀해주셨습니다. 위의 doFilterInternal 메서드 작성 시, if - else 문으로 작성하지 않은 이유가 테스트를 수월하게 할 수 있기 때문이라고 말씀해주셨습니다. 제가 궁금한 점은, 실무에서도 위의 코드처럼 JWT 토큰이 없는 request를 바로 차단하지 않고 컨트롤러단까지 흘려보내는지 여부가 궁금합니다. 제가 아직 시큐리티 측면을 잘 모르기 때문에 하는 질문이라고 생각해주시면 감사하겠습니다. 실제 배포/운영 환경에서는 테스트 코드를 편리하게 짜는 것보다 보안이 더 중요한 요소라고 생각되기에, JWT 토큰이 없는 request를 바로 차단할 수 있다면 즉시 차단하고 컨트롤러단까지 흘려보내지 않는 것이 더 안전하지 않을까 하는 생각이 들었습니다. 감사합니다.
안녕하세요 강사님. 정규표현식 실습 강의에서 궁금한 점이 있습니다. 한글만 가능하도록 정규표현식을 작성하는 것을 " ^[가-힣]+$" 라고 말씀해주셨습니다. 궁금한 점은 "[가-힣]+" 라고 작성하면 한글 외의 글자가 들어와도 true라고 반환하는 케이스가 어느 경우인지 입니다. "[가-힣]+" 라고 작성해도 띄어쓰기와 ""일때도 모두 false를 반환합니다. 즉, " ^[가-힣]+$" 대신에 "[가-힣]+" 라고 할 경우 어떠한 케이스들을 걸러내지 못하는지 궁금합니다. 감사합니다.
프로젝트를 하면서 궁금한 점이 생겨 질문드립니다. @AutoConfigureMockMvc와 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) 만 적용한 상태로 테스트 코드를 작성했습니다. 그리고 @Autowired를 통해 순수 EntityManager를 주입받아서 직접 영속성을 관리하는 레포지토리가 있습니다. 그런데 직접 EntityManager를 주입받은 Repository 빈은 테스트 주입 시 EntityManager가 없다는 오류가 발생합니다. 하지만 Spring Data JPA의 JpaRepository를 상속받은 인터페이스를 @Autowired로 주입받으면 이는 문제없이 테스트가 동작합니다. 혹시 어떤 차이점이 있는지 알 수 있을까요? @Repository public class UserRepository { @PersistenceContext private EntityManager em; public User save(final User user) { em.persist(user); return user; } public Optional<User> findByEmail(final String email) { List<User> users = em.createQuery("select u from User u where u.email=:email", User.class) .setParameter("email", email) .getResultList();return users.isEmpty() ? Optional.empty() : Optional.of(users.get(0)); } } public interface UserJpaRepository extends JpaRepository<User, Long> { public Optional<User> findByEmail(final String email); } @ActiveProfiles("test") @AutoConfigureMockMvc @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) class AjaxEmailPasswordAuthenticationFilterTests extends DummyObject { @Autowired private ObjectMapper objectMapper; @Autowired private MockMvc mockMvc; @Autowired private UserJpaRepository userJpaRepository; @Autowired private PasswordEncoder passwordEncoder; @BeforeEach void setup() { userJpaRepository.save(User.builder() .email("test@gmail.com") .username("test") .password(passwordEncoder.encode("1234")).build()); } @DisplayName("이메일 기반 회원가입 유저 로그인") @Nested class LoginByEmailTests { @DisplayName("로그인 성공") @Test void success_test() throws Exception { //given String url = Endpoint.Api.LOGIN_WITH_EMAIL; EmailLoginUserRequestDto requestDto = EmailLoginUserRequestDto.builder() .email("test@gmail.com") .password("1234") .build(); //when ResultActions resultActions = mockMvc.perform( post(url) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(requestDto)) ); //then resultActions .andExpect(status().isOk()) .andExpect(jsonPath("$.id").exists()) .andExpect(jsonPath("$.redirectUrl").exists()); } } }
안녕하세요 예측에 관련되서 여쭤볼게 있어서 질문 드립니다. LSTM훈련 후 Original Price와 Predicted Price의 그래프를 그리실 때 자세히 보시면 Predict price가 Original price의 데이터를 1스탭 뒤로 그려지는 것을 볼 수 있습니다. 그렇다면 이건 예측이 아니라 전 스탭에 있는 데이터를 어느정도 이동평균 또는 지수 이동평균과 같이 보정해서 쓴다고 보는게 맞지 않을까요? 이렇게 나오는 것보다 완전히 맞지 않더라도 1스탭 뒤로 예측되는 예측되는 것보다 어느정도 맞게 따라가는 방법은 없을까요?
안녕하세요 jwt,시큐리티 / ci/cd 강의에 이어서 계속해서 수강하고 있는 학생입니다. 좋은 강의 퀄리티 덕분에 어려운 개념들을 쉽게 정리할 수 있었습니다. 정말 감사드립니다. Spring security 서버(백엔드)가 Web page가 아닌 Mobile app과 연동하는 REST API 서버로 구현하는 방법에 대해 질문이 있습니다. 조사한 방법은 총 2가지인데요, 공통 : 회원 테이블에 provider와 provider_id칼럼이 등록되어있습니다. 1안 https://www.inflearn.com/questions/537402/react-ios-android-등-spring-boot-가-api-서버일-경우-oauth2-연동-방법 안드로이드/ios에서 oauth서버로 인증을 진행한뒤 정보를 그대로 스프링으로 던짐(액세스 토큰 포함) 스프링서버에서는 액세스 토큰을 활용해 해당 OAuth 제공자에서 제공하는 API를 사용하여 검증 provider와 provider_id가 유효할 경우에만 내부 회원 db에서 조회 후 jwt토큰 발급 카카오공식 답변에서는 액세스 토큰을 직접 보내면 안된다하더라고요 https://devtalk.kakao.com/t/oauth2/128079 그러면 결국 프론트에서 인증 진행 후 정보를 받아 provider와 providerid만을 보내야하는 이야기인데 (2안) 2안 안드로이드/ios에서 oauth서버로 인증을 진행한뒤 http에 provider와 provider_id만 담아서 스프링 서버로 전송 스프링 서버에서는 provider와 provider_id만을 가지고 내부 회원 db에서 조회 후 jwt토큰 발급 2안의 경우 proivder와 provider_id를 무차별 조합해서 뚫는게 가능하지 않을까 싶어요 질문은 다음과 같습니다. oauth와 jwt를 활용해서 서버를 구축할 때 2안으로 구현하는게 맞는지 (서버에 provider와 provider_id만 보내기) 1-1. 만약 아니라면 어떤 방식으로 구현해야하는지 2안이 맞다면 provider와 provider_id를 무차별적으로 조합해서 보내면 쉽게 뚫리는 것이 아닐지 액세스 토큰을 직접 보내 서버에서 검증하게 될 경우(1안)은 왜 위험한지가 궁금합니다.
updateform에서 disabled = True로 변경하여 url로 접속해보면 제대로 적용이 되는 것을 확인할 수 있습니다. 하지만 비밀번호를 입력하고 제출을 누르면 계속해서 A user with that username already exists. 메시지만 뜨고 있는 상황입니다. ㅠㅠㅠ
안녕하세요. 강의 잘 들으면서 공부중입니다! 회원가입 Service 테스트 작성하는것을 보다 @Spy와 @Mock의 정확한 차이가 궁금하여 질문드립니다. (언제 사용해야 할지) BCryptPasswordEncoder는 @Spy를 사용한 이유가 있을까요? @Mock을사용하면 안되는건가요? 반대로 UserRepository는 @Spy를사용하면 안되는 걸까요?? 항상 좋은 강의 잘 듣고있습니다. 감사합니다
안녕하세요 현재 파이썬을 공부중인 학생입니다. 이전까지는 태그의 값을 텍스트로 출력하고 있었는데 태그안에 속성값을 텍스트로 출력할일이 생겨서 여러 방면으로 검색 및 시도를 해보고 있는데 잘 안되네요 여기서 data-taitle="BLACK(99)" 의 BLACK(99) 를 텍스트로 출력하고 싶습니다. 어떻게 하면 될까요? #python
마지막 강을 들으면서 전체 테스트를 돌려보니 deleteAccount 테스트만 오류가 발생했습니다. 에러 로그를 확인해보니 Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FKDDVHOIEDLDMC0I8PA6JUY4X69: PUBLIC.TRANSACTION_TB FOREIGN KEY(DEPOSIT_ACCOUNT_ID) REFERENCES PUBLIC.ACCOUNT_TB(ID) (CAST(1 AS BIGINT))"; SQL statement: delete from account_tb where id=? [23503-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FKDDVHOIEDLDMC0I8PA6JUY4X69: PUBLIC.TRANSACTION_TB FOREIGN KEY(DEPOSIT_ACCOUNT_ID) REFERENCES PUBLIC.ACCOUNT_TB(ID) (CAST(1 AS BIGINT))"; SQL statement: delete from account_tb where id=? [23503-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement at app//org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) account의 delete 쿼리가 실행될 때 transaction_tb의 외래키 때문에 무결성 오류가 발생한 것으로 보입니다. Transaction 엔티티에서 @ManyToOne 부분에 cascade 설정을 해줘야 할까요?
안녕하세요, 강의 내용을 Colab를 통해서 실습을 하고 있습니다. 다른 코드를 실행 할때는 별 문제가 없었지만, 산탄데르 은행 데이터셋과 사기검출 데이터셋을 실행할때 read_csv를 통해 csv파일을 읽어오면 실행 할때마다(런타임이 바뀔때 마다) read된 결과가 다른데 왜 그런지 알 수 있을까요? 사기검출 데이터의 경우 25838 rows × 31 columns 로 읽히는 경우도 있고, 39702 rows × 31 columns로 읽어지는 경우도 있습니다. 두 데이터셋다 공통적으로 Nan 값도 생기기도 하네요. 런타임을 몇번 초기화 하다보면 운좋게(?) 정상적으로 읽어지는 경우도 있습니다. 왜 실행할때마다 결과가 다르게 나오는지 궁금합니다!
엣지랑 크롬으로 테스트해봤는데 Preflight 헤더가 보이지 않습니다. 검색해보니 OPTIONS 요청은 네트워크 탭에 보이지 않게 되었다고 하는 글들이 많은데 어떻게 보이게 하는지 알고 싶습니다. https://stackoverflow.com/questions/57410051/chrome-not-showing-options-requests-in-network-tab 이 flag 옵션도 현재는 보이지 않네요.