묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
스키마 호환성 질문
안녕하세요https://www.inflearn.com/questions/1207899/%EC%8A%A4%ED%82%A4%EB%A7%88-%ED%98%B8%ED%99%98%EC%84%B1-%EC%A7%88%EB%AC%B8%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4이 질문에 대한 추가 질문이 있습니다. BACKWARD에 대해 지원하는 신규 스키마 변경에서기존 필드 삭제, 기본 값 가진 신규 필드 추가이 부분은 sink쪽 스키마에서의 변경에 대한 내용인 것은 맞는건가요? 예를 들어 스키마 호환성 체크에서새로 추가되는 컬럼이 기본 값을 가지고 있지 않으면 하위 호환성 오류다. 라는 문장이 있다면"sink 쪽에서" 새로 추가되는 컬럼이 기본 값을 가지고 있지 않으면 하위 호환성 오류다. 라고 해석하는 것이 맞는지 질문드립니다.
-
해결됨AWS Certified Solutions Architect - Associate 자격증 준비하기
수업기간 연장 가능할까요??
안녕하세요.회사 업무로 바빠 4월에 시험 신청을 했습니다. 혹시 수업 기간 연장 가능할까요??
-
미해결스프링 시큐리티
error , exception 이 잘 안됩니다.
강사님 소스와 똑같이 했는데도 안되는데요 ....로그인 실패해도 에러 문구가 안뜹니다. 디버깅하면 Controller 값이 null 로 들어오는데 왜그런걸까요 ?? security 설정에 /login?* 설정도 해줬습니다. @Controllerpublic class LoginController { // 에러가 있을때만 선택적으로 받는다.@RequestMapping(value={"/login"})public String login(@RequestParam(value = "error", required = false) String error,@RequestParam(value = "exception", required = false) String exception, Model model){model.addAttribute("error",error);model.addAttribute("exception",exception);return "login";} @GetMapping("/logout")public String logout(HttpServletRequest request, HttpServletResponse response) { Authentication authentiation = SecurityContextHolder.getContext().getAuthentication(); if (authentiation != null) {new SecurityContextLogoutHandler().logout(request, response, authentiation);} return "redirect:/login"; }} package com.eazybytes.springsecsection3.security.handler; import java.io.IOException; import org.springframework.security.authentication.BadCredentialsException;import org.springframework.security.authentication.InsufficientAuthenticationException;import org.springframework.security.core.AuthenticationException;import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;import org.springframework.stereotype.Component; import jakarta.servlet.ServletException;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse; // 인증 검증시 실패할때 인증 예외 발생@Componentpublic class CustomAuthenticationFailureHandle extends SimpleUrlAuthenticationFailureHandler { @Overridepublic void onAuthenticationFailure(final HttpServletRequest request, final HttpServletResponse response, final AuthenticationException exception) throws IOException, ServletException { String errorMessage = "Invalid Username or Password"; if(exception instanceof BadCredentialsException) {errorMessage = "Invalid Username or Password"; }else if(exception instanceof InsufficientAuthenticationException) {errorMessage = "Invalid Secret";} setDefaultFailureUrl("/login?error=true&exception=" + errorMessage); super.onAuthenticationFailure(request, response, exception); }}package com.eazybytes.springsecsection3.security.config;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.security.servlet.PathRequest;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.authentication.AuthenticationDetailsSource;import org.springframework.security.authentication.AuthenticationProvider;import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;import org.springframework.security.crypto.password.PasswordEncoder;import org.springframework.security.web.SecurityFilterChain;import org.springframework.security.web.authentication.AuthenticationFailureHandler;import org.springframework.security.web.authentication.AuthenticationSuccessHandler;import com.eazybytes.springsecsection3.security.provider.CustomAuthenticationProvider;import com.eazybytes.springsecsection3.security.service.CustomUserDetailsService;import jakarta.servlet.DispatcherType;@Configurationpublic class SecurityConfig { @Autowiredprivate AuthenticationSuccessHandler customerauthenticationSuccessHandler; // 인증 성공후 핸들링 처리 @Autowiredprivate AuthenticationFailureHandler authenticationFailureHandlerl; // 인증 실패후 핸들링 처리 @Autowiredprivate AuthenticationDetailsSource authenticationDetailsSource; // FormWebAuthenticationDetails 을 security 가 사용할 수 있도록 등록 @Autowiredprivate CustomUserDetailsService userDetailsService; // 개발자가 만든 userDetailsService 를 사용 protected void configure (AuthenticationManagerBuilder auth) throws Exception{ // CustomAuthenticationProvider 를 seruciry 가 사용할 수 있도록 등록auth.authenticationProvider(authenticationProvider());} @Beanpublic AuthenticationProvider authenticationProvider() {return new CustomAuthenticationProvider();} @BeanSecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {http.csrf(AbstractHttpConfigurer::disable); http.authorizeHttpRequests((auth) ->auth.dispatcherTypeMatchers(DispatcherType.FORWARD).permitAll().requestMatchers("/","/users","/users/login/**, /login*").permitAll() /* /login* /login?error=true&exception 접근 허용 */.requestMatchers("/mypage").hasRole("USER").requestMatchers("/message").hasRole("MANAGER").requestMatchers("/config").hasRole("ADMIN").anyRequest().authenticated()); http.formLogin((form) ->form.loginPage("/login").loginProcessingUrl("/login_proc").defaultSuccessUrl("/").authenticationDetailsSource(authenticationDetailsSource).successHandler(customerauthenticationSuccessHandler ) // 인증이 성공한 후 핸들링 처리.failureHandler(authenticationFailureHandlerl) // 인증이 실패후 후 핸들링 처리.permitAll());return http.build();} @Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();} @Beanpublic WebSecurityCustomizer webSecurityCustomizer() {// 정적 리소스 spring security 대상에서 제외return (web) ->web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations());}} --------------------- <!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head th:replace="layout/header::userHead"></head><body><div th:replace="layout/top::header"></div><div class="container text-center"><div class="login-form d-flex justify-content-center"><div class="col-sm-5" style="margin-top: 30px;"><div class="panel"><p>아이디와 비밀번호를 입력해주세요</p></div><div th:if="${param.error}" class="form-group"><span th:text="${exception}" class="alert alert-danger">잘못된 아이디나 암호입니다</span></div><form th:action="@{/login_proc}" class="form-signin" method="post"><input type="hidden" th:value="secret" name="secret_key" /><div class="form-group"><input type="text" class="form-control" name="username" placeholder="아이디" required="required" autofocus="autofocus"></div><div class="form-group"><input type="password" class="form-control" name="password" placeholder="비밀번호" required="required"></div><button type="submit" class="btn btn-lg btn-primary btn-block">로그인</button></form></div></div></div></body></html>
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
RecvBuffer 질문
안녕하세요. Session에서 _recvArgs.SetBuffer() 하는 부분에서 궁금증이 생겼습니다. _recvBuffer.WriteSegment는 다음에 올 패킷 사이즈가 어느 정도인지 모르니버퍼의 offset + writePos부터 여유공간 끝까지(FreeSize)를 뭉탱이로 가리켜서 주는걸로 이해했습니다.그리고 _recvArgs는 WriteSegment가 가리키는 공간을 자신의 버퍼로 사용합니다. 만약, 실제로 보내고자 했던 패킷의 사이즈가 10인데, _recvArgs의 FreeSize가 5라면,소켓은 일단 5만큼만 버퍼에 넣은 다음에 버리고, 나머지 5만큼의 재전송을 요청하는 건가요?아니면 아예 버리고 재전송을 요청하는건가요?그것도 아니라면 물밑(하위 레이어)에서 버퍼가 꽉 찼다는 신호를 서로 주고받아서 혼잡(?)이라 판단하고 애초에 보내지 않고 기다리는건가요? (버퍼가 비어지길 기다리다가 지치면 Disconnect 혹은 Loss?) 그리고 RecvBuffer의 Buffer가TCP 이론을 배울 때 말하는 window size와 직접적으로 연관되는 건가요?아니면 소켓 별도의 버퍼가 또 따로 있는건가요?
-
미해결스프링 시큐리티
thymeleaf tag 질문합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 로그인 하지 않을 때 isAnonymous() 는 동작하는데 로그인 하고 isAuthenticated() 는 동작 하지 않아서 top 메뉴에 로그아웃이 보이지 않네요 로그인 처리가 잘 안돼서 그런건가요 ??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
시스템 os locale 과 intellij default locale이 다릅니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]intellij 에서 로케일 티폴트를 찍으면 en-us라고 나오는데시스템 os locale은 한국입니다.locale.korea 라고 했을 때 messages_kr 파일이 없어 messages.properties(디폴트)를 먼저 찾아 테스트가 동작한다는 설명은 이해했습니다. (locale null 대신 locale.korea로 테스트성공) 하지만 null값으로 주게 되면 시스템 os 를 먼저 찾고(저의 경우 kr) -> messages_kr이 없으니 그대로 messages.properties를 찾을 줄 알았으나 messages_en.properties를 계속해서 참조했습니다. (아래) default값을 찍어보니 맨 위 사진처럼 intellij에서 디폴트값을 us로 인식하고 있었습니다. 혹시 어떻게 해결해야 할까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의 swap 질문
안녕하세요 강사님.c++ 초보 학생입니다.재귀함수로 만드는 순열 강의를 듣는 중에 3:18 전까지는 이해가 되나 3:18에서 코드를 보면 for 문에서 i =depth 즉 0으로 시작하므로 swap(v[0], v[0])이 된 이후에makePermutation(3, 3, 1)이 실행되는 것 아닌가요?강의 설명중 swap이 0,0 후에 1,0 그리고 2,0 까지 일어난다는 것이 코드상 이해되지 않습니다. 어째서일까요??
-
미해결MongoDB를 활용하여, 200억건 이상의 데이터 파이프라인 작성법
upsert를 insert보다 권장하시는 이유는 그냥 편의적인 이유인가요?
안녕하세요?질문 그대로 upsert를 insert보다 권장하시는 이유는 그냥 편의적인 이유인가요?어떤 성능상의 이유가 있는지, 유니크함을 보장하기 위한 수단인건지 등등 단순히 편의적인 이유이상의 무엇인가가 있는지 궁금합니다.(즉, 반대로 편하다는 이유만으로도 사용해도 되는지 궁금하네요)
-
미해결처음 만난 리덕스(Redux)
redux-thunk 실습 오류
Uncaught SyntaxError: The requested module '/node_modules/.vite/deps/redux-thunk.js?v=c406571d' does not provide an export named 'default' (at store.js:3:8)(내용 수정 및 진행상태 업데이트 2023.03.21 am 02:33)비트로 설치한 모듈에서 제공하지 않는 내보내기라길래해결방법 찾아보다가https://github.com/reduxjs/redux-templates여기에 있는 리드미 내용대로yarn add vite-template-redux설치를 하긴 했는데 Vite, with TypeScript 가 아니라 React로 해서 그런지는 모르겠는데그래도 같은 오류가 뜨네요ㅠㅠㅠ 아래는 각각 입력한 코드 내용입니다store.jsimport { applyMiddleware, compose, createStore } from "redux"; import rootReducer from "./reducers"; import thunkMiddleware from "redux-thunk"; // import asyncFunctionMiddleware from "./middlewares/asyncFunctionMiddleware"; const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; const store = createStore( rootReducer, composeEnhancers(applyMiddleware(thunkMiddleware)) ); export default store;addTodoThunks.jsimport { addTodo as addTodoActionCreator, removeTodo as removeTodoActionCreator, } from "../actions/todoAction"; const TODO_MAX_COUNT = 3; function addTodoThunkActionCreator(text) { return async function addTodoThunk(dispatch, getState) { const state = getState(); if (state.todo.length < TODO_MAX_COUNT) { dispatch(addTodoActionCreator("아이템 추가중...")); setTimeout(() => { dispatch(removeTodoActionCreator()); dispatch(addTodoActionCreator(text)); }, 3000); return; } else { dispatch(addTodoActionCreator("최대 개수 초과!")); setTimeout(() => { dispatch(removeTodoActionCreator()); }, 3000); } }; } export default addTodoThunkActionCreator; TodoAppContainer.jsimport { connect } from "react-redux"; // import { // addTodoActionCreator, // removeTodoActionCreator, // removeAllActionCreator, // } from "../actions"; // import { // addTodoActionCreator, // removeTodoActionCreator, // removeAllActionCreator, // } from "../ducks/todoDuck"; import { addTodo as addTodoActionCreator, removeTodo as removeTodoActionCreator, removeAll as removeAllActionCreator, } from "../actions/todoAction"; import addTodoThunkActionCreator from "../thunks/addTodoThunks"; import TodoApp from "../../components/TodoApp"; function mapStateToProps(state, ownProps) { return { todoItems: state.todo, }; } function mapDispatchToProps(dispatch, ownProps) { return { addTodo: (text) => { // dispatch(addTodoActionCreator(text)); dispatch(addTodoThunkActionCreator(text)); }, removeTodo: () => { dispatch(removeTodoActionCreator()); }, removeAll: () => { dispatch(removeAllActionCreator()); }, triggerAsyncFunction: (asyncFunction) => { dispatch(asyncFunction); }, }; } const TodoAppContainer = connect(mapStateToProps, mapDispatchToProps)(TodoApp); export default TodoAppContainer;
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL 컴파일 오류
JPQL 함수 강의에서 사용자 정의 함수 호출 부분 설명에서 컴파일 오류가 발생헀는데 강사님이랑 코드 작성 똑같이 했는데 함수값이 틀린거 같은데 저 빨간색 코드 부분을 뭐라고 수정을 해야 하나요??
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
공공 데이터 목록 -> 한국환경공단_대기오염정보 이름 변경 문의
오픈 API에 한국환경공단_에어코리아_대기오염정보 은 찾았는데 영상처럼 한국환경공단_대기오염정보는 보이지 않네요..ㅠ시도별 실시간 측정정보 조회도 검색이 안되고 혹시 영상 파일을 공유해 주실 수 있나요? https://www.data.go.kr/data/15073861/openapi.do
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-O 코드 질문입니다.
안녕하세요 큰돌님! 강의 재미있게 잘 듣고 있습니다 ㅎㅎ1-O번을 혼자 풀어서 맞추긴 했는데... 큰돌님 풀이 방식이랑은 좀 다르기도 하고, while문을 중첩해서 쓴 게 시간복잡도 때문에 마음에 걸려서요. - 코드 : http://boj.kr/a5eb7d7c669c408882d3004546fb537d저 같은 경우는 아래와 같은 방식으로 생각하고 구현하였습니다. 1. 입력범위를 먼저 보고 ( 1 <= n <= 10000) 2. 1, 11, 111, 1111을 제외하고는 맨 뒷자리가 1이 나오는 n의 값은 3, 7, 9 밖에 없다는 걸 깨달음 3. 나눗셈을 할때 나머지에 10을 곱해서 다음 자리수에 더해 다시 나눠서 계산하는 방식을 차용. 다시 말해 나눗셈을 할 때, 윗자리부터 몫과 나머지를 구하고, 나머지를 윗자리 몫을 구하고 남은 나누어지는 수에 더해서 다시 나누는 방식을 사용하기로 함. (배수이면 언젠간 나누어 떨어지므로)4. 코드상으로 시간 복잡도는 좋지 않아보이지 않았지만, 주어진 범위내에서는 111...11 자리수가 20이 넘어가더라도 한번의 테스트 케이스에서 대략 20번만 수행하면 되므로 그대로 구현해보았음. 혹시 이런 경우에 테스트 케이스를 맞췄더라도, 시간 복잡도를 고려해서 더 나은 방법을 고민해보는게 좋을까요?
-
해결됨[React / VanillaJS] UI 요소 직접 만들기 Part 1
강의 자료 다운받았는데 06_lazyLoading/4_r 폴더가 없어요
안녕하세요! 알림 보고 바로 수강신청했습니다 ㅎㅎ그런데 강의 자료를 열어보니 06_lazyLoading/4_r 이 쓰여지고는 있는데 폴더가 없네요... const LazyImage = dynamic(() => import('@/components/06_lazyLoading/4_r/lazyImage'), { ssr: false }) 실행도 못해보고 터져버린 앱... ㅠㅠ
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
KeyHolder 질문
@Override public Item save(Item item) { String sql = "insert into item (item_name, price, quantity) " + "values(:itemName, :price, :quantity)"; SqlParameterSource param = new BeanPropertySqlParameterSource(item); KeyHolder keyHolder = new GeneratedKeyHolder(); template.update(sql, param, keyHolder); long key = keyHolder.getKey().longValue(); item.setId(key); return item; } KeyHolder같은경우 id를 내부에서 직접 구성해줘야하기 때문에 쓰는거라고 알고있는데 서버를 열어서 추가를 해줄때마다 숫자가 증가되는걸 볼수있었습니다. 숫자가 증가되는건 코드에서 자체적으로 해주는건가요?항상 답변감사드립니다.
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
role 을 추가한 후 컨트롤러의 @Patch 코드에서 에러가 발생합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. role 을 추가하자마자 다음과 같은 에러상황이 발생하였습니다. 강의순서랑 동일하게 따라가서 특별하게 더 한건 없는데요,기존 entity 파일에서 role 생성하고 column 에서 선언해주고나서 저장하자마자 바로 이런 오류가 납니다. 혹시나 불러오기 에러인가 싶어서 강의를 꼼꼼히 보면서 동일한 위치에 따라하면서 해도 강사님쪽에서는 에러가 안나는데 제쪽에서만 에러가 나네요.. 뭐가 문제일까요?에러내용만 보면 role 을 엔티티파일에서만 선언하고 컨트롤러 파일에서는 불러오기가 실패해서 나는 오류같기도 한데, export 할때 유저 엔티티 파일의 UserModel 안에서 했기때문에 이 에러가 나는게 좀 이상한거 같은데 왜 오류가 나는지 모르겠네요..
-
미해결스프링 핵심 원리 - 기본편
service, repository에서 memberId의 타입을 Long으로 선언한 이유
MemberService의 findMember()와 MemberRepository의 findById()에서 매개변수 memberId의 타입을 long이 아닌 Long으로 선언한 이유가 궁금합니다. Member 클래스를 선언할 때 id 필드의 타입이 long이 아닌 Long인 이유는 다음 글을 통해 알 수 있었는데, 이 메서드들에서 memberId의 타입을 long이 아닌 Long으로 선언한 이유는 무엇인가요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 응용
L4 스위치의 로드밸런스에 대해서 질문드립니다.
로드 밸런스는 포트를 기반으로 스위칭이 된다고 하셨는데, 가령 접속된 웹서버들의 IP는 다르더라도 웹서버의 포트가 똑같이 80으로 열려 있다고 한다면 어떻게 되는 건가요?로드 밸런서 안에 웹서버들을 별도로 구분하는 테이블 같은게 있는걸까요? 어떤 방법으로 포트가 지정되어 매핑이 되는건지 궁금합니다.
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
black 설치
안녕하세요00-06 black설치과정에 질문입니다.라이브러리에 추가하고 black 패키지 추가하려고 하니깐활성화가 안되어있습니다..어떻게 조치해야 될까요?
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
실습리포지토리 테스트 코드 작성 강의 오류
안녕하세요 또 이렇게 질문하게 되네요 먼저 코드는 틀린거 없이 Git 내용과 강의 내용코드 그대로 작성하였습니다. 하지만 왜 일까요?? 에러가 나네요 이부분이 에러 납니다. al experience = experienceRepository.findAll()======================@Test fun testFindAll() { println("---- findAll 테스트 시작 ----") val experience = experienceRepository.findAll() assertThat(experience).hasSize(DATA_SIZE) println("experiences.size: ${experience.size}") for (experience in experience) { assertThat(experience.details).hasSize(experience.title.toInt()) println("experience.details.size: ${experience.details.size}") } println("---- findAll 테스트 종료 ----") }==================================== 이부분도요 findAllByIsActive(true) @Test fun testFindAllByIsActive() { println("----- findAllByIsActive 테스트 시작 -----") val experiences = experienceRepository.findAllByIsActive(true) assertThat(experiences).hasSize(DATA_SIZE) println("experiences.size: ${experiences.size}") for (experience in experiences) { assertThat(experience.details).hasSize(experience.title.toInt()) println("experience.details.size: ${experience.details.size}") } println("----- findAllByIsActive 테스트 종료 -----") } 에러 코드는 기니깐 핵심 부분만 올려 드리면 Hibernate: select e1_0.experience_id,e1_0.created_date_time,e1_0.description,d1_0.experience_id,d1_0.experience_detail_id,d1_0.content,d1_0.created_date_time,d1_0.is_active,d1_0.update_date_time,e1_0.end_month,e1_0.end_year,e1_0.is_active,e1_0.start_month,e1_0.start_year,e1_0.title,e1_0.update_date_time from experience e1_0 left join experience_detail d1_0 on e1_0.experience_id=d1_0.experience_id where e1_0.is_active=?org.springframework.orm.jpa.JpaSystemException: No default constructor for entity 'com.justkim.portfolio.domain.entity.ExperienceDetail' at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:341) 이이쿠 한줄만 적는데도 기네요 ExperienceDetail.kt 코드는@Entity class ExperienceDetail(content: String, isActive: Boolean) : BaseEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "experience_detail_id") var id:Long? = null var content: String = content var isActive: Boolean = isActive fun update(content: String, isActive: Boolean) { this.content = content this.isActive = isActive } }이런데 ExperienceDetail( 가 계속 경고를 때리네요Class 'ExperienceDetail' should have [public, protected] no-arg constructor https://github.com/justkjy/portfolio-justkim 깃 주소입니다 구글에서 위 에러를 검색하니깐 인프런 오류 질문이 올라 와 있던데 봐도 모르겠네요 https://www.inflearn.com/questions/931371/test-%EC%98%A4%EB%A5%98 감사합니다.
-
미해결안전한 웹 사이트 제작을 위한, 웹 보안 원 포인트 레슨
접근 제어 로직 구현 실수 관련해 질문있습니다.
안녕하세요인증과 인가 취약점은 파라미터가 아닌 세션으로 검증해야 한다고 하셨는데요그러면 세션은 항상 안전하다고 생각해도 괜찮은 건가요?xss처럼 특정 사용자의 세션을 탈취하지 않는 이상 올바르게 구현된 세션, JWT 같은 방식으로 검증하는 것이 반드시 안전한 것인지 궁금합니다!