@Data @Builder @NoArgsConstructor @AllArgsConstructor public class LoginDto { @NotBlank private String email; @NotBlank private String password; } ------------------------------------- @Component public class LoginValidator implements Validator { private final UserRepository userRepository; public LoginValidator(UserRepository userRepository) { this.userRepository = userRepository; } @Override public boolean supports(Class<?> clazz) { return LoginDto.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { LoginDto loginDto = (LoginDto) target; User user = userRepository.findByEmail(loginDto.getEmail()); if (user == null) { throw new LoginFailedException("User not found"); } if (!user.getPassword().equals(loginDto.getPassword())) { throw new LoginFailedException("Invalid password"); } } } 위 코드처럼 DTO 클래스에서 간단한 검증은 bean validation으로 시행하고, 복잡한 검증로직은 LoginValidator에서 관리 및 커스텀 예외를 리턴하는 방식은 안좋은 방식인가요? 제가 알기로는 errors는 bindingresult처럼 복잡한 검증이 아니라 단순한 검증결과를 담는 것으로 알고 있는데, validate를 override하여 복잡한 검증 실행 및 검증 결과를 LoginFailedException(커스텀 예외)으로 반환하려고 하니 Errors를 리턴해야 한다는 강제성 때문에 혼란이 생겼습니다. 따라서 제가 궁금한 점은, 간단한 검증작업(ex. 정규식) 과 복잡한 검증작업(ex.이메일,비밀번호가 DB에 있는지 검증)은 어떻게 처리하는게 이상적인가? 입니다. 저는 각각 Bean Validation, Validator(커스텀 예외 반환)로 해보려했는데 아닌 것 같아서 질문드립니다. 감사합니다.
T1-21 문제 풀어보고 있는데요, 캐글에서 올려주신 코드로 작성한 결과와 제가 작성한 코드의 결과가 달라 질문 드립니다. (*제가 작성한 전체 코드는 맨 아래에 있습니다.) 바로 아래 코드에 대한 출력값은 90, 30, 30, 30 입니다. (답은 167.0 으로 출력됩니다.) 이를 통해 이상값 처리와 데이터 분할 모두 옳게 했다고 볼 수 있는데, 답은 165가 아닌 167이 나와서 도대체 어디서 잘못된건지 모르겠습니다. 답변 주시면 감사하겠습니다! # print(len(df['age'])) # print(len(df['age'].iloc[:30])) # print(len(df['age'].iloc[30:60])) # print(len(df['age'].iloc[60:90])) import pandas as pd import numpy as np df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv') # print(df.head()) # print(df.info()) cond1 = df['age'] > 0 cond2 = df['age'] == round(df['age'], 0) df = df[cond1 & cond2] # print(df.head()) # print(len(df['age'])) # print(len(df['age'].iloc[:30])) # print(len(df['age'].iloc[30:60])) # print(len(df['age'].iloc[60:90])) median1 = df['age'].iloc[:30].median() median2 = df['age'].iloc[30:60].median() median3 = df['age'].iloc[60:90].median() print(median1+median2+median3)
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 안녕하세요 작업형 2 한 가지 방법으로 풀기를 봤는데요 지금까지는 결측치나 이상치가 없었던 것으로 알고있는데요 1.만약 8회차에 결측치나 이상치가 존재한다면 여기서 EDA이후 결측치나 이상치를 제거하고 인코딩으로 넘어가면 되는거죠?? 2.그리고 영상에서는 target빼고 원핫 인코딩으로 다 진행 하던데 혹시나 조금 더 꼼꼼하게 진행할려면 target데이터 제외후 범주형은 원핫 인코딩 수치형은 스케일링 돌린후 검증 데이터 나누고 randforest로 학습 및 평가 후 제출 하면 되는 걸 까요??
캐글에 올려주신 자료 중 T1-23 문제를 다시 풀어보고 있는데 선생님 답과 다른 답이 나와서 질문 드립니다. 선생님 풀이와 다른 부분은 10번째 값을 찾는 부분만 다른 코드로 했는데요 10번째 값은 88으로 같은데 중복값 제거 후 f1 중앙값이 75로 선생님 풀이의 값 77과는 다르게 나옵니다. 이유가 뭔지 알 수 있을까요? # f1 결측치를 f1을 내림차순으로 소팅했을 때 10번째 인덱스에 위치한 값으로 채움 df=df.sort_values('f1', ascending=False) df=df.reset_index() # print(df.head(10)) a=df.loc[9,'f1'] print(a) # print(df.isnull().sum()) df['f1']=df['f1'].fillna(a) # print(df.isnull().sum()) # age컬럼의 중복 제거 전 f1중앙값 m1=df['f1'].median() print(m1) # age컬럼의 중복 제거 후 f1중앙값 print(df.shape) df=df.drop_duplicates(subset=['age']) print(df.shape) m2=df['f1'].median() print(m2) print(abs(m1-m2))
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 질문이 생겨서 글을 남깁니다. 저가 이것저것(아픔 + 번아웃..등)이 있어서 한 2주 정도 인가요? 코딩하는데 거의 손을 놓고 있엇습니다.(해 봐야 30분에서 2시간이하 정확히는 기억이 안남 ,아니면 아에 안함 ) 그리고 나서 날짜와 시간 사이에서 너무 막혀서(캘린더 는 정말 싫네요.. 하신 분들 존경 합니다.) 에라이 전에 있던 문제 풀이나 복습 해보자 하고 하였는데.. String챕터 문제 풀이 부터 막히더라고요.(문제와 풀이만 보고서여.pdf파일에 있는 내용 참조 안함) 그래서 다시 보고 있긴 한데, 시간이 지나고 나서( ex)예외처리까지 챕터 까지했을때 - 7월달까지 중급2편을 끝내고 싶었는데.. 역시 계획 대로는 안되네요...), 저가 이것들을 할 수 있을까 하는 의문이 들더라고요. 이럴 때에는 어떻게 해야 하는지 궁금합니다. 지금은 저가 중요하다고 생각하는 것을 손코딩 + 동영상 보면서 코드 를 지우고 다시 침, 이렇게 하고 있긴 한데 더욱 좋은 방법이 있을까요? 아니면 지금 이대로 계속 하는 게 맞는 방법인가요? 답변 부탁드립니다.
> Task :prepareKotlinBuildScriptModel UP-TO-DATE FAILURE: Build failed with an exception. * What went wrong: Could not resolve all dependencies for configuration ':compileClasspath'. Failed to calculate the value of task ':compileJava' property 'javaCompiler'. Cannot find a Java installation on your machine matching this tasks requirements: {languageVersion=17, vendor=any, implementation=vendor-specific} for MAC_OS on aarch64. No locally installed toolchains match and toolchain download repositories have not been configured. * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. BUILD FAILED in 504ms 이런 오류가 발생합니다.ㅜㅜ
상위 10번째 값으로 대체하는 부분에서 df.iloc[:10,-1] = min_value 이렇게 하셨는데 df['views'].iloc[:10]= min_value 이렇게 풀어도 상관없을까요? 만약 2번째 풀이도 상관 없다면 첫번째 풀이로 진행하신 이유가 있을까요? 취향차이일까요?
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 정규성을 만족하지 않을 때 단일 표본과 대응 표본에서 윌콕슨을 사용하려고 합니다. 이때 단일 표본 stats.wilcoxon(df['관측치명']-평균값, alternative=) 라 했을 때 차이로(df['관측치명']-평균값) 계산하였고 대응표본은 차이로 계산이 가능하지만, 더 쉬운 방법인 df['before'], df['after'], alternative= 를 사용하였습니다. 그렇다면 단일표본에서도 df['관측치명'], 평균값으로 계산해서 될까요? 만일 안된다면, 윌콕슨은 차이 값를 기반으로 검정 통계량을 계산하는 것인데 대응표본은 두가지로 가능하면서 단일표본은 무조건 왜 -(차이)를 사용해야 하는지 궁금합니다!
@Controller @RequestMapping("/springmvc/v3/members") public class SpringMemberControllerV3 { private MemberRepository memberRepository = MemberRepository.getInstance(); @GetMapping("/new-form") public String newForm() { return "new-form"; } @PostMapping("/save") public String save(@RequestParam("username") String username, @RequestParam("age") int age, Model model) { Member member = new Member(username, age); memberRepository.save(member); model.addAttribute("member", member); return "save-result"; } @GetMapping public String members(Model model) { List<Member> members = memberRepository.findAll(); model.addAttribute("members", members); return "members"; } } RequestMappingHandlerAdapter에서 핸들러 어댑터를 찾으려면 핸들러 어탭터를 등록해야 하는데 스프링에서 애노테이션 인식해서 저장되는 핸들러 어탭터 뭘로 등록되는 건가요? 위에 코드는 그냥 핸들러로 등록되는 거고, 그럼 SpringMemberControllerV3 핸들러를 실행시켜줄 핸들러 어댑터는 자동으로 생성되는데 궁금한 건 v4에서는 process로 모든 메서드가 같아서 처리가 가능했는데 지금은 다른데 어떻게 처리가 되는 겁니까? SpringMemberControllerV3에서 메서드가 3개니까 SpringMemberControllerV3을 호출해줄 핸들러 어댑터가 각 newForm, save, members를 사용할 수 있게 3개 생성되는 건가요??
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] NetworkClient 클래스, SendException 클래스, ConnectException 클래스들의 필드를 캡슐화로 외부에서 상태 변경을 막았는데 왜 final로 정의한 이유가 궁금합니다.
강의 내용중 Comparable, Comparator 파트에서 List 데이터를 정렬할 때 Collections.sort() 와 list.sort() 중 list.sort를 권장하는 이유를 조금 더 자세히 알고 싶습니다. 이 부분에서 list.sort()를 사용하는 게 더 객체지향적인 코드 라고 말씀해주셨는데 List 인터페이스에 정의된 sort() 메서드를 사용하는 게 Collections class 에 정의된 static 메서드보다 어떤 측면에서 더 객체지향적인지 느낌은 오는데 이것 때문이다 라고 정리가 잘 안돼서 질문 드립니다. Collections 의 코드를 봤을 때 내부에서 Collections.sort(list, comparator)를 보게되면 list.sort(comparator) 메서드를 사용하고 있는데 그러면 굳이 Collections.sort()를 사용해야 할 케이스가 따로 있어서 정의한 것인지 어떤 경우에 사용하는지 궁금합니다. public static <T> void sort(List<T> list, Comparator<? super T> c) { list.sort(c); }