#request

질문 3
해시태그 없이 키워드만 일치하는 질문은 개수에 포함되지 않아요.

4달 전 · 익명 님의 질문

MacBook에서 Windows Docker 서버 접속 시 sudo가 필요한데 원인이 뭘까요?

문제 현재 Windows 데스크톱과 MacBook을 사용 중이며, 두 기기는 동일한 로컬 네트워크에 연결되어 있습니다. - 데스크톱(Windows): 유선 랜(Ethernet)으로 연결 - MacBook: Wi-Fi로 연결 Windows 데스크톱에서 Docker를 이용해 로컬 웹 서버(포트 9000)를 실행 중입니다. 컨테이너는 -p 9000:9000 옵션으로 실행되었으며, 0.0.0.0:9000에서 요청을 받을 수 있도록 설정되어 있습니다. 데스크톱에서는 Chrome를 통해 정상적으로 웹 인터페이스에 접속할 수 있습니다. 그러나 MacBook의 Chrome에서 접속하면 페이지를 찾을 수 없다고 합니다. 이상하게도,,, Chrome을 sudo로 실행하면 페이지가 정상적으로 로드됩니다. 추가 정보 - 데스크톱(Windows)과 MacBook은 같은 서브넷에 속해 있습니다. - 웹 서버는 0.0.0.0:9000에서 요청을 받을 수 있도록 설정되어 있어, 다른 기기에서도 접근 가능해야 합니다. - MacBook에서 nc -zv <데스크톱-IP> 9000을 실행하면 포트가 열려 있음을 확인했습니다. - Python 코드에서 requests.get("http://<데스크톱-IP>:9000")을 실행하면, 일반 실행 시 실패하지만 sudo로 실행하면 정상적으로 작동합니다. - MacBook에는 단 하나의 사용자 계정만 존재하며, 해당 계정은 관리자(Admin) 권한을 가지고 있습니다. - macOS 방화벽은 비활성화되어 있으며 (/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate로 확인), sudo pfctl -d로 pf 방화벽을 꺼도 문제가 해결되지 않았습니다. 현재까지 파악한 내용 sudo로 실행하면 정상적으로 동작하기 때문에, 현재 문제는 네트워크 연결 자체의 문제가 아니라 macOS의 보안 정책 또는 네트워크 제한과 관련된 것이 아닐까,, 생각하고 있습니다. 해결하고 싶은 질문 - 왜 Chrome을 sudo로 실행해야만 웹 서버에 접속할 수 있을까요? - 왜 일반 사용자 권한으로 실행한 Python의 requests.get() 요청이 차단되고, sudo를 사용해야만 정상적으로 동작할까요? - macOS에서 일반 사용자 프로세스의 네트워크 접근을 제한하는 정책이 있는 걸까요? 있다면 어떻게 해결할 수 있을까요? 스크립트에 모두 sudo를 붙이면 문제가 해결되긴 합니다만,, 명확한 원인이 궁금합니다. 혹시 비슷한 경험을 하신 적이 있는 분이 계시다면 조언 부탁드립니다! 혹은 힌트 키워드라도 던져주시면 감사하겠습니다!

개발자

#mac

#docker

#local-network

답변 0

댓글 0

조회 76

6달 전 · 박정환 님의 새로운 댓글

스프링부트 로컬 환경에서는 되지만, 배포 환경에서 404 에러가 발생합니다.

안녕하십니까 선배님들. 스프링부트 API 서버를 개발하고 배포하였는데 다음과 같은 문제가 발생하였습니다. 로컬 환경에서는 잘 작동하지만, 배포 환경에서 특정 POST 요청에서 404에러가 발생하는 문제였습니다. 해당 요청은 JSON을 반환하는 컨트롤러입니다. 서핑을 하던 중, Spring Security의 CSRF의 문제일 수도 있다고 하던데 저는 현재 Security를 사용하지도 않고 다른 POST 요청은 잘 응답하여 뭐가 원인인지 잘 모르겠습니다. 아래는 application.yaml과 Controller 코드입니다. 감사합니다. // application.yaml spring: application: name: tika servlet: multipart: max-file-size: 50MB max-request-size: 50MB

개발자

#스프링

#자바

답변 1

댓글 2

조회 81

8달 전 · 포크코딩 님의 새로운 답변

API 변경 시 가장 효과적인 처리 방법은 무엇인가요?

안녕하세요, API 변경 처리에 대해 여러분의 의견을 듣고 싶습니다. 현재 우리 프로젝트에서는 POST api/model 엔드포인트를 사용 중입니다. 이 API의 request body 구조에 큰 변화가 필요한 상황이 발생했을 때, 어떻게 처리하는 것이 가장 좋을까요? 제가 생각한 간단한 접근 방식은 다음과 같습니다: 1. api/model2라는 새로운 엔드포인트를 생성합니다. 2. 기존 api/model을 deprecated 처리합니다. 3. 프론트엔드에서 api/model2를 사용하도록 수정합니다. 4. 일정 기간 후 api/model을 제거합니다. 5. api/model2의 이름을 api/model로 변경합니다. 이런 방식이 일반적인가요? 아니면 다른 더 효과적인 방법이 있을까요?

개발자

#백엔드

#api

#협업

답변 1

댓글 0

추천해요 1

조회 41

일 년 전 · 태기 님의 질문

gpu노드에서 request,limit 수정 명령어

gpu노드에서 request,limit 수정하는 명령어 알려주세요

개발자

#데브옵스

#devops

#쿠버네티스

#kubernets

답변 0

댓글 0

