#파일

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

12시간 전 · 익명 님의 질문

스프링부트 레이어드 아키텍쳐는 어떤 방식을 권장/선호 하나요?예시있습니다!

전형적인 걸로는 1. Controller > Service > ServiceImpl > Dao > DaoImpl(xml 호출) 이러한 방식이 있습니다. 이번에 변경을 위하여 몇가지를 생각해보았는데 2. Controller > Service > ServiceImpl(mapper 호출 + 비즈니스 로직) 3. Controller > Service > ServiceImpl(Dao 호출 + 비즈니스 로직) + Dao(mapper 호출) 이렇게 2개를 생각하고 있습니다 . 2번의 경우는 dao역할과 비즈니스 로직이 전부 serviceImpl에 들어가있다보니 gpt도 권장하지 않는 방식이고 저도 마음에 잘 들진 않는데 파일이나 소스의 양이 줄어든다는 장점이 있긴 해보입니다. 솔직히 Controller > Service > ServiceImpl > Dao > DaoImpl 처럼 극단적으로 계층을 나누는 것도 생각해보았는데 이렇게 극단적인 것보다는 3번이 나아보이긴 합니다. 다들 몇 번을 권장하나요? 참고로 개인프로젝트입니다! 기존엔 Controller > Service > ServiceImpl > Dao > DaoImpl(sqlSession.~ 호출) 방식을 사용했습니다. 안정성을 위하여 mapper 방식으로 변경할 겸 구조도 변경하는 게 나아보여 질문드립니다! 한가지더, Dao나 DaoImpl 명칭을 Repository.java, RepositoryImpl.java 로 변경하는 거에 대해선 어떻게 생각하시나요?

개발자

#스프링부트

#구조

#레이어드-아키텍처

답변 0

댓글 0

조회 13

4일 전 · 이상래 님의 새로운 답변

3년차 프론트엔드 개발자입니다 이직 관련 고민으로 조언 부탁 드립니다😭

안녕하세요! 3년차 프론트엔드 개발자 입니다! 요즘 원티드로 서류를 100개 정도 넣었는데 1개만 서류가 붙고 다 떨어졌어요...(너무 창피하지만요..ㅠㅠ) 그래서 이력서가 문제인지 아니면 추가로 뭔갈 제출해야하는지 너무너무 고민입니다.. 주로 원티드에 지원할때는 원티드 이력서와 직접 작성한 이력서 pdf파일을 제출하는데요 pdf에는 깃허브 주소와 진행한 사이드 프로젝트의 배포 주소, 레포지토리 주소를 올립니다 리드미에는 프로젝트 소개 기간 기술 화면설명 등등을 적어두었구요 혹시 뭔가 추가로 더 필요한게 있을까요? 아니면 이력서가 문제일까요? ㅠㅠ 혹시 가능하시다면 이력서를 봐주실수있는지도 여쭙고싶어요.. 말씀해주시면 이력서 보내드리도록 하겠습니다..! 긴글 읽어주셔서 감사합니다 좋은 하루 되세요!

개발자

#이직

#이력서

#취업

답변 2

댓글 0

조회 97

5일 전 · 포크코딩 님의 새로운 답변

타입스크립트 변경점이 리액트에 미치는 영향이 궁금합니다

타입스크립트가 컴파일러를 Go로 재작성하면서 약 10배 빨라진 성능으로 화제가 되고 있다는걸 들었는데용 이 점이 리액트에서 타입스크립트를 사용할때도 어떤 영향이 있을지 궁금한데 현직자분들은 어떻게 생각하시나 궁금합니다

개발자

#typescript

#react

답변 1

댓글 0

추천해요 1

조회 33

9일 전 · 해치 님의 질문

컴파일러 구성 공부

안녕하세요 백엔드 취업을 목표로 하는 비전공자 대학생입니다 컴공을 부전공하고 있습니다 컴파일러 구성이라는 과목을 이번에 수강신청하였는데 본전공 학생들이 잘 안 듣더군요 실질적으로 백엔드 개발자에게 있어서 컴파일러에 대한 지식이 어떤 유의미한 도움이 될지 궁금합니다

개발자

#컴파일러

#컴파일러구성

#비전공자

#백엔드

답변 0

댓글 0

조회 19

한 달 전 · Jin 님의 답변 업데이트

개발자님들 궁금한게 있습니다!

안녕하세요 전 고등학생인데요 궁금한게 하나 있습니다 제가 코딩을 배운지 얼마 안되서 실력도 더 키워보고 싶어서 친구와 프로그램을 하나 만들어보려고 하는데요 배운지 얼마 안된 상태라 하나의 파일을 혼자만의 힘으로 작업하기엔 어려움이 있어서 파일 하나하나 친구와 얘기해보며 만들어가고 있습니다 근데 실시간으로 같이 작업 할수있는건 유료라서 조금 부담이 되서 지금은 이메일로 보내서 수정하고 받아오는 방식으로 작업 하고있는데 이 방법은 너무 시간이 많이 걸리고 비효율 적이더라구요 그래서 실시간으로 동시에 작업할수 있는 무료 편집기를 인터넷에 찾아봤는데 다른분께서 동시에 같은 파일을 작업해야할 일이 정말 드물다고 필요 없는 서비스를 무료로 해주는 업체는 없을거라고 해서요 저희는 배운지 얼마 안되서 같이 하지만 다른분들은 동시에 작업하는 경우가 아예 없나요??

개발자

#코딩초보

답변 1

댓글 0

조회 67

2달 전 · 문종호 님의 새로운 답변

스프링부트 배포 root 와 유저

