묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
회원가입 성공 시 테스트에 대한 질문입니다.
안녕하세요 호돌맨님회원가입 성공 시 테스트 코드에 대해서 궁금한게 있어 질문 드립니다. @Test @DisplayName("회원가입 성공") void test1() { PasswordEncoder encoder = new PasswordEncoder(); Signup signup = Signup.builder() .name("호돌맨") .email("hodolman@gmail.com") .password("1234") .build(); authService.signup(signup); assertEquals(1L, userRepository.count()); User user = userRepository.findAll().iterator().next(); assertEquals("hodolman@gmail.com", user.getEmail()); // assertNotNull(user.getPassword()); // assertNotEquals("1234", user.getPassword()); assertTrue(encoder.matches("1234", user.getPassword())); assertEquals("호돌맨", user.getName()); } 지금 userRepository에 비밀번호가 암호화 된 상태로 저장중이어서 assertTrue로 테스트를 한 번 짜봤는데 위처럼 하는 방식은 좋지 않은 방식인가요?
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
npm install -g serve 설치 오류가 납니다..ㅠㅠ
hyunwooji@jihyeon-uui-MacBook-Air emotiondiary % npm install -g servenpm WARN config global --global, --local are deprecated. Use --location=global instead.npm ERR! code EACCESnpm ERR! syscall mkdirnpm ERR! path /usr/local/lib/node_modules/servenpm ERR! errno -13npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/serve'npm ERR! [Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/serve'] {npm ERR! errno: -13,npm ERR! code: 'EACCES',npm ERR! syscall: 'mkdir',npm ERR! path: '/usr/local/lib/node_modules/serve'npm ERR! }npm ERR! npm ERR! The operation was rejected by your operating system.npm ERR! It is likely you do not have the permissions to access this file as the current usernpm ERR! npm ERR! If you believe this might be a permissions issue, please double-check thenpm ERR! permissions of the file and its containing directories, or try runningnpm ERR! the command again as root/Administrator.npm ERR! A complete log of this run can be found in:npm ERR! /Users/hyunwooji/.npm/_logs/2023-02-19T07_24_53_420Z-debug-0.log 구글링 해봣을때는 npm 업데이트 문제인거같다고로 찾아서npm update 도 해봣는데 전혀 해결되지 않고 더 꼬이고 있는거같습니다.. 완강을 앞두고 좌절중이네요ㅠ 오늘 다 완강하고 싶었는데 도저히 해결이 안되어 질문남깁니다 감사합니다!!
-
미해결스프링 핵심 원리 - 기본편
조회대상 빈이 2개 이상 일 때 빈지정에 방법들의 DIP 위반 여부
관련 강의 : 의존관계 자동 주입 - 6번째 강의(@Autowired, @Qualifer, @Primary)질문타입이 같은 빈이 여러 개 조회 될 때, 특정 빈을 선택하는 방법을 3가지 소개해 주셨는데..이 3가지 방법이 결국 특정 빈을 지정해 주는 방법인 것 같습니다. 이 방법을 사용하면, 특정 빈을 지정해 DI 할 수 있을 것 같습니다. 그러나 DIP 위반을 피하기 위해서 이전 강의에서 AppConfig에서만 특정 빈을 선택하도록 하였습니다. 예를들어 AppConfig에서 DiscountPolicy 중 Rate..와 Fix... 를 선택하게 하고 , 또한 AppConfig에서 MemberRepository 중 Memory..., DB...,External... 등을 선택하도록 하여 DIP 위반 문제를 해결했습니다. 그런데 @Qualifer,@Primary 등을 사용하면 OrderServiceImpl 이나 MemberServiceImpl 이 RateDiscountPolicy, FixDiscountPolicy 또는 Repository 관련 하위 클래스 등을 선택하게 되어 결국은 DIP에 위반되는 것은 아닌지 여쭈어 봅니다. 감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
후속 강의 Webflux가 듣고 싶습니다.
강의를 듣다보니, Webflux 후속 강의를 준비하실 생각이 있다고 하셨는데, 계획이 있을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
지연로딩과 페치조인을 이용한 메서드명에 대해 궁금한점이 있습니다.
모든 관계를 지연로딩으로 설계하고,성능을 최적화 시키기 위해 필요한 엔티티들만 페치조인을 이용하여 사용할 때영한님의 경우 메서드명을 어떻게 명명하시나요?실제로 실무에 적용 하다보니 이 부분이 정말 애매한 것같아서 질문드립니다.성능을 최적화 시킬려면 사용하는 주 엔티티(Member)에서 필요한 연관관계 엔티티(Team, Order, OrderItem, Item)들을 페치조인해서 사용해야 하는데 그러다보니 많은 메서드들이 나오고 그로인해 메서드명이 길어지는 등 문제가 발생하는데요..강의 내용을 예시로 들면// member - team 패치조인 getMemberWithTeam(Long memberId) // member - team, order 패치조인 getMemberWithTeamAndOrder(Long memberId) // member - team, locker, order 채치조인 getmemberWithTeamAndLockerAndOrder(Long memberId) ...이런 식으로 패치조인하는 엔티티명을 넣어주면 메서드명들이 너무 길어지고 난잡한? 느낌이 나서 영한님의 경우 어떻게 메서드명을 짓는지 궁금합니다.
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
시퀀스 질문
시퀀스에서 Cycle을 사용하면 중복키 관리는 안하게 되는건가요?
-
미해결스프링 핵심 원리 - 기본편
생성자 주입으로 변경했을 때 Provider 생성할때 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.단위 테스트로 할 때 필드 주입이 좋지 않다고 하셔서 생성자 주입으로 변경 후 돌려봤을 때 Provider를 적용하기 전에 ObjectProvider<PrototypeBean> 으로 했을 때는 테스트가 성공했지만 Provider로 할때는 다음과 같은 에러가 나서 왜 발생했는지 질문드립니다org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'singletonWithPrototype.ClientBean': Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'javax.inject.Provider<hello.core.scope.SingletonWithPrototype$PrototypeBean>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}아래는 전체 코드 입니다.package hello.core.scope; import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Scope; import javax.inject.Provider; import static org.assertj.core.api.Assertions.assertThat; public class SingletonWithPrototype { @Test void prototypeFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class); PrototypeBean prototypeBean1 = ac.getBean(PrototypeBean.class); prototypeBean1.addCount(); assertThat(prototypeBean1.getCount()).isEqualTo(1); PrototypeBean prototypeBean2 = ac.getBean(PrototypeBean.class); prototypeBean2.addCount(); assertThat(prototypeBean2.getCount()).isEqualTo(1); } @Test void singletonClientUsePrototype() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class); ClientBean clientBean1 = ac.getBean(ClientBean.class); int count1 = clientBean1.logic(); assertThat(count1).isEqualTo(1); ClientBean clientBean2 = ac.getBean(ClientBean.class); int count2 = clientBean2.logic(); assertThat(count2).isEqualTo(1); } @Scope("singleton") static class ClientBean { private final PrototypeBean prototypeBean; //생성시점에 주입되어서 계속 같은 거 사용. private final Provider<PrototypeBean> prototypeBeanProvider; @Autowired //생성자 하나니까 @Autowired 생략해도 되긴 함 public ClientBean(PrototypeBean prototypeBean, Provider<PrototypeBean> prototypeBeanProvider) { this.prototypeBean = prototypeBean; this.prototypeBeanProvider = prototypeBeanProvider; } public int logic() { PrototypeBean prototypeBean = prototypeBeanProvider.get(); prototypeBean.addCount(); return prototypeBean.getCount(); } } @Scope("prototype") static class PrototypeBean { private int count = 0; public void addCount() { count++; } public int getCount() { return count; } @PostConstruct public void init() { System.out.println("PrototypeBean.init " + this); } @PreDestroy public void destroy() { System.out.println("PrototypeBean.destroy"); } } }
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@RequestParam으로 long 타입 변수를 받을때, long으로 받아야하나요? Long으로 받아야 하나요?
(@RequestParam int age)를 쓰면, int age를 받을때 request.getParam 의 Integer 객체를int 변환까지 자동으로 해준다는걸 배웠습니다.그러면 파라미터를 받을때 객체타입으로 받아야하는지자료형으로 받아야 하는지, 둘다 상관없는지 궁금합니다.(@RequestParam Long someId);vs(@RequestParm long someId); 그리고(@PathVarialbe Long someId);vs(@PathVariable long someId);프로젝트 할때 Long으로도 되고 long으로도 다 되서 구분없이 써도 되는지 궁금합니다
-
미해결[리뉴얼] 타입스크립트 올인원 : Part2. 실전 분석편
FunctionComponent 인터페이스 관련 질문입니다
interface FunctionComponent<P = {}> { (props: P, context?: any): ReactElement<any, any> | null; // 함수의 추가속성 propTypes?: WeakValidationMap<P> | undefined; contextTypes?: ValidationMap<any> | undefined; defaultProps?: Partial<P> | undefined; displayName?: string | undefined; } 이 부분에서 첫 번째 줄을 함수형 컴포넌트의 모습을 타이핑한 것으로 배웠는데 아래 속성같은 경우는 함수형 컴포넌트 자체의 속성(프로퍼티)을 타이핑한 것 같다고 유추를 할 수 있었습니다.그런데 타입스크립트가 interface만 보고도 자동으로 함수의 시그니처와 함수 자체의 프로퍼티를 따로 분리해서 추론을 해주는 건가요?이부분의 작동 원리가 궁금합니다.예를 들면const WordRelay:FunctionComponent = () => { return jsx코드 }이 부분에서 FunctionComponent로 타이핑하였을 때, WordRelay를 왜 타입 부분의 첫 번째로 타이핑한 건지, 아래의 propsTypes, contextTypes 등의 속성으로는 추론하지 않은 이유가 타입스크립트 내부 동작방식에 의해서인지가 궁금합니다. 추가적으로 이 방법이 인터페이스를 사용하여 좀 더 복잡한 함수를 타이핑할 수 있는 방법이라고 생각해도 될까요? (보통 함수에 프로퍼티를 추가할 일이 없어서 이런 타이핑 방식을 보니 헷갈리네요ㅠㅠ)
-
미해결Vue3 완벽 마스터: 기초부터 실전까지 - "실전편"
강의교안 수정 요청드립니다.
영상 하단에강의교안프로젝트 만들기Bootstrap5 설치 에 프로젝트 만들기 들어가서 볼 경우 setting.json 이나 jsconfig.json 눌러도 아무 반응이 없네요.
-
미해결메타스플로잇(Metasploit) 활용한 취약점 분석(초중급과정)
실습-MSF 공격코드2 강의에서 웹서버관련 질문 드립니다...
별돌로 웹서비스를 올리지 않아도...[질문1]wireshark실행 만으로 웹서버를 올리는 효과가 있다는 말인가요??[질문2]set srvhost localhost IPsrcprot 80set srcport 80set uripath / show targetsexploit위의 명령어를 치면 별도 웹서비스를 실행하지 않아도 웹서비스를 실행하는 효과가 있다는 건가요??
-
미해결메타스플로잇(Metasploit) 활용한 취약점 분석(초중급과정)
10.10.10.5에 웹 서비스가 구동되어야 하는거 아닌가요??
10.10.10.5에 웹서비스가 올라가 있어야 하는거 아닌가요??? 웹서비스 설치 및 구동 과정은 안하신거죠???
-
미해결한번에 끝내는 워드프로세서 자격증 취득(필기+실기)
한글2020으로 시험보는데
한글2020으로 실기시험 치려면 한글2020이 필요할텐데한글과컴퓨터나 한글독스에선 2022만 다운로드를 받을수있어요하위버전인 2020을 어디서 다운받아야하나요?아님 상위버전인 2022로도 연습해도 실기시험볼때 지장없나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안질문
안녕하세요 큰돌님 교안 관련 질문사항이 있어 이렇게 글을 남깁니다~Q1. 포인터를 일반화 했다는게 무슨 뜻인가요?Q2. 2차원 배열 선언 3가지 방법 중 마지막 방법은 vector<int> v3[10] 이렇게 선언하면서 2차원으로 선언되었다는 건가요?Q3. 요소에 접근한다는게 참조를 한다는 건가요 탐색을 한다는 건가요?Q4.랄로구조체 설명시 함수에 매개변수로 가져올 때 Ralo ralo로 가져오는데 Ralo라는 구조체에 ralo라는 변수명을 지어서 가져온 것으로 봐도 될까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
request
public void updateUser(@RequestBody UserUpdateRequest request)에서 request를 다른 이름으로 바꾸면 밑줄이 쳐지는데 왜 바꾸면 안 되는 건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
시간복잡도와 시간제한 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.선생님께서 본 문제에서 dfs를 사용하면 연산량이 1억번이 돼서 많을수도 있다고 하셨는데, 이 문제는 시간제한이 길어서 통과가 된다고 수업에서 말씀해주셨습니다. 그렇다면 1만번 데이터를 O(n제곱) 알고리즘으로 연산을하면 보통 시간제한 몇 초까지 가능하다고 생각하면 될까요?
-
미해결버그헌팅과 시나리오 모의해킹 전문가 되기
[공유]섹션6.Kioptrix_level_2 SQL Injection을 이용한 MySQL 버전 정보 획득
안내1) 해당 정보는 섹션6의 MySQL 버전 정보 획득 방법을 공유하기 위함입니다.안내2) 해당 내용은 강의 내용에 포함되지 않은 사항이므로 섹션6 강의를 모두 들으신 후 참고하시길 추천합니다.안내3) 해당 정보는 SQL Injection과 Burp Suite에 대한 지식이 있는 상태에서 봐야 더욱 이해하기 쉽습니다.안내4) 잘못된 내용이 있을 수 있으니 잘못 표기 된 내용은 댓글로 지적해 주시면 감사하겠습니다.[SQL Injection이 가능한 ID/PW 입력 창]-> ID/PW 입력 창에 SQL Injection이 가능함을 알 수 있습니다.-> 해당 부분에 SQL Injection 기능을 이용해서 MySQL의 버전 정보를 알아낼 것 입니다. ㅁ 사용할 SQL Injection 종류 선정Error Based SQL Injection(불가) : ID/PW 입력 창에 싱글쿼터만 입력하면서 Error 발생을 시켜서 DBMS 에러 메시지가 나오는지 확인했으나 나오지 않으므로 Error Based Injection은 불가Union Based SQL Injection(불가) : 입력에 대한 DB의 응답 값이 표현 된 부분이 없는 것 같아서 Union Based SQL Injection 도 사용 불가Blind SQL Injection(사용) : 입력 SQL Injection 구문이 False인 경우 ID/PW 입력 창(index.php), 입력 SQL Injection 구문이 True 일 경우 pingit.php 가 나오므로 Blind SQL Injection으로 MySQL 버전 정보를 얻기로 결정들어가기에 앞서. MySQL의 버전 정보를 담은 함수는 version() 입니다.[MySQL 버전 정보 획득 과정]1. MySQL 버전 정보 글자 길이 확인1). Burp Suite를 키고 브라우져에 Proxy 서버를(127.0.0.1:8080) 설정하여 Burp suite를 통해 Kali와 Kioptrix_level_2 웹 서버와 통신하게 구성합니다.2) ID/PW 입력창에 ' or 0<length((version()))# 입력하고 Login 버튼을 클릭하면 Burp Suite에 아래와 같이 쿼리문이 잡힙니다. -> 해당 쿼리문을 설명하면 MySQL 버전 정보를 담은 version()의 글자 길이가 0보다 큰지 질의 하고 있습니다.(당연히 version 정보는 3.X.XX 또는 5.X.XX 이런식으로 구성됬기 때문에 글자 길이가 0보다는 클 것 입니다.)Tip. '(싱글쿼터)가 웹 인코딩이 되면 %27 : 따라서 burp suite에서 %27로 표시됨#(샵)도 웹 인코딩 되면 %23 : 따라서 burp suite에서 %23으로 표시됨-> or의 오른쪽 0<length((version()))#가 참(True) 이므로 쿼리문이 참 그래서 Response에 이렇게 결과를 확인 할 수 있습니다.-> pingit.php가 결과로 들어옴을 확인 할 수 있습니다.그래서 ?=length((version()))# 쿼리에서 ?의 숫자들을 1부터 2,3,4 .... 높여가다 보니 6일 때 6=length((version()))# 가 True로 반환되어 Response에 pingit.php가 나옴을 확인 할 수 있습니다.[Request에서 6=length((version()))#로 쿼리문 구성][Response 결과]결론 : MySQL 버전 정보 길이는 6글자 이다. 2. MySQL 버전 정보 획득이제 MySQL 버전 정보 글자 길이가 6글자 임을 알아 냈으니 버전 정보가 어떤 글자들인지 알아내야 합니다.쿼리문을 아래와 같이 ascii와 substring 구문을 이용해서 구성하였습니다.[MySQL 버전 정보 얻는 SQL 쿼리문]해설1) ascii : ascii()하면 괄호안의 값을 ascii 코드 값으로 변경하는 함수 입니다.해설2) substring((version()),1,1) : version의 첫번째글자에서 1개의 글자(즉, 첫번째 글자 한개)를 가져오는 함수 입니다.해설3) 52=ascii(substring((version()),1,1))# 은 substring을 통해서 version의 첫번째글자에서 1개의 글자를 가져온 값이 ascii 코드 값으로 52가 맞는지 묻는 쿼리문 입니다.ascii 코드표를 보면 ascii 코드 값 52는 '4' 입니다.결론은 해당 쿼리문 결과가 참이므로 Response에 pingit.php를확인 할 수 있습니다. 그런데 ascii 코드 값은 굉장히 많으므로 Burpsuite에 intruder 기능을 이용해서 나머지 5글자를 찾아보겠습니다.-> intruder에 접속해서 positions 메뉴에서 payload positions 아래에 쿼리문에서 52=ascii(...)부분에서 52를 드래그 선택하고 오른쪽에 add$를 클릭합니다.(예시)그리고 위쪽의 Payloads 메뉴를 선택합니다.-> payload set: 1은 $로 감싼 52부분을 뜻합니다.-> payload type을 ascii코드값을 순차적으로 탐색할 것 이므로 Numbers로 바꿔주고-> 아래 payload options에서 From 33, To 126, Step 1로 설정합니다.From 33, To 126 인 이유 ascii코드값 33~126이 모든 숫자,영문 대소문자, 특수문자 값이므로[version()) 2,1 즉 version의 2번째 글자][intruder를 통한 2번째 글자 확인] ascii 코드값 46일 때 True, pingit.php 확인, ascii코드값 46은 온점('.')version()의 2번째 글자 : '.'(온점) [version()) 3,1 즉 version의 3번째 글자][intruder를 통한 3번째 글자 확인]ascii 코드값 49일 때 True, pingit.php 확인, ascii코드값 49는 '1'version()의 3번째 글자 : '1'(숫자 1) [version()) 4,1 즉 version의 4번째 글자][intruder를 통한 4번째 글자 확인]ascii 코드값 46일 때 True, pingit.php 확인, ascii코드값 46은 온점('.')version()의 4번째 글자 : '.'(온점) [version()) 5,1 즉 version의 5,6번째 글자][intruder를 통한 5,6번째 글자 확인]ascii 코드값 50일 때 True, pingit.php 확인, ascii코드값 50은 숫자2('2')참고로 6번째 글자도 5번째 글자와 동일한 결과 회신지금까지 나온걸 모두 합치면 4.1.22 결론 : MySQL의 버전은 4.1.22 후기.혹시 MySQL 4.1.22 버전에 맞는 공격코드가 있는지 검색했지만 Integer Overflow는 DoS공격, Privilege Escalation은 .txt이다. (따라서 공격을 진행할 수 없다)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 데이터 jpa memberRepository 급함!!
섹션6 스프링 DB 접근 기술에서스프링 데이터 jpa 5분쯤에서 SpringgConfig에 가서 MemberRepository 의 생성자를 생성하면저는 빨간색 이 나타납니다.. 이 오류를 해결하려면 어떻게 해야 하나요?? MemberServiceIntegrationTest 하면 아래와 같은 오류가 나옵니다.Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.Action:Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed============================CONDITIONS EVALUATION REPORT============================Positive matches:———————— NoneNegative matches:———————— NoneExclusions:————— NoneUnconditional classes:——————————— None
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
노트북에 설치할 용량이 없는데 윈도우 비바도로 그냥 배워도 될까요>
가능할까요?
-
미해결[스프링 배치 입문] 예제로 배우는 핵심 Spring Batch
Run / Debug 관련 질문드립니다..!
앞선 질문 보고 다음과 같이 추가를 한 상황인데 Hello World Spring Batch 구문이 실행이 되지 않아 질문을 드립니다..! 혹시 제가 잘못 설정한 부분이 있는 걸까요?