3:14부터 설명하시는 내용에 대해서 질문 있습니다. 다른 부분은 예외로 치고 반복문에서만 봤을 때, 반복문이 최대한 조금 돌아가게 만드는 게 효율성이 높고 좋은 코드라고 볼 수 있는건가요?? 그런 의미에서 21번 최대공약수 문제에서 for (i = 1; i <= a && i <= b; i++) { if (a % i == 0 && b % i == 0) max = i; } printf("%d", max); 이렇게 작성하였는데 코드를 최대한 간결하게 작성하는 것에 중점을 두었습니다. 그런데 의문인 점이 a, b 중 작은 값이 30이라면 반복문이 무조건 30번 돌아가기 때문에 선생님께서 작성하신 코드에 비해 비효율적이고 안좋은 코드라고 볼 수 있을까요? 그렇다면 앞으로 반복문이 들어가는 코드를 작성 할 때 반복횟수를 고려하면서 작성하는 게 좋은 습관을 만드는 길인걸까요? 아니면 이렇게까지 신경 쓸 필요는 없나요? 궁금합니다!
안녕하세요 강사님!! 다름이 아니라 로컬스토리지에 대해 질문을 드리려고 합니다!! 강사님께서 첨부하신 boiler-plate을 사용하지 않고, 이전의 boiler-plate 강의 수강 후 직접 작성한 파일을 그대로 가져와서 youtube 강의를 듣고 있습니다. 로그인 페이지에서 로그인을 하게 되면, 로컬스토리지에 userId가 저장될 수 있게 기능을 구현하려 하는데, 아래와 같이 어딘가로 저장은 되지만 어플리케이션 탭의 로컬스토리지에는 표시가 되지 않습니다. 혹시 어떤 이유 때문에 이러 일이 일어나는지 알려주실 수 있으실까요!!ㅠㅠ -------------------------------------------------------------------------------------------------------------------------------------- 확인해보니 크롬 브라우저에는 위 사진과 같이 저장된 데이터가 표시되지 않았지만 브레이브 브라우저에서는 아래와 같이 정상적으로 표시 됐습니다!! 특이사항이 있다면 크롬 브라우저에서 로그인 할 때, 암호가 유출되었을 수도 있다는 알림이 뜨는데 그것 때문인지 궁금합니다!!
cs 면접강의랑 코딩테스트 all in one 강의 두 개를 수강중인데, 제가 노션을 구글계정을 사용중인데, 구글폼에 실수로 네이버 이메일을 작성해버려서 네이버로 로그인해야지만 자료를 볼 수가 있네요...죄송한데 구글 계정으로 다시 보내주실 수 있나요..? 구글 이메일은 두 강의 모두 구글폼에 다시 작성했어요...ㅠㅠ
BeanClassLoaderAware 를 통해 ClassLoader 를 주입을 받는다고 가정할 때 public class MyAutoConfigImportSelector implements DeferredImportSelector, BeanClassLoaderAware { private ClassLoader classLoader; @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { List<String> autoConfigs = new ArrayList<>(); ImportCandidates.load(MyAutoConfiguration.class, classLoader) .forEach(autoConfigs::add); return autoConfigs.toArray(new String[0]); } @Override public void setBeanClassLoader(ClassLoader classLoader) { this.classLoader = classLoader; } } MyAutoConfigImportSelector 는 스프링에서 사용하는 공유되는 클래스로더에 의해서 로딩되는 것으로 확인하였습니다. (this.getClass().getClassLoader() 로 해도 같은동작) 그렇다면 BeanClassLoaderAware 인터페이스를 스프링에서 제공하는 이유는 무엇일까 궁금하여 질문드립니다. 또한 BeanClassLoaderAware javadoc 에서 framework classes 가 구현하도록 의도되었다고하는데 framework classes 의 의미는 무엇일까요?
무슨 말인지 혼동됩니다... 어디가 웹서버이고 어디가 공격자이고 어디가 희생자이고... 웹서비시엔 뭐가 올라가 있어야 하고.... 희생자는 무슨 취약한 소프트웨어를 사용하고 있어야 하고... 공격자 PC에선 무슨 설정이 되어있어야 한느지 혼동됩니다... ppt로 잘 정리된 자료 요청합니다
안녕하세요 호돌맨님 회원가입 성공 시 테스트 코드에 대해서 궁금한게 있어 질문 드립니다. @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로 테스트를 한 번 짜봤는데 위처럼 하는 방식은 좋지 않은 방식인가요?
hyunwooji@jihyeon-uui-MacBook-Air emotiondiary % npm install -g serve npm WARN config global --global , --local are deprecated. Use --location=global instead. npm ERR! code EACCES npm ERR! syscall mkdir npm ERR! path /usr/local/lib/node_modules/serve npm ERR! errno -13 npm 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 user npm ERR! npm ERR! If you believe this might be a permissions issue, please double-check the npm ERR! permissions of the file and its containing directories, or try running npm 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 도 해봣는데 전혀 해결되지 않고 더 꼬이고 있는거같습니다.. 완강을 앞두고 좌절중이네요ㅠ 오늘 다 완강하고 싶었는데 도저히 해결이 안되어 질문남깁니다 감사합니다!!
관련 강의 : 의존관계 자동 주입 - 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에 위반되는 것은 아닌지 여쭈어 봅니다. 감사합니다.
모든 관계를 지연로딩으로 설계하고, 성능을 최적화 시키기 위해 필요한 엔티티들만 페치조인을 이용하여 사용할 때 영한님의 경우 메서드명을 어떻게 명명하시나요? 실제로 실무에 적용 하다보니 이 부분이 정말 애매한 것같아서 질문드립니다. 성능을 최적화 시킬려면 사용하는 주 엔티티(Member)에서 필요한 연관관계 엔티티(Team, Order, OrderItem, Item)들을 페치조인해서 사용해야 하는데 그러다보니 많은 메서드들이 나오고 그로인해 메서드명이 길어지는 등 문제가 발생하는데요.. 강의 내용을 예시로 들면 // member - team 패치조인 getMemberWithTeam(Long memberId) // member - team, order 패치조인 getMemberWithTeamAndOrder(Long memberId) // member - team, locker, order 채치조인 getmemberWithTeamAndLockerAndOrder(Long memberId) ... 이런 식으로 패치조인하는 엔티티명을 넣어주면 메서드명들이 너무 길어지고 난잡한? 느낌이 나서 영한님의 경우 어떻게 메서드명을 짓는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 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"); } } }
(@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으로도 다 되서 구분없이 써도 되는지 궁금합니다
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 등의 속성으로는 추론하지 않은 이유가 타입스크립트 내부 동작방식에 의해서인지가 궁금합니다. 추가적으로 이 방법이 인터페이스를 사용하여 좀 더 복잡한 함수를 타이핑할 수 있는 방법이라고 생각해도 될까요? (보통 함수에 프로퍼티를 추가할 일이 없어서 이런 타이핑 방식을 보니 헷갈리네요ㅠㅠ)
별돌로 웹서비스를 올리지 않아도... [질문1] wireshark실행 만으로 웹서버를 올리는 효과가 있다는 말인가요?? [질문2] set srvhost localhost IP srcprot 80 set srcport 80 set uripath / show targets exploit 위의 명령어를 치면 별도 웹서비스를 실행하지 않아도 웹서비스를 실행하는 효과가 있다는 건가요??