우분투 서버를 하나만들어서 배포를 하려고합니다. aws는 아니고 자체적으로 os를 설치해서 이용하게되었는데 root에서 jar파일을 nohup & 으로 백그라운드 실행시켰는데 root가 로그아웃을 하니 프로젝트도 같이 다운됩니다. 여러가지 시나리오를 해봤는데 왜이러는건지 어떻게해야 실행시킨 프로젝트를 유지할수있을까요? 시도해본 시나리오 1. 사용자 user 와 root가 동시에 접속해서 duser가 프로젝트를 실행시키고 duser가 접속을 종료시 - 프로젝트 유지 - root가 로그아웃하면 프로젝트가 내려갑니다 2. 사용자가 먼저 접속해서 프로젝트를 백그라운드로 실행시킨후 root가 이후에 접속했다가 로그아웃한경우 - 프로젝트 유지 3. root 로 접속해서 user로 변경후 프로젝트 실행시 user에서 root로 변경했을때는 프로젝트가 유지되고 root를 로그아웃하면 프로젝트도 종료됩니다. 어떻게 접속했다가 로그아웃해도 프로젝트가 내려가지않게 하고싶습니다.

개발자

#spring-boot

#server

#ubuntu

#배포

답변 1

댓글 0

조회 29

2달 전 · 익명 개발자 님의 새로운 답변

신입 채용사이트 이력서 질문

사람인이나 잡코리아 등 채용 사이트 이력서 양식으로 이력서를 쓸 때, 신입이라 경력이 없는데 프로젝트를 포트폴리오 pdf 파일로만 둬도 괜찮은지 궁금합니다. 아니면 경력이나 경험/활동/교육 같은 항목에 조금이라도 더 적는 게 나을까요?

개발자

#취업

답변 1

댓글 0

조회 73

3달 전 · Supernova 님의 새로운 답변

회사 홈페이지 제작 퇴사하는게 맞을까요? 서버 및 api 구축하는데 걸리는 시간..

현재 혼자가 화면 개발을 하고 있는 중 입니다. 현재 페이지를 복사하라고 해서 복사를 하는 중인데. 저는 서버 지식도 그냥 mysql, node js사용해서 게시판 만들어본게 전부입니다. 근데 호스팅 업체를 사용중인데 거기서 웹 DB를 제공해주더라고요 그러면 그 웹 DB를 제공해주면 제가 그걸 연결해서 써야하는데 그러면 node js로 서버를 파고 api를 구축해서 연동해서 데이터베이스를 사용해야하지 않나요?? 근데 여기 호스팅업체에서 PHP와 FTP를 제공해줍니다. PHP는 알긴알지만 잘 사용해보지 못했고 FTP는 사용해본적도 없습니다. 근데 윗선에서 FTP로 파일 옮겨가지고 웹 사이트를 제작했다는 겁니다. 보니까 index파일로해서 뭐 했더라고요 그래서 FTP를 사용해서 제작을 하라는거에요 현재 저는 next js로 제작을 하고 있고 저한테 서버랑 api구축 하는데 얼마나 걸리라는데 저는 신입이고 잘 알지 못하는데 왜 말을 못하냐고 구박하고 한 달 이상 걸리면 저를 쓸 필요가 없다고 하시는데 데이터 내용이 180개 정도 되고 CRUD까지 해야하는 상황입니다. 그리고 DB를 쓰는데 뭔 데이터처리 및 서버를 왜 깔고 그러냐고 물어보시는데 챗봇 + 찾아본 결과를 이야기해도 아니 그게 FTP라니까? 너 컴공 맞냐고 이러시는데 지금 얼른 퇴사해서 시간 박아서 프로젝트 했던 부분 고치면서 다시 취준을 하는게 좋을까요? 아니면 최대한 해보다가 FTP로 제작하라고 하면 그때 나갈까요.. 그리고 서버랑 api구축하는 부분이 얼마나 걸릴지... 그 부분도 알려주시면 감사하겠습니다.. 제가 봐도 답답하네요..

개발자

#웹개발자

#프론트엔드

#이직

#백엔드

#고민상담

답변 1

댓글 0

조회 57

3달 전 · 익명 님의 질문

solr 검색 엔진 설정

solr 설정하는 xml 파일 내에 검색어를 있는 그대로 검색해서 나올 수 있도록 설정하는 방법 아시는 분 계신가요...? 지금까진 이리저리 설정을 해봤지만 원하는 식으로 안 먹히네요... ex) "solr 검색 엔진 설정" => "solr 검색 엔진 설정에 대해서...", "solr 검색 엔진 설정이 잘 안되..." 현 문제: ex) "solr 검색 엔진 설정" => "solr", "검색", "엔진", "설정" 따로따로 포함된 게시글 및 내용 전부 검색

개발자

#검색엔진

#solr

#solr설정

#검색

#검색엔진설정

답변 0

댓글 0

조회 11

3달 전 · 익명 님의 질문 업데이트

ReactNative Xcode 16. RCTAppDelegate.h not find

