25일 전 · NickSoon 님의 새로운 답변
지금 상황에서 파이어베이스에 데이터를 저장할때 쓰는 알맞은 코드를 찾고 싶습니다.
유튜브 무료 강의 따라하며 코딩 독학하고 있는 사람입니다. https://youtube.com/playlist?list=PLfLgtT94nNq3PzZinqs9Afuiai--r5NB_&si=ck9wzApzjvUZDJ6T 코딩애플님 강의를 따라서 파이어베이스 기반 웹사이트를 만들고 있었는데, 어떻게든 따라가다가 웹페이지에 개시글을 작성해서 파이어스토어 데이터베이스에 저장하는 부분에서 막혀버렸습니다. https://youtu.be/yYtTZcjCj_o?si=mg_U0cKB_kHUMhef 제가 실력이 매우낮아서, 이 상황에 알맞는 데이터 저장방법을 못찾겠어가지고 이렇게 물어봅니다. 아래의 코드 부분, 그러나까 웹페이지에 올린 개시글의 데이터가 파이어베이스의 데이터베이스에 기록하는 부분을 작업하다가 막혔습니다.
개발자
#firebase
#visual-studio-code
#node.js
답변 1
댓글 0
보충이 필요해요 1
조회 30
한 달 전 · 원승현 님의 질문
웹소켓 + Stomp로 채팅 기능을 구현하며
RabbitMQ를 도입하였습니다. 도입의 이유는 스프링 내장 메시지 브로커를 이용하게 되면 인메모리 기반의 동작 방식으로 인해 서버 문제 발생 시 메시지가 유실되거나 확장에도 제한이 있다고 판단하여 도입하였습니다. 현직자 분들이 보기에 이 이유가 적합한 근거가 될까요? 추가로 JMeter로 RabbitMQ를 사용했을 때와 사용하지 않았을 때의 성능을 비교했는데 사용자 100명 기준 성능도 사용하지 않았을 때가 우세했고, RabbitMQ를 사용했을 때는 오히려 아래와 같은 오류가 가끔 발생하며 메시지또한 약 90퍼센트 정도만 저장된걸 확인할 수 있었습니다. 무엇이 문제이며 해결 방안이 있을까요?? java.net.SocketException: Connection reset at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:394) ~[na:na] at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:426) ~[na:na] at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) ~[netty-buffer-4.1.114.Final.jar:4.1.114.Final] at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) ~[netty-buffer-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.114.Final.jar:4.1.114.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.114.Final.jar:4.1.114.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.114.Final.jar:4.1.114.Final] at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na]
개발자
#채팅
#구현
답변 0
댓글 0
조회 53
한 달 전 · 프레드윰 님의 답변 업데이트
갤럭시북 5 프로 VS M4 맥북 프로
안녕하세요. 이제 대학교 4학년 올라가는 컴공 학생입니다! 제가 노트북을 바꾸려고 하는데, 어떤 노트북이 나을까요? 조건 1. 현재 패드, 스마트폰 등 모든 전자기기를 갤럭시 제품으로 사용하고 있습니다. (갤럭시 제품을 연동하기 좋음) 2. 지금 사용하고 있는 노트북은 그램이며, 사양은 i5, 램 8GB, 저장공간 232GB입니다. 3. 1년 뒤에 졸업해서 취직할텐데, 지금까지 윈도우만 사용해왔어서 그때 맥북을 사용하게 된다면 잘 적응할 수 있을지가 걱정입니다. 그래서 미리 맥북을 사서 경험을 해 보는 게 좋지 않을까 라는 생각을 하고 있습니다. 4. 지금 구매하고자 하는 갤럭시북 프로와 맥북 프로의 사양은 다음과 같습니다. - 갤럭시북5 프로 14인치 윈도우 11 Ultra 7 Processor 258V Intel® ArcTM 140V GPU (16GB) (내장 그래픽) 램 32GB 저장공간 512GB 1,795,000원 - m4 맥북 프로 14인치 10코어 CPU 10코어 GPU 램 16GB 저장공간 512GB 2,240,000원 조언 부탁드립니다. 미리 감사합니다!
투표
개발자
#노트북고민
#노트북사양
#노트북추천
답변 1
댓글 0
조회 242
한 달 전 · @SoftyChoco 님의 새로운 답변
게시글 이미지 업로드를 구현하는데 궁금한 점이 있습니다.
velog를 참고하여 Spring + Vue를 이용하여 마크 다운 기반 게시글을 구현하고 있습니다.. 글을 쓰는 도중에 이미지를 올리면 s3에서 url를 반환하여, 이것을 통째로 Post 테이블 Content 필드에 저장하여 순서를 보장하는 식으로 진행하고 있습니다. 로직 흐름은 이렇습니다. 1. 사용자가 이미지를 올린다면, 클라이언트에서 글쓰기 버튼을 눌렀을 때 미리 만들어 놓은 UUID와 이미지를 서버로 보낸다. 2. 서버에서는 s3객체에 임시 저장 여부를 확인하는 isTemp를 태그를 넣어서 서버를 걸쳐서 S3에 쏜다. 3. S3에서 객체를 찾아서 key값과 클라이언트에서 보낸 uuid를 Image 테이블에 저장해서 Post와 간접적으로 연관 관계를 맺는다. 4. 글쓰기를 누른다면 내용과 UUID를 보내서 UUID를 Post의 primary key로 사용하고, UUID 기반으로 Image 테이블에서 key들을 갖고 와서 S3 객체의 isTemp 태그를 false로 바꾼다. 4-1 . 뒤로 가기나 임시 저장을 눌렀을 때는 isTemp를 true로 설정하고 저장한다. 5. 30일이 지날 때마다, Post에 있는 isTemp를 통해 임시 여부를 확인하여 임시 저장된 글을 삭제하고, S3에서는 수명 주기를 설정하여 태그를 기반으로 true인 이미지들을 삭제한다. 객체를 삭제하는 이유는 불필요한 데이터가 공간을 차지하는 것이 별로라고 판단했습니다. UUID는 글을 다 쓰기도 전에 서버로 쏘기 때문에, 어떤 게시글에서 쓰였는지 확인하기 위해서 사용했습니다. 성능이나 용량 면에서 안 좋다고 하지만, 이는 데이터를 넣어 놓고 조회를 하여 성능을 확인하였고 현재 프로젝트 크기를 생각했을 때 접목해도 상관없을 것 같아 넣었습니다. 하지만 이런 식으로 진행하니, 만약 사용자가 중간에 이미지 링크를 삭제한다면? 이라는 시나리오를 생각했을 때 이를 대처할 방도가 떠오르지 않습니다. 다른 분들은 어떤 식으로 처리했는지, 제가 너무 어렵게 생각하고 짜는지 궁금합니다.
개발자
#spring-boot
#s3
#게시글
답변 1
댓글 0
조회 51
2달 전 · 이상래 님의 새로운 답변
Si 신입 궁금한 점
이번에 중소기업si 개발자로 취업하게되었습니다. Lg cns 협업기업인데 현재는 교육기간입니다. 파견가게되면 개인 저장장치는 물론 개인 노트북도 반입이 불가하다고 듣게되었습니다. 궁금한게 인터넷도 제한이된다고 들은 것 같은데 모르는 것이 있으면 업무를 보는 중 모르는 것이 있을 때 구글링이나 chat gpt를 사용도 제한되는건가요??
개발자
#si
#si회사
#파견
답변 1
댓글 0
조회 84
4달 전 · 치킨좋아 님의 질문
포트폴리오에 첨부할 프로젝트
포트폴리오를 간단하게 만들어서 입사지원을 해보려고 합니다. 흐지부지 끝난 프로젝트 말고, 제대로 된 프로젝트가 2개가 있습니다 그런데 이 프로젝트들이 다 실제로 운영되고 있다보니 다 private 저장소로 되어있어서 깃허브 주소를 공유할 수가 없네요 ㅠㅠ 이런 경우는 어떤 정보를 첨부하는 것이 좋을까요? 그냥 private 레포라는 것 자체가 다른 지원자들에 비해서 불리한걸까요?
개발자
#포트폴리오
답변 0
댓글 0
조회 45
4달 전 · 익명 님의 질문
파이참 코딩 질문입니다.
import pandas as pd import pyautogui score_A = 0 #쾌락 score_B = 0 #사회적환경 score_C = 0 #보복심리 score_D = 0 #B와C가 점수가 같을때를 위해 만듦. question1 = pyautogui.prompt('난 가정 폭력을 당한적 있다.') #질문1 if question1 == "o": #만약 질문1에 맞다고 대답 한다면 score_B += 1 #사회적환경에 1점 추가 score_C += 1 #보복심리에 1점추가 question2 = pyautogui.prompt('난 학교 폭력을 당한적 있다.') #질문2 if question2 == "o": #만약 질문2에 맞다고 대답한다면 score_B += 1 #사회적환경에 1점추가 score_C += 1 #보복심리에 1점추가 question3 = pyautogui.prompt('난 여아가 이성적 으로 좋다.') #질문3 if question3 == "o": #만약 질문3에 맞다고 대답한다면 score_A += 1 #쾌락에 1점추가 question4 = pyautogui.prompt('난 살인을 할때 쾌락을 느낀다.') #질문4 if question4 == "o": #만약 질문4에 맞다고 대답한다면 score_A += 1 #쾌락에 1점추가 question5 = pyautogui.prompt('나의 범죄는 충동적 이였다.') #질문5 if question5 == "o": score_A ++ 0 #딱히 아무 일 없음 question6 = pyautogui.prompt('난 반 사회적 인격 장애를 진단 받은적 있다.') #질문6 if question6 == "o": #질문6에 맞다고 대답한다면 score_A += 1 #쾌락에 1점추가 score_C += 1 #사회적환경에 1점추가 question7 = pyautogui.prompt('나의 인간관계는 좋지않다.') #질문7 if question7 == "o": #질문7에 맞다고 대답한다면 score_B += 1 #사회적환경에 1점추가 question8 = pyautogui.prompt('난 예전에 아동범죄 피해자였다.') #질문8 if question8 == "o": #만약 질문10에 맞다고 대답한다면 score_C += 1 #보복심리에 1점추가 question9 = pyautogui.prompt('나의 범죄는 계획적이였다.') #질문9 answer_list = [] #질문리스트 answer_list.append(question1) #질문리스트에 질문1~9를 추가하는것. answer_list.append(question2) # answer_list.append(question3) # answer_list.append(question4) # answer_list.append(question5) # answer_list.append(question6) # answer_list.append(question7) # answer_list.append(question8) # answer_list.append(question9) # print(answer_list) #질문리스트를 보여지게함 survey_dict= {'문항번호': [1,2,3,4,5,6,7,8,9], '내용': answer_list, } survey_df = pd.DataFrame(survey_dict).set_index("문항번호") #위의 survey_dict을 데이터프레임 형태로 변환. print(survey_df) #데이터프레임으로 변환한 survey_dict를 출력 if score_B == score_C: #만약 사회적환경과 보복심리의 점수가 같다면 score_D += 10 #스코어D에 점수 10점 추가 score_dict = {'A': score_A, 'B': score_B, 'C': score_C, 'D': score_D} #각각의 점수를 딕셔너리(dict)로 저장함. max_score = max(score_dict.values()) #딕셔너리값중 최댓값을 찾아냄. if max_score == score_A: #만약 최댓값이A라면 아래 문장을 출력 print("설문자는 단순한 쾌락을 위해 범죄를 저질렀을것으로 추정됩니다.") if max_score == score_B: #만약 최댓값이 B라면 아래 문장을 출력 print("설문자는 사회적인 환경으로 인해 범죄를 저질렀을것으로 추정됩니다.") if max_score == score_C: #만약 최댓값이 C라면 아래 문장을 출력 print("설문자는 어릴적환경으로 인한 보복심리때문에 범죄를 저질렀을것으로 추정됩니다.") if max_score == score_D: #만약 최댓값이 D라면 아래문장을 출력 print("설문자는 현재의 사회적환경과 어릴적환경으로 인한 보복심리로 인해 범죄를 저질렀을것으로 추정됩니다.") if question9 == "o": #질문9에 맞다고 대답했을때 if question5 == "o": #질문5에도 맞다고 대답한다면 print("설문자가 솔직하게 문항에 답하고있지 않습니다.") #설문자가 제대로 설문에 응하고 있지 않다고 판단. 라는 코드에서 pandas가 어떤 영향을 줬을까요?
개발자
#코딩
#파이참
#pandas
답변 0
댓글 0
조회 18
4달 전 · 성희 님의 질문
파이참 코딩 관련 질문
import pandas as pd #데이터를 쉽고 효율적으로 처리하기 위해 사용하는 라이브러리 import pyautogui #GUI automation 라이브러리로, 마우스 클릭, 키보드 입력 등의 작업을 자동화하는데 사용 score_A = 0 #쾌락 score_B = 0 #사회적환경 score_C = 0 #보복심리 score_D = 0 #B와C가 점수가 같을때를 위해 만듦. question1 = pyautogui.prompt('난 가정 폭력을 당한적 있다.') #질문1 if question1 == "o": #만약 질문1에 맞다고 대답 한다면 score_B += 1 #사회적환경에 1점 추가 score_C += 1 #보복심리에 1점추가 question2 = pyautogui.prompt('난 학교 폭력을 당한적 있다.') #질문2 if question2 == "o": #만약 질문2에 맞다고 대답한다면 score_B += 1 #사회적환경에 1점추가 score_C += 1 #보복심리에 1점추가 question3 = pyautogui.prompt('난 여아가 이성적 으로 좋다.') #질문3 if question3 == "o": #만약 질문3에 맞다고 대답한다면 score_A += 1 #쾌락에 1점추가 question4 = pyautogui.prompt('난 살인을 할때 쾌락을 느낀다.') #질문4 if question4 == "o": #만약 질문4에 맞다고 대답한다면 score_A += 1 #쾌락에 1점추가 question5 = pyautogui.prompt('나의 범죄는 충동적 이였다.') #질문5 if question5 == "o": score_A ++ 0 #딱히 아무 일 없음 question6 = pyautogui.prompt('난 반 사회적 인격 장애를 진단 받은적 있다.') #질문6 if question6 == "o": #질문6에 맞다고 대답한다면 score_A += 1 #쾌락에 1점추가 score_C += 1 #사회적환경에 1점추가 question7 = pyautogui.prompt('나의 인간관계는 좋지않다.') #질문7 if question7 == "o": #질문7에 맞다고 대답한다면 score_B += 1 #사회적환경에 1점추가 question8 = pyautogui.prompt('난 예전에 아동범죄 피해자였다.') #질문8 if question8 == "o": #만약 질문10에 맞다고 대답한다면 score_C += 1 #보복심리에 1점추가 question9 = pyautogui.prompt('나의 범죄는 계획적이였다.') #질문9 answer_list = [] #답변리스트 answer_list.append(question1) #답변리스트에 질문1~9를 추가하는것. answer_list.append(question2) # answer_list.append(question3) # answer_list.append(question4) # answer_list.append(question5) # answer_list.append(question6) # answer_list.append(question7) # answer_list.append(question8) # answer_list.append(question9) # print(answer_list) #질문리스트를 보여지게함 survey_dict= {'문항번호': [1,2,3,4,5,6,7,8,9], '내용': answer_list, } survey_df = pd.DataFrame(survey_dict).set_index("문항번호") #위의 survey_dict을 데이터프레임 형태로 변환. print(survey_df) #데이터프레임으로 변환한 survey_dict를 출력 if score_B == score_C: #만약 사회적환경과 보복심리의 점수가 같다면 score_D += 10 #스코어D에 점수 10점 추가 score_dict = {'A': score_A, 'B': score_B, 'C': score_C, 'D': score_D} #각각의 점수를 딕셔너리(dict)로 저장함. max_score = max(score_dict.values()) #딕셔너리값중 최댓값을 찾아냄. if max_score == score_A: #만약 최댓값이A라면 아래 문장을 출력 print("설문자는 단순한 쾌락을 위해 범죄를 저질렀을것으로 추정됩니다.") if max_score == score_B: #만약 최댓값이 B라면 아래 문장을 출력 print("설문자는 사회적인 환경으로 인해 범죄를 저질렀을것으로 추정됩니다.") if max_score == score_C: #만약 최댓값이 C라면 아래 문장을 출력 print("설문자는 어릴적환경으로 인한 보복심리때문에 범죄를 저질렀을것으로 추정됩니다.") if max_score == score_D: #만약 최댓값이 D라면 아래문장을 출력 print("설문자는 현재의 사회적환경과 어릴적환경으로 인한 보복심리로 인해 범죄를 저질렀을것으로 추정됩니다.") if question9 == "o": #질문9에 맞다고 대답했을때 if question5 == "o": #질문5에도 맞다고 대답한다면 print("설문자가 솔직하게 문항에 답하고있지 않습니다.") #설문자가 제대로 설문에 응하고 있지 않다고 판단. 여기서 score_dict = {'A': score_A, 'B': score_B, 'C': score_C, 'D': score_D} 가 하는 역할은 무엇일까요?
개발자
#코딩
#역할
#파이참
#파이썬
답변 0
댓글 0
조회 21
4달 전 · 익명 님의 질문
파이참 코딩 관련 질문
import pandas as pd #데이터를 쉽고 효율적으로 처리하기 위해 사용하는 라이브러리 import pyautogui #GUI automation 라이브러리로, 마우스 클릭, 키보드 입력 등의 작업을 자동화하는데 사용 score_A = 0 #쾌락 score_B = 0 #사회적환경 score_C = 0 #보복심리 score_D = 0 #B와C가 점수가 같을때를 위해 만듦. question1 = pyautogui.prompt('난 가정 폭력을 당한적 있다.') #질문1 if question1 == "o": #만약 질문1에 맞다고 대답 한다면 score_B += 1 #사회적환경에 1점 추가 score_C += 1 #보복심리에 1점추가 question2 = pyautogui.prompt('난 학교 폭력을 당한적 있다.') #질문2 if question2 == "o": #만약 질문2에 맞다고 대답한다면 score_B += 1 #사회적환경에 1점추가 score_C += 1 #보복심리에 1점추가 question3 = pyautogui.prompt('난 여아가 이성적 으로 좋다.') #질문3 if question3 == "o": #만약 질문3에 맞다고 대답한다면 score_A += 1 #쾌락에 1점추가 question4 = pyautogui.prompt('난 살인을 할때 쾌락을 느낀다.') #질문4 if question4 == "o": #만약 질문4에 맞다고 대답한다면 score_A += 1 #쾌락에 1점추가 question5 = pyautogui.prompt('나의 범죄는 충동적 이였다.') #질문5 if question5 == "o": score_A ++ 0 #딱히 아무 일 없음 question6 = pyautogui.prompt('난 반 사회적 인격 장애를 진단 받은적 있다.') #질문6 if question6 == "o": #질문6에 맞다고 대답한다면 score_A += 1 #쾌락에 1점추가 score_C += 1 #사회적환경에 1점추가 question7 = pyautogui.prompt('나의 인간관계는 좋지않다.') #질문7 if question7 == "o": #질문7에 맞다고 대답한다면 score_B += 1 #사회적환경에 1점추가 question8 = pyautogui.prompt('난 예전에 아동범죄 피해자였다.') #질문8 if question8 == "o": #만약 질문10에 맞다고 대답한다면 score_C += 1 #보복심리에 1점추가 question9 = pyautogui.prompt('나의 범죄는 계획적이였다.') #질문9 answer_list = [] #답변리스트 answer_list.append(question1) #답변리스트에 질문1~9를 추가하는것. answer_list.append(question2) # answer_list.append(question3) # answer_list.append(question4) # answer_list.append(question5) # answer_list.append(question6) # answer_list.append(question7) # answer_list.append(question8) # answer_list.append(question9) # print(answer_list) #질문리스트를 보여지게함 survey_dict= {'문항번호': [1,2,3,4,5,6,7,8,9], '내용': answer_list, } survey_df = pd.DataFrame(survey_dict).set_index("문항번호") #위의 survey_dict을 데이터프레임 형태로 변환. print(survey_df) #데이터프레임으로 변환한 survey_dict를 출력 if score_B == score_C: #만약 사회적환경과 보복심리의 점수가 같다면 score_D += 10 #스코어D에 점수 10점 추가 score_dict = {'A': score_A, 'B': score_B, 'C': score_C, 'D': score_D} #각각의 점수를 딕셔너리(dict)로 저장함. max_score = max(score_dict.values()) #딕셔너리값중 최댓값을 찾아냄. if max_score == score_A: #만약 최댓값이A라면 아래 문장을 출력 print("설문자는 단순한 쾌락을 위해 범죄를 저질렀을것으로 추정됩니다.") if max_score == score_B: #만약 최댓값이 B라면 아래 문장을 출력 print("설문자는 사회적인 환경으로 인해 범죄를 저질렀을것으로 추정됩니다.") if max_score == score_C: #만약 최댓값이 C라면 아래 문장을 출력 print("설문자는 어릴적환경으로 인한 보복심리때문에 범죄를 저질렀을것으로 추정됩니다.") if max_score == score_D: #만약 최댓값이 D라면 아래문장을 출력 print("설문자는 현재의 사회적환경과 어릴적환경으로 인한 보복심리로 인해 범죄를 저질렀을것으로 추정됩니다.") if question9 == "o": #질문9에 맞다고 대답했을때 if question5 == "o": #질문5에도 맞다고 대답한다면 print("설문자가 솔직하게 문항에 답하고있지 않습니다.") #설문자가 제대로 설문에 응하고 있지 않다고 판단. 에서 survey_dict= {'문항번호': [1,2,3,4,5,6,7,8,9], '내용': answer_list, } 이 어떤 역할을 할까요?
개발자
#코딩
#역할
#파이참
답변 0
댓글 0
조회 14
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
4달 전 · 익명 님의 질문
파이참 코딩 관련질문
score_dict = {'A': score_A, 'B': score_B, 'C': score_C} #각각의 점수를 딕셔너리(dict)로 저장함. max_score = max(score_dict.values()) #딕셔너리값중 최댓값을 찾아냄. if max == score_A: #만약 최댓값이A라면 아래 문장을 출력 print("설문자는 단순한 쾌락을 위해 범죄를 저질렀을것으로 추정됩니다.") if max == score_B: #만약 최댓값이 B라면 아래 문장을 출력 print("설문자는 사회적인 환경으로 인해 범죄를 저질렀을것으로 추정됩니다.") if max == score_C: #만약 최댓값이 C라면 아래 문장을 출력 print("설문자는 어릴적환경으로 인한 보복심리때문에 범죄를 저질렀을것으로 추정됩니다.") 여기서 if max == score_B: #만약 최댓값이 B라면 아래 문장을 출력 print("설문자는 사회적인 환경으로 인해 범죄를 저질렀을것으로 추정됩니다.") 말고는 다 출력이 안되는데 왜이럴까?
개발자
#코딩
#파이참
답변 0
댓글 0
조회 23
6달 전 · aigoia 님의 답변 업데이트
6개월 차 미래의 방향성을 못 잡고 있는 PHP개발자입니다.
안녕하세요. 비전공, 6개월 학원다녀 운좋게 취업한 PHP7.x codeigniter 3.x 버전으로 조그마한 웹 에이전시 회사다니고 있는 개발자입니다. 현재 진행한 프로젝트는 작은 프로젝트들까지 합쳐 1X개 정도를 진행하였는데 1~3개월 차에는 단순 CRUD하는 정도의 자그마한 프로젝트에서는 정말 잘하는 것 같다고 이야기를 많이 들었었는데요. 여기서가 문제였던 것 같습니다. 초반에는 10시가 되던 12시가 되던 늘 실력을 먼저 키워야지 하며 야근도 마다하지 않고 진행을 했었습니다. 하지만 최근 들어 제 자신이 나태해졌고 API를 10개 정도 연동시키는 프로젝트를 진행하였는데 정말 헐떡이면서 진행하였습니다. ( 자세히 말씀드리자면 로그인 API는 어렵다고 생각이 들어 토큰방식을 사용하지도 못하였고 단지 들려온 값이 암호화된 아이디를 저장해 해당 값이 있으면 user로 로그인 하는 식으로 진행하였습니다. 프레임워크를 사용한 게 맞나 싶을 정도로 MVC를 지키지 못하고 더티코드로 진행하였습니다. ) 특히 결제 API에 대해서는 (은행사 X 카드사입니다.) 끝끝내 마무리하지 못해 시니어 개발자 분에게 맡긴 후 돌아섰습니다. 이번 프로젝트를 진행하며 제가 너무 부족하단 걸 깨달았고 초반에 비해 정말 많이 나태해졌구나..란 걸 중요하게 깨달았고 공부를 진행해야겠다 라고 생각이 들었고, 도대체 어떤 공부를 해야되지? 라는 생각이 절실하게 느껴 질문 남겨봅니다. PHP, CI개발자로서 현재 저의 역량을 키우기 위해서는 어떤 공부를 해야되고 어떤 식으로 공부해야 될지 감이 안 잡힙니다... 두서없는 이야기가 되었지만 긴 글 읽어주셔서 감사드리고 안타까운 후배 한 명 살려주시는 마음으로 주니어 때 어떤 식으로 공부하셔서 시니어까지 되셨는지 알려주시면 열심히 노력해보겠습니다. 감사합니다.
개발자
#고민
#걱정
#살아남기
답변 1
댓글 0
조회 84
6달 전 · ㅇㅅㅇ 님의 질문 업데이트
React Next infinite scroll
A 라는 infinite scroll페이지에서 500개 데이터를 보여주고 scroll은 70프로 내려왔다고 가정했을 때 다른 페이지 갔다가 돌아왔을 때 500개 데이터랑 scroll 위치 그대로 유지하는 좋은 방법 뭐 있을까요? localstorage나 context 이용했을때는 dom을 다시 랜더링하고 state 값을 다시 주입 했을 때 부드럽지 않은 느낌입니다. redux를 이용해서 전역으로 상태값을 저장해 놓고 컴포넌트에서 사용하면 될까요?
개발자
#react
#next.js
#redux
답변 0
댓글 0
조회 30
6달 전 · 이름 님의 질문
동시성+데드락 제어를 위한 비관적 락 잠금 질문
안녕하세요 글쓰기 커뮤니티 프로젝트를 개발하는 중입니다 회원이 소설을 찜하는 기능(좋아요)을 구현 중에 있는데요 찜 객체는 아래 첨부한 코드와 같이 memberId와 novelId를 외래키로 갖습니다 동시성 이슈를 다뤄보고자 500명의 사용자가 동시에 novelId가 1인 소설을 찜하는 요청을 보낸다는 가정 하에 jmeter로 테스트를 돌려보니 동시성 이슈가 아니라 데드락 문제가 발생해서요 favoriteJDBCRepository.save(memberId, novelId); 시 novelId가 외래키라 외래키 정합성 검사 때문에 db 내부적으로 novelId가 1인 레코드에 read lock이 걸리는 것 같습니다 favorite 객체 save 시 트랜잭션 A가 novelId가 1인 레코드에 대해 read lock을 얻고, novelId가 3인 novel의 favoriteCount(찜 개수)를 +1하고자 write lock 요청 -> favorite 객체 save 시 다른 트랜잭션 B도 novelId가 1인 레코드에 대해 readlock을 얻고, novelId가 1인 novel의 favoriteCount(찜 개수)를 +1하고자 write lock 요청 -> write lock은 read lock이 전부 해제되어야 얻을 수 있음. 트랜잭션 A는 B가 read lock을 release하기를 대기하고 B도 A가 read lock을 release하기를 대기하면서 데드락 발생 일단 novelId로 novel을 비관적 락을 사용해 조회해서 favorite 객체를 생성한 뒤에 저장하는 방식으로 데드락+동시성 이슈 둘 다 해결이 되는데요(chooseFavoriteV2) 이 방법 말고도 더 좋은 대안은 없을까요??
개발자
#비관적락
#데드락
#동시성
#데이터베이스
#백엔드
답변 0
댓글 0
추천해요 1
조회 44
7달 전 · 토토로 님의 새로운 댓글
무조건 대학부터 가야할까요?
안녕하세요, 현재 22살이며 군복무를 70일 남긴 상황입니다, 요즘 저에게 있어 “무조건 대학부터 가는게 맞을까?” 라는 큰 고민이있습니다. 우선 지금 저의 상황을 말씀드리고자합니다, 20살때부터 개발 공부를 시작해서 운 좋게도 군복무와 개인 공부를 함께 할 수 있는 상황이라 현재도 서비스를 만들고 있는 상황입니다, 여태까지 두 번의 기획 to 배포까지의 서비스를 만들어보았고 잡다하게 여러 프로젝트를 시도해보았습니다. (덕분에 디자인, 웹퍼블리싱, 프론트, 백엔드, CI/CD에 대한 전반적인 이해도와 각 영역마다 편차는 크지만 숙련도가 조금은 있습니다) 그래서 이번에 만들 서비스는 이전과 다르게 레퍼런스와 서적을 참고하면서 약 3개월간 (현재까지 5권, 12만자 정도의 핵심 내용들을 필기) 개발 중인 상태며, 과거 저가 일했던 시장에서 불편한 점을 개선하는 서비스라 이 서비스를 원하는 분들이 어느정도 있으실거라 생각합니다. (랜딩 페이지를 만들었을 당시 조금의 홍보로 이틀간 200명이 방문 하셨고, 100분 정도가 이 서비스를 원한다는 의견을 보이셨습니다) 여튼, 개발 과정에서도 이미 얻은게 많고(이미 전체적인 구현이 완료됐음에도 불구하고 아쉬운 점들에 대한 작업이 약 80개 정도 남은 상황입니다) 런칭을 했을 때도 어느정도 기대가 되는 서비스를 만들고 있는 상황이며, 전역 후에는 현재 개발 서적을 정리하고 블로그에 기록하는 방식과 같이 나만의 개인 블로그를 만들어서 조금 더 체계적이며 남들이 저를 알기 쉬운 방법으로 CS 공부를 기록할 예정입니다. (이거를 위해서 20살때부터 영어 공부를 했으며, 아직 부족하지만 필요하다면 mit open course도 번역하면서 cs 공부와 영어 공부를 함께하는 방식으로 가고자 합니다) 이후 상반기에 아쉽게 면접에서 떨어진 연합 동아리에 다시 지원해보면서 다른 활동들(우테코, 소마, etc)에도 도전해 보고자 합니다, 이때 cs와 같은 이론적인 부분에서 부족한 점들을 딥 다이브 해보면서 개발자로서 역량을 키울 생각입니다. (이번에 개발 서적을 읽으면서 cs를 빨리 깊게 공부해보고 싶은 욕구가 생겼습니다) 그래서 종합적으로 2025년에는 계속해서 여태껏 만들고 싶었던 서비스를 만들고 부족한 공부를 하며, 여러 활동에 참여하면서 구직 활동도 해보는, 모든면에서 성장하고 싶습니다. 서론이 길었습니다, 지금까지의 이야기만 봤을 때 이미 제 마음이 정해진 상태에서 질문을 드리는 거 같아 죄송한 마음이 들지만, 이런 상황에서도 저가 “착각하고 있는건 아닐까?” 하는 불안함 때문에 “재수를 해서라도 나름 괜찮은 대학을 가야할까?”, “돈만 주면 가는곳이라도 가서 학사라도 따야할까?” 라는 고민이 드는 거 같습니다. 20살, 처음 개발을 시작했을 당시에 품고있던 의심이 어느정도 개발자로써 성장한 이 상황에서도 계속해서 드는 거 같습니다, 그래서 현재 제 생각은 “우선 취업을하고 경력자로써 인정 받을 수 있는 시기에 대학을 가서 학사를 따는게 좋지 않을까”하는 생각입니다. 이외에도 경제적 형편과 같은 추가적인 요소도 있지만 이전에 나이에 비해서 쉽게 돈을 벌었던 경험때문에 오만 또는 자만하고 있는게 아닐까 하는 생각입니다.(영상 관련일을 했었습니다) 부연설명을 해야하는게 많아서 글에 두서가 없는 점 죄송하며, 긴 글 읽어주셔서 감사합니다. 세줄요약 1. 취준생으로써 어느정도 실력이 쌓인 상태 (3년 정도 공부, 군복무 포함, 코테 플4) 2. 그래도 학사가 필요하지 않을까 하는 마음 3. 우선 취업하고 경력을 인정 받는 시기에 학사따기 vs 나이가 어리니깐 일단 아무곳이나 대학가보고 아니면 자퇴하거나 계속해서 학사따고 취업 (경제적 형편이 안 좋다는 문제가 있음) 마지막으로, 솔직히 아무곳이나 가더라도 4년 동안 다니면서 학사를 딸 용기가 없어서 반년내로 자퇴할 거 같은 느낌인데 이게 착각이 아닐까 하는 마음입니다, 그리고 뜬금없지만, 매칭 시스템을 구현하기 위해서 다익스트라 알고리즘 대신 가독성과 확장성 측면에서 더 좋은 코사인 유사도를 사용하거나 아호코라식 알고리즘이나 엘라스틱 서치를 쓸려다가 오버 엔지니어링 느낌이 들어서 Spring Data JPA Specification으로 해결하거나 조회수 중복을 막기 위해서 유저의 ip 주소를 redis에 저장하고 ttl 으로 자동으로 초기화하거나 n + 1 문제를 해결하기 위해서 fetch join에서 EntityGraph로 해결하고 동시성 문제도 AOP를 사용해서 해결하는 등 책을 통해서 또는 직접 찾아보고 해결하는 과정이 즐거운데 이게 틀린길인가 싶으니깐 슬픈 거 같습니다..
개발자
#학사
#취업
#개발공부
#대학교
#취준고민
답변 1
댓글 1
조회 156
7달 전 · 익명 님의 질문
Expo SQLite WHERE 조건 한글 안됨
React Native Expo에서 앱을 개발중에 sql문이 오류가 뜹니다. 코드는 아래와 같습니다. async function SearchName() { console.log("load data"); try { const db = await SQLite.openDatabaseAsync("MountBedge.db"); const data = await db.getAllAsync(`SELECT * FROM HikingData WHERE Name = '가';`); setLoadedData(data); } catch (error) { console.error("Error testing database connection:", error); } } 문제가 되는 부분은 getAllAsync의 WHERE부분입니다. 한글로 검색한 부분을 영어로 변경하면 오류도 뜨지 않고 검색도 잘 됩니다. 한글로 검색 시 뜨는 오류는 아래와 같습니다. Error testing database connection: [Error: Calling the 'prepareAsync' function has failed → Caused by: Error code 1: near "'ㄱ'": syntax error] 혹시 해결할 방법을 아시는 분이 계시나요? 이게 expo에서는 해결이 가능한건지, 아니면 react native cli로 넘어가야 하는건지 모르겠습니다. 추가로 expo에서 sql문으로 데이터를 저장 시 db가 어디에 있는지 알 수 있는 방법이 있다면 알고싶습니다. 영어를 못해 영어로는 검색을 거의 안해봤지만 자료가 너무 없네요...
개발자
#react-navite-expo
#react-native
#expo
#sql
답변 0
댓글 0
조회 43
7달 전 · 경범 님의 질문
토큰 관리, 로그인 유지를 현업에서는 어떻게 진행하는지 궁금합니다
안녕하세요 토이프로젝트로 인증/ 인가 파트를 맡게되었습니다 이전의 프로젝트에서는 로컬스토리지과 전역 상태 관리 라이브러리의 persist를 활용하여 토큰과 로그인상태를 로컬스토리지에 저장하여 진행하였습니다 하지만 이번에 새롭게 진행하는 프로젝트를 위해 다양한 웹사이트를 개발자도구로 참고하였지만 토큰이나 isLogined와 같이 로그인 여부 상태를 로컬, 세션 스토리지에서 관리하는 사이트를 확인할 수 없었고, 검색을 통해 보안을 위해 Http Only 쿠키를 통해 액세스 토큰과 리프레시 토큰을 관리하는 방법이 일반적이란것을 알 수 있었습니다 이러한 방법에서 몇 가지 궁금증이 생겨 질문을 드리고 싶습니다 1. 현업에서는 어떠한 방식으로 토큰을 관리하고 로그인 상태를 유지하나요? 2. 만약 http only 쿠키를 사용하게 된다면, 쿠키에 저장된 토큰을 클라이언트에서 조작할 수 없으니, 매번 페이지를 렌더링 할 때마다 토큰이 유효한지 api 호출을 통해서 로그인 상태를 유지해야하는걸까요? (api를 통해 토큰이 유효하다면 로그인 유지, 아니라면 로그인 페이지 리다이렉션) 3. http only 쿠키 외에 인증 / 인가를 위해서 클라이언트 단에서 보안적으로 신경써야하는 부분은 어떠한것이 있을까요? 가장 기본적이지만 가장 어려운 인증/인가 부분 현업 선배님들께서는 어떻게 진행하시는지 답변해주시면 감사하겠습니다
개발자
#front
#react
#login
#jwt
#프론트엔드
답변 0
댓글 0
추천해요 2
조회 124
7달 전 · 익명 님의 질문
게시글 조회수 증가 방법에 대한 고민
안녕하세요! 커뮤니티 서비스를 개발하면서 조회수 증가에 대한 로직에 대한 고민이 생겨 이렇게 글을 작성하게 되었습니다. 현재 Redis를 활용하여 게시글 조회에 대한 카운팅을 수행하고 이를 일정 주기마다 DB에 반영하도록 했는데 이렇게 되면 조회수를 실시간적으로 사용자에게 보여주지 못하는 구멍이 생겨 이를 보완하고자 다음 두가지 방법을 고려해봤습니다. 1. 현재 설정한 주기보다 더 빠르게 반영하도록 해서 비교적 실시간과 가까운 결과를 반영한다. 2. 게시글 조회수에 대한 정보가 필요할 때 마다 Redis에 저장된 카운팅을 가져와 이를 더한 값을 반환해준다. 입니다. 개인적으론 조회수가 정말 실시간성이 필요한 부분인가에 대한 고민도 있고, 현업에서는 이와 같은 부분들을 어떻게 해결해나가는지 궁금하기도 합니다!! 마지막으로 긴 글 읽어주셔서 감사합니다 😀
개발자
#백엔드
#개발고민
#redis
#db
답변 0
댓글 0
조회 84
7달 전 · 박제현 님의 새로운 댓글
llama3.1 사용하여 챗봇 개발을 하려합니다
현재 재직 중인 회사의 솔루션 프로그램에 사용자가 저장한 데이터를 학습시켜 챗봇을 개발하려 합니다 대표님께서 개발자가 아니시고 저는 java만 다룰 줄 아는데 새로운 직원을 뽑기보다 저에게 개발에 필요한 교육을 받은 후 전적으로 맡아 달라고 하셨는데요 일단 파이썬을 배워야 한다는 것은 알고 있습니다 llama를 다루기 위해서 또 배워야 하는 분야가 있을까요? AI활용 기반 교육을 하는 학원들은 보통 chatGPT를 활용하는 것으로 알고 있어서 학원에서 진행하는 교육을 받아도 도움이 될지 모르겠습니다
개발자
#llama
#ai
#python
답변 1
댓글 1
조회 256
8달 전 · 이윤호 님의 새로운 답변
webview_flutter 안드로이드 cookie 질문이요...
회사에서 부득이하게 앱개발자 없이 앱개발을 해야하는 상황이라 웹으로 만들고 flutter 웹뷰를 만들었습니다. iOS에서는 쿠키에 jwt가 저장되서 자동로그인 기능이 잘 작동되고 있는데요, 안드로이드에서는 cookie를 따로 관리를 해줘야 한다고 하더라구요... 그래서 webview_cookie_manager 와 flutter_secure_storage를 이용해서 onPageFinished가 될 때 main page이면 cookieManager.getCookies로 jwt를 가져오고 storage.write로 쿠키를 저장해 주고 있습니다. 그리고 initState()할때 Future<void> _loadStoredCookies() async { final jwt = await storage.read(key: 'jwt'); print('jwt : $jwt'); if (jwt != null) { final cookieManager = WebviewCookieManager(); await cookieManager.setCookies([ Cookie('jwt', jwt) ..domain = "메인페이지" ..path = "/" ..secure = true ..httpOnly = true ]); bool hasCookies = await cookieManager.hasCookies(); print('쿠키가 존재하는가? $hasCookies'); } } 이렇게 쿠키를 확인하고 쿠키를 set해주는데 백그라운드에서 앱을 완전히 종료시키고 다시 실행하면 쿠키가 사라지더라고요... 왜 그런건가요...??
개발자
#flutter
#cookie
#android
답변 1
댓글 0
조회 220
8달 전 · 박정범호 님의 답변 업데이트
자동 로그인 vs 아이디 저장
프론트엔드 개발자 희망하는 대학생입니다! 웹 사이트에서 로그인 페이지를 개발할 때, 편의성을 위해 자동 로그인이나 아이디 저장 기능을 추가하여 개발하려고 하는데 현업에선 어떤 기능을 더 많이 사용하여 개발하는 지 알고 싶습니다!
개발자
#로그인
#프론트엔드
답변 1
댓글 0
조회 47
8달 전 · 박인성 님의 질문
MBTI 사이트 직접 만들어 보려고 합니다
워드프레스로 직접 MBTI 사이트를 만들고 친구들한테 공유해서 MBTI 결과를 엑셀이나 데이터베이스 같은 곳에 저장해서 확인해보고 싶은데 감이 도저히 안 잡히네요... 인터넷 검색해도 비슷하게 사이트 만든 블로그 글이나 방법은 안 보여서 챗gpt에 검색해보니 플러그인을 설치하면 된다고 하는데 방향성이 너무 많은 거 같습니다😂 방향성이라도 제대로 하나 제시 받고 싶어요
개발자
#wordpress
#plugin
#개발-고민
#프론트엔드
답변 0
댓글 0
조회 90
8달 전 · 개발자A 님의 새로운 답변
다국어 변역 api사용 저장시 느린 속도 문제
DB에 정보 저장하는데요 ranslationResponse response = restTemplate.postForObject(TRANSLATION_ENDPOINT, request, TranslationResponse.class); api를 통해 영어 중국어 일본어로 변역해서 변역 내용 같이 DB에 저장 하려고 합니다. 그런데 저장할 때 문장이 길어지면 변역 시간이 느려저서 사용자쪽에서 많이 기다려야 하는 상황입니다. 기본 내용만 저장하고 파이널리문에서 번역해서 다시 저장하는 방법을 생각 해서 적용 해보았는데 브라우저에서 결과 받는 속도는 같았습니다.ㅠ 그렇다고 브라우저에서 ok 결과를 받은 후 번역을 비동기로 호출하는 것도 불필요한 비용 발생일 것 같고요 창을 먼저 꺼버리자니 오류 처리 못할 것 같구요 저장중 이라는 알림으로 처리 해야하는건지 사용자 입장에서 개선 하고 싶은데 방법을 잘 모르겠습니다. 혹시 해결방안 알고 계신분이 계시다면 조언 부탁드립니다.
개발자
#다국어-변역-api
#spring-boot
답변 1
댓글 0
조회 41
8달 전 · 김하늘 님의 새로운 답변
리덕스에 대해 궁금한점이 있습니다.
안녕하세요 리덕스에 대해 여쭤볼게 있습니다. 리덕스를 사용하면 state를 부모에서 자식으로 계속 내려주는 방법으로 하지 않고 필요한 컴포넌트에 바로 state를 전달 할 수 있다...라고 이해를 했습니다. 여기서 궁금한점이 예를 들어 데이터를 저장하는 state도 있고 모달창을 할때 사용하는 state도 있을텐데 모든 state를 리덕스로 만드는건가요? 아니면 어떤 state만 리덕스로 저장해서 사용하면 되는지 쉽게 알려주시면 너무 감사드리겠습니다.
개발자
#프론트엔드
#리액트
#리덕스
답변 1
댓글 0
조회 46
9달 전 · 김신우 님의 새로운 댓글
제가 프론트엔드가 맞는건지 모르겠어요.
제가 현재 프론트엔드로 다른 친구들과 백엔드 배포를 나눠서 학교에서 캡스톤을 하고 있는데요.. 근데 제가 아직 api를 연결을 제대로 하는 법도 모르고 어떻게 어디서 공부를 해야하는지 모르겠고 백엔드를 하면 백엔드도 재미있는데 이때까지 8개월동안 나는 프론트엔드로 뭐를 했는지도 모르겠고 이대로 하는게 맞나 싶어서 어떻게 해야 할까요..? 지금은 할 수 있는거는 axios로 데이터 불러오는것과 어느정도 시간만 주면 회원가입, 로그인 정도는 만들 수는 있는데 토큰을 어떻게 저장을 해야 하는지 모르겠어요...
개발자
#react
#취업
#고등학생
#프론트엔드
#프론트엔드 프론트 리액트 api
답변 1
댓글 1
조회 80
9달 전 · 박정환 님의 새로운 답변
useState와 useEffect에 대해 너무 헷갈립니다.
안녕하세요 useState와 useEffect를 공부중인데 아직 초보자라 너무 헷갈리더라구요. 제가 이해한 것은 우선 useState는 클릭했을 때 모달창이 나온다거나, 사용자가 input에 입력한 값처럼 무언가를 동적으로 변경이 되게 할 때 사용하고 또 API를 사용할 때 이 데이터를 저장할 때 사용한다...로 알고 있고 useEffect는 컴포넌트가 처음 렌더링 될 때 html 부분이 먼저 화면에 그려진 후 데이터가 실행되게 할 때 useEffect를 사용한다...까지만 이해하고 있습니다. 여기서 궁금한점이 첫번째로, useState는 제가 설명한대로만 사용하면 되는지 궁금합니다. 두번째로, useEffect는 이 안에 작성한 코드는 한번만 실행이 된다라고 하는데 이 한번만 실행이 된다라는게 무슨 말인지 그리고 useEffect안에 console.log()와 useEffect 밖에 console.log() 이렇게 했을 땐 뭐가 다른것인지 너무 헷갈립니다. 제가 아직 초보자라 정말 정말 쉽게 설명해주시면 너무 감사드리겠습니다. ㅜㅜ
개발자
#usestate
#useeffect
#초보-공부
#프론트엔드
답변 3
댓글 3
조회 138
9달 전 · 익명 님의 질문
로그인 구현 관련 질문 subdomain.com
안녕하세요 슬랙처럼 로그인을 하면 워크스페이스 리스트가 나오고 해당 워크스페이스를 클릭하면 해당 워크 스페이스로 로그인이 되는 페이지를 구현하려 하는데요. Next.js를 사용중이고 iron-session 라이브러리 통해서 세션을 저장하고 있습니다. ex) app.oursite.com <- 통합 로그인 페이지 워크스페이스 클릭하면 해당 워크스페이스 로그인을 하고 세션을 저장해서 워크 스페이스 사이트로 redirect 시키려 하는데, const session = await getIronSession<Session>(cookies(), { cookieName: 'cookie', password: IRON_SESSION_SECRET_KEY, cookieOptions: { secure: false, // 로컬 테스트에서는 false, 실제 배포에서는 true로 설정 sameSite: 'Lax', // sameSite 옵션을 Lax로 설정 domain: 'localhost', // 로컬 테스트 시 domain 설정을 제거하거나 localhost로 설정 path: '/', }, }); {workspace1}.ourstie.com {workspace2}.ourstie.com 세션 저장이랑 redirect 처리했을때 세션 저장하고 해당 페이지 확인은 하였는데 해당 페이지에서 로그인 인증은 제대로 되지 않고 있습니다. 로그인 페이지로 이동되더라고요 로그인이 안되는 원인으로 짐작가는게 있으면 알려주시면 감사하겠습니다
개발자
#로그인
#통합로그인
#세션
#nextjs
답변 0
댓글 0
보충이 필요해요 2
조회 58
9달 전 · JJ 님의 질문
백엔드 질문 임시저장
백엔드 질문 임시저장
PM/PO/기획자
#react
답변 0
댓글 0
조회 34
9달 전 · 삭제된 사용자 님의 답변 업데이트
서버에서 이미지 반환시 s3 url과 base64중 어느것이 나을까요?
서버에서 이미지 반환시 s3에 저장된 이미지의 url을 반환하는 방법을 주로 사용했습니다. 그런데 이미지가 10개라면 클라이언트에서 총 11번 리퀘스트를 보내야 하니 성능이나 비용에 문제가 생길 수 있다, 그래서 파일 크기가 작은 이미지를 여러개 반환하는 경우, base64로 인코딩해서 api응답에 한번에 보내는게 낫다는 이야기를 들었는데 현직자 분들은 어떤 방법이 더 좋다고 생각하시는지 궁금합니다.
개발자
#백엔드
#이미지처리
#이미지
답변 1
댓글 0
조회 153
10달 전 · 이승환(Ethan) 님의 새로운 답변
최근 개인 프로젝트를 만들고자하는데
spring을 이용해서 아디다스 쇼핑몰을 만드려는 중이고 쇼핑몰 기능은 물론, 게시판, 댓글, 관리자 페이지 기능 등등을 넣으려고 생각중입니다 근데 보니까 제품의 상세페이지는 한 제품당 jsp파일을 하나씩 생성해서 하드코딩으로 만들게 되더라구요..? 근데 너무 비효율적이고 시간이 많이 드는 작업이라고 생각되는데 혹시 현업에서는 이 제품들의 상세정보 (ex)신발의 사진, 설명, 사이즈 등등) 가 들어가는 상세 페이지를 하나씩 만드시는 건가요..? 아니면 상세 페이지틀을 먼저 잡아놓고 그 안에 들어가는 정보들을 db에 저장해서 컬럼명(제품 이름, 사진, 설명 등 )을 불러와서 보여주는 식으로 구현하시는건가요?! 혼자 프로젝트를 진행하고 있고 너무 궁금한게 많지만 의지만 앞선 느낌이라 조언 한번씩만 해주시면 감사하겠습니다ㅜㅜ
개발자
#java
#프로젝트
#spring
답변 1
댓글 0
조회 87