묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
로그인 인증 관련 질문
기선님 안녕하세요~테스트 코드로 로그인 인증 검증하는 코드 부분에서 잘 안되는 부분이 있어 문의드려요!저는 빌드 도구 gradle, spring boot 3.0.1 버전, Java 17 버전으로 개발하고 있습니다.UsernamePasswordAuthenticationToken 을 Nickname, Encryped Password를 통해 가져와서 SecurityContextHolder를 통해 token을 Set 해주는 코드가 아래와 같이 있습니다.public void login(Account account) { UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken( account.getNickname(), account.getPassword(), List.of(new SimpleGrantedAuthority("ROLE_USER"))); SecurityContextHolder.getContext().setAuthentication(token); } SecurityMockMvcResultMatchers의 authenticated로 테스트 코드 계정 인증 시키는 부분에서 "Authentication should not be null" 이슈가 발생하네요.디버깅 시도 해보면, mockMvc 마지막 검증(authenticated) 쪽에서는 분명 test라는 nickname도 갖고 있지만.. authenticated 호출되는 시점에 request Session을 가져오면 null이 나와버리네요 ㅠㅠ. 사용 중인 SecurityMockMvcResultMatchers 자체 버전은 다르긴 하지만.. 코드는 완전 동일한데 이런 오류가 발생하네요 ㅠ 혹시 해결을 위해 해볼 만한 시도가 있을까요~?void checkEmailToken_with_correct_input() throws Exception { Account account = Account.builder() .email("test@email.com") .password("12345678") .nickname("test") .build(); Account newAccount = accountRepository.save(account); newAccount.generateEmailCheckToken(); mockMvc.perform(get("/check-email-token") .param("token", newAccount.getEmailCheckToken()) .param("email", newAccount.getEmail())) .andExpect(status().isOk()) .andExpect(model().attributeDoesNotExist("error")) .andExpect(model().attributeExists("nickname")) .andExpect(model().attributeExists("numberOfUser")) .andExpect(view().name("account/checked-email")) .andExpect(authenticated()); }
-
미해결홍정모의 따라하며 배우는 C언어
질문드립니다,,
처음에 #define _CRT_SECURE_NO_WARNINGS를 입력하는 경우는 어떠한 경우에 입력하는건가요..?
-
미해결Vue로 Nodebird SNS 만들기
웹 서버 관련해서 질문드립니다.
안녕하세요 제로초님, 웹 서버 관련해서 질문드립니다.제로초님께서 강의하신 내용으로는 EC2에 노드를 설치하고 build된 정적 파일들을 올려 start 명령어로 앱을 실행시켜 서버를 돌리는 것으로 이해했습니다.궁금한 것이 nginx와 같은 웹 서버를 사용하지 않고도 배포하는 것이 가능한것인지 그리고 웹 서버를 쓰냐 안쓰냐는 어떤 차이점이 있는지 궁금합니다.(혹시나 강의 뒷부분에 웹서버를 사용하는 부분이 있다면 죄송합니다!... )
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
회원가입 후 콘솔 로그 / 단일 체크 버튼 - 문의드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]로그인 처리 1 - 회원가입 부분을 진행하다가 잘 되지 않는 부분이 있어서 질문드립니다. (김영한님 다른 강의와 MVC 1,2의 내용도 같이 코드에 적용되어있는 상태입니다.) 딱 회원가입까지만 코드로 작성한 후, 실행해보았는데 - 회원가입은 잘 되었지만 콘솔창에 위와 같이 2개의 메시지가 나와 있습니다.1.둘 중 위의 메시지는 강의화면에서는 save: member=Member(id=1, loginId=qqqq ... 이런 식으로 나와야 하지만, 그렇지 않습니다. 이유가 무엇일까요?2.둘 중 아래의 메시지는 회원가입 후 아무 것도 하지 않은 채로 7~8분 뒤에 나타났습니다. 사실 이틀 전에도 이와 똑같은 메시지가 떠 있어서, 구글링해봤는데요. 이를 해결하기 위한 여러 방법들이 있었지만, 문제는 이 메시지의 정확한 뜻을 제가 이해하지 못하는 것입니다... 코드에서 어떤 부분이 잘못되어 이 메시지가 나오게 된 것일까요? (이 부분은 수업과는 사실 관련이 없어 보여서 ... 답변을 안 주셔도 괜찮습니다)3.강의에서 item도메인 부분을 저는 할일(todo)로 변형해서 적용하고 있습니다. 할일 수정하기에서 체크박스를 활용해 해당 할일의 완료여부를 체크하게 해 놓았는데요. 문제는 이 체크박스를 체크한 상태에서 할일 수정 저장을 누르면 -> 체크되지 않은 상태로 저장된다는 것입니다. 원인으로 생각되는 것은 할일 엔티티 클래스에 '할일 완료 여부' 필드가 enum형태로 구성되어 있어서 그런 것인가...추정하고 있습니다.(이 화면캡처는 Todo.class (할일 엔티티)에서 완료 여부를 나타내는 todoCmplt 의 코드입니다.) 추정까지는 했지만 더 이상은 진전이 없어 문의드립니다. (굳이 enum타입으로 한 까닭은 나중에 특정 회원의 할일의 완료율을 계산해보고 싶어서입니다.) 코드는 https://drive.google.com/file/d/13PB_xFHDSwd9I439731Pe0rMG8VzVqfM/view?usp=sharing에 올려놓았습니다(...만 제가 브랜치별로 코드가 많이 달라서 공유한 압축파일에서 어떻게 확인이 잘 되실지 모르겠습니다)
-
미해결UX/UI 시작하기 : Figma 입문 (Inflearn Original)
(으잉..!)좋은 강의인데. UI가 너무 달라져서. 완전 다른 프로그램이 되었네요
프로토 타이핑 툴들이 변화가 빨라서 배우기도. 가르치기도 힘들겠어요.인프런 오리지널에 있는 XD 강의도 이제 내용이 많이 달라졌고. 눈물이..
-
미해결MS Azure 애저 클라우드 서비스 구축 이해와 보안
애저 방화벽 이해와 활용 - 방화벽 배포와 룰 구성 내용중...
애저 방화벽 이해와 활용 - 방화벽 배포와 룰 구성해당 강의에서 초반에 리소스 그룹, 해당 그룹의 vnet 생성, 가상머신 생성 그리고 방화벽 생성과정에서 점프..그리고 10:00부터 다시 방화벽 생성을 시작하며 같은 리소스들을 생성하는 것으로 보입니다.편집 상의 오류가 있는 거 같은데 확인 부탁드립니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
테스트 케이스 작성시 findByName메서드 NullPointException 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Memberpackage hello.hellospring.domain; public class Member { private Long id; //고객이 정하는 id가 아닌 시스템이 정하는 id private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String spring) { this.name = name; } }MemoryMemberRepositorypackage hello.hellospring.repository; import hello.hellospring.domain.Member; import java.util.*; public class MemoryMemberRepository implements MemberRepository{ private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable(store.get(id)); //null일 경우 null로 반환하지 않고 Optional로 감싸서 반환 } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); //values는 Member } public void clearStore(){ store.clear(); } }MemoryMemberRepositoryTestpackage hello.hellospring.repository; import hello.hellospring.domain.Member; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import java.util.List; import static org.assertj.core.api.Assertions.*; class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); @AfterEach public void afterEach(){ repository.clearStore(); } @Test public void save(){ Member member = new Member(); member.setName("spring"); repository.save(member); Member result = repository.findById(member.getId()).get(); // Assertions.assertEquals(member, result); assertThat(member).isEqualTo(result); System.out.println("result= " +(member == result)); } @Test public void findByName(){ Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); Member result = repository.findByName("spring1").get(); assertThat(result).isEqualTo(member1); } @Test public void findAll(){ Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); List<Member> result = repository.findAll(); assertThat(result.size()).isEqualTo(2) ; } } 위와 같이 코드 작성했는데 findByName() 쪽에서 NullPoint 에러가 나서 여쭤봅니다...다른 질문 내용들도 읽어봤는데 코드상으로는 맞게 작성한 것 같은데 도움 부탁드립니다... ㅜ
-
해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
ml-agents 관련 질문 있습니다.
안녕하세요, 저는 강화 학습 관련 관심이 생겨 여러 강화 학습 관련 프로젝트를 진행하고 있는 대학교 4학년 학생입니다. 인프런 강의를 기반으로 하여 프로젝트 진행에 도움을 많이 받고 있어 너무 감사합니다.다름이 아니라 ml-agents 관련 질문이 있어 글을 쓰게 되었습니다.강화 학습에서 reward shaping하는 기준 혹은 참고 논문이 있는 건지 궁금합니다.Training을 진행할 때 여러 번 경험한 내용으로 시간이 지나는데도 학습이 진행이 안된 경험이 있습니다. 이럴 때마다 작업 관리자로 CPU나 CUDA의 이용률을 보면 0프로 정도로 거의 움직이지 않는데 이를 병목 현상으로 예상하고 있습니다. 이를 해결하기 위해 아나콘다 프롬폼트에 키보드 interrupt를 하게 되면 멈췄던 학습이 실행 되어 여러 번 interrupt를 걸어 해결했습니다. 여러 다른 컴퓨터를 사용할 때마다 일어나는 공통적인 현상이라 혹시 제가 학습을 잘못 하고 있는 건지 아니면 이러한 현상에 대한 해결 방안이 따로 있는 건지 궁금합니다. 강화 학습 Training 방법을 찾아보면 제가 보기로는 두 가지 방법이 있었습니다. Unity 환경에서 하나의 프리팹 위에서 episode가 끝날 때마다 Agent나 environment의 구성을 랜덤으로 하여 진행하는 방식과 다른 environment를 여러개의 프리팹으로 하여 학습을 진행하는 방법이 있었습니다. 두 방법에 큰 차이가 있는 건지 궁금합니다.항상 이해하기 쉽게 강화 학습 관련 강의를 해주셔서 다시 한번 감사드립니다.
-
미해결워드프레스 속성 마스터 클래스
메뉴를 만들었는데 미리보기하면 반영이 안되어 있어요.
메뉴를 만들었는데 미리보기하면 반영이 안되어 있어요. 외모 밑의 메뉴에서 메뉴 추가하고, 미리 만들어둔 카테고리를 반영했는데, 미리보기하면 초기 테마의 메뉴가 그대로 뜹니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Listener와 Session 강의를 들으면서 정리한 개념이 맞는지 알고 싶습니다.
강의 잘 듣고 있습니다. 항상 좋은 강의 감사합니다.게임 클라이언트 프로그래머를 목표로 준비하고 있는 취준생입니다. 근래 업계에서 풀스택 혹은 클라이언트 작업을 진행하면서도 서버 쪽 기초 지식을 보유하고 있는 개발자를 높이 평가하고 있다고 느껴 서버 강의도 수강하게 되었습니다.지금까지 포폴을 준비하면서 동기 방식 혹은 비동기 방식을 구성할 때는 코루틴으로만 코드를 작성했다보니 비동기(Async) 방식을 보면서 좀 헷갈리는 부분들이 있어 복습하면서 정리해봤는데 정리한 개념이 맞는지 궁금해서 질문 남겨봅니다.질문으로는일단 Async로 구현한 이유는 강사님께서 중간에 설명해주신 일반 Send와 Receive 함수는 블로킹 계열이라 흐름을 막는다는 점 때문에 사용한 것으로 이해했습니다. 이 때 Resister(Send/Recv) 와 On(Send/Recv)Completed를 순환적으로 구성하여 작성한 이유가 쓰레드 환경에서 쓰레드가 하던 일을 교체할 때(Context Switching) 야기하는 오버헤드(교체할 때 발생하는 비용)를 감소하여 효율을 높이기 위해 일거리가 남아있다면 계속 그 일을 잡게하기 위한 작업이 맞는건가요 ? 저렇게 순환적으로 구성했을 때 혹시 한 쓰레드만 해당 작업을 진행하게 되어 오히려 효율적으로 떨어질 수도 있을 것 같다는 생각을 하게 되었는데, 유저수가 많은 MMORPG 서버에서도 저런식으로 작업을 진행하는지 궁금합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
멀티서비스 관련 문의 드립니다!
안녕하세요.항상 좋은 강의를 제공해주셔서 지식을 습득하는데 큰 도움이 되고 있습니다 감사합니다!현재 강의를 들으며 서비스를 구축하고 있는데 멀티서비스와 관련하여 몇가지 질문드립니다.강의에서 OrderService를 멀티서비스로 구현했을 때 동기화 문제가 발생할 수 있다고 하셨습니다.그래서 카프카를 이용해 개선을 진행하셨는데, 만약 같은 두 개의 서버가 같은 DB, 예를 들어 RDS의 URL을 접근하게 될때 궁금한 부분이 존재합니다.보기에는 MQ를 이용하면, 요청이 큐 형식으로 순차적으로 진행하게되어 동시에 DB에 write를 할 경우 문제가 발생하지 않는게 맞을까요?Kafka Listener(Consume)는 실시간으로 topic에 데이터가 들어올 때만 사용하면 되는 것으로 생각해도 될까요? 예를 들어 kafka connect 로 생성할 데이터를 업데이트하고 필요한 경우에는 consume이 아닌 직접 DB에 요청해서 가져와서 활용하는게 맞는 방향일까요? 아니면 항상 데이터는 consume으로 가져와야하는 건가요?멀티서비스를 하는 경우 로그가 각각 저장될 것으로 생각됩니다. 현재 slf4j2를 이용해서 서비스 로그를 저장하고 있는데 이 경우 로그를 통합해서 한 곳에서 보려면 어떻게 해야하나요? 서칭했을 땐 fluentd라는 로그수집기를 얘기하던데 이런방식으로 로그를 수집하는 방법이 맞을까요? 추가적으로 이런 로그를 프로메테우스에서도 볼 수 있는지 궁금합니다.아직 개념이 머릿속에 자리잡지않아서 혼동되는 부분이 있어서 질문 드렸습니다!감사합니다!
-
미해결
리액트 새로고침
리액트에서 새로고침 했을 때 원래 화면 디자인이 바뀌어서 나타납니다.해결 방법이 무엇인가요?
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
해상도 관련
해상도 관련하여 2280x1080 사용하시는데 추가적으로 다른 해상도에 대응하기에 좋은 방법이 있을까요 ? 아니면 다른 강의에서 다루신 부분이 있나요? 여러 기기에서 작동해보려고 합니다
-
미해결IT인을 위한 ELK 통합로그시스템 구축과 활용
logstash 연동 중에 filebeat 인덱스가 생성되지 않습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의명 : "로그스태시, 파일비트 설치와 실행"과정 중에 filebeat와 logstash 연동에 대해 설명해주시는데 yml 파일을 강의와 똑같이 작업하고 나서 확인했는데 filebeat 인덱스가 생성되지 않습니다. 원인 확인을 하려면 어떤 부분을 확인해야될까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part3: 자료구조와 알고리즘
자동완성 기능 질문
c++ implementation 자동완성 기능은 어떤걸 설치하면 얻을 수 있을까요? visual assist를 구매하는 방법 말곤 없을까요?
-
미해결실전! Querydsl
em.flush(),clear() 대신 @Modifying 어노테이션을 붙여도 되나요?
1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Modifying 을 어노테이션으로 단다면, em.flush(),clear() 코드없이 동일한 동작을 수행하게 되나요?스프링 데이터 JPA에서는 Repository위에 달았는데요. 뒷 강의에서 Spring data JPA와 QueryDSL을 병행해서 사용하기 위해 custom Repository를 만든다고 배웠습니다. 이 custom Repository의 함수에 @Modifying을 달아도 동일하게 동작하는지 궁금합니다. 정리하자면 QueryDSL에서도 @Modifying이 적용되는지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
store 객체는 그냥 선언해준건데 어떤방식으로 Repository에 전달외 되는가용
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]회원 도메인과 리포지토리 만들기 강의의MemberyMemberRepository 클래스에서private statice Map<Long, Member> store = new HashMap()으로 객체를 만들고나서 아래에서 값을 저장할 때 store.put(member.getId(), member) 이런식으로 처리하는데 어노테이션도 없이 그냥 static으로 선언한 store 객체에서 왜 어떻게 값이 들어가는지 궁금합니다.
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌2)
안녕하세요. jquery 슬라이더에 대해 질문 있습니다.
안녕하세요.현재 시즌 1,2, 반응형 포트폴리오등 몇가지를 결제해서 듣고 있는중인데요다름이 아니고 강사님꼐서 제이쿼리로 자동 슬라이드를 어떻게 했는지알고 싶어서 강의를 찾아봤는데웹디자인 기능사에만 있는것 같습니다. 그런데 저는 기능사실기자격증을 따기도 했고 그부분만 보기에는 금액이 너무 커서혹시 다른 강의에 제이쿼리 자동슬라이드 부분이 있는 강의는 없는지 물어봅니다.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
이메일 로그인 질문입니다
10:00부분에서 똑같이 완성을 하고 회원가입을 눌러도 실패라고 계속 뜹니다다른분이 질문한 글을 보고 따라해 보았는데도 계속해서 실패가 뜹니다<동일한 내용의 다른글의 개복치님 답변>아래와 같이 else부분에 Log.d()를 이용해서 task.exception의 내용을 출력해보시겠어요?이 부분을 실패 부분에 넣어보시면 됩니다.Log.d(TAG, "createUserWithEmail:failure", task.exception) 무엇이 문제인가 궁금합니다
-
해결됨Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"
setup 함수내 문자열 관련 질문입니다.
아래 코드를 실행하고 Add Message1 버튼을 4번 클릭하고 Add Message 버튼을 클릭하면 {{ normalMessage }} 값은 !가 4개 붙은 값이 나옵니다. 그리고 Add Message2 버튼을 클릭하면 콘솔창에는 !가 한개 붙은 값이 나옵니다.normalMessage 가 addNormalMesssage 함수 안에서 선언한 지역 변수도 아닌데 왜 값의 공유가 안 되는 건가요?<template> <h2>setup 함수내 반응형 메시지</h2> <p>{{ reactiveMessage }}</p> <button v-on:click="reactiveMessage += '!'">Add Message</button> <h2>setup 함수내 일반 메시지</h2> <p>{{ normalMessage }}</p> <button v-on:click="normalMessage += '!'">Add Message1</button> <button v-on:click="addNormalMesssage">Add Message2</button> </template> <script> import { ref } from 'vue'; export default { setup() { const reactiveMessage = ref('Hello Reactive Message'); let normalMessage = 'Hello Normal Message'; const addNormalMesssage = () => { normalMessage = normalMessage + '!'; console.log(normalMessage); }; return { reactiveMessage, normalMessage, addNormalMesssage, }; }, }; </script>