안녕하세요? 에러로 고통받다가 커리어리에 남겨봅니다. ReactNative 프로젝트로 테스트플라이트 배포상태에서 3주가 지나 지난주 Xcode 16으로 업데이트 되었는데요. 그 뒤 ios 버전, 라이브러리 버전 문제는 해결했는데. Xcode 에서 build /ios/프로젝트명/AppDelegate.h 파일에서 #import <RCTAppDelegate.h> 파일을 찾을 수 없다고 나옵니다. 사양 1. M2, Sequoia 2. react-native : 0.74.3 3. Xcode 16.1 문제 해결을 위해 시도한 방법 입니다. 1. #import <React/RCTAppDelegate.h> 바꿔봄 2. #import "AppDelegate.h" 바꿔봄 3. node_module/react-native/React/Base/에서 헤더파일 찾아봄 -> 없음 4. node_module/react-native/ReactCommon/에서 헤더파일 찾아봄 -> 없음 5. 대체할 수 있는 방법 찾아봄 GPT에서 제안한 방법으로 수정 -> 결과 : 파일 찾을 수 없음 #import <UIKit/UIKit.h> #import <React/RCTBridgeDelegate.h> @interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate> @property (nonatomic, strong) UIWindow *window; @end 6. Xcode에서 경로를 추가해봄 -> 결과 : 파일 찾을 수 없음 6-1. Xcode > BuildSetting > search header 에 경로를 추가했습니다. "$(SRCROOT)/../node_modules/react-native/React", "$(SRCROOT)/../node_modules/react-native/ReactCommon", "$(SRCROOT)/../node_modules/react-native/ReactCommon/cxxreact", "$(SRCROOT)/../node_modules/react-native/Libraries", 6-2. Xcode > BuildSetting > Frame search header에 경로를 추가했습니다. "$(inherited)", "$(SRCROOT)/../node_modules/react-native/React", "$(SRCROOT)/../node_modules/react-native/ReactCommon", 7. pod 재설치, react-native 재설치, 캐시 삭제 및 라이브러리 업데이트 등.. pod.lock, Podfile, node_module, build 파일, DerivedData 폴더 삭제 후 전부 재설치. pod install --repo-update 헤르메스 사용 설정 및 use_frameworks! :linkage => :static 설정 확인. 8. react-native 최신버전(0.76.3)으로 재설치 참고 사이트 및 GPT, Monica 질의응답 공유 링크 https://github.com/facebook/react-native/issues/36611 https://stackoverflow.com/questions/75822104/rctappdelegate-h-file-not-found https://chatgpt.com/share/674e6dcf-89f8-800f-b0e6-4fa2fe58419b https://monica.im/share/chat?shareId=CQ18cvvPvsMc0r3U ** 유의미한 정보를 주신분께 감사의 마음으로 많지는 않지만 스타벅스 커피쿠폰을 드립니다 살려주세요..

개발자

#reactnative-run-ios

#xcode

#appdelegate.h

답변 0

댓글 0

조회 141

4달 전 · 전재욱 님의 새로운 댓글

자바스크립트의 이벤트 처리 질문

리액트로 이미지 inpainting 컴포넌트를 만들고 있습니다. 사용자가 이미지 업로드를 하면 canvas 영역에 그 이미지가 채워지고 그 이미지에 mask 영역을 칠할 수 있는 이미지 에디터 컴포넌트인데요, 궁금한게 생겨 질문드립니다. 첨부한 코드는 컴포넌트의 코드중 이미지 업로드 시 onChange 이벤트의 처리기인 handleImageUpload 함수와, handleImageUpload 함수에서 호출되는 loadImage 함수의 코드입니다. 사용자가 input 요소에 이미지를 업로드하면 onChange 이벤트가 발생해 handleImageUpload 함수가 실행되고 loadImage 함수가 실행됩니다. loadImage 함수가 실행되면 img 객체가 생성되고 img 객체의 src를 지정하죠. 그러면 브라우저는 이미지 로딩을 시작하고 이미지 로딩이 완료되면 onload 콜백함수가 실행됩니다. 저는 이 과정을 자바스크립트의 콜스택, 이벤트 루프, 태스크큐 구조에서 나타내보자면 다음과 같다고 생각했습니다. 1. 초기상태 콜스택 : [ ] 태스크큐 : [ ] 2. 사용자가 파일을 업로드 -> onChange 이벤트 발생 콜스택 : [handleImageUpload] 태스크큐 : [ ] 3. handleImageUpload 내부에서 loadImage 함수 호출 콜스택 : [handleImageUpload, loadImage] 태스크큐 : [ ] 4. loadImage 내부에서 img 객체 생성 및 src 할당 콜스택 : [handleImageUpload, loadImage] 태스크큐 : [ ] Web API : 이미지 로딩 시작 5. loadImage 함수 종료, handleImageUpload 함수 종료 콜스택 : [ ] 태스크큐 : [ ] Web API : 이미지 로딩 진행중 6. 이미지 로딩이 완료되면 Web API가 onload 콜백을 태스크큐에 추가 콜스택 : [ ] 태스크큐 : [onload] Web API : 이미지 로딩 완료 7. 이벤트 루프가 콜스택이 비어있음을 확인하고 태스크큐에서 onload 콜백을 콜스택으로 이동 콜스택 : [onload] 태스크큐 : [ ] 8. onload 콜백 실행 (캔버스에 이미지 그리기 등) 콜 스택 : [onload, drawImage, ...] 태스크큐 : [ ] 일단 이 과정이 맞나요? 만약 이게 맞다면 생기는 궁금증이 있습니다. Web API에서 이미지 로딩이 진행되는동안 loadImage 함수 및 handleImageUpload 함수가 종료되면 loadImage 함수 내에서 생성된 img 객체는 가비지 컬렉터에 의해 지워져야 하지 않나? 그렇게 img 객체가 GC에 의해 사라지면 이미지 로딩이 완료되었을 시점엔 img 객체의 onload 함수도 없어진것이니 onload 함수의 로직은 실행이 되지 않아야 하는 거 아닌가? 하는 생각이 들어 질문드립니다

개발자

#자바스크립트

#react

#frontend

답변 1

댓글 1

조회 249

4달 전 · 익명 님의 질문

안녕하세요 초보 개발자 입니다. 오라클 데이터베이스 백업 오류좀 도와주세요 !!

기존 데이터베이스 서버를 외장하드에 백업 하려고 하는데 UNDO TABLESPACE 인 UNDOTBS01.DBF 라는 파일을 읽을 수 가 없다고 떠서 UNDO TABLESPACE 인 UNDO_NEW01.DBF를 만들고 UNDO_NEW01.DBF가 UNDO 역할을 하게끔 만들어 놓고 기존에 쓰던 UNDOTBS01.DBF 파일을 삭제하였습니다. 그랬더니 계속 RMAN-06056 : 3 데이터를 엑세스 할 수 없습니다. 라면서 RMAN으로 백업이 안되는데 도와주실분..!

개발자

#데이터베이스

#database

#oracle

#db

답변 0

댓글 0

조회 32

4달 전 · 박정환 님의 새로운 답변

포트폴리오 관리용 플랫폼은 어떤 것을 이용하시나요??

