묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
libs파일이 없네요...
[질문 내용]gradle환경 만드는 과정에서 말씀해주신 대로 윈도우 환경에서 gradle.build를 하여서build successful이 나왔는데, 자꾸 cd build에 있는 libs파일이 없다고 나오네요. 실제로 들어가보니 libs파일이 없는데재 설치해도 마찬가지입니다. 환경변수 모두 java11로 되어있고 모든 setting이 java11로 되어있는데도 에러가 나니, 다음 과정으로 넘어갈 수가 없네요..
-
미해결아이폰 앱 개발 입문 1편
이미지 리소스 다운로드 불가
이미지 리소스 다운로드시 '링크된 파일 다운로드' 를 어떻게 선택하면 될까요? '다른 이름으로 링크 저장'시 다운로드가 불가해서 문의 드립니다.
-
해결됨스프링 시큐리티
2) 필터 초기화와 다중 보안 설정 강좌
WebSecurityConfigurerAdapter가 deparcated된 후 SecurityFilterChain을 빈으로 등록하여 사용중인데, @Order를 사용하지 않아도 두 개의 SecurityConfig 클래스가 충돌이 나지는 않습니다.그런데 순서를 명시적으로 보장하기 위하여 @Order를 사용해도 원하는 순서대로 등록이 되지 않고 클래스 이름의 오름차순으로 먼저 호출되어 Bean으로 등록 됩니다. 이렇게 하는 것이 좋은 방법은 아닌 거 같아 여쭤봅니다. 다른 방법이 있을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인터셉처 2개 적용하기
안녕하세요!!!!제목 그대로 인터셉터를 2개 등록해서 사용하려고 했더니 Error creating bean with name 'memberApiController' defined in file [/Users/gimnayeon/Desktop/GreenProject/GrinGreen/out/production/classes/com/grin/GrinGreen/api/MemberApiController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberService': Unsatisfied dependency expressed through field 'passwordEncoder'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webSecurityConfig': Unsatisfied dependency expressed through method 'setContentNegotationStrategy' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration': Unsatisfied dependency expressed through method 'setConfigurers' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webConfig' defined in file [/Users/gimnayeon/Desktop/GreenProject/GrinGreen/out/production/classes/com/grin/GrinGreen/login/WebConfig.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'loginService': Unsatisfied dependency expressed through field 'passwordEncoder'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'getPasswordEncoder': Requested bean is currently in creation: Is there an unresolvable circular reference?위와 같은 오류가 발생합니다.상황을 대략 적자면1번 인터셉터로 로그인 제외 url을 설정2번 인터셉터로 api 작동 전 로그인 후 세션 주입이렇게 처리를 하려고 하는데 @Autowired 문제일까요?구글링을 해보려고 했으니 지금 티스토리 등이 정상적으로 열리지 않아 이렇게 질문 남깁니다ㅠ.ㅠMemberApiController@Slf4j @RequiredArgsConstructor @RequestMapping("/api") @RestController public class MemberApiController { private final MemberService memberService; private final LoginService loginService; /** 회원 등록 API **/ @PostMapping("/members") public CreateMemberResponse saveMember(@RequestBody @Valid CreateMemberRequest request) { Member member = new Member(); member.setNickname(request.nickname); member.setMail(request.mail); member.setPassword(request.password); member.setMember_type(request.member_type); member.setMember_status(request.member_status); member.setHint_password(request.hint_password); member.setAnswer_password(request.answer_password); member.setUpdated_at(now()); member.setCreated_at(now()); String mail = memberService.join(member); return new CreateMemberResponse(mail); } /** 회원 수정 API **/ @PutMapping("/members/{mail}/edit") public UpdateMemberResponse updateMember(@PathVariable ("mail") String mail, @RequestBody @Valid UpdateMemberRequest request) { memberService.update(mail, request.getNickname(), request.getAnswer_password()); Member findMember = memberService.findOne(mail); return new UpdateMemberResponse(findMember.getNickname(), findMember.getMail(), findMember.getHint_password(), findMember.getAnswer_password()); } /** 회원 탈퇴 API **/ @PutMapping("/members/{mail}/delete") public DeleteMemberResponse deleteMember(@PathVariable ("mail") String mail, @RequestBody @Valid DeleteMemberRequest request) { Member member = memberService.findOne(mail); memberService.delete(mail, request.getPassword()); return new DeleteMemberResponse(member.getMail(), member.getMember_status()); } /** 회원 로그인 API **/ @PostMapping("/login") public LoginMemberResponse loginMember(@RequestBody @Valid LoginMemberRequest request) { Member login = loginService.login(request.getMail(), request.getPassword()); return new LoginMemberResponse(login.getMail()); }MemberService@Slf4j @Service @Transactional(readOnly = true) @RequiredArgsConstructor public class MemberService { @Autowired private final MemberRepository memberRepository; @Autowired private PasswordEncoder passwordEncoder; /** 회원가입 **/ @Transactional public String join(Member member){ //비밀번호 암호화 후 레포지토리에 넘기기 String encodedPassword = passwordEncoder.encode(member.getPassword()); member.setPassword(encodedPassword); validateDuplicateMember(member);//중복회원검증 memberRepository.save(member); return member.getMail(); } /** 중복회원검증 **/ private void validateDuplicateMember(Member member) { List<Member> findMembers = memberRepository.findByMail(member.getMail()); if (!findMembers.isEmpty()){ throw new IllegalStateException("이미 존재하는 회원입니다"); } } private void validateDuplicateNickname(Member member) { Member findMembers = memberRepository.findOndByMail(member.getMail()); if (!findMembers.getNickname().equals(member.getNickname())){ throw new IllegalStateException("이미 존재하는 회원입니다"); } } /** 회원전체조회 **/ public List<Member> findMembers(){ return memberRepository.findAll(); } public Member findOne(String mail) { return memberRepository.findOndByMail(mail); } /** 회원 수정 **/ @Transactional public void update(String mail, String nickname, String answer_password){ Member member = memberRepository.findOndByMail(mail); if(nickname.equals(member.getNickname())) { validateDuplicateNickname(member); } member.setNickname(nickname); member.setAnswer_password(answer_password); member.setUpdated_at(now()); } /** 회원 탈퇴 **/ @Transactional public String delete(String mail, String password){ Member findUser = memberRepository.findOndByMail(mail); if(!passwordEncoder.matches(password,findUser.getPassword())){ //throw new IllegalStateException("비밀번호가 맞지 않습니다."); System.out.println("암호 실패"); return null; } findUser.setUpdated_at(now()); findUser.setMember_status("D"); return findUser.getPassword(); } }LoginService@Service @Transactional(readOnly = true) @RequiredArgsConstructor public class LoginService { @Autowired private final MemberRepository memberRepository; @Autowired private PasswordEncoder passwordEncoder; public Member findOne(String mail){ return memberRepository.findOndByMail(mail);} /** 로그인 **/ @Transactional //public String login(Member member){ public Member login(String mail, String password){ List<Member> findMember = memberRepository.findByMail(mail); Member findUser = memberRepository.findOndByMail(mail); if (findMember==null){ //throw new IllegalStateException("해당 이메일의 유저가 존재하지 않습니다."); //System.out.println("이메일 실패"); return null; } if(!passwordEncoder.matches(password,findUser.getPassword())){ //throw new IllegalStateException("비밀번호가 맞지 않습니다."); return null; } System.out.println("로그인 완료 :"+findUser.getNickname()); //세션 표시를 위해 닉네임값 넘기기 return findUser; } /** 비밀번호 매치 **/ @Transactional public String passwordMatches(Member member){ Member findUser = memberRepository.findOndByMail(member.getMail()); if(!passwordEncoder.matches(member.getPassword(),findUser.getPassword())){ //throw new IllegalStateException("비밀번호가 맞지 않습니다."); System.out.println("암호 실패"); return null; } return findUser.getPassword(); } /** 비밀번호 변경 **/ @Transactional public void updatePassword(String mail, String editPassword){ Member member = memberRepository.findOndByMail(mail); if (editPassword.equals(member.getPassword())) { throw new IllegalStateException("이전 비밀번호와 동일합니다."); } member.setPassword(editPassword); member.setUpdated_at(now()); } }WebConfig@Configuration @RequiredArgsConstructor public class WebConfig implements WebMvcConfigurer { private final LoginService loginService; @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { resolvers.add(new LoginMemberArgumentResolver()); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginCheckInterceptor()) .order(1) .addPathPatterns("/**") .excludePathPatterns("/", "/members/new", //"/login", "/logout", "/css/**", "/*.ico", "/error", "/api/**"); "/login", "/logout", "/css/**", "/*.ico", "/error"); registry.addInterceptor(new ApiLoginCheckInterceptor(loginService)) .order(2) .addPathPatterns("/api/business") .excludePathPatterns("/api/members/**"); } }ApiLoginCheckInterceptorpublic class ApiLoginCheckInterceptor implements HandlerInterceptor { private final LoginService loginService; public ApiLoginCheckInterceptor(LoginService loginService) { this.loginService = loginService; } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Member loginMember = loginService.login("test2@test.com", "test1234!"); HttpSession session = request.getSession(); session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember); return true; } }
-
미해결구글 스프레드시트로 배우는 업무 자동화(직장인 코딩)
강의 자료부탁합니다!
dhcnf123@gmail.com메일로 공유부탁드리겠습니다!
-
미해결
1:N 관계에서
특정 게시글을 조회하고 싶을 때 작성된 댓글들도 같이 보고 싶은데 InvalidDefinitionException: Direct self-reference leading to cycle 관련하여 에러가 뜹니다.@JsonIgnore로 해결하기보다 ResponseDto로 만들어서 entity -> ResponseDto로 변환해서 응답하고 싶습니다. 그래서 ResponseDto를 만들어서 entity -> ResponseDto로 변환했는데 저런 에러가 뜹니다. 어떻게 해결해야하는지 도와주세요그리고 @Builder를 사용해 빌터패턴을 적용할 때 인자가 많아질 경우 아래처럼 인자가 저렇게 길어지는 것이 맞는 건가요?? @Builder public ArticleResponseDto(Long id, String title, String content, LocalDateTime createdDate, LocalDateTime updatedDate, List<Hashtag> hashtags, List<Comment> comments) { this.id = id; this.title = title; this.content = content; this.createdDate = createdDate; this.updatedDate = updatedDate; this.hashtags = hashtags; this.comments = comments; }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
라이브러리 파일 없음.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 보이듯이...강사님은 없는 build 파일이 생기구요 라이브러리에는 logging 파일이랑 junit 등등 파일이 존재하지 않습니다... 똑같이 따라했는데 왜 없을까요... ㅠㅜㅠㅠ
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
elif a == c 의 생략
안녕하세요. 강사님, 코드에 관해 질문있어 글 남깁니다.3개의 입력 값을 sort한 상태이고, 두번째 elif 문에 도달한 경우, 가장 큰 값인 c와 가장 작은 값인 a는 동일할 수 없다고 판단했습니다. 예시처럼 elif문을 두 번 사용하지 않고 아래와 같이 코드를 작성해도 정답인지 여쭤보고 싶습니다.n = int(input()) max = 0 for i in range(n): tmp = input().split() tmp.sort() a, b, c = map(int, tmp) if a == b and b == c: res = a * 1000 + 10000 elif a == b or b == c: res = b * 100 + 100 else: res = c * 100 if res > max: max = res print(max)
-
미해결Axure RP 9,10 - 서비스 기획자를 위한 최적의 프로토타이핑 툴
각 페이지 이미지로 UX 플로우 만드는 방법 문의
Axure가 페이지들의 상하 관계로 자동 사이트맵 작성을 해주는 기능이 있는 것은 알고 있습니다.(1)번 페이지에서 A 버튼을 눌렀을 때 (ㄱ) 컨펌알럿이 나오고 컨펌하면 (2) 번 페이지로 이동하는 UX 플로우가 있을 때(1)번 페이지, (2)번 페이지의 화면을 그림으로 캡쳐하는 것이 아니라, 각 페이지가 component 처럼 자동 업데이트 되는 것처럼 페이지의 흐름을 표현하고 싶습니다.가능한 방법이 있는지 문의드립니다.예) (1번) 페이지 화면 -> (1)번 페이지 위에 (ㄱ) 컨펌알럿이 나온 화면 -> (2)번 페이지 화면
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
포스트맨 실행시 trace 부분을 변경할 수 있나요??
안녕하세요. 11:21 분쯤 보면 trace 부분을 볼 수 있는데,설정으로 단순한정보만 나올 수 있도록 변경이 가능한가요?
-
미해결실전! 스프링 데이터 JPA
연관관계 설정 시 fk 필수여부
안녕하세요 ~@JoinColumn 으로 fk 설정 하는데요.테이블에 반드시 fk 설정을 한 후 사용해야 하는 건가요?
-
미해결스프링 핵심 원리 - 기본편
getInstance() 메소드에도 static이 필요한가요?
instance를 new로 선언하는 첫 줄의 코드에는 당연히 static이 필요합니다.private static final SingletonService instance = new SingtonService(); 그런데 다음 코드인 getInstance() 메소드까지 static이 필요한 이유를 잘 모르겠어서 여쭤봅니다.public static SingletonService getInstance() {return instance;}
-
해결됨[언리얼 시스템 연구 과정] UE5 스파르타 클래스: 심화편
모션워핑 실습 마지막부분 z축 방향 이동 적용이 안 됩니다.-해결-
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.모션 워핑 실습 강의를 잘 따라가던 중, 강의 마지막 부분에서 z방향으로도 이동할 수 있게 하는 부분을 그대로 따라했지만 해당 기능은 구현되지 않았습니다.set movement mode 함수가 잘못된건가 하여 뒷 부분의 walking으로 초기화 해주는 set movement mode 함수만 삭제한 다음 실행해 봤습니다. 이땐 문제 없이 z값을 무시하지 않고 움직이는 것으로 보아 해당 함수의 기능은 문제 없이 작동하는 것으로(문제 없이 flying mode로 전환 된 것으로) 보였습니다.혹시 arrow1을 통해 location을 불러오는 부분이 잘못된 건가 싶어 'Break Hit Result'의 Location핀에서 나오는 값을 Print Text하여 확인해 봤는데, 높은 곳으로 향할 시에 z값이 높이에 맞게 변화하여 정상적으로 출력되는 것을 확인했습니다.그 이전까지의 내용들은 제대로 실행이 된 것을 보면 BP상의 문제는 없는 것 같고, 몽타주 파일에서도 분명히 Ignore Z Axis를 체크 해제 했기 때문에 저로서는 도무지 뭐가 문제인지 모르겠습니다. 혹시나 해서 언리얼을 껐다 켜봤는데도 안 됩니다.해당 기능을 성공적으로 구현하기 위해 또 어떻게 디버깅 해보면 될까요? 이리저리 디버깅 하던 중 정말 사소한 실수가 있던 것을 확인했습니다.다름 아닌 '몽타주 재생' 함수의 나가는핀?을 '완료 시'가 아닌, 그냥 맨 위의 실행핀으로 내보낸 것이 문제임을 알았습니다..혹시 같은 실수는 하는 분이 있을까 싶어 질문글은 그냥 두고 갑니다..ㅎ
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
AccountController.sendEmailLoginLink 문의
안녕하세요 강사님(강사님 강좌는 3번째 보고 있습니다.)AccountController.sendEmailLoginLink 에서model.addAttribute("error", "유효한 이메일 주소가 아닙니다."); return "account/email-login";대신 아래를 attributes.addFlashAttribute("error", "유효한..); return "redirect:/email-login";사용해야 하는 것 아닌지요? @PostMapping("/email-login") public String sendEmailLoginLink(String email, Model model, RedirectAttributes attributes) { Account account = accountRepository.findByEmail(email); if (account == null) { model.addAttribute("error", "유효한 이메일 주소가 아닙니다."); return "account/email-login"; } if (!account.canSendConfirmEmail()) { model.addAttribute("error", "이메일 로그인은 1시간 뒤에 사용할 수 있습니다."); return "account/email-login"; } accountService.sendLoginLink(account); attributes.addFlashAttribute("message", "이메일 인증 메일을 발송했습니다."); return "redirect:/email-login"; }
-
미해결
판다스 데이터 가공
범위에 따라서 요소 값을 다르게 주고싶은데 자꾸 none로 바뀌어 버리네요 왜그럴까요??어떻게 해결해야할까요 초보라 너무 힘드네요
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
Context 강의에서 value={data}가 나오지 않습니다
https://codesandbox.io/s/chapt-15-forked-vrnxn1?file=/src/App.js 안녕하세요. 컴포넌트 트리에 데이터 공급하기 - Context 강의 수강 중에 강의와 함께 강의 참고용 코드 샌드박스를 보면서 궁금한 것이 있어 질문 남깁니다. 위 링크 코드의 115번째 줄처럼 const store = { data };이후 리턴문에서 <DiaryStateContext.Provider value={store}> 를 작성해줘야 정상적으로 동작하는 것을 확인했는데 강의처럼 <DiaryStateContext.Provider value={data}> 로 수정하면TypeError Cannot read properties of undefined (reading 'length') 가 뜨면서 제대로 작동되지 않습니다위 두 방법 (store 변수를 작성해서 넣어주거나, 강의처럼 data 그대로 넣어주거나) 의 차이는 무엇이고왜 링크의 코드에서 store가 아닌 data를 넣으면 작동하지 않는 건지 궁금합니다..
-
미해결대세는 쿠버네티스 (초급~중급편)
맥환경에서 강의 청취
강사님,저는 맥북을 사용하고 있는데, 예를 들면 Xshell.exe는 설치 실행이 안됩니다. 맥 환경에서 이 강의를 청취하고 실습을 하는데 문제가 되는지 안되는지 알려 주시기 바랍니다.맥 환경에서 강의 청취에 문제가 안된다면, 맥환경에서 설치 방법에 대해서도 추가로 올려 주시기 바랍니다. 그리고 docker, minikube, VMbox 다 설치후 kubeflow를 설치하는 방법에 대해서도 알려 주시면 감사하겠습니다~^^ 맥북에서 여러 시행착오 끝에 kustomize (최신버전시) 명령으로 설치를 하였는데, ㅇdex를 통해 kubeflow dashboard 오픈이 쉽지 않네요..
-
미해결[입문편] 안드로이드를 위한 코틀린(Kotlin) 문법
it 이 정확히 무엇인가요?
안녕하세요. 처음 코틀린을 공부하고 있습니다.list가공 강의에서 it을 갑자기 사용하셨는데, 정확히 it이 뭔지 몰라서 검색을 해봤는데 어떻게 검색해야 할 지 몰라서 원하는 답이 안나오더라구요. val testList = listOf("a", "aa", "aaa", "aaaa")val result = testList.groupBy{it.length > 2}여기서 it이 testList를 가르키는것인가요 ??
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
질문드립니다.
강의 16:11분 화면에 localStorage에 있는 value값의 item만 뿌려주기 위해서 {{todoItem.item}}로 뿌려주는데요만약 object로 가공을 하지 않는다면 value값을 따로 화면에 뿌려줄수있을까요?검색해보니 localStorage.key만 있는것 같은데localStorage.value의 기능은 없는지object 형식으로 가공하지 않으면 key값 제외 value값만 접근을 할수 있는지 궁금합니다.
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
강의자료 공유
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.영상만으로 복습이 힘들어서 강의자료가 있을지 문의드립니다.혹은 있다면 어디에서 다운받을 수 있을까요?감사합니다.