보충이 필요해요 1

조회 45

일 년 전 · 태기 님의 질문

특정 gpu노드에 request,limit이 잘못표기되면 오류나나요?

gpu 노드에 describe로 확인해보니 request > limit으로 잡혀있고 overcommitted로 표기되는데 이 문제때문에 이 노드에 파드 재스케쥴링 및 삭제가 안되고 초기화 및 파드생성에 멈춰있습니다. 문제가 뭘까요?

개발자

#데브옵스

#devops

#쿠버네티스

#kuebernets

답변 0

댓글 0

보충이 필요해요 1

조회 18

일 년 전 · 김인후 님의 새로운 답변

spring security에서 JWT를 사용할 때 질문이 있습니다.

SecurityConfig에서 .requestMatchers(HttpMethod.GET, "/boards/*/comments").permitAll() 이런 식으로 허용을 해주고 JwtAuthorizationFilter에서 accessToken이 유효하지 않으면 response에 토큰에 문제가 생겼다는 에러 메세지를 리턴을 하게 해뒀습니다. GET /boards/*/comments 요청을 보내면 해당 게시물의 댓글들을 조회를 해올 때 좋아요를 누른 상태인지 누르지 않은 상태인지 구분을 할때 문제가 생겼습니다. 로그인을 한 사용자는 댓글들을 조회할 때 좋아요를 눌렀나 안눌렀나 확인을 해야하고 로그인을 하지 않은 사용자는 무조건 좋아요를 안 누른 상태로 해야되는데 JwtAuthorizationFilter에서 에러 메세지를 리턴을 하되면 로그인을 해야지만 조회가 되는 문제가 생기고 JwtAuthorizationFilter에서 에러 메세지를 리턴하는 코드를 빼자니 모든 Controller쪽에서 null체크를 해줘야 하고... 감을 못잡겠습니다ㅜ_ㅜ

개발자

#java

#spring

답변 1

댓글 0

조회 70

일 년 전 · 개발자A 님의 새로운 답변

다국어 변역 api사용 저장시 느린 속도 문제

DB에 정보 저장하는데요 ranslationResponse response = restTemplate.postForObject(TRANSLATION_ENDPOINT, request, TranslationResponse.class); api를 통해 영어 중국어 일본어로 변역해서 변역 내용 같이 DB에 저장 하려고 합니다. 그런데 저장할 때 문장이 길어지면 변역 시간이 느려저서 사용자쪽에서 많이 기다려야 하는 상황입니다. 기본 내용만 저장하고 파이널리문에서 번역해서 다시 저장하는 방법을 생각 해서 적용 해보았는데 브라우저에서 결과 받는 속도는 같았습니다.ㅠ 그렇다고 브라우저에서 ok 결과를 받은 후 번역을 비동기로 호출하는 것도 불필요한 비용 발생일 것 같고요 창을 먼저 꺼버리자니 오류 처리 못할 것 같구요 저장중 이라는 알림으로 처리 해야하는건지 사용자 입장에서 개선 하고 싶은데 방법을 잘 모르겠습니다. 혹시 해결방안 알고 계신분이 계시다면 조언 부탁드립니다.

개발자

#다국어-변역-api

#spring-boot

답변 1

댓글 0

조회 43

일 년 전 · 최용빈 님의 답변 업데이트

파이썬 오류 좀 고쳐주세요 ㅠㅠ

import time import requests import streamlit as st API_BASE_URL = "http://localhost:8000/qna" # Fastapi로 api 생성 def request_chat_api(user_message: str) -> str: url = API_BASE_URL resp = requests.post( url, json={ "user_message": user_message, }, ) resp = resp.json() print(resp) return resp["answer"] def init_streamlit(): st.set_page_config(page_title='Dr. KHU', page_icon='🩺') if "messages" not in st.session_state: st.session_state.messages = [{"role": "assistant", "content": "안녕하세요! Dr.seo입니다🩺"}] # Initialize chat history if "messages" not in st.session_state: st.session_state.messages = [] # Display chat messages from history on app rerun for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) def chat_main(): if message := st.chat_input(""): # Add user message to chat history st.session_state.messages.append({"role": "user", "content": message}) # Display user message in chat message container with st.chat_message("user"): st.markdown(message) # Display assistant response in chat message container assistant_response = request_chat_api(message) with st.chat_message("assistant"): message_placeholder = st.empty() full_response = "" for lines in assistant_response.split("\n"): for chunk in lines.split(): full_response += chunk + " " time.sleep(0.05) # Add a blinking cursor to simulate typing message_placeholder.markdown(full_response) full_response += "\n" message_placeholder.markdown(full_response) # Add assistant response to chat history st.session_state.messages.append( {"role": "assistant", "content": full_response} ) if __name__ == "__main__": init_streamlit() chat_main() 이 코드를 실행시키면 자꾸 AttributeError: st.session_state has no attribute "messages". Did you forget to initialize it? More info: https://docs.streamlit.io/library/advanced-features/session-state#initialization 라고 뜨네요..

개발자

#파이썬

#python

답변 2

댓글 1

보충이 필요해요 2

조회 351

일 년 전 · 김유진 님의 새로운 댓글

리액트에서 superagent를 활용해서 minio에 업로드하는 방법을 알려주세요 😂

제발 도와주세요 ㅜㅜㅜㅜㅜ 몇일동안 오류를 해결하지 못하고 있어요.. .. 리액트 웹에서 모바일 핸드폰으로 웹을 접속했을 경우, input을 통해서 사진을 업로드하거나 촬영한 이미지를 minio에 업로드 하고 싶은데, 아래 부분에서 계속 오류가 발생해서 도움을 요청해요 ㅠㅠ https://min.io/docs/minio/linux/developers/javascript/API.html#presignedPostPolicy 위 문서를 참고해서 코드를 작성했어요! [핸드폰으로 웹 접속 -> 사진 업로드/촬영 -> minio 업로드] 이 순서인데, minio에 이미지가 업로드가 되지 않고 계속 오류를 발생시켜요. superagent를 활용해서 minio에 업로드가 가능하다고, 위 문서를 참고해서 작성을 했는데, 계속 아래 에러 메시지를 전달받고 있어요ㅜㅜ 아래 에러를 게속 반환해요. <Error> <Code>MalformedPOSTRequest</Code> <Message>The body of your POST request is not well-formed multipart/form-data. (The name of the uploaded key is missing)</Message> <BucketName>bucket</BucketName> <Resource>/bucket</Resource> <RequestId>RequestId...</RequestId> <HostId>HostId...</HostId> </Error> f12 개발자 모드 페이로드 전달 데이터 bucket: 데이터 Content-Type: multipart/form-data x-amz-date: 날짜정보 x-amz-algorithm:데이터 x-amz-credential: 데이터 policy: 데이터 x-amz-signature: 데이터 file: (바이너리)

개발자

#react

#superagent

#typescript

답변 1

댓글 2

조회 77

일 년 전 · 프레드윰 님의 댓글 업데이트

오픈 api 사용 할 때 cors 에러 어떻게 해결하시나요?

공공데이터 포털에서 오픈 api를 사용하고 있는데 cors 에러가 떠서 해결하고 싶은데, 직접 서버를 건드릴 수 없어서 어떻게 해결해야 할지 모르겠습니다..ㅠㅠ 배포 이후에도 그대로 동작할 수 있는 방법을 찾고 있습니다! 오류 내용 : Access to fetch at '<endpoint url>' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. 현재 아래 사이트를 통해 막아보긴 했는데 중간중간 cors에러가 계속 뜨더라구요 https://allorigins.win/

개발자

#cors

#corserror

#openapi

#프론트엔드

답변 1

댓글 2

조회 153

일 년 전 · 익명 님의 질문

Next.js 에서 fluent-ffmpeg 사용 시 에러 해결 가능할까요?

Next.js 에서 puppeteer를 사용해서 특정 url에 접속하여 애니메이션을 png로 100장 정도 캡처하여 생성하고, fluent-ffmpeg를 사용해서 해당 png 이미지들을 mp4 영상으로 만들려고 하는데요. yarn add puppeteer fluent-ffmpeg @ffmpeg-installer/ffmpeg yarn add --dev @types/fluent-ffmpeg 위와 같이 라이브러리들을 설치했구요. 아래 page.tsx 파일에서 코드를 구현했는데요. dev로 실행해서 해당 페이지에 접속을 하면 아래와 같은 에러가 발생하는데요. 해결이 가능할까요?? 다른 라이브러리를 써야할지 구현한 코드가 문제가 있는지 모르겠네요. 도움 부탁드립니다!! # 에러 코드 # 1 of 1 error Next.js (14.2.3) Server Error Error: Cannot find module '/Users/.../animation-capture/node_modules/@ffmpeg-installer/darwin-arm64/package.json' This error happened while generating the page. Any console logs will be displayed in the terminal window. Call Stack webpackEmptyContext file:///Users/.../animation-capture/.next/server/app/capture/page.js (22:10) eval node_modules/@ffmpeg-installer/ffmpeg/index.js (40:27) (rsc)/./node_modules/@ffmpeg-installer/ffmpeg/index.js file:///Users/.../animation-capture/.next/server/vendor-chunks/@ffmpeg-installer.js (20:1) Next.js eval /./src/app/capture/page.tsx (rsc)/./src/app/capture/page.tsx file:///Users/.../animation-capture/.next/server/app/capture/page.js (286:1) Next.js # 코드 구현부 # import { NextApiRequest, NextApiResponse } from 'next'; import puppeteer from 'puppeteer'; import fs from 'fs'; import path from 'path'; import ffmpeg from 'fluent-ffmpeg'; import ffmpegInstaller from '@ffmpeg-installer/ffmpeg'; ffmpeg.setFfmpegPath(ffmpegInstaller.path); .... 중략.... const outputFilePath = path.resolve("./screenshots/video.mp4"); ffmpeg() .addInput(`${folderPath}/screenshot-%d.png`) .inputFPS(10) .output(outputFilePath) .on("end", () => { res.status(200).send(`Video created successfully at ${outputFilePath}`); }) .on("error", (err) => { console.error("Error generating video:", err); res.status(500).send("Failed to generate video"); }) .run(); } catch (error) { console.error("Error capturing screenshots:", error); res.status(500).send("Failed to capture screenshots"); }

개발자

#next.js

#fluent-ffmpeg

#mp4

답변 0

댓글 0

조회 101

일 년 전 · 김태우 님의 새로운 답변

git 협업중 파일 날라감…

팀원들과 깃 브랜치를 나누어 개발하고 develop 브랜치에 올리는 작업을 하고 있습니다(이클립스 사용) develop에 pull request 를 바로 하려다가 팀원이 본인은 pull request 했는데 충돌난다하길래 그럼 저도 충돌이 나겠다 싶어서 제 프로젝트의 .metedate폴더를 다른곳으로 옮기고 .metadata폴더가 없는체로 develop브랜치로 merge 했습니다 그런데 다른 폴더에서 제가 develop으로 올린 프로젝트를 pull 해서 열어보니 프로젝트가 안불러와지더라구요ㅜㅜㅜ 이거 혹시 해결방법이 있을까요… 구글에 찾아보니 .metadata 지우고 push하길래 따라했는데 이러면 안되는거였나요,,ㅠㅠㅠ 혹시 조금이라도 아시는분 있으시면 조언좀 부탁드립니다ㅜㅜ

개발자

#깃

#github

#git

#깃허브

#이클립스

답변 1

댓글 0

조회 139

일 년 전 · 용용 님의 답변 업데이트

issue 생성 없이 pullrequest

정말 잘 사용하고 있는 라이브러리의 readme 의 예시가 실제 사용예와 맞지 않는 것을 발견하여 수정을 제안하고자 합니다. issue로 소통 및 수정 제안 없이 바로 pull request를 남기면 해당 프로젝트 소유자에게 매너가 아닌 것 같아 이슈를 먼저 남겨야 할지 궁금하여 질문드립니다. 읽어주셔서 감사합니다!

개발자

#github

답변 1

댓글 0

조회 58

일 년 전 · 익명 님의 질문

React Spring 배포과정 중 의문의 404

react + spring boot로 진행하는 프로젝트가 현재 cloudtype이라는 플랫폼으로 배포중에 있습니다. 문제는 정확한 서버주소를 호출하는 것 같음에 불구하고 404 에러가 발생하여 해결하지 못하고 있습니다. 현재, 아래 사진과 같은 로그가 클라이언트, 서버에 각각 발생합니다. 서버에서는 다음과 같이 구성되어있고 @RestController @RequestMapping("/v1/login") @RequiredArgsConstructor @CrossOrigin(origins = "https://web-secondchance-front-bug-1cupyg2klvnmgdft.sel5.cloudtype.app") public class KakaoController { private final KakaoService kakaoService; private final Logger LOGGER = LoggerFactory.getLogger(KakaoController.class); @PostMapping("/kakao-login") public ResponseEntity<UserDto> kakaoLogin(@RequestBody KakaoLoginDto kakaoLoginDto) { String code = kakaoLoginDto.getCode(); LOGGER.info("Get Code from FrontEnd : {}", code); LOGGER.info("Request getAccessToken()"); kakaoLoginDto = kakaoService.getAccessToken(code); String accessToken = kakaoLoginDto.getAccess_token(); LOGGER.info("access_token : {}", accessToken); if(accessToken != null){ UserDto userDto = kakaoService.getUserInfo(accessToken); return ResponseEntity.ok(userDto); } else { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); } // accessToken이 null임에도 getUserInfo를 부름. // 안부르게 끔 위의 방법을 포함하여 // 1. map에서 true, false를 사용하여 해봄 // 2. getAccessToken을 map객체로 반환하게끔 하여 accessToken이 있으면 true, 없으면 false로 하여 isEmpty 함수로 체크하여 부름 // 위의 두 방법 전부 소용없음. 그냥 getUserInfo를 부름. } @PostMapping("/kakao-logout") public String kakaoLogout(){ return "ok"; } } 현재 리액트에서는 다음과 같이 axios.post로 접근하여 code를 전달합니다. 무엇이 문제일까요?

개발자

#react

#spring-boot

#배포

#404

답변 0

댓글 0

추천해요 1

조회 162

일 년 전 · 임성규 님의 질문

Next.js의 SSG와 react-query의 useSuspenseQuery

Next.js v14의 페이지 라우터 및 react-query v5의 useSuspenseQuery를 사용하여 Suspense를 사용할 때 페이지 컴포넌트에서 getStaticProps를 사용하지 않아도 SSG 빌드 타임에서 API request 하는 현상이 발생해서 찾아보니 useSuspenseQuery가 컴포넌트 렌더링 시점에 데이터 로딩하도록 설계가 되어 있기 때문에 빌드 타임에서 HTML을 만들 때 결국 API request 하게 되는 것이라고 이해했었는데 제가 이해한 부분이 맞을까요? react-query(tanstack-query)나 next.js의 공식문서에는 그러한 내용을 찾기가 어려워서 정확한 정보인지 알고 싶습니다!

개발자

#next.js

#react-query

#react

답변 0

댓글 0

조회 273

일 년 전 · 허니 님의 새로운 답변

리액트 로그인질문..

react + 파이어베이스만 써오다가 react + express 조합을 오랜만에 사용중인데 긴가민가한점이있어서 질문드립니다 ㅠㅠ import axios from 'axios'; const instance = axios.create({ baseURL: process.env.REACT_APP_API_BASE_URL, timeout: 2500, headers: { 'Content-Type': 'application/json', withCredential: true, }, }); instance.interceptors.request.use( (config) => { const token = localStorage.getItem('token'); if (token) { config.headers['Authorization'] = token; } else { delete config.headers['Authorization']; } return config; }, (error) => { return Promise.reject(error); } ); export default instance; 이렇게 인터셉터를주어서, 요청할 때마다 토큰을 전달하고있습니다. 그리고 프라이빗 라우터 + 유저정보 인증 훅을 사용해서 로그인사용자만 접근가능하게 페이지를 설정해줬습니다. 근데 질문 1. 네트워크탭 Request Headers 에서 Authorization을 확인해보면 토큰정보가 그대로 노출되고있는데요 원래 이렇게되나요? 질문 2. Bearer + token 이렇게 보내는 경우는 포스트맨이나 이런걸로 테스트할때만 Bearer 을 붙여서 보내주면될까요? 질문 3. 검색 키워드가 생각이안나서 질문으로 올립니다. 아주 옛날에는 (4년전) App.tsx에서 if(localstorage.token){ setAuthToekn(token); } 이런식으로 하고, setAuthToken함수는 import axios from 'axios'; const setAuthToken = (token) => { if (token) { axios.defaults.headers.common['x-auth-token'] = token; } else { delete axios.defaults.headers.common['x-auth-token']; } }; export default setAuthToken; 이런식으로 되어있었는데요, 요즘은 제가 짠 코드처럼 axios.인터셉터 식으로 하는게 맞나요? 질문 4. 그럼 요즘도 회원가입/로그인시 로컬스토리지에 유저 정보 (닉네임 이름 이메일, 토큰정보)만 저장해두고 로그인하면, 로그인버튼이 회원 닉네임으로 변하게 해준다던가.. 이런식으로 분기처리를 하나요? ( 저는 이렇게하고있어서요.. 로딩처리를 줄수도있겠지만 깜빡거리는게 싫고, 또 로컬스토리지로안하면 로그인버튼으로 잠깐바꼇다가 회원닉네임이 표시되더라구요) 질문5. (질문4와 이어집니다.) 만약 질문4처럼하면 사용자가 사이트에 계속 로그인중인데, 이 토큰이 끝났는지 판단하려는 코드를 따로 작성해줘야할까요? 예를들면, App.tsx에 서버 api/auth같은거에 요청보내는 로직을 작성해서, 토큰만보내서 유효한 토큰인지 아닌지, 유효하지않은토큰이면 에러를 리턴시켜준다던가, 리프레쉬토큰을 발급시켜서 연장시켜준다던가 이런식으로하면될까요? 마지막으로 질문이 좀 많고 중구난방인데 죄송스럽고 조심스럽네요..

개발자

#react

#login

#register

#local-storage

#jwt

답변 1

댓글 0

조회 120

일 년 전 · 익명 님의 질문

nestJS에서의 passport-kakao

안녕하세요, 신입 백엔드 개발자입니다. 다름이 아니라, 사내 프로젝트 진행 중 passport를 활용한 kakao 로그인을 진행하게 되었는데, 저희 앱 구조가 여러 개의 앱이 존재하고 이 앱들은 하나의 백엔드 서버를 바라보고 있습니다. 이 때, 각 앱들은 appKey로 분류가 되는데 passport의 kakao strategy를 설정하려고 하니까 아래 코드와 같이, super() 내의 clientID는 한 번 밖에 설정할 수 없게 되어있는 것을 확인했습니다. 이를 user가 request 할 때 각각의 appKey를 들고, 이 appKey에 맞는 clientID를 설정해주기 위한 방법이 있을까요?

개발자

#nest.js

#passport

#oauth

#kakao-login

답변 0

댓글 0

조회 89

일 년 전 · ㄱㅎㅁ 님의 새로운 답변

깃허브 Pull Request 시 이전 PR의 커밋들이 중복되서 올라가는 문제

안녕하세요. 검색을 해봐도 해결책을 찾지 못해서 Github PR기능을 사용하다가 생긴 문제점에 대해 질문좀 드리려합니다. github pr을 생성할 때마다 아래 사진과 같이 이전 pr에 올라갔던 커밋들이 중첩되서 같이 올라가는데 어떻게 해결해야할까요??

개발자

#github

#git

답변 1

댓글 0

조회 559

일 년 전 · 장성호 님의 답변 업데이트

docker container 내부의 spring boot 서버에서 client 의 ip 주소 알아내는 방법

안녕하세요 지금 만들고 있는 서비스가 설치형 어플리케이션에, 리눅스 파일 시스템을 사용해야해서 처음부터 docker 환경으로 spring boot 서버 환경을 세팅하고 시작했습니다. 순조롭게 진행하다가 한 부분에서 막히게 되었는데요, spring boot 서버 내에서 현재 요청한 클라이언트의 ip를 기존에 등록한 아이피와 비교하여 다른 아이피일 경우 요청을 거부하는 보안 로직을 구현해야하는 부분입니다. 문제가 되는 부분은 요청한 클라이언트의 ip를 알아내는 부분인데요 원래 하던것과 같이 HttpServletRequest 객체에서 getRemoteAddr() 메소드를 호출하여 아이피를 출력해보니 클라이언트의 아이피가 아닌 다른 아이피가 잡히는겁니다. 정황상 host 에서 컨테이너로 포트포워딩을 하다보니 본래 클라이언트의 아이피가 아니라 Docker 네트워크의 아이피가 나온 것 같습니다. 혹시라도 포워딩 헤더가 있을까 하여 헤더를 까봤지만 헤더에 있지도 않더라구요.. GPT에게 자문을 구해보니 두가지를 추천해주더군요. 1. container의 network를 host로 설정하라 이건 알아보니 리눅스에서만 작동하는거랍니다 제 어플리케이션은 리눅스에 설치될수도 있고 윈도우에 설치될 수도 있는데 말이죠.. 2. Nginx 같은 프록시 서버를 둬라 호스트에 프록시를 둬서 본래의 아이피를 헤더에 추가하든 어떻게든 해서 본래의 아이피를 스프링에 전달해주라는 말로 이해했습니다. 플랫폼 독립적으로 설치하기 위해서 Docker를 채용했는데 호스트에 추가적인 서버를 설치하라뇨… 이것도 좀 아닌 것 같습니다.. 막막합니다… 괜히 Docker 들여왔나 싶기도 하고, 보안 인증때문에 이 기능을 지원 안할수도 없고.. 도와주십쇼..!

개발자

#docker

#spring-boot

답변 1

댓글 5

조회 1,281

일 년 전 · 장성호 님의 답변 업데이트

여기서 의존성 주입이 어떻게 이뤄질 수 있는 지 궁금합니다.

안녕하세요 이제 막 스프링부트 공부를 시작한 3학년 학생입니다. 다름이 아니라 스프링부트를 공부하던 중 아래와 같은 의문이 생겨 질문드립니다. @SpringBootApplication @ConfigurationPropertiesScan public class SburRestDemoApplication { public static void main(String[] args) { SpringApplication.run(SburRestDemoApplication.class, args); } } @ConfigurationProperties(prefix = "greeting") class Greeting { private String name; private String coffee; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCoffee() { return coffee; } public void setCoffee(String coffee) { this.coffee = coffee; } } 제가 이해하기로는 @Component(service, repository, controller 등) 어노테이션이 클래스에 부착되어 있어야 해당 클래스의 객체를 스프링 컨테이너에 의해 의존성 주입을 할 수 있다고 알고 있는데, @ConfigurationProperties 어노테이션은 내부를 아무리 찾아도 위에서 언급한 어노테이션을 가지고 있지 않았습니다. 하지만, @RestController @RequestMapping("/greeting") class GreetingController { private final Greeting greeting; public GreetingController(Greeting greeting) { this.greeting = greeting; } @GetMapping String getGreeting() { return greeting.getName(); } @GetMapping("/coffee") String getNameAndCoffee() { return greeting.getCoffee(); } } @RestController 에 의해(@RestController는 내부에 controller 어노테이션이 있더라구요) 스프링 컨테이너로부터 의존성 주입을 받을 수 있는 GreetingController는 greeting 객체를 받아서 생성자 메서드를 실행하므로 스프링 컨테이너에서 Greeting 클래스의 객체를 의존성 주입 받을 수 있는 지 확인해보고 위에서 언급한대로 Greeting은 등록되어 있지 않으므로 오류가 날거라 예상했습니다. 하지만, 아무런 문제없이 자동으로 public GreetingController(Greeting greeting) { this.greeting = greeting; } greeting 객체가 주입이 되었고 실행되었습니다. 제가 이해한 내용이 어디서 틀렸는 지 궁금합니다.

개발자

#spring-boot

#java

답변 2

댓글 0

조회 629

일 년 전 · ㄱㅎㅁ 님의 새로운 답변

로드밸런싱 분산처리 질문드려요

안녕하세요 로드밸런싱으로 분산처리에 대해 궁금한점이 생겨 질문드립니다. 1.흔히 분산처리란 실제 서버를 여러대에 어플리케이션을 구축해놓고 클라이언트에서 Request를 받는 컴퓨터가 각각 서버에서 트래픽을 분산하는걸로 알고있습니다. 그러면. 혹시 서버 한대에 도커이미지 여러개로 두고 분산처리 하는 방식은 어떤가요? 트래픽이 L4 스위치를 타고 들어오는 시점이고 어차피 트래픽을 감당하는 컴퓨터는 한대인데 가상화 하더라도 같은 NIC을 사용할텐데 이게 과연 효율이 좋은지 궁금합니다. 2.그리고 보통 여러대에 서버로 로드밸런싱 하는거말고 단일서버에도 그렇게 구축하는 사례가있을까요? 트래픽이 갑작스럽게 발생하는 서비스 오픈이 얼마남지않고 처음 겪는 문제라 걱정이 많습니다. 조언부탁드립니다 선배님들

개발자

#분산처리

#springboot

#docker

#k8s

#로드밸런싱

답변 1

댓글 0

조회 69

일 년 전 · 이양일 님의 답변 업데이트

노드 https질문

안녀하세요. 프로젝트를 진행중에 애러를 만났는데 혹시 알고계신분 답변해주시면 정말 감사합니다. 리액트로 프론트를 만들고 node+express 를 웹서버 역할로 프록시 설정을 했습니다. 그리고 ssl 인증을하여 브라우저에 https로 접속 가능하게 하였습니다. 문제는 여기부터인데,, 기존 통신 api가 http로 되어있었는데 그런데 백앤드 개발자분이 api도 https로 바꾸셨다고 하여 https 통신을 하니 Error occurred while proxying request happyman:11111 to https://happyman:11111/ [EPROTO] (https://nodejs.org/api/errors.html#errors_common_system_errors) 라는 오류가 났습니다. 또 신기한건 기존 http로 설정된 api 통신은 되네요? 인터넷이서 하라는거 대부분 했는데 잘 안되네요ㅠㅠ

개발자

#react

#node

#express

답변 1

댓글 1

추천해요 1

조회 461

일 년 전 · 이희수 님의 질문

Spring 파일 업로드 용량제한

안녕하세요 백엔드 개발자를 꿈꾸며 공부중인 학생입니다. 프로젝트 제작중에 파일 업로드 부분을 공부하고있는데 업로드 파일 사이즈 제한 방법으로 application.properties 에서 spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB 이런식으로 용량을 바꿔주는식으로 해결하는 방식이 거의 주로 나오더라고요.. 이 방식으로는 지정한 값보다 큰 파일 업로드에러를 막을수 없다고 생각이 들었습니다. 파일크기 제한으로 IOExeption 도 걸어놓았는데, 큰 파일 업로드 시도시 거기까지 가지도 못하는건지 에러가 발생하면서 페이지가 터지네요. 아무리 찾아봐도 다른 방식은 잘 보이지않는데 실무에서는 업로드 제한이 어떤 방식으로 이루어지는지 궁금합니다! ㅠㅠ

개발자

#spring

#java

답변 0

댓글 0

조회 351

일 년 전 · 백승훈 님의 댓글 업데이트

Nginx, Express 연결 후 프론트에서 이미지 파일 전송시 408 Error

안녕하세요. 혼자 해보던 도중 도저히 해결이 되지 않아 문의드립니다. - 서버 설계 - 현재 저는 Express앱을 AWS EC2 인스턴스에 NGINX를 설치한 후 proxy_pass에 express앱이 구동중인 port를 연결하여 사용하고 있습니다. 이 과정에서 ALB를 통해 ACM을 연동하여 HTTPS 프로토콜이 사용가능하게 설정까지 하였습니다. 이미지 파일업로드는 multer-s3를 이용해 s3버킷과 연결하여 업로드 되는 방식입니다. - 문제상황 - 로그인과 기본적인 CRUD는 문제없이 되는데, 프론트에서 이미지 파일(multipart/form-data)을 서버로 전송하면 504 오류가 출력됩니다. 1. nginx의 access.log에는 해당 uri의 상태코드가 408이라 출력됩니다. 2. nginx의 error.log에는 readv() failed (104: Connection reset by peer) while reading upstream가 출력됩니다. 3. 개발자도구의 console창에 'server의 이미지 업로드 uri' from origin '프론트 도메인'이 has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 이라 출력됩니다. 위 오류를 해결해보기 위해 시도해본 것은 아래와 같습니다 1. NGINX의 proxy_connect_timeout, proxy_send_timeout, proxy_read_timeout, send_timeout을 600으로 설정, client_max_body_size를 500M으로 설정 2. ALB의 유휴제한시간 600 설정 3. Express 앱에 app.set('trust proxy', true); 추가 4. Express-session에 app.use(session({proxy:true})) 추가 5. body-parser에 app.use(bodyParser.json({limit: '1000mb'})); 추가 및 app.use(bodyParser.urlencoded({limit: '1000mb', extended: true})); 추가 6. 업로드되는 uri의 미들웨어에 (req, res, next) => { req.setTimeout(1000000); next(); } 추가 7. upload.single()미들웨어를 주석처리 후 req.file 출력 시도 아직도 해결을 하지 못하였습니다 ㅜㅜ 연휴임에도 도와주시면 너무 감사하겠습니다..

개발자

#aws

#alb

#nginx

#express

#ec2

답변 2

댓글 4

조회 318

일 년 전 · 다형 님의 답변 업데이트

데이터 join후 어디에 담으시나요?

안녕하세요 join한 결과를 repository를 통해 받아올때 다들 어떻게 하시나요?? 어떤 방법을 써야 하는지 모르겠어서 선배님들의 의견과 다른 회사에서는 어떻게 하는지 알고 싶어서 질문 드립니다~ 제가 알기로는 domain은 db테이블과 1대1관계를 가져야 한다?, dto는 request와 response시에만 사용하는것? 으로 알고 있습니다 Mybatis를 통해 두 테이블을 join할때 (예를 들어 게시판 상세페이지에 접속할때 게시판테이블의 정보와 업로드된 파일을 관리하는 테이블의 데이터를 함께 조회함) 그 데이터를 어디에 담아서 repository를 통해 리턴하면 될까요..? 게시판 domain에 파일 정보를 추가해서 조인한 데이터를 담자니 domain이 db와 1대 1관계를 깨는것 같고 dto에 바로 담자니 dto와 domain의 변환 시점이 있는데 규약(?)을 무시하는것 같고 브릿지 테이블을 만드는것도 아닌것 같고.. 회사에서도 여쭤볼 분이 마땅치 않아서 궁금증을 여쭤봅니다ㅜㅜㅜㅜ

개발자

#join

#dto

#domain

#mybatis

답변 2

댓글 0

조회 260

일 년 전 · 민 님의 질문

플러터 질문. Futuer 및 출

locate.dart를 만들어서 import 'package:geolocator/geolocator.dart'; class Locate{ Future<List<double>> location() async { List<double> m_l = []; // 위치 권한 요청 LocationPermission permission = await Geolocator.requestPermission(); // 현재 위치 가져오기 Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high); // 위치 정보 리스트에 추가 m_l.add(position.longitude); m_l.add(position.latitude); return m_l; // 위치 정보를 포함한 리스트 반환 } Future<List<double>> get_loc() async { // 위치 정보를 가져오기 List<double> location = await this.location(); // 수정된 부분 return location; // 위치 정보를 포함한 리스트 반환 } } 를 작성하였구요 main_screen.dart 라는 파일에서 함수를 생성해서 my_locate() async{ Locate locator = Locate(); // 위치 정보 가져오기 List<double> location = await locator.get_loc(); } @override Widget build(BuildContext context) { // 함수 실행은 //요 부분에서 return Scaffold( 이 부분 안에서 실행시킬려고 하는데 자꾸 오류가 걸리네요. 방법 알려주실 분 있나요?

개발자

#flutter

#dart

답변 0

댓글 0

보충이 필요해요 1

조회 46

일 년 전 · 장훈 님의 새로운 댓글

AWS 로드밸런서 504 오류

안녕하세요. 혼자 해보다가 도저히 해결이 되지않아 도움을 구하고자 글을 작성합니다. Express로 구축한 서버를 배포하기위해 AWS EC2를 이용해 ubuntu 인스턴스를 생성한 후 Nginx를 인스턴스 내에 설치하고 Express를 pm2로 구동한 후 Nginx와 proxy를 연결하여 정상적으로 작동됨을 확인했습니다. (Curl 확인 및 퍼블릭 ip주소 접근) 그런데 ACM을 통해 발급받은 SSL인증서를 연동하여 HTTPS연결이 가능하게하려고 로드밸런서를 생성하였는데 cdn접속시 504 오류가 나옵니다. 또, 대상그룹도 아래 사진과 같이 Unhealthy, Request timed out이라 나옵니다 (인스턴스 퍼블릭 IP주소는 정상적으로 접근이 가능함) 어떻게해야 ssl인증서를 연동하여 https연결이 가능하게 할까요 ㅜㅜ 제발 살려주세요 12시간 넘게 삽질중입니다.ㅑ

개발자

#ec2

#express

#nginx

#https

#ubuntu

답변 3

댓글 13

조회 820

일 년 전 · 권수경 님의 질문

[node.js] 세션을 이용한 로그인 구현 중 브라우저 쿠키의 maxAge 초기화 안 되는 문제 발생

Node.js(v18.17.0) + TypeScript로 개발을 진행하고 있습니다. express 로 서버를 구축했고, express-session , session-file-store 라이브러리를 사용해서 로그인 기능을 구현했습니다. 제가 원하는 것은 세션 만료 시간을 연장하는 기능을 만드는 것인데... 서버에서는 세션 쿠키 만료 시간이 재설정(초기화)가 되는데 브라우저에 저장된 쿠키 만료 시간은 그대로인 상태라 연장이 되지 않습니다. 처음 제 코드는 이렇습니다. ```ts export const extendSession = async (req: Request, res: Response) => { req.session.resetMaxAge(); res.json({ success: true, message: '세션 연장 성공', expiredTime: req.session.cookie.expires.getTime(), }); }; ``` 이런 식으로 resetMaxAge() 함수를 통해서 만료 시간을 연장할 수 있을거라 생각했습니다. (트라이캐치문은 생략하였습니다.) 콘솔에 값을 확인해봤을 때에도 연장이 잘 된 것으로 보이는데 브라우저에 저장된 쿠키의 만료 시간을 확인해보면 최초의 쿠키 값 그대로였습니다. 이를 해결하기 위해서 만료 시간을 따로 정해서 줘보기도 했습니다. `req.session.cookie.maxAge = 3600000;` 하지만 마찬가지로 세션 쿠키의 만료 시간은 바뀌지만 브라우저에 저장된 쿠키의 expires가 변하지 않았습니다. 따로 헤더를 줘보아도 새로운 쿠키가 생성될 뿐 해결책이 되지 않았습니다. `res.setHeader('Set-Cookie', 'Max-Age=3600000')` express-session 미들웨어가 자동으로 set-cookie 헤더를 설정해주어서 제가 여기에 어떻게 접근할 수 있을지 모르겠습니다. 브라우저의 쿠키가 초기화 적용을 받지 못하는 것이 문제인 것 같은데... 원인은 대충 알 것 같으면서 해결책을 모르겠습니다. session 설정은 이렇습니다! ```ts app.use( session({ secret: process.env.SESSION_SECRET_KEY, resave: false, saveUninitialized: false, cookie: { sameSite: 'lax', secure: false, httpOnly: true, maxAge: 1000 * 60 * 5, }, store: new FileStore({ reapInterval: 3000, }), }), ); ```

개발자

#node.js

#express

#express-session

#session

#cookie

답변 0

댓글 0

조회 193

일 년 전 · 이승훈 님의 질문

리액트 재사용 에러 처리 질문 있습니다

import해서 getAccessToken와 loginVerification를 사용중입니다. 그리고 이 코드를 다른 곳에서 import해서 ----중략---- try { const responseData = await sendApiRequest( apiUrl , { --생략-- }, 'POST'); ----Data(responseData.data); } catch (error) { ----중략---- 으로 import해서 사용 중입니다. 에러에 대한 처리 방법이 제대로 되었나요?

개발자

#react

답변 0

댓글 0

조회 49

일 년 전 · 조용구 님의 답변 업데이트

React lazy에 대해 질문드려요

안녕하세요 프론트엔드를 공부하고 있는 초보 개발자입니다 제 사이드 프로젝트 App.js에는 총 13개의 페이지를 Routes안에서 처리해주고 있습니다 리엑트 공식문서를 보고 따라해봤는데 콘솔 네트워크 탭에서 봐도 초기 로딩속도는 약 2.2~2.6초 였습니다. 이걸 전부 lazy로 바꾸니 확실히 1.3~1.47초가 나오더라구요 여기서 궁금한 점이 있습니다 1. 초기 로딩 속도를 줄이긴했는데 더 많은걸 request하고 있더라구요 lazy 전에는 네트워크 요청 쿼리랑 이미지 리소스가 떴다고 하면 lazy 후에는 뭔가 그 패키지들의 이름이 쫘르륵 나오면서 17개 였던게 27개가 됐어요 근데 속도는 더 잘나와요 이게 맞는건가요 ? 2 . 메인페이지에서 굳이 상세 페이지나 다른 페이지를 초기에 받아오지않아서 초기 로딩 속도를 줄여주는건 알았는데 반대로 사용자가 다른 페이지에 갈때마다 그 페이지를 다시 받아와야하는걸로 알고 있습니다 그 부분은 로딩 스피너로 구현을 해놨는데 프로젝트 규모에 따라서 lazy를 해주고 안해주고의 차이인가요?

개발자

#react

답변 2

댓글 0

조회 215