저는 포트폴리오 관리를 위해 티스토리, 벨로그, 노션을 사용했습니다. 너무 중구난방이여서 하나로 통합해 관리하려합니다. 개인적으로 노션이 사용하기 쉬웠지만 업그레이드 버전을 사용하지않으면 파일 업로드 제한이 있는게 단점이였고 벨로그와 티스토리는 사용하기 불편한게 단점이였네요. 여러분들은 포트폴리오 관리를 위해 어떤 플랫폼을 사용하시나요?

개발자

#포트폴리오

#플랫폼

#블로그

답변 1

댓글 0

조회 89

4달 전 · aigoia 님의 답변 업데이트

비전공 개발자 공부

안녕하세요 현재 복지관에서 1년을 채워가고 있는 26살 직장인입니다. 취업하기 전 대학교 2학년 때 우연히 마주한 파이썬에 맛을 보고 텐서플로우 공식 자료를 봐가면서 인공지능 따라해보고 직접 캐글에 있는 csv파일을 받고 분석하고 결과를 내면서 재미를 느꼈습니다. 이후에는 사이트 제작에 관심이 생겨 기본적인 html과 css, 부트스트랩을 가지고 깃허브에 올려서 사이트를 만들어보고 4학년 2학기 방학 때 파이썬 장고로 사이트를 연결하면서 접해보았습니다. 현재 복지관에서 일을 하고 있는 가운데에도 관심이 있어 최근에는 장고-러스트와 next.js를 활용한 사이트 제작 자료가 있어 퇴근 후 한 시간씩 작업을 하고 있습니다. 앞서 말씀드렸듯이, 복지관에 재직중이며 계약직으로 2024년 12월 31일 계약을 마치고 본격적으로 웹개발 중 프런트에 대해서 배워보고자 합니다. 분명 제가 만들면서 재미를 느끼고, 조금이라도 어렸을 때 다양한 경험을 해보는 것이 좋다고 생각하지만, 한편으로는 퇴사 후에 취업이 잘 될까라는 불안함에 조금은 조심스러워 집니다. 저보다 앞서 다양한 경험을 해오신 선생님들께 제 판단이 괜찮은 선택인지 아닌지 조언해주시면 감사드리겠습니다. 긴글 읽어주셔서 감사합니다.

개발자

#비전공자-개발자

답변 1

댓글 0

조회 65

4달 전 · 동욱 님의 질문

비주얼스튜디오 파일에 대해 질문있습니다.

현재 프론트엔드로 취업을 위해 공부중이고 맥북을 사용하고 있습니다. 비주얼 스튜디오로 html, css, js 를 공부하고 리액트도 설치하면서 공부를 하고 있는데 맥북 바탕화면 만들때는 괜찮은데 외장하드에 폴더를 만들고 비주얼스튜디오에 파일을 생성하니 아래 이미지처럼 파일이름 앞에 ._ 이런게 붙더라구요. 그래서 삭제를 하면 나중에 또 생기는데 이런거 안나오게 하는 방법이 있을까요?

개발자

#비주얼스튜디오

#리액트

#파일

답변 0

댓글 0

조회 33

4달 전 · 문종호 님의 새로운 답변

RAG 를 짜는 중에 도무지 어떤 부분이 문제인지 모르겠습니다.

