묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨홍정모의 따라하며 배우는 C++
강의 내용과 object slicing에 대해 질문이 있습니다.
지금까지 들은 강의에서는 매개변수에 &가 있는 경우에는 call by reference로 동작하고, copy를 하지 않는 방식으로 알고 있었습니다. 그리고 call by value로 동작하는 경우에는 상황에 따라서 object slicing이 발생할 가능성이 있다고 이해했었습니다.그런데 강의에서 아래 코드처럼 &이 있는데 object slicing이 발생하신다고 하셔서 몹시 혼란스럽더라구요.catch(Exception& e) { e.report(); }그래서 다른 분들의 질답글과 C++ 표준(n3690을 참고했습니다)을 찾아봤습니다.Throwing an exception copy-initializes (8.5, 12.8) a temporary object, called the exception object. The temporary is an lvalue and is used to initialize the variable named in the matching handler (15.3). If the type of the exception object would be an incomplete type or a pointer to an incomplete type other than (possibly cv-qualified) void the program is ill-formed. Evaluating a throw-expression with an operand throws an exception; the type of the exception object is determined by removing any top-level cv-qualifiers from the static type of the operand and adjusting the type from “array of T” or “function returning T” to “pointer to T” or “pointer to function returning T,” respectively- C++ ISO n3690 15.1/3내용을 보니 throw를 하게 되면 exception object(예외 객체)라는 것을 copy-initialize하고, 해당 객체는 l-value이고 일치하는 handler에서 변수를 초기화하기 위해 사용된다고 되어 있었습니다.그리고 영상에서 rethrow 시 throw; 처럼 피연산자가 없는 경우 object slicing이 발생하지 않는다고만 나와서 설명이 좀 빈약한 것 같아 더 찾아봤습니다.A throw-expression with no operand rethrows the currently handled exception (15.3). The exception is reactivated with the existing exception object; no new exception object is created. The exception is no longer considered to be caught; therefore, the value of std::uncaught_exception() will again be true.- C++ ISO n3690 15.1/8throw;의 경우 새로운 exception object를 생성하지 않고, 기존 exception object로 다시 예외를 활성화시킨다고 나와있었습니다.좀 정확하게 확인하려고 예외 객체의 주소를 각 시점에 출력하도록 했습니다.class MyArray { private: int m_data[5]; public: int& operator [](const int& index) { if (index < 0 || 5 <= index) { ArrayException e; cout << &e << endl; throw e; } return m_data[index]; } }; void doSomething() { MyArray my_array; try { my_array[100]; } catch (Exception& e) { cout << "doSomething()" << endl; cout << &e << endl; e.report(); throw e; } } int main() { try { doSomething(); } catch (Exception& e) { cout << "main()" << endl; cout << &e << endl; e.report(); } return 0; }[] 연산자로 범위를 벗어난 인덱스에 접근했을 때 예외 객체를 생성하고doSomething() 함수의 catch() 내에서main() 함수의 catch() 내에서이렇게 확인했는데, 위에서 확인했던 내용대로 주소가 모두 달랐습니다. 그리고 doSomething() 에서 rethrow 를 throw;로 변경하니 2번과 3번의 출력 주소가 같았습니다.종합해보면 throw로 전달되는 객체의 복사 여부는 catch()의 &에 따라 달라지는 것이 아니고, throw에 피연산자가 생략되어 있냐 없냐로 달라지는 것 같더라구요. 그 마저도 throw; 처럼 작성하는 것은 rethrow할 때만 가능한 것 같았습니다.다음으로 그렇다면 왜 catch()에서 참조를 이용하는지 아래 링크를 참고했습니다.https://wiki.sei.cmu.edu/confluence/display/cplusplus/ERR61-CPP.+Catch+exceptions+by+lvalue+reference참고해보니 예외 클래스가 상속 관계를 가지는 경우, 예외 객체를 초기화하는 과정에서 object slicing이 발생할 수 있기에 &를 추가한다고 되어 있었습니다.실제로 주소 출력을 했던 테스트 코드에서 doSomething()에서는 throw;로 작성하더라도 main()의 catch()에서 &을 지우니 2번과 3번의 출력 주소가 달라졌습니다.그리고 생각을 해보니 throw는 expression이지 함수는 아니고, 더 찾아보니 'throwing by reference' 같은 개념은 존재하지도 않더라구요.결론적으로 함수에서와 throw 문에서의 &는 참조라는 같은 의미로 사용되지만, 함수의 매개변수에 사용하는 &는 call by reference로 작동하기 위한 것이고 catch()에서 사용하는 &는 object slicing을 피하기 위한 것이라고 이해하면 될까요?글이 조금 난잡할 수도 있는데, 읽어주셔서 감사합니다.
-
미해결[신규 개정판] 이것이 진짜 엑셀자동화다 - 기본편
pip명령이 vscode 명령프롬프트에서만 않되네요
그냥 명령프롬프트 띄우면 잘되는데vscode의 터미널 명령프롬프트에서만 안되네요 vs내에 인터프리트 경로까지 잡아줬는데도 안되요 'pip'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는배치 파일이 아닙니다. 라고 뜹니다 왜일까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 108p insert, erase
안녕하세요 🙂 큰돌님교안 108p에 있는 예제코드를 제가 insert와 erase를 이해하기 위해서 아래와 같이 변경하였는데요.#include <bits/stdc++.h> using namespace std; list<int> a; void print(list<int> a) { for (auto it : a) cout << it << " "; cout << '\n'; } int main() { for (int i = 1; i <= 3; i++) a.push_back(i); // a = 1 2 3 for (int i = 1; i <= 3; i++) a.push_front(i); // a = 3 2 1 1 2 3 auto it = a.begin(); it++; a.insert(it, 1000); // 3 1000 2 1 1 2 3 a.insert(it, 2000); // 3 1000 2000 2 1 1 2 3 print(a); it = a.begin(); it++; cout << "*it : " << *it << '\n'; a.erase(it); print(a); cout << "*it : " << *it << '\n'; a.pop_front(); a.pop_back(); print(a); cout << a.front() << " : " << a.back() << '\n'; a.clear(); return 0; }다음과 같이 변경해서 출력하면,3 1000 2000 2 1 1 2 3*it : 10003 2000 2 1 1 2 3*it : 22000 2 1 1 22000 : 2이렇게 나오는데, insert와 erase 메서드 모두 매개변수로 전달받은 iterator에다가 각각의 기능을 실행한 뒤 그 다음 위치(그 다음 인덱스)를 가리키도록 바꿔주는 걸까요?제 예상으로는 출력의 두 번째 *it 이 2000으로 나올 것으로 예상했는데, 2가 나와서a.erase(it);를 했을 때, it이 인덱스 1을 가리켜서 1000을 지우고 난 뒤, 그 다음 인덱스인 2를 가리키게 돼서 2를 가리키게 된 것으로 이해하였는데 맞을까요??마찬가지로 위의 insert도 인덱스 1 위치에서 삽입을 한 뒤, it은 인덱스 2를 가리키게 되고, 또 insert 해서 마지막엔 it이 인덱스 3을 가리키는 로직으로 이해하였습니다! 혹시 이러한 로직이 맞다면, list만 이런 것인지 다른 자료구조의 insert도 이런지 궁금합니다!감사합니다.
-
미해결자바스크립트로 알아보는 함수형 프로그래밍 (ES5)
커리큘럼 관련 질문 입니다.
ES6 심화강의를 수강중인데 ES6 기본편 대신에 이 강의를 듣고 ES6심화 강의를 수강해도 될까요?? 바로 듣기에는 이해가 조금 어려워서요
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
섹션7 이후 Todo List 조회 실패
안녕하세요 강사님.섹션 7까지 강의를 잘 보고 따라했는데요.이상하게 Todo가 안나타납니다.getList에서 데이터 조회까진 다 되고setServerData에도 값을 넣어주는데요.return에서 servaData를 뽑으려니 뽑히지가 않네요.그래서return ({serverData})만 해도 값이 안나옵니다.. 콘솔엔 뽑을 수 있게 오브젝트로 나오는데.. 혹시 추측되는 이유가 있으실까요?아래 깃허브 주소도 첨부하겠습니다.https://github.com/Jack0215/react-mall-with-spring확인 해주시면 감사하겠습니다.
-
미해결스프링부트 시큐리티 & JWT 강의
jwt를통해 로그인을할때 User가 null값이 되어오류납니다
java.lang.NullPointerException: Cannot invoke"filesource.project16.model.SiteUser.getPassword()" because "this.siteUser" is nullat filesource.project16.auth.PrincipalDetails.getPassword(PrincipalDetails.java:24) ~[main/:na] 로그인할때 db에있는 올바른 username, password를 입력하였는데 이런 오류가 뜨네요. jwt의 토큰을 거치면서 username, password 정보가 null값이 되어버리는거 같은데,보통 어디에 문제가있어서 이러는걸까요? auth, jwt 폴더의 파일은 수정하지않고 원본그대로 썼습니다. @EnableWebSecurity //모든 요청URL이 스프링 시큐리티의 제어를 받도록함. 기본 스프링 필터체인에 등록 @Configuration public class SecurityConfig { @Autowired private CorsConfig corsConfig; @Autowired private UserRepository userRepository; @Autowired private UserDetailsService userDetailsService; @Bean public SecurityFilterChain configure(HttpSecurity http) throws Exception { AuthenticationManagerBuilder sharedObject = http.getSharedObject(AuthenticationManagerBuilder.class); sharedObject.userDetailsService(userDetailsService); AuthenticationManager authenticationManager = sharedObject.build(); http.authenticationManager(authenticationManager); http .csrf(csrf -> csrf.disable()) .httpBasic(basic -> basic.disable()) .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .addFilter(corsConfig.corsFilter()) // cors 허용 설정 .addFilter(new JwtAuthenticationFilter(authenticationManager)) .addFilter(new JwtAuthorizationFilter(authenticationManager, userRepository)) .authorizeHttpRequests(requests -> requests .requestMatchers("/**").permitAll() //비로그인 접근가능페이지 .anyRequest().authenticated() //이상제외는 로그인필수 ) .formLogin(form -> form .loginPage("/login") //자동적으로 로그인페이지로감. 로그인페이지로 취급될주소 .defaultSuccessUrl("/main", true) //로그인 성공시 루트 url .permitAll() ) .logout(logout -> logout.permitAll()); return http.build(); } @Bean public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } }
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
h2-console 왼쪽 메뉴에 테이블이 안보입니다.
빨간색 영역에 생성된 테이블이 있어야 하는데 안보입니다.refresh 버튼을 누르거나 로그아웃 후 로그인해도 안보입니다.show tables; 명령어를 실행하면 테이블은 존재합니다.
-
해결됨Do it! 알고리즘 코딩테스트 with C++
백준 1722 교재 81 질문
해당 문제를 푸는 알고리즘에 대해 더 자세한 설명이 필요할 것 같습니다.K번째 순열 출력할때, 왜 k와 (n-1)!를 비교하는지 이해가되지 않습니다.
-
해결됨스프링 핵심 원리 - 기본편
OrderApp코드에서 new MemoryMemberRepository에 대한 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]OrderApp에서 appCofig.memberService()와 appCofing.orderService() 를 실행하고, memberService.join과 orderService.createOrder를 실행하는데memberService()에서 생성된 MemoryMemberRepository와 orderService()에서 생성된 MemoryMemberRepository가 둘 다 new로 다른 객체라고 생각이 되는데 어떻게 createOrder에서 아이디가 1L인 회원을 조회할 수 있는건가요?join된 메모리와 createOrder에서 하는findById를 실행하는 메모리는 다른 MemoryMemberRepository 객체 아닌가요?
-
해결됨실전! FastAPI 입문
uvicorn 실행 에러
안녕하세요.학습 도중 재부팅하여 다시 uvicorn 실행하려고 하니ERROR: Error loading ASGI app. Could not import module "main". 다음과 같은 메세지가 나오면서 fast api 앱이 실행이 안되는데 이유가 궁금합니다.
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
app.js 실행순서
app.js 실행순서여러개의 라우터 app.get()이 있고미들웨어,listen이 있을경우1.listen 실행2.미들웨어 실행(next가 있어야 라우터가 실행된다)3.이때 라우터는 클라이언트가 전송한 주소를 위에서 부터 밑으로 확인해서 적합한 라우터 실행이런 순서라면 listen이 젤위에 있어야하는거 아닌가요?
-
미해결
EC2 로드 밸런서 HTTPS 트래픽 처리불능에 대해 질문합니다.
안녕하세요, 저는 지금 프론트엔드 개발자를 준비하고 있는 취업준비생입니다.포트폴리오를 준비하면서 웹 풀스택 개인 프로젝트를 진행중입니다. AWS를 이용한 프로젝트 배포과정에서 적용한 HTTPS 트래픽 처리 과정에서, EC2 Load Balancer에서 HTTPS 트래픽을 처리하지 못하는 문제를 해결하지 못해 질문합니다. 현재 프로젝트 배포를 위해 사용하고 있는 AWS 서비스들은 아래와 같습니다.S3EC2 (Load Balancer 포함)RDSRoute 53CloudFront 발생한 문제의 상세한 내용은 아래와 같습니다. 가상의 향수 쇼핑몰을 주제로 프로젝트를 만족스럽게 구현하였고, AWS를 이용하여 프론트엔드 / 백엔드 / 데이터베이스도 성공적으로 배포하였습니다. 그런데 회원 기능을 구현하면서 로그인 상태를 검증하고 지속할 방법으로 쿠키를 사용하였습니다. 문제는 기본적으로 사용되는 HTTP 프로토콜에서는 몇 가지 이유로 쿠키 사용이 불가능하여 배포 환경을 수정하면서 HTTPS를 사용해보기로 하였습니다. Route 53으로 도메인을 하나 구입하고, ACM으로 SSL 인증서를 발급받은 뒤.CloudFront를 이용해서 S3로 배포 중인 프론트엔드 파트를 구입한 도메인으로 연결함과 동시에 SSL 인증서를 적용하여 HTTPS를 사용하도록 설정했습니다. 그리고 EC2 환경에서도 HTTPS 사용이 가능하도록 Load Balancer를 설정, HTTP 리스너와 HTTPS 리스너를 설정하고 SSL 인증서를 적용한 뒤 EC2 인스턴스를 대상그룹으로 지정하여 백엔드로 들어오는 트래픽을 처리하도록 설정하였습니다. 그런데 이후 Load Balancer에서 헬스체크 테스트를 해보니, HTTP 트래픽은 백엔드에 잘 도달하여 응답까지 되는 반면 HTTPS 트래픽이 제대로 처리되고 있지 않는 결과를 확인하였습니다. 백엔드 로그와 Load Balancer 엑세스 로그 등을 확인해보니 헬스체크 요청이 백엔드에 제대로 도달하고있지 못하는 것을 확인하였습니다. 아래 항목들은 제가 문제를 해결하기 위해 수집한 정보들입니다.1. 로그에서 elb_status_code가 "502"이고, target_status_code가 "-"인 것을 보아서는 로드 밸런서가 HTTP 502 오류를 반환하고 있으며, 이는 대상에서 적절한 응답을 받지 못하고 있는 것으로 보입니다. 2. 네트워크 탭에서 확인된 정보에 따르면, 클라이언트(브라우저)는 OPTIONS 메소드를 사용하여 사전 요청(이른바 "preflight" 요청)을 서버에 보내고 있지만 이 사전 요청에 대한 응답이 없거나, 응답이 잘못되었을 때 502 오류가 발생할 수 있다고 합니다. 아래 항목들은 제가 문제를 해결하기 위해 시도했던 방법들입니다.1. Route 53 레코드 수정 : 프론트엔드에서 백엔드로 요청을 보내는 서브 도메인 app.essence-aura.com을 생성하고, 로드 밸런서 라우팅을 연결하였습니다.메인 도메인 essence-aura.com에서는 S3로 배포 중인 프론트엔드 정적 파일에 접근하며, 프론트엔드 내부적으로는 서브 도메인 app.essence-aura.com에게 백엔드 요청을 보내게 됩니다. 2. ACM 인증서 검증:발급된 SSL/TLS 인증서가 Load Balancer와 CloudFront에 제대로 적용되었고, 모든 서브도메인이 포함되어있으며 유효한 상태임을 확인하였습니다. 3. SSL/TLS 핸드셰이크 체크:Load Balancer 로그를 통해 SSL/TLS 핸드셰이크가 성공적으로 수행되고 있음을 확인했습니다. 4. 서버 시간 동기화:EC2 인스턴스의 시간이 NTP(chronyd)를 통해 정확히 동기화되어 UTC 기준으로 적용됨을 확인하였습니다. 5. 로드 밸런서 대상 그룹 설정: 로드 밸런서의 대상 그룹 설정을 HTTP와 HTTPS로 구성하였고, EC2 인스턴스에서 사용하는 포트인 3001 포트로 적용되고 있음을 확인했습니다. 6. EC2 인스턴스 포트 설정: 인스턴스 인바운드 규칙에 3001 포트가 허용중이며, SSH로 인스턴스에 접근하여 백엔드 서버가 포트 3001에서 수신 대기 중임을 확인했습니다. 7. 보안 그룹 및 네트워크 ACL 설정: EC2 인스턴스에서는 3001 포트를 허용하고 있으며, 네트워크 ACL 설정은 초기값 그대로 모든 트래픽을 허용하고 있는 상태임을 확인했습니다. 제 능력으로 가능한 선까지 문제 해결을 위해 노력했지만 며칠을 소모해보아도 문제가 해결되지 않아 질문해봅니다. EC2 Load Balancer에서 HTTPS 트래픽을 처리하지 못하는 이유가 무엇일까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
노션 공유가 중단된것 같아요
안녕하세요 공유되었던 노션 페이지가 현재 접근할 수 없다 표시되어서 문의드립니다. 혹시 재공유 가능할까요?? 주소는 annie45671@gmail.com 입니다
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
컨트롤러 매핑이 안됩니다 ㅠㅠ
강의를 다듣고 혼자서 게시판을 구현하기 위해 작업중인데요 회원가입 기능을 만들기 위해서 index.html 화면에서 회원가입 버튼을 누르면 회원가입 뷰로 이동하게 할려고 했는데 컨트롤러가 매핑이 안되어 뷰가 보이지 않습니다. 어떻게 해결해야 할까요? https://drive.google.com/drive/folders/1qfnBICO1XDiGDS_BTleEBumPHN2bnJi6?usp=drive_link
-
해결됨[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
데이터 세트에 대한 기능 부분 질문입니다.
안녕하세요.. 데이터세트에 대한 질문이 있습니다.강의에서 train, validation으로 테이터 세트를 나누어서 진행하는 부분에서, 훈련용 데이터세트는 당연히 훈련 전용일것이고,Validation의 경우 epoch 를 반복하면서 모델 검정 간격을 정해주면 그때 사용 하는것 같은데.. 여기서 질문이 있습니다.Validation에서 객체를 잘못 구분할 경우 이것이 피드백이 되어 모델 훈련에 반영이 되는것인지요? 아니면 단순하게 mAP, mAR 만 확인하는 것인지요?만약 mAP, mAR 을 확인하는 것이라면 시간을 절약하기 위해서 validation 데이터 세트에 대한 검정간격을 자주 하지 않아도 되지 않을까 싶은데 이러한 판단이 맞는 것인지 궁급합니다.만약 반대로 validation. 데이터 세트에 대한 검정자체가 모델 훈련에 직접적으로 피이드백을 해서 훈련 결과에 개선효과가 있다면 검정을 자주 하는 것이 좋은것인지요??이와는 별개로 GPU 성능에 따라서 동일한 데이터세트와 동일한 조건에 대한 학습 결과가 달라질수 있는지요??? 만약 그렇다면 GPU 성능을 높이고 batch size를 많이 할수록 학습 결과가 개선이 되는 것으로 이해하는 것이 맞는지요??항상 좋은 강의 고맙습니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
연속부분수열
import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public int solution(int n, int m, int arr[]) { int answer = 0; int sum = 0; int lt = 0; int rt = 1; // 초기 합 설정 sum += arr[lt] + arr[rt]; while (rt < n - 1) { if (sum < m) { sum += arr[++rt]; } else if (sum == m) { answer++; sum -= arr[lt++]; } else { sum -= arr[lt++]; } } // while문에서 rt가 마지막 인덱스일 때 합은 검증을 못해서 검증 로직 추가 if (sum == m) answer++; return answer; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int arr[] = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } System.out.println(T.solution(n, m, arr)); } }이 코드가 효율적인 코드인지 궁금해서 질문드립니다!!
-
미해결
getid()오류
// Member.java package hello.core.member; public class Member { private Long id; private String name; private Grade grade; public Member(Long id, String name, Grade grade) { this.id = id; this.name = name; this.grade = grade; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } }멤버 클래스코드이고package hello.core.member; import java.lang.reflect.Member; import java.util.HashMap; import java.util.Map; public class MemoryMemberRepository implements MemberRepository{ private static Map<Long, Member> store =new HashMap<>(); @Override public void save(Member member) { store.put(member.getId() ,member); } @Override public Member findByID(Long memberId) { return store.get(memberId); } }레파지토리 코드인데 getId부분에 오류가 뜹니다
-
미해결MSSQL Server 2016 기반의 데이터베이스 입문에서 활용까지 Part.1
pubs 다운로드 링크 문의 드립니다.
pubs 다운로드 링크가 유실되었는데 다른 질문의 답변의 블로그에도 삭제된 게시물이라고 뜹니다. 데이터를 다운받으려하는데 어떻게 해야할지 질문 드립니다.
-
미해결Next + React Query로 SNS 서비스 만들기
page.tsx params 확인 방법
page.tsx에서 props로 받은 params 또는 searchParams를 console.log()로 확인해보고 싶은데 찍히지가 않아서요.원래 그런건가요...?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
hasIpAddress 설정 403
왜 게이트웨이로 접근이 안될가요?hasipaddress값에 제 컴 아이피를 적고http://220.86.33.96:9295/welcome > 접근가능한데 http://220.86.33.96:8000/user-service/welcome > 접근불가떠요..이해가안됩니다 게이트웨이서버건 유저 서버건모두 제 컴퓨터고 제 서버 아이피가 220.86.33.96인데..hasIpAddress값을 127.0.0.1로 주고 접근하면 모든곳에서 접근이 됩니다..