선생님 안녕하세요! 5장 회귀 실습 2:캐글경연 주택가격 예측-Advanced Regression Techniques - 01 을 듣다가 타겟 값인 Price를 로그 변환하여 정규 분포 형태로 변환하고, 피처들 중 숫자형 컬럼의 Null 값 데이터 처리 부분 코드를 다음과 같이 썼습니다. 그런데 결과가 사진과 같이 float64가 포함된 형태로 나왔습니다. 제가 어떤 부분에서 잘못한 건지, 그리고 어떻게 해야 선생님과 같은 결과가 나올 수 있나요?ㅎㅎ # SalePrice 로그 변환 original_SalePrice = house_df['SalePrice'] house_df['SalePrice'] = np.log1p(house_df['SalePrice']) # Null이 너무 많은 컬럼들과 불필요한 컬럼 삭제 house_df.drop(['Id', 'PoolQC', 'MiscFeature', 'Alley', 'Fence', 'FireplaceQu'], axis=1, inplace=True) # Drop하지 않는 숫자형 Null 컬럼들은 평균 값으로 대체 num_columns = house_df.dtypes[house_df.dtypes !='object'].index.to_list() house_df[num_columns].fillna(house_df[num_columns].mean(), inplace=True) # Null 값이 있는 피처명과 타입을 추출 null_column_count = house_df.isnull().sum()[house_df.isnull().sum() > 0] print('## Null 피처의 Type :\n', house_df.dtypes[null_column_count.index])
Controller단의 Dto를 Service 전용 Dto로 변환해서 넘기는 방법을 알려주셨는데 Controller단에서 받은 Dto의 컬럼들을 모두 풀어서 Service단 으로 넘겨주는 방법은 어떻게 생각하시는지 궁금합니다. 이렇게 하면 순수한 자바코드로 Service단 코드를 작성할 수 있을 거라고 생각하는데 강사님의 생각 알려주시면 감사하겠습니다.
0:59:00 전 내용입니다. 명세를 정한다 컨트롤러 @Valid 검증을 작성한다. RestDocs 를 작성한다 가짜 데이터를 넣는다. 배포한다. 그 뒤 서비스와 리포지토리를 작성한다. 라고 정리를 해봤습니다. 그런데 여기서 궁금한게 4번인데요 가짜 데이터를 넣는다는 뜻을 잘 모르겠습니다. 테스트 환경에서는 자유롭게 docs/index.html 로 접근을 하고 라이브 환경에서는 해당 bootJar를 구문을 제거하고 배포하시는 건가요?
안녕하세요 강사님, 먼저 좋은 강의와 강의가 나온지 일년이 가까지 되어가는데도 답변해주셔서 감사합니다. public boolean sendOrderStatisticsMail(LocalDate orderDate, String email) { // 찾아오기 //통계 합산하기. boolean result = mailService.sendMail(); return true; } public Boolean sendMail(String fromEmail, String toEmail, String subject, String content) { // mailSendClient는 메일을 전송하는 역할을 합니다. boolean result = mailSendClient.sendEmail(fromEmail,toEmail,subject,content); // 메일이 전송되었다면 메일 전송 내역을 저장합니다. - 기록용 엔티티 입니다. if (result) { mailSendHistoryRepository.save(..); return true; } return false; } 이렇게 역할을 나누어 메일 전송을 메일 서비스에게 위임했습니다. 조회한다 메일을 전송한다 메일 히스토리에 저장한다. 비즈니스 로직을 그대로 작성하다보면 아래와 같이 작성하게 되는 경우가 많습니다. public boolean sendOrderStatisticsMail(LocalDate orderDate, String email) { // 찾아오기 //통계 합산하기. // mailSendClient는 메일을 전송하는 역할을 합니다. boolean result = mailSendClient.sendEmail(fromEmail,toEmail,subject,content); // 메일이 전송되었다면 메일 전송 내역을 저장합니다. - 기록용 엔티티 입니다. if (result) { mailSendHistoryRepository.save(..); return true; } return false; } mailSendClient를 Subbing해서 테스트를 한다면 위에 코드나 아래 코드나 테스트 방식은 동일하게 작성이 됩니다. 강사님께서 작성하는 방법은 메일 후처리를 해주는 클래스를 추가가 됩니다. 테스트 코드를 작성하면 동일하게 동작하는데 클래스가 하나가 추가됩니다. 그럼에도 장점이 있기 때문에 사용한다고 생각되어지는데 제가 생각한 후처리기 클래스의 장점은 외부 네트워크를 직접 의존하지 않아도 된다. 메일 전송과 히스토리 저장을 하나의 서비스로 사용할 수 있다. 그리고 이렇게 후처리기 클래스 적용하는 기준이 있으실까요?
안녕하세요 선생님, 좋은 강의 항상 감사하게 잘 듣고 있습니다. 제가 지금 카테고리를 테스트 하는 강의를 수강하고 있습니다. 그런데 아무리 테스트를 하여도 blog/ test.py 83번째 줄에서 Nonetype 오류가 나옵니다. id를 제대로 html에 부여 하였고 대문자, 소문자, 특수기호를 모두 확인하였습니다. 그래서 제 지식으로는 오래 생각을 해 보아도 틀린 부분을 찾을 수 없어서 어느 부분이 틀린 부분인지 선생님께 여쭤보고자 연락을 드립니다. 아래 제 깃허브 url을 첨부하도록 하겠습니다. 감사합니다. https://github.com/rapgodd/django_2023.git
python-telegram-bot 20 버전부터는 비동기 프로그래밍이 적용되어 강의와는 다른 코드가 필요합니다. https://github.com/python-telegram-bot/python-telegram-bot/wiki/Introduction-to-the-API 위 깃허브 python-telegram-bot 공식 위키 페이지로 가시면 필수적이고 간단한 용례들을 보실 수 있습니다.
안녕하세요 섹션 6. 정적파일 (static files) & 미디어 파일 (media files) - 정적파일 관리하기 - 블로그 포스트 상세 페이지에 부트스트랩 적용하기 을 듣고 있습니다. 거기서 1:31 경, Bootstrap 관련 링크가 수정되었다고 알림이 뜨는데, 그 링크가 잘못되어있습니다. 그 링크를 이용하면, post list 를 카피하게 됩니다. Post detail을 이용하기 위해서는 아래 링크를 사용해야 합니다. https://github.com/StartBootstrap/startbootstrap-blog-post/tree/18e5cfdfb75bc7b06fbb8b04b7d957e0395fe8cc 확인 후 수정 부탁드립니다. 감사합니다.
해당 강의에서 작성하는 코드를 그대로 실행하면 되지 않습니다. 현재 iframe 태그가 자바스크립트를 통해 실행되기 때문에 페이지가 로드된 후에도 자바스크립트가 실행될 시간이 필요합니다. 강의처럼 iframe의 주소만 따와서 실행시키는 것이 아닌 전체 주소를 가져와 iframe 태그로 전환시켜주고 자바스크립트 실행까지 기다려 주는 방식으로 진행하셔야 합니다. https://velog.io/@os_js/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81%EC%9D%B4%EC%9A%A9-%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8-%EC%B1%97%EB%B4%87 저도 강의중 안됐던 내용이 있었기에 그에 대한 내용을 블로그에 올려두었습니다. 강의 진행대로 따라하다가 안되는 부분만 정리하여 올렸기 때문에 강의내용과 비교하시면서 보셔야 될 듯 합니다.
지금 토스페이먼트 결제를 연동하고있는데 토스에서 결제 요청-인증을 하면 토스에서 주소에 파라미터로 paymentKey을 주는데 이 paymentKey을 가지고 백엔드에서 토스의 api에 결제 승인 요청을 해야합니다. 그런데 서비스 단에서는 컨트롤러에서 파라미터을 통해 paymentKey을 알 수 있지 서비스단의 테스트 코드 작성 시는 paymentKey을 알 수 가 없는데 이런 경우는 테스트 코드를 어떻게 작성해야할까요? 추가적으로 외부 api 에서 paymentkey을 파라미터로 주는 컨트롤러는 어떻게 테스트해야할까요?
안녕하세요. 강의 잘 들었습니다 ! 강의 수강 후 제가 진행했던 프로젝트에서 테스트 코드를 작성해보고 있는데 엔티티들의 연관 관계에 대해서 궁금한게 생겨서 질문 드립니다. 강의에서 Order의 create를 테스트하기 위해 Product를 먼저 생성 후 DB에 저장하는 것과 비슷하게, 커뮤니티의 게시글이라면, 게시글(Board)과 작성자(User)는 엔티티에서 연관 관계가 설정되어 있고 Board 테이블에는 User의 PK가 참조키로 설정해야할 때, given에서 User 엔티티도 DB에 save 후 저장된 User를 Board가 참조하도록 테스트 코드를 작성하는게 맞을까요 ? 제가 궁금한 것은, 실제 서비스라면 엔티티들은 수많은 연관 관계가 있을텐데 한 엔티티의 비즈니스 로직 등을 테스트하기 위해, 그 엔티티와 연관 관계에 있는 다른 엔티티들을 모두 given 절에서 생성하고 DB에 저장해야 하는지 궁금합니다. 감사합니다 !
안녕하세요. LocalDateTime.now () 를 이용하여 테스트 하는 걸 지양하자라는 강사님 강의 중에 제가 겪었던 경험에 대해 질문이 있습니다. 현재 개인적인 프로젝트에서 테스트 코드를 작성하고 있습니다.회원가입을 할때 가입한 시점을 저장하기 위해 LocalDateTime 을 파라미터로 받고 있는데요, 이 로직을 검증하기 위해 테스트 코드를 작성하였습니다. 그러나 아래와 같은 에러가 발생하더라구요 org.opentest4j.AssertionFailedError: expected: 2024-01-03T21:25:11.333406800 (java.time.LocalDateTime) but was: 2024-01-03T21:25:11.333407 (java.time.LocalDateTime) when comparing values using 'ChronoLocalDateTime.timeLineOrder()' Expected :2024-01-03T21:25:11.333406800 (java.time.LocalDateTime) Actual :2024-01-03T21:25:11.333407 (java.time.LocalDateTime) 대략 에러 메세지를 확인해보니 LocalDateTime.now 로 생성한 값과 저장한 뒤에 조회한 시간의 오차가 발생하여 테스트가 실행하는 것 이었습니다. 해서 LocalDateTime.now 가 아닌 임의의 시점을 지정해주어서 문제를 해결할 수 있었는데 혹시 비슷한 경험을 하신적이 있으신지? 있으시다면 제가 말한 방법대로 테스트 코드를 작성하는게 적절한지? 가 궁금합니다! 감사합니다!!
우선 이번 강의를 통해 기존의 DOM을 단순조작하는 코딩에서 벗어날 수 있는 생각을 갖게 되어 너무 감사드립니다. 무엇보다도 짜임새 있는 설계와 유지 보수가 가능할 수 있는 코드를 만들수 있을 것 같아 이번 강의를 통해 많은 생각을 할 수 있게 되어 감사합니다. 강의 들으면서 한 가지 질문이 생겼는데요 만약에 모듈 간 영향력이 있는 경우는 어떻게 설계를 가져야 할까요? 예를 들어 ClickCount의 예제에서 확장해서 + - 버튼을 클릭하면 옆에 특정 모듈에서 총 클릭 수를 보여주는 totalClickCount와 totalClcikCountView 를 만들어 사용한다고 한다면 어떻게 설계해야 할까요? 대부분의 실생활 로직들이 모듈간의 서로 영향력을 주고 받는 일이 비일비재한 이런부분 에서 어떻게 설계해야 하는지 질문 드립니다.
Jupyter command jupyter-contrib not found. 지금 이 오류가 떠서 설치가 안되고 있는데요. 어떻게 해결해야 할까요?? 제가 봤을땐, pip install jupyter_contrib_nbextensions 이 부분은 실행이 되는데 jupyter contrib nbextension 이 부분에서 오류가 생기는 것 같습니다. ㅠㅠ
UUID, Random 등 자주 사용하는 의존성의 경우, 강의에서 설명해주신 방식으로 공통으로 사용하는 유틸성 Holder 인터페이스를 만들어놓고 프로젝트에서 함께 사용하는 방식으로 개발하나요? 자주 사용되는 클래스들이다 보니 여러 곳에서 필요할 것 같은데(한 곳에서 Holder 인터페이스를 만들어두면 될 것 같은데) 실제로는 어떻게 사용하시는지 궁금해서 여쭙습니다.
클래스 정의하고 호출하면 42번 줄에 player1에 해당하는 height와 weight의 값이 둘 다 나와야 하는데 저는 한가지 값만 출력이 됩니다. weight를 지우고 height 값만 쓰면 height값이 출력되고 둘다 쓰면 height값은 안나오고 weight값만 출력이 되는데 왜 이런 걸까요?
안녕하세요. 테스트 환경 통합 강의를 보다가 궁금한 점이 생겨서 질문하게 되었습니다! 강사님께서는 테스트 환경 통합을 위하여 테스트 클래스에서 테스트 환경 추상 클래스(IntegrationTestSupport, ControllerTestSupport)를 상속하는 방식을 사용하셨습니다. ControllerTest에서는 MockMvc, ObjectMapper, @MockBean 처리할 Service들을 protected 필드로 넘겨줄 필요가 있어서 추상 클래스를 사용하는 방식에 대해 되게 좋다고 생각했는데요! Service와 Repository 테스트의 경우에는 그런 공통된 필드들이 필요하지 않기 때문에 추상 클래스가 아닌 커스텀 어노테이션을 생성하여 구성하여도 되지 않을까? 싶어서 질문드리게 되었습니다! @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @ActiveProfiles("test") @SpringBootTest public @interface IntegrationServiceTest { } @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @ActiveProfiles("test") @Transactional @SpringBootTest public @interface RepositoryTest { } 제가 생각한 코드는 위와 같습니다! 제가 생각했을 때의 어노테이션으로 테스트 환경을 관리하였을 때의 장점은 자바에서는 다중 상속이 안되기 때문에 조금 더 유연하다고 생각했습니다! 강사님께서는 커스텀 어노테이션을 사용하여서 테스트 환경을 통합하는 방식에 대하여 어떻게 생각하시는지 궁금합니다! (강의 너무 유익하게 잘 듣고 있습니다! 새해 복 많이 받으시구 내년에도 화이팅입니다ㅎㅎ)