# JSON 파일에서 FAQ 데이터를 로드하는 함수 def load_faq_data_from_json(file_path): with open(file_path, 'r', encoding='utf-8') as f: faq_data = json.load(f) return faq_data # FAQ 데이터 로드 json_file_path = '' faq_data = load_faq_data_from_json(json_file_path) # ChromaDB 클라이언트 및 Embedding 설정 chroma_client = chromadb.Client() # ChromaDB 클라이언트 생성 # 고유한 컬렉션 이름 생성 collection_name = "faq_data_" + datetime.datetime.now().strftime("%Y%m%d_%H%M%S") collection = chroma_client.create_collection(collection_name) # LangChain의 Text Splitter 설정 text_splitter = RecursiveCharacterTextSplitter( chunk_size=512, chunk_overlap=50 ) # OpenAI 임베딩 설정 openai_api_key = '' embedding_function = OpenAIEmbeddings( model="text-embedding-ada-002", openai_api_key=openai_api_key ) # 텍스트 스플리팅 및 임베딩 생성 함수 def split_and_embed_text(text): splitted_texts = text_splitter.split_text(text) print(f"Splitted texts: {splitted_texts}") try: # OpenAIEmbeddings는 embed_documents를 사용합니다. embeddings = embedding_function.embed_documents(splitted_texts) except Exception as e: print(f"임베딩 생성 중 오류 발생: {e}") return None # 임베딩이 제대로 생성되었는지 확인합니다. if embeddings is None or len(embeddings) == 0: print("임베딩 생성 실패") return None # 임베딩을 numpy 배열로 변환 embeddings = np.array(embeddings) print(f"Embeddings shape: {embeddings.shape}") # 임베딩 벡터의 차원을 확인하고 처리합니다. if embeddings.ndim == 1 and embeddings.shape[0] == 1536: # 임베딩이 1차원 배열이고 길이가 1536인 경우 final_embedding = embeddings elif embeddings.ndim == 2 and embeddings.shape[1] == 1536: # 임베딩이 2차원 배열이고 두 번째 차원이 1536인 경우 final_embedding = np.mean(embeddings, axis=0) else: print("임베딩 벡터의 차원이 예상과 다릅니다.") return None print(f"Final embedding shape: {final_embedding.shape}") return final_embedding # FAQ 데이터를 Vector DB에 저장 def store_faq_data_in_vector_db(faq_data, collection): for faq in faq_data: # 'question'과 'answer'가 있는지 확인하고, 'answer'가 None이 아닌지 확인 if 'question' not in faq or 'answer' not in faq or faq['answer'] is None: print(f"누락된 'question' 또는 'answer'로 인해 항목을 건너뜁니다: {faq}") continue # 다음 항목으로 넘어감 # 텍스트 스플리팅 및 임베딩 생성 question_embedding = split_and_embed_text(faq['question']) if question_embedding is None: print(f"Embedding generation failed for question: {faq['question']}") continue # 임베딩이 없으면 다음 질문으로 넘어감 print(f"Generated embedding for question '{faq['question']}': {question_embedding}") # 각 질문에 고유한 ID 생성 faq_id = str(uuid.uuid4()) # 메타데이터에서 None 값을 제거 metadata = {k: v for k, v in {"answer": faq['answer']}.items() if v is not None} # Vector DB에 저장 collection.add( documents=[faq['question']], metadatas=[metadata], ids=[faq_id], embeddings=[question_embedding] ) # 추가 후 임베딩 확인 (저장된 후 곧바로 확인) stored_results = collection.get(ids=[faq_id], include=["embeddings"]) if stored_results['embeddings'] is not None and len(stored_results['embeddings']) > 0: print(f"Embedding for question '{faq['question']}' successfully stored.") else: print(f"Failed to store embedding for question '{faq['question']}'") # FAQ 데이터를 JSON에서 로드하고 저장 store_faq_data_in_vector_db(faq_data, collection) 이렇게 데이터를 저장하고 # 환경 변수에서 API 키 로드 openai_api_key = os.getenv("OPENAI_API_KEY") if not openai_api_key: raise ValueError("OpenAI API 키가 설정되지 않았습니다. 환경 변수 OPENAI_API_KEY를 설정하세요.") # OpenAI 임베딩 설정 embedding_function = OpenAIEmbeddings( model="text-embedding-ada-002", openai_api_key=openai_api_key ) # LangChain의 Text Splitter 설정 (일관성 유지) text_splitter = RecursiveCharacterTextSplitter( chunk_size=512, chunk_overlap=50 ) # ChromaDB 클라이언트 및 컬렉션 설정 chroma_client = chromadb.Client() collection_name = "faq_data_collection" try: # 이미 존재하는 컬렉션인지 확인하고, 있으면 가져옴 collection = chroma_client.get_collection(name=collection_name) except chromadb.errors.CollectionNotFoundError: # 컬렉션이 존재하지 않을 경우에만 생성 collection = chroma_client.create_collection(name=collection_name) # Vector DB에서 유사 질문 검색 (ChromaDB) def find_similar_question_in_vector_db(new_question_embedding, collection, k=5): results = collection.query(query_embeddings=[new_question_embedding], n_results=k, include=['documents', 'metadatas', 'embeddings']) best_similarity = 0 best_question = None best_answer = None # 검색 결과에서 각 질문의 유사도와 답변을 처리합니다. if 'documents' in results and 'metadatas' in results: documents = results['documents'][0] metadatas = results['metadatas'][0] embeddings = results['embeddings'][0] for i in range(len(documents)): stored_embedding = embeddings[i] metadata = metadatas[i] if stored_embedding is not None: # 코사인 유사도를 통해 유사도를 계산합니다. similarity = cosine_similarity([new_question_embedding], [stored_embedding])[0][0] print(f"유사도: {similarity} for {documents[i]}") # 유사도가 가장 높은 결과를 선택하며, 임계값 이상일 경우에만 선택 if similarity > best_similarity and similarity >= SIMILARITY_THRESHOLD: best_similarity = similarity best_question = documents[i] if isinstance(metadata, list): metadata = metadata[0] best_answer = metadata.get('answer') if isinstance(metadata, dict) else None return best_question, best_answer # Fine-tuned GPT를 사용해 새로운 답변 생성 def gpt_generate_response_from_finetuned_gpt(question, style="의사 A 말투"): prompt = f"다음은 환자의 질문입니다: \"{question}\". 아래 말투를 사용하여 질문에 대해 성실하고 정확한 답변을 작성해주세요.\n\ 말투: {style}" response = client.chat.completions.create( model="", # Fine-tuned된 GPT 모델 ID messages=[ {"role": "system", "content": "You are a helpful medical assistant."}, {"role": "user", "content": prompt}, ], max_tokens=300, temperature=0.7, # 답변의 다양성을 조절합니다. ) return response.choices[0].message.content.strip() # 새로운 질문 처리 및 최종 응답 생성 def generate_final_response(new_question, collection): # 텍스트 스플리팅 및 임베딩 생성 splitted_texts = text_splitter.split_text(new_question) new_question_embedding = np.mean(embedding_function.embed_documents(splitted_texts), axis=0) # ChromaDB에서 유사 질문 검색 similar_question, answer = find_similar_question_in_vector_db(new_question_embedding, collection) if similar_question and answer: final_response = f"질문: {new_question}\n유사 질문: {similar_question}\n기본 답변: {answer}" else: generated_answer = gpt_generate_response_from_finetuned_gpt(new_question) final_response = f"질문: {new_question}\nGPT로 생성된 답변: {generated_answer}\n(이 답변은 벡터데이터에서 유사한 답변을 찾을 수 없어 GPT에 의해 생성되었습니다.)" return final_response # 사용자로부터 새로운 질문 입력 받기 new_question = input("새로운 질문을 입력하세요: ") # 최종 응답 생성 response = generate_final_response(new_question, collection) print(response) 로 데이터베이스에서 유사한 질문-답변 쌍을 끌어오려는데 정확히 같은 질문을 넣어도 (이러면 유사도가 1인데) 저장되어있는 답변이 끌어와지질 않네요...

개발자

#llm#rag

답변 1

댓글 0

조회 74

5달 전 · 박태원 님의 질문

react 모바일웹 헤더가 Safari 상단 url 바 가림 현상

React / typescript / tailwindcss 헤더를 fixed / sticky로 고정을 해서 크롬에서는 잘 적용됬는데 아이폰 safari 브라우저에서 설정 - 단일탭으로 하고 들어가면 첨부파일처럼 상단 URL 바를 제 헤더가 가려버리는 현상이 나옵니다. index.html에 아래 속성도 추가된 상태입니다ㅠㅠ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" /> 저와 비슷한 현상인 분 계실까요??

개발자

#frontend

#react

#tailwindcss

답변 0

댓글 0

