묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
특정 API, 특정 IP 허용 (단일경로에 CORS 활성화)
https://github.com/expressjs/cors?tab=readme-ov-file#enable-cors-for-a-single-route참고하여작성 해 보았습니다.* 제일 하단부에는 전체 코드 첨부 하였습니다. *문제는 2가지 입니다.1. 단일 경로에 CORS 활성화를 구현하고 싶었으며corsOptions 에 methods 를 'POST, OPTIONS'만 추가하였음에도 get은 호출시 허용이 되었습니다.app.get('/users/', cors(corsOptions), function (req, res) {제가 구현하고 싶었던 코드의 의도는 특정 IP만 사용 허용 이기 때문에 위와 같이 구현하고 싶었습니다.하지만 아래와 같이 호출하여도 허용이 되었습니다.app.get('/users/', (req, res) => {나머지 문제는위와 반대로 POST의 경우에는 app.post('/token/phone', cors(corsOptions), (req, res) => {위처럼 작성 옵션도 적용되었음에도 불구하고 CORS 가 계속 발생합니다.아래는 작성한 node 코드입니다.import express from 'express' import { createTokenOfPhone } from '../../../section01/01-03-token-api-facade/index.js' import { swaggerUi, specs } from "./swagger/swagger.config.js"; import cors from 'cors' const app = express() app.use(express.json()) // Swagger API app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(specs, { explorer: true })); // 허용할 IP WhiteList const whitelist = [ 'http://127.0.0.1:5500' ]; const corsOptions = { origin: (origin, callback) => { if (whitelist.indexOf(origin) !== -1 || !origin) { // !origin은 로컬 요청을 허용 callback(null, true); } else { callback(new Error('Not allowed by CORS')); } }, origin: whitelist, methods: 'POST, OPTIONS', }; //CORS 설정 // app.use(cors()) // app.use(cors(corsOptions)) // 특정 IP 허용 app.get('/users/', cors(corsOptions), function (req, res) { // app.get('/users/', (req, res) => { res.json({msg: 'getdms 왜 됨?'}) }) // OPTIONS 요청에 대한 응답 처리 app.options('/users/', cors(corsOptions), (req, res) => { res.setHeader('Access-Control-Allow-Origin', req.headers.origin || '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); res.setHeader('Access-Control-Allow-Credentials', 'true'); res.sendStatus(204); // No Content }); // app.post('/token/phone', (req, res) => { app.post('/token/phone', cors(corsOptions), (req, res) => { const {phoneNo} = req.body; console.log(`phoneNo ${phoneNo}`) const requestToken = createTokenOfPhone(phoneNo); const resultData = { data: requestToken }; res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); res.send(resultData); }); app.listen(3000); // 포트번호아래는 get , options, post 를 호출하는데 사용한 코드입니다.주석 되어있는 get 호출시에는 호출안되게 옵션 설정해도 호출되고주석 안한 post 호출시에는 정상 호출되어야 할 것 같은데 안됩니다....<script> let resultToken = ''; const certification = () => { let myPhoneNo = document.getElementById("phoneNo").value; // let api = axios.options("http://localhost:3000/users"); // let api = axios.get("http://localhost:3000/users"); let api = axios.post("http://localhost:3000/token/phone", {phoneNo: myPhoneNo}); }; </script> <body> <div>휴대폰번호: <input type="text" id="phoneNo"> <button onclick="certification()">인증하기</button> <br/> <div>인증상태</div> <button>회원가입하기</button> </div> </body>
-
미해결[입문] Qt 6 프로그래밍 1편
Qt6 우분투에서 컴파일 안됨.
우분투에서 컴파일이 안되네요. build 탭에서 활성화가 안되어 있습니다. 해결방법은요. 세번 다시 설치했습니다.
-
미해결웹 개발자와 정보보안 입문자가 꼭 알아야 할 웹 해킹 & 시큐어 코딩
APMSetup monitor가 켜지지 않습니다.
php.ini에서 magic_quote_gpc를 on에서 off로 바꾸고 다시 실행하려고 하는데, 첫 번째 방법으로 시작되는 모니터 화면이 켜지지 않습니다. 바탕 화면에 APMSETUP Monitor가 깔려서 아무리 눌러도 화면에 나타나지 않습니다. 두번째 방법으로 시도해보았는데 마찬가지로 이런 error 창이 뜨면서 실행되지 않습니다. 127.0.0.1을 url로 입력했을 때 강의 화면처럼 잘 설치되었다고 정상적으로 잘 작동됩니다.어떻게 해야 할까요..?
-
미해결윈도우 악성코드(malware) 분석 입문 과정
윈도우7 vmware player 환경 다운로드 경로가 막힌것 같습니다
virtualbox 용은 다운로드가 가능한데 제가 설치한건 vmware라 링크 확인 부탁드립니다
-
미해결C# 처음부터 배우기
강의자료
- 강의자료가 알집으로 압축풀기 했을때 지원하지 않는 포맷이라고합니다해결책이 무엇일까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
안녕하세요! 테스트 질문입니다
강의에서는 인기글을 테스트할때 DataInitializer클래스에서 아래와 같은 코드를 사용했습니다. void createComment(Long articleId, long commentCount) { while(commentCount-- > 0) { commentServiceClient.post() .uri("/v1/comments") .body(new CommentRequest.Create(articleId, "content",null, 1L)) .retrieve(); } }이렇게 사용해봤더니 카프카에 전달이 되지 않더라구요 void createComment(Long articleId, long commentCount) { while (commentCount-- > 0) { CommentRequest.Create request = new CommentRequest.Create(articleId, "content", null, 1L); try { // 요청 로깅 추가 ObjectMapper objectMapper = new ObjectMapper(); System.out.println("Request body: " + objectMapper.writeValueAsString(request)); commentServiceClient.post() .uri("/v1/comments") .body(request) .retrieve() .toBodilessEntity(); // 응답 처리 추가 } catch (Exception e) { System.out.println("Error: " + e.getMessage()); } } }이렇게 사용해야 인기글 서비스에서 아래처럼 로그가 찍히는걸 확인했습니다. 어디를 확인해야할까요 .. 몇시간째 해결을 못해서 질문드려요!![HotArticleEventConsumer.listen] received message = {"eventId":136009554918850560,"type":"COMMENT_CREATED"
-
해결됨오브젝트 - 기초편
가격 필드가 Long fee가 아닌 Money fee가 된 계기가 궁금합니다.
안녕하세요. 강사님! 너무나 알찬 강의 감사드립니다. 한가지 궁금한 점이 있습니다.만약 제가 영화 예매 설계를 해야하는 상황이었다면, '가격' 필드를 Long 타입으로 할 생각밖에 못했을 것 같은데, Money 라는 클래스로 가격을 표현하게 된 계기를 여쭤보고 싶습니다.
-
미해결3D 모델링 입문을 위한 라이노(Rhino) '꿀팁' Part.2
ipod 모델링(2) 재생버튼 그룹잡기
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 ipod 모델링(2) 21:21 재생버튼 그룹잡기 버튼이 없고 제가 임의로 잡았는데도 안되는데어떻게야 될까요? 예시 자료에도 돌출이 안되어 있어요 !
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
플러터 gradle 오류 (해결했습니다.)
플러그인 설정 도중에 오류가 생겼습니다.시도 목록android api 재설치No sdk -> android api 34 설정강의 영상 보고 재설정pub.dev 보고 재설정프로젝트 재생성추가적으로 Properties가 인식이 안되는 상황이 발생합니다.(def properties = new Properties() <- Cannot resolve symbol 'Properties')아래는 제 설정 파일과 오류문입니다.//build.gradle minSdk = minSdkVersion 20 targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName //pubspec.yaml cupertino_icons: ^1.0.8 geolocator: ^13.0.2 google_maps_flutter: ^2.10.0FAILURE: Build failed with an exception. * Where: Build file 'C:\Users\user\StudioProjects\location_exam\android\build.gradle' line: 13 * What went wrong: A problem occurred evaluating root project 'android'. > A problem occurred configuring project ':app'. > Could not create task ':app:compileFlutterBuildDebug'. > Cannot get property 'apiLevel' on null object * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. BUILD FAILED in 2s Error: Gradle task assembleDebug failed with exit code 1(해결) minSdk = minSdkversion 20에서minSdkVersion 21로 바꿨습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-A(19942) 질문 있습니다.
http://boj.kr/d23d4530da1942ca8560de75051ec4a0안녕하십니까 선생님, 항상 강의 잘 듣고 있습니다. 매번 상세한 답변 감사합니다.4 - A 문제에서 어느 부분에서 틀렸는지 잘 모르겠습니다. 그리고 문제의 출력 조건에서 재료의 번호를 "사전 순으로 가장 빠른 것을 출력한다." 이 부분이 제 풀이에서는 어차피 1번 재료부터 쌓아 갔으니 고려하지 않아도 되는 부분인가요??
-
해결됨실무 중심! FE 입문자를 위한 React
[16-2. 설문 리스트 컴포넌트 구현] Table 의 key 설정은 rowKey 속성을 사용합니다.
[16-2. 설문 리스트 컴포넌트 구현] Table 의 key 설정은 rowKey 속성을 사용합니다.rowKey 속성을 사용하여 key로 지정할 컬럼을 지정합니다. // primary key is id return <Table rowKey="id" />; // or return <Table rowKey={(record) => record.id} />;
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
왜 경계값이 정해인지 궁금합니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. F번 질문드립니다!사과위치가 바구니 사이에 있지 않는 경우, 바구니 길이만큼 모두 탐색해서 최솟값을 찾아야 한다고 생각했습니다. 현재 바구니 위치가 다음번,다다음번 사과 거리에 영향을 미치기 때문에 단순히 왼쪽,오른쪽 경계값으로 단정지으면 안된다고 생각했는데, 제 생각이 왜 틀린건가요?
-
미해결실무 중심! FE 입문자를 위한 React
최신버전 node.js 관련 문의
최신 버전 node.js 를 설치 하고 진행하니 create-react-app 에서 자꾸 문제가 생기는거 같습니다. 이부분에 대해 어떻게 진행해야하나요??
-
미해결직접 활용할 수 있는 Git과 Github - 기초부터 협업까지
소스트리에 새로운 커밋이 뜨지않아요
비쥬얼 스튜디오에서 아무리 수정해도 강의에서는 그냥 바로 소스트리에 추적이 되어서 커밋이 뜨는데 저는 이렇게 save all을 눌러줘야 커밋이 떠요 왜그런가요?? 제가 뭘 잘못하는건가요?
-
미해결비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지
카카오맵API 지도 관련
.category-item에서 width를 24%로 해야 4등분이 되고 25%로 하면 3등분이 됩니다. 이건 제가 질문하려는 내용과 뭔가 관련이 있는 것 같아서 말씀드리는거고 css #map에서 height를 픽셀로 안하면 지도가 나오지도 않고 픽셀로 해도 지도가 일부분만 나옵니다. 지도자체를 인용하는거는 문제가 없어보이는데 왜 안나올까요?@font-face { font-family: 'ChosunCentennial'; src: url('https://gcore.jsdelivr.net/gh/projectnoonnu/noonfonts_2206-02@1.0/ChosunCentennial.woff2') format('woff2'); font-weight: normal; font-style: normal; } *{ padding: 0; margin: 0; box-sizing: border-box; } html{ font-size: 10px; font-family: 'ChosunCentennial'; } nav{ background-color: white; } .nav-container{ padding: 1rem 0; display: flex; flex-direction: row; justify-content:space-between; align-items: center; } .nav-title{ font-size: 3rem; } .nav-contact{ font-size: 2.5rem; border: 0; background: none; cursor: pointer; font-family: inherit; } .category-title{ font-size: 3.5rem; } .category-item{ width: 24%; height: 5rem; background: none; border: none; font-family: inherit; font-size: 1.6rem; } .category-item:hover { color: orange; cursor: pointer; } .inner{ padding: 0 1.5rem; } @media all and (min-width: 1024px){ .inner{ max-width: 1024px; margin: 0 auto; } } /*카카오맵 css*/ body{ height: 100vh; } nav{ height: 59px; } main{ padding-top: 1.5rem; height: calc(100%-59px); display: flex; flex-direction: column; } #map{ flex-wrap: 1; width: 100%; height: 100px; }
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
.zip압축파일 제외한 나머지를 모두 삭제해도 되나요?
안녕하세요 🙂[1. 질문 챕터] : 섹션2-3 1분30초 [2. 질문 내용] : .zip압축파일 제외한 나머지를 모두 삭제해도 되나요? .Identifier .bin .log .jou tools 들을 삭제해도 되나요?그리고 설치영상이 두 개 올려져 있던데, 첫번째 영상만 봐도 상관없나요? (첫번째 영상만 따라했고 vivado &실행까지 정상적으로 됩니다) 그리고 mobaxterm다운로드 할때, 첫번째 영상에선 Portable edition을, 두번째 영상에선 Installer edition을 다운받으셨던데 둘 중 무엇을 설치해야하나요? [3. 시도했던 내용, 그렇게 생각하는 이유] :
-
미해결코딩테스트 합격자되기-알고리즘 개념
코딩 테스트 대비 자료의 49페이지 Tip에 대한 질문입니다.
데이터 양이 많지 않으나 데이터 간의 간격이 큰 경우에 데이터 값을 인덱스로 사용하면 Memory Exception이 발생한다고 했는데, 이 말은 인덱스로 사용된 값들이 차이가 커서 결국 배열이 쓸데없이 커지므로 제한된 메모리를 초과할 가능성이 많다는 의미인가요??즉, 1, 10000 이란 값이 있을때에 이 값들을 인덱스로 쓰면 10000 요소를 가진 배열로 만들어 지지만, 유효한 값은 단 2개( 1과 10000의 인덱스가 가리키는 요소 )만이 들어있게 되고, 이 값의 차이가 크면 메모리에 담을 수 없을 만큼의 크기로 커진다는 의미이므로 피해야 한다는 말로 이해가 됩니다만..그리고, 구조체를 사용하라는 말의 의미가 값을 하나의 구조체로 해서 연결 리스트로 연관 지으라는 의미로 받아들여도 되나요? 혹시 잘 못 알았다면 어떤 의미인지 설명해 주시면 감사하겠습니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
검은 화면
몇몇 강의가 검은 화면에서 목소리만 나오는데 왜이런건가요?
-
미해결
안녕하세요 Spring Batch의 트랜잭션 관련 질문이 있습니다.
Spring Batch에서 트랜잭션을 관리하기 위해 `PlatformTransactionManger`와 같은 트랜잭션 매니저를 사용하는 것으로 알고 있습니다. 각 Job의 Step, Tasklet이 완료 될 때마다 DB에 상태를 업데이트하고 Commit을 하는 것인지 혹은 다른 방식으로 DB에 현재 처리중인 JOB의 상태를 기록하는지 내부 동작에 대한 흐름이 궁금합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
31강 UserServiceV2 오류
31강에서 BookService 클래스에 강의와 똑같이 코드를 작성하였는데 실행하면 UserServiceV2 오류가 발생합니다.UserRepository의 Optional<User> 형식을 받지 못해서 생기는 오류인 것 같은데, 어떻게 수정해야 하나요?error: incompatible types: Optional<User> cannot be converted to UserUser user = userRepository.findByName(name);^UserServiceV2.java @Transactional public void deleteUser(String name) { //SELECT * FROM user WHERE name = ? User user = userRepository.findByName(name); if (user == null) { throw new IllegalArgumentException(); } userRepository.delete(user); }BookService.java@Transactional public void loanBook(BookLoanRequest request){ //1. 책 정보 가져오기 Book book = bookRepository.findByName(request.getBookName()).orElseThrow(IllegalArgumentException::new); //2. 대출 기록 정보 확인하여 대출 중인지 확인 //3. 대출 중이면 예외 발생 if(userLoanHistoryRepository.existsByBookNameAndIsReturn(book.getName(), false)){ throw new IllegalArgumentException("진작 대출되어 있는 책입니다."); } //4. 유저 정보 가져오기 User user = userRepository.findByName(request.getUserName()) .orElseThrow(IllegalArgumentException::new); //5. 유저 정보와 책 정보 기반 UserLoanHistory 저장 userLoanHistoryRepository.save(new UserLoanHistory(user.getId(), book.getName())); }UserRepository.javapackage com.group.libraryapp.domain.user; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface UserRepository extends JpaRepository<User, Long> { Optional<User> findByName(String name); }우선 오류를 없애기 위해 UserRepository에서 Optional을 빼고 null처리를 하도록 수정하였는데, 실행 시 오류는 없지만 웹UI로 테스트하면 서버 내부 오류가 발생했다고 뜹니다. 어떻게 수정해야 제대로 처리되는지 모르겠습니다. 추가로 이렇게 수정하였을 때, 이후 코드를 작성할 때 Optional 형식이 아니어서 발생하는 다른 오류가 없는지도 궁금합니다.UserRepository.javapackage com.group.libraryapp.domain.user; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface UserRepository extends JpaRepository<User, Long> { User findByName(String name); }BookService.java@Transactional public void loanBook(BookLoanRequest request){ //1. 책 정보 가져오기 Book book = bookRepository.findByName(request.getBookName()).orElseThrow(IllegalArgumentException::new); //2. 대출 기록 정보 확인하여 대출 중인지 확인 //3. 대출 중이면 예외 발생 if(userLoanHistoryRepository.existsByBookNameAndIsReturn(book.getName(), false)){ throw new IllegalArgumentException("진작 대출되어 있는 책입니다."); } //4. 유저 정보 가져오기 User user = userRepository.findByName(request.getUserName()); if(user == null){ throw new IllegalArgumentException(); } //5. 유저 정보와 책 정보 기반 UserLoanHistory 저장 userLoanHistoryRepository.save(new UserLoanHistory(user.getId(), book.getName())); }UserServiceV2.java @Transactional public void deleteUser(String name) { //SELECT * FROM user WHERE name = ? User user = userRepository.findByName(name); if (user == null) { throw new IllegalArgumentException(); } userRepository.delete(user); }