묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨모의해킹 실무자가 알려주는, SQL Injection 공격 기법과 시큐어 코딩 : PART 1
sql injection이 왜 위협적인 공격인지 궁금합니다.
sql injection이 성공한다면 매우 위협적이라는 것은 알고 있으나 강의 내용을 수강하고 나서 든 생각은 매우 간단한 조치(prepared statement + 길이제한 + white List)만으로도 취약점 분석 단계에서 막혀버리는 공격인데 왜 owasp top 10에 들어갈 정도로 위협적인 공격으로 평가되고 있는지 궁금합니다.
-
미해결다양한 사례로 익히는 SQL 데이터 분석
count(*) >1의 의미
count(*)의 의미는 아는데 >1을 하는게 어떻게 유니크한 값을 볼 수 있는건지 이해가 안됩니다
-
미해결내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)
이론 수업 자료 공유 해주실 수 있나요?
안녕하세요, 이론 수업 자료도 같이 받아보고 싶은데 공유해주실 수 있나요?당연히 혼자 공부하는데만 사용할 예정 입니다.
-
미해결
https://start.spring.io/ 프로젝트 생성 시 문의
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 수강하고 있습니다.https://start.spring.io/ 프로젝트 생성을 진행하고있는데, 강의해서는 Gradle Project 를 선택해서 진행하고있습니다. 하지만 현재는 Gradle-Groovy / Gradle-Kotlin / Maven 이 조회되는데 어떤걸로 진행을 해야할지 문의드립니다.ㅠㅠ 또한 Spring boot 하위버전 선택 방법도 함께 문의드립니다ㅠㅠ
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
if else 문제..
문제. 중첩 if를 이용하여 프로그램을 작성하세요* 3개 과목의 점수를 입력 받아서 합격인지 불합격인지 출력하세요* 3개 과목이 전부 40점 이상이어야 하고 평균이 60이상이면 "합격"* 평균이 60이 넘지만 1개 과목이라도 40점 미만이면 "과락으로 불합격"* 평균이 60미만이면 "불합격"** --출력결과--* 국어점수입력 : 95* 영어점수입력 : 85* 수학점수입력 : 73* 결과 : 합격 이문제 출력결과 나타내려고제가 나타낸 코드인데 2개가 궁금합니다.if (a => 40) && (b => 40) && (c => 40)조건으로 위에 문장이 사용안되는 이유가 뭔가요? 그리고 평균값을 구할때if (a+b+c) / 3 >= 60 이렇게 했는데 이것도 코드가 안되는데 이유가 뭔가요?
-
미해결[MASTER] 만들면서 배우는 Figma UI Design
강의자료 여/부
해당 강의의 강의자료는 따로 없나요?
-
미해결스프링 핵심 원리 - 기본편
for문을 통한 Bean 출력
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 들으면서 Bean 이름을 출력을 하는 과정에서 for문에 forEach를 통해서 이름들을 전부 출력하는걸로 이해를 하고 있는데 Object bean의 경우 컨테이너에 있는 Bean 이름과 같은 Bean 정보를 Object 형태로 담아서 출력을 하는게 맞는걸까요 ??@Test @DisplayName("애플리케이션 빈 출력하기") void findApplicationBean(){ String[] beanDefinitionNames = ac.getBeanDefinitionNames(); // iter 자동 for문 생성 for (String beanDefinitionName : beanDefinitionNames) { BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName); // .getRole() : 스프링이 내부에서 사용하는 빈 // Role ROLE_APPLICATION : 직접 등록한 애플리케이션 빈 // Role ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈 if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){ Object bean = ac.getBean(beanDefinitionName); // soutv : 변수명 출력 , soutm : 메서드명 출력 System.out.println("bean = " + beanDefinitionName + " object = " +bean); } } }
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
ORM 활용 API 구현 강의에서 다른 ERD 테이블을 쓰는데, 링크 공유 부탁드립니다.
우리가 만든건 스타벅스 ERD인데, 이것을 안쓰고중고거래 ERD를 사용하네요. 링크 공유 부탁드립니다.
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
69번 질문드립니다.
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 12분 25초에 함수를 만들때 return이 3번 들어가도 되는건가요?마지막에 함수 끝날때만 들어가야하고 조건문에서는 else로 조건문을 닫는다던가 해야하는거 아닌지 궁금합니다.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
companion
안녕하세요 강의 잘 보고 있습니다 다름이 아니라 4분대에 나오는 생성자를 companion 으로 바꿔주셨는데.. 이게 더 좋다라고 하시는 이유를 제가 짐작이 안가서 그런데 혹시 간략하게 알려 주실수 있으신가요..?
-
해결됨[코드캠프] 시작은 프리캠프
HTML 관련
안녕하세요 방금 막 강의 듣기 시작하여서 회원가입 페이지 만드는 실습 중입니다.vscode 설치부터 extentions까지 똑같이 다운로드 받고 강의와 동일하게 실습을 진행하였는데 파일을 열어보면 결과가 다르게 나옵니다.먼저 글씨체가 멘토님과 다르게 나오고 input박스에 테두리가 안 보입니다. 입력이 되는것을 보면 input박스가 존재하긴 하는데 테두리가 왜 안 보일까요?인코딩 역시 utf-8로 동일합니다!
-
해결됨[코드캠프] 시작은 프리캠프
제가 머리가 안좋은걸까요...
처음 배워보는 사람인데 CSS정렬까지만 보고 회원가입창을 만들 수 있는 건가요? 아무리 해봐도 안되는 것 같아서 여쭤봅니다 그리고 여기서부터 전진을 못하고있습니다 저 자식박스들을 옆으로 옮기는 방법이 무엇인가요? 각자 class마다 flex선언을 해야하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
doFilterInternal 관련 질문있습니다.
안녕하세요. 제가 BasicAuthenticationFilter 상속받아서 doFilterInternal 메소드를 구현했는데 해당 필터의 해당 메소드는 인증이나 권한이 필요한 API를 호출했을 때만 동작을 하는 걸로 알고 있었는데 SecurityConfig에서 antMatcher에 permitAll로 지정한 경로의 API를 호출했는데 doFilterInternal 메소드가 동작하는 현상이 발생하는데 혹시 왜그런건지 궁금합니다. 해당부분에 관련된 코드는 아래와 같습니다.SecurityConfig@Configuration @EnableWebSecurity public class SecurityConfig { private final CorsConfig corsConfig; private final MemberRepository memberRepository; private final JwtProvider jwtProvider; public SecurityConfig(CorsConfig corsConfig, MemberRepository memberRepository, JwtProvider jwtProvider) { this.corsConfig = corsConfig; this.memberRepository = memberRepository; this.jwtProvider = jwtProvider; } @Bean BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .formLogin().disable() .httpBasic().disable() .apply(new MyFilters()) .and() .authorizeRequests() .antMatchers("/api/member/join").permitAll() .antMatchers("/api/member/login").permitAll() .anyRequest().authenticated() .and().build(); } public class MyFilters extends AbstractHttpConfigurer<MyFilters, HttpSecurity> { @Override public void configure(HttpSecurity builder) throws Exception { AuthenticationManager authenticationManager = builder.getSharedObject(AuthenticationManager.class); builder .addFilter(corsConfig.corsFilter()) .addFilter(new JwtAuthenticationFilter(authenticationManager, jwtProvider)) .addFilter(new JwtAuthorizationFilter(authenticationManager, memberRepository, jwtProvider)); } } } JwtAuthenticationFilterpackage com.example.shop.jwt; import com.example.shop.auth.PrincipalDetails; import com.example.shop.model.Member; import com.example.shop.repository.MemberRepository; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.io.Decoders; import io.jsonwebtoken.security.Keys; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; import javax.crypto.SecretKey; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class JwtAuthorizationFilter extends BasicAuthenticationFilter { private final MemberRepository memberRepository; private final JwtProvider jwtProvider; public JwtAuthorizationFilter(AuthenticationManager authenticationManager, MemberRepository memberRepository, JwtProvider jwtProvider) { super(authenticationManager); this.memberRepository = memberRepository; this.jwtProvider = jwtProvider; } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { String refreshToken = jwtProvider.getRefreshTokenInCookie(request); String accessToken = ""; SecretKey jwtKey = Keys.hmacShaKeyFor(Decoders.BASE64.decode(JwtProperties.SECRET)); if (refreshToken == null) { chain.doFilter(request, response); return; } String jwtHeader = request.getHeader(JwtProperties.HEADER_STRING); Claims claims = null; try { // refreshToken 유효성 검증 jwtProvider.validRefreshToken(refreshToken); } catch (Exception e) { // refreshToken 검증 결과에 따른 예외처리 e.printStackTrace(); chain.doFilter(request, response); return; } Member member = memberRepository.findByRefreshToken(refreshToken); Long memberId = member.getId(); try { if (jwtHeader == null) { // 브라우저 새로고침 고려하여 accessToken 재발급 accessToken = jwtProvider.createAccessToken(memberId, jwtKey); response.addHeader(JwtProperties.HEADER_STRING, accessToken); } else { // 그 외의 경우 accessToken 유효성 검증 accessToken = jwtHeader.replace(JwtProperties.AUTH_TYPE, ""); claims = Jwts.parserBuilder().setSigningKey(JwtProperties.SECRET).build() .parseClaimsJws(accessToken).getBody(); } } catch (Exception e) { // accessToken 검증 결과에 따른 예외처리 e.printStackTrace(); chain.doFilter(request, response); return; } // refreshToken, accessToken 검증 이후 작업 PrincipalDetails principalDetails = new PrincipalDetails(member); Authentication authentication = new UsernamePasswordAuthenticationToken(principalDetails, null, principalDetails.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authentication); chain.doFilter(request, response); } } 특이한 점은 api/member/login 경로의 API(UsernamePasswordAuthenticationFilter의 attemptAuthentication를 상속받아 구현했습니다.)를 호출했을 때에는 doFilterInternal이 동작을 하지 않지만 api/member/join 경로의 API를 호출했을 때에는 doFilterInternal이 동작을 합니다.
-
미해결만들면서 배우는 리액트 : 기초
VSCode 테마와 글씨체 어떤 걸 쓰시는지 알고 싶습니다.
VSCode 테마와 글씨체 어떤 걸 쓰시는지 알고 싶습니다.강의 잘 듣고있습니다 :)
-
해결됨실전! Querydsl
hastext import?
hasText 를 불러올수없는데import 해줘야할것도 없는것같은데 어떻게 해결해야할까요?
-
미해결함수형 프로그래밍과 JavaScript ES6+
배열에서 몇개만 취득하는 것이 아닐 경우
안녕하세요, 강사님 :)강의내용에서 age<20, take(3) 처럼 3개만 뽑는 경우엔 지연성으로 인해 3개만 뽑고 뒤에 배열들은 탐색하지 않겠지만 age<20의 사용자를 모두 뽑는 경우엔 이렇게 지연성으로 하나 일반 map,filter를 사용하나 성능상에 차이가 없는 것이죠?
-
미해결입문자를 위한 게임 프로그래머 개론
중소기업 취업 질문..
안녕하세요 ... 스타트업을 운영하고 계신다고 하여 질문드려요.평생 작은 게임을 여러개 만드는 1인 게임 개발이 목표입니다. 당장의 생계 + 경험을 위해 다양한 게임 외주 받는 회사를 희망 하는데 역량향상에 도움이 될까요?이런 작은 회사들 중에 좋은곳을 찾으려면 면접을 여러곳 다녀서 분위기를 파악하는 방법밖에 없겠죠? (연봉은 포기 해야겠쥬 ?ㅠ)유니티 캐쥬얼로 커리어를 쌓으면 한국 주류 게임회사(중견이상의 언리얼+mmorpg) 이쪽에는 발도 못들이겠죠?지금 이 게임프로그래머 특강은 12월 31일에 폐강 되는건가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
StringToIpConverter 가 2번 호출되는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용][소스코드] @PostMapping("/converter/edit") public String converterEdit(@ModelAttribute Form form, Model model) { IpPort ipPort = form.getIpPort(); model.addAttribute("ipPort", ipPort); log.info("post request end"); return "converter-view"; } @Data @Slf4j static class Form { private IpPort ipPort; public Form(IpPort ipPort) { log.info("form create"); this.ipPort = ipPort; } } [화면]"제출" 버튼을 눌러 POST 요청을 보내면 StringToIPConverter가 2번 호출됩니다. [로그][질문]첫번째는 @ModelAttribute Form 객체를 만들때 호출하는 것으로 보이는데, 두번째는 언제 호출되는건가요?
-
미해결비전공 기획자 및 관리자를 위한 IT 필수 지식
강의 자료 요청드립니다~
안녕하세요!강의 자료 요청드립니다!syjy813@gmail.com감사합니다~!
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
plugin
안녕하세요 강의 잘 듣고 있습니다 다름이 아니라 3분 40초쯤에 나오는 플러그인 설치 전에 오류가 뜨지않는데 이런경우도 있나요..?