조회 56

5달 전 · 영훈 님의 질문

프론트 배포 netlify 환경변수

리액트에서 백엔드 서버주소를 관리할 때 .env 파일에 환경변수로 관리하고 있습니다. 그런데 netlify로 배포를 할 때, netlify.toml 파일을 작성해주는데, 이때 redirect에 백엔드 주소를 그대로 사용하면 깃허브에 toml파일이 노출되며 .env 파일로 관리해주는게 의미가 없어지는거 같은데 어떻게 해야되나요?

개발자

#netlify

#배포

답변 0

댓글 0

조회 27

5달 전 · 양기주 님의 질문

github 연동 오류 질문입니다

파이참 사용중입니다 깃헙 아이디 연동하고 리포지토리 만들고 파일 공유하기 하면 남들은 파일 체크 해제하는 창 나오고 선택해서 깃헙에 올리는데 저는 그냥 완료됬다고 뜨고 가보면 .idea 밖에 안올라가네요 아무리 검색해도 안나와서 질문드립니다 ..

개발자

#github

답변 0

댓글 0

조회 15

5달 전 · 문정동개발자 님의 새로운 답변

깃 merge 충돌이 나는 경우를 정의할 수 있나요?

서적에는 이렇게 나와있습니다. "병합하려는 두 브랜치가 서로 같은 내용을 다르게 수정한 상황에 충돌이 발생한다." "같은위치의 코드를 두 브랜치가 동시에 수정하면 충돌이 발생한다." 따라서 저는 같은 파일,같은 라인 코드를 서로 다르게 수정하면 충돌이 난다고 생각했습니다. 근데 첨부한 사진과 같은경우 충돌이 안더라구요;; 브랜치는 main, develop 2개가 있습니다. 그리고 2개의 브랜치 소스는 아래와 같습니다.(1번째 사진) 그리고 먼저 main 브랜치로 person 소스를 아래와 같이 수정하고 커밋, 푸시를 진행하였습니다.(2번째 사진) 그리고 develop 브랜치로 person 소스를 아래와 같이 수정하고 커밋, 푸시를 진행하였습니다.(3번째 사진) 그리고 person 브랜치를 main 브랜치에 merge 시켰습니다. 각 브랜치의 소스를 보면 main의 5번째 줄 함수명이 b 이고 9번째 줄 함수명은 c 입니다. 근데 develop 브랜치의 5번째 줄 함수명은 d 이고 9번째 줄 함수명은 b 입니다. 이렇게 되면 서적의 내용만 봤을땐 같은 위치의 코드를 각각의 브랜치에서 서로 다르게 수정을 했는데 왜 충돌이 발생하지않고 merge 가 진행되는건가요..? 일단 merge 를 하면 첨부사진과 같이 됩니다.(4번째 사진) 뭔가 충돌발생하는 경우를 정확히 정의하고 알고 넘어가고싶은데 어려운것 같습니다... 선배님들은 어떻게 이 부분을 이해하고 계신가요?

개발자

#git

#conflict

답변 1

댓글 0

조회 49

5달 전 · 박지용 님의 질문

expo에서 tabs로 동적라우팅 설계할때

지금 expo 사용해서 공부하는 중인데 tabs 컴포넌트 사용해서 바텀네비게이션 구현하고 tabs를 사용해서 동적라우팅 설정하려면 폴더구조를 어떻게 해야하나요? (tabs)폴더로 그룹화 해서 gym, board, search, profile 폴더 만들어준 후에 tabs에 4개 항목 유지하면서 /profile/:userid 경로로 동적라우팅 하고 싶은데 여기에 사진처럼 profile 폴더-> [userId]폴더-> index 파일 설정하면 디바이스의 tabs 항목에 /profile/ [userId]/index 가 같이 나옵니다... tabs에 4개 항목만 유지하면서 동적라우팅 하려면 폴더구조 어떻게 해야하나요 ㅠㅠ

개발자

#expo

#reactnative

답변 0

댓글 0

조회 28

6달 전 · 문종호 님의 새로운 답변

버추얼박스 우분투 다운중 문제

학교 수업을 위해 우분투 리눅스 다운중인데 저 484mb파일에서 넘어가지가 않아요 문제가 뭘까요?

개발자

#리눅스

답변 1

댓글 0

조회 34

6달 전 · 동욱 님의 질문

리액트 설치에 대해 질문있습니다.

안녕하세요 리액트를 공부하고 있는 프론트엔드 취준생입니다. npx create-react-app ./ 이걸로 리액트를 설치하니 아래 이미지 처럼 packge.json 파일이 있고 packge.json 앞에 ._ 이걸 붙어서 하나씩 더 생기더라구요. 이건 왜 그런건가요?

개발자

#프론트엔드

#리액트

#공부

#설치

답변 0

댓글 0

조회 44

6달 전 · 유호준 님의 질문

NavigationContainer 중첩 오류

안녕하세요, RN(Expo)로 React Navigation을 적용하다 오류가 해결되지 않아서 질문드립니다. expo를 통해 다음과 같이 index.js에 React Navigation을 적용했습니다. import { store } from "@/redux/store"; import MainScreen from "./screens/MainScreen"; import { Provider } from "react-redux"; import { NavigationContainer } from "@react-navigation/native"; import { createNativeStackNavigator } from "@react-navigation/native-stack"; import LoginScreen from "./screens/LoginScreen"; export default function HomeScreen() { const Stack = createNativeStackNavigator(); return ( <Provider store={store}> <NavigationContainer> <Stack.Navigator> <Stack.Screen name="Main" component={MainScreen} /> <Stack.Screen name="Login" component={LoginScreen} />{" "} </Stack.Navigator> </NavigationContainer> </Provider> ); } 그러나 다음과 같은 오류가 뜨며 빈화면만 보이더라구요ㅠ Error: Looks like you have nested a 'NavigationContainer' inside another. Normally you need only one container at the root of the app, so this was probably an error. If this was intentional, pass 'independent={true}' explicitly. Note that this will make the child navigators disconnected from the parent and you won't be able to navigate between them. 찾아보니 NavigationContainer가 중첩되었다는 것 같은데, 저는 계속해서 그대로 강의를 따라가고 있었고, 따로 NavigationContainer를 적용한 파일이 존재하지 않습니다 ㅠ 다음 속성을 추가해도 오류가 해결되지 않습니다 ㅠ 아마 어디선가 부모에서 NavigationContainer가 적용된 것 같은데 찾을 수가 없네요 ㅠㅠ independent={true} 조금 더 찾아보니 expo-router랑 충돌이 난 거일 수도 있다는데 정확하게 모르겠네요 ㅠ

개발자

#react-native

#react-navigation

#expo

#navigationcontainer

답변 0

댓글 0

조회 83

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

Clion과 visual studio 컴파일 질문 있습니다

현재 학교에서는 visual studio로 과제나 시험을 보고 있습니다. 그런데 전 옛날부터 사용하던 맥북으로 대학교룰 진학하게 되서 그냥 맥북으로 학교를 다니고 있는데 clion과 visual studio 사이에 컴파일이 차이가 있을까요..? 혹시 clion에서는 컴파일 오류가 없었으나 visual studio에는 컴파일 오류가 발생할 수 있나오? 혹시 있다면 설정 방법이 따로 있을까요?

개발자

#visualstudio

#clion

답변 1

댓글 0

조회 36

7달 전 · 포크코딩 님의 새로운 댓글

Next.js Dynamic Routing 관련 질문

현재 ./pages 폴더에서 page router로 라우팅 관리 중에 있습니다! id별 post 상세창 조회를 위해 ./pages/post-detail/[id].tsx 와 같이 작성했으나 Whitelabel Error Page This application has no configured error view, so you are seeing this as a fallback. Fri Aug 30 21:08:21 KST 2024 [67199a4f-4509] There was an unexpected error (type=Not Found, status=404) 만 발생합니다 참고로 ./pages/post-write.tsx 와 같은 파일은 정상 작동합니다 혹시 무엇이 문제일까요? 추가+) 혹시 Next.js 14에서 page router 방식을 사용하는것이 문제일지 궁금합니다

개발자

#react

#next.js

답변 1

댓글 2

조회 50

7달 전 · 익명 님의 질문

리액트 네이티브 릴리즈로 배포 시 build.gradle 설정대로 동작 안하는 이유가 뭔지 궁긍합니다.

안녕하세요. 현재 리액트 네이티브로 프로젝트를 진행하고 있습니다. 막바지 단계에 거의 도달해서 이제 배포 준비를 하려고 하는데요, 마지막으로 테스트를 하기 위해 stagingRelease 로 apk 를 만들어서 테스트를 하려고 하니, .env.staging 을 읽지를 못하고 있네요. 이상한건 stagingDebug 로 할 때에는 이런 문제가 없었습니다. 지금 환경변수는 루트 디렉토리에 env 폴더가 있고, 해당 폴더 내에는 3개의 환경변수 파일이 존재합니다. .env.development .env.staging .env.production 이렇게 3개 입니다. project.ext.envConfigFiles = [ productiondebug: "env/.env.production", productionrelease: "env/.env.production", developmentrelease: "env/.env.development", developmentdebug: "env/.env.development", stagingrelease: "env/.env.staging", stagingdebug: "env/.env.staging" ] 위의 코드는 제가 설정한 환경변수 매핑하는 부분입니다. 실제로 stagingrelease 로 빌드 시에 flavor 값이 stagingrelease 로 뜨는 걸 확인했습니다. node_modules 에서 react-native-config 폴더를 찾아서 dotenv.gradle 에서 찍으니까 확인이 가능하더라고요. 제가 궁금한 점은 왜 루트에서 .env 파일만을 읽어서 BuildConfig.java 에서 사용하려고 하는걸까요? .env.staging 을 참조하지 않는 이유가 궁금합니다. 아래는 dotenv.gradle 파일입니다. import java.util.regex.Matcher import java.util.regex.Pattern def getCurrentFlavor() { Gradle gradle = getGradle() def pattern = Pattern.compile("(?:.*:)*[a-z]+([A-Z][A-Za-z0-9]+)") def flavor = "" gradle.getStartParameter().getTaskNames().any { name -> Matcher matcher = pattern.matcher(name) if (matcher.find()) { flavor = matcher.group(1).toLowerCase() return true } } println "Current flavor: $flavor" return flavor } def loadDotEnv(flavor = getCurrentFlavor()) { def envFile = project.hasProperty("defaultEnvFile") ? project.defaultEnvFile : ".env" if (System.env['ENVFILE']) { envFile = System.env['ENVFILE'] } else if (System.getProperty('ENVFILE')) { envFile = System.getProperty('ENVFILE') } else if (project.hasProperty("envConfigFiles")) { project.ext.envConfigFiles.any { pair -> if (flavor.startsWith(pair.key.toLowerCase())) { envFile = pair.value return true } } } println "Reading env from: $envFile" def env = [:] File f = new File("$project.rootDir/../$envFile"); if (!f.exists()) { f = new File("$envFile"); } if (f.exists()) { println "Found env file: $f" f.eachLine { line -> def matcher = (line =~ /^\s*(?:export\s+|)([\w\d\.\-_]+)\s*=\s*['"]?(.*?)?['"]?\s*$/) if (matcher.getCount() == 1 && matcher[0].size() == 3) { env.put(matcher[0][1], matcher[0][2].replace('"', '\\"')) // 각 환경 변수 키-값 쌍 출력 println "Loaded env variable: ${matcher[0][1]} = ${matcher[0][2]}" } } } else { println("**************************") println("*** Missing .env file ****") println("**************************") } project.ext.set("env", env) } loadDotEnv() android { defaultConfig { project.env.each { k, v -> def escaped = v.replaceAll("%","\\\\u0025") buildConfigField "String", k, "\"$v\"" resValue "string", k, "\"$escaped\"" println "Set buildConfigField and resValue: $k = $v" } } } 안드로이드 스튜디오 터미널에서 ./gradlew assembleStagingRelease 명령어를 치게 될 경우, Current flavor: stagingrelease Reading env from: .env.staging ************************** *** Missing .env file **** ************************** 이런 로그가 뜨고 있습니다.

개발자

#react-native

#react-native-config

#다중환경변수

#release

답변 0

댓글 0

조회 57

7달 전 · 성지수 님의 새로운 답변

환경변수 주입 및 빌드(모노레포)

모노레포 프로젝트 환경 및 요구사항 - 프로젝트는 front(React), back(Node), common 패키지로 구성되어 있으며, 모노레포로 되어있음 - Dockerfile 스크립트에서는 build → run 순서로 실행되도록 구현되어 있음 - 서버 배포 시에는 하나의 포트만 사용해야 하므로 back(Node)에서 front의 정적 파일(index.html)을 실행해야 함 - Docker 빌드 시, front(webpack 빌드)와 back 둘 다 build 스크립트를 실행하고, 이미지 실행 시에는 back만 run 스크립트를 실행하여 back에서 front의 정적 파일을 실행해야 함 - 환경변수는 이미지 실행 시 docker-compose.yml의 env_file 속성을 사용해 외부에서 주입해야 함(환경변수가 바뀌는 상황이 있다면 .env 파일을 수정한 후 다시 빌드해야 합니다.) 예외 상황 Docker 빌드할 때 .env 파일을 포함하지 않고 run 스크립트를 실행(이미지 실행) 시 주입하는데, front 패키지에는 run 스크립트가 존재하지 않습니다. (back에서 front의 정적 파일을 실행) 즉, 환경변수가 주입되지 않고 있음 해결 방법 첫번째는 back에서 front의 dist 파일 호출 시 환경변수 객체를 만들어 value 값을 key 값으로 치환해서 함께 넘기고, index.html의 head에서 window 객체를 활용해 값을 받는 방법 하지만 이 방법은 개발자 도구에서 환경변수 값이 노출되고, window 객체를 활용하기 때문에 새로운 브라우저를 생성할 때마다 사이드 이펙트가 발생할 수 있음 두번째는 모노레포 root 패키지에서 prerun 스크립트로 front의 build 스크립트를 실행하는 방법 스크립트 -> "prerun": "lerna run build --parallel --scope @projectname/front --stream", 이 방법은 빌드를 두 번 실행하므로 자원을 많이 소모하지만, 예외 상황이 없는 것으로 보임 질문 받은 내용 Q. 환경변수를 바꾸는 상황이 존재할까요? A. 회사의 인프라 환경에 따라 다르지만, 포트나 IP가 변경될 수 있는 상황이 있음 예를 들어, 외부 서버에 요청을 보낼 경우 그 서버의 정보가 바뀌면 설정을 변경해야 하며, 다른 서버에 요청할 때 인증 정보를 입력해야 하는데, 토큰이나 사용자 패스워드 값이 변경될 경우에도 수정이 필요함 고민되는 부분 다른 해결 방법이나 비슷한 상황이 있다면 함께 논의하고 싶습니다. ㅎㅎ *프로젝트 구조 root ├── packages │ ├── back │ │ ├── package.json │ │ ├── index.ts │ │ ├── .babelrc │ │ └── ... │ ├── common │ ├── front │ │ ├── public │ │ │ └── index.html │ │ ├── package.json │ │ ├── src │ │ │ └── index.js │ │ ├── src │ │ ├── webpack.config.js │ │ └── ... ├── package.json ├── lerna.json ├── docker-compose.yml ├── Dockerfile * 프로젝트의 중요 정보는 제외했습니다.

개발자

#환경변수주입

#모노레포

#빌드

#node.js

#react

답변 1

댓글 0

조회 76

7달 전 · 백승훈 님의 새로운 답변

Next.js 사용 시 SyntaxError: Expected property name or '}' in JSON at position 61의 에러위치가 어딘지 어떻게 알수있나요?

"next-auth": "^5.0.0-beta.20" 사용 중인데 해당 에러를 검색해보니 JSON 형식의 문자열이 아니기 때문에 에러가 발생한 것이라고 하던데 에러가 일어난 코드의 위치를 정확히 말을 안해주니 어디서 어떻게 고쳐야할지 도통 모르겠습니다....ㅠㅠ 해당 에러를 야기하는 것으로 의심되는 파일의 코드와 에러메시지를 띄운 터미널을 캡처하여 첨부드립니다... 혹시 어디서 문제인지 힌트라도 주신다면 열심히 찾아 해결해보겠습니다!!!

개발자

#next-auth

#next.js

답변 1

댓글 0

조회 37

7달 전 · 강창한 님의 새로운 답변

쿠버네티스 롤링업데이트-무중단배포 과정에서 애플리케이션 실행 속도에 의해 서비스 중단이 발생합니다.

안녕하세요, 쿠버네티스를 처음 사용 해 보면서 질문 사항이 생겨 글을 올립니다. 스프링부트 애플리케이션을 배포하는 과정에서 레플리카셋을 늘리는 방식으로, 순차적으로 업데이트가 이루어지도록 하여 무중단 배포를 구현하려 시도했었습니다. 2개 정도면 충분하겠지 라는 생각에 레플리카셋 크기를 2로 잡아두고 테스트를 해 봤습니다. 그러나 컨테이너 업데이트는 순차적으로 진행되었지만, 컨테이너 실행 후 컨테이너 내부의 jar 파일 실행 과정에서 많은 시간이 소요되어, 그 사이 요청들을 제대로 처리하지 못하는 문제가 발생했습니다. 레플리카셋의 크기를 더 늘리면 해결 가능 할 것이라 생각되지만, 이게 정석적인 해결 방법인지 의심이 됩니다. 일반적으로는 어떻게 해결하시나요?

개발자

#쿠버네티스

#인프라

답변 1

댓글 0

조회 48