#eda

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

6달 전 · 김낙현 님의 질문

background mode Location 질문 입니다.

안녕하세요. 선배님들 질문이 있습니다. ios Background modes에 location를 이용해서 앱을 죽이지 않고 계속 백그라운드에서 프로세서를 처리 하게 처리를 하였습니다. 하지만 최근에 확인해 보니 간헐적으로 백그라운드에서 처리가 안되는 문제를 확인 하였습니다. 테스트를 하는중인데 showsBackgroundLocationIndicator를 선언하면 location이 스캔이 계속 돌아가는거 같습니다. 혹시 자세히 아시는분 있으시면 코멘트 부탁 드립니다. 좋은 하루 되시기 바랍니다.^^ var locationManager: CLLocationManager = .init() override init() { super.init() setup() } func setup() { locationManager.delegate = self locationManager.pausesLocationUpdatesAutomatically = false locationManager.allowsBackgroundLocationUpdates = true locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers locationManager.distanceFilter = 99999 } // end of setup func backgroundTaskStart() { isRuning = true locationManager.startUpdatingLocation() locationManager.startMonitoringSignificantLocationChanges() } // end of backgroundTaskStart

개발자

#ios

답변 0

댓글 0

조회 24

7달 전 · 익명 님의 질문

Devexpress schedulercontrol

schedulercontrol에서 전체적으로 배경색을 검은색으로 폰트색을 흰색으로 하려고 CustomDrawTimeCell과 CustomizeDateNavigationBarCaption를 사용해서 셀은 변경됐는데 bapcaption 이벤트 쪽은 코드 objectinfo, viewifo,handled부분에서 오류가 발생해서 변경이 안됩니다. 혹시나 아시는 분은 도움주시면 감사하겠습니다. private void schedulerControl1_CustomDrawTimeCell(object sender, DevExpress.XtraScheduler.CustomDrawObjectEventArgs e) { if (e.ObjectInfo is SchedulerViewCellBase cell) { // 셀의 배경색을 검은색으로 설정 cell.Appearance.BackColor = Color.Black; cell.Appearance.ForeColor = Color.White; // 텍스트 색상도 흰색으로 설정 e.Handled = true; // 기본 그리기 동작을 무시하고 커스텀 스타일을 적용 } } private void schedulerControl1_CustomizeDateNavigationBarCaption(object sender, DevExpress.XtraScheduler.CustomizeDateNavigationBarCaptionEventArgs e) { if (e.ObjectInfo is DevExpress.XtraScheduler.ViewInfo.SchedulerHeaderViewInfo headerViewInfo) { headerViewInfo.Appearance.BackColor = Color.Black; // 배경색을 검은색으로 설정 headerViewInfo.Appearance.ForeColor = Color.White; // 폰트 색상을 흰색으로 설정 e.Handled = true; // 기본 그리기 동작을 무시하고 커스텀 스타일을 적용 } }

개발자

#devexress

#schedulercontrol

#scheduler

답변 0

댓글 0

조회 27

8달 전 · 우엉김밥 님의 질문

채팅 디비 설계 질문이요!

안녕하세요:) 저는 ! 웹소켓과 관계형디비+프리즈마 를 이용해서 백엔드를 구성하고, 리액트로 만든 프론트 와 양방향 채팅 서비스를 만들려고 합니다! 채팅방 DB스키마를 작성하는데 어려움을 겪어 질문을 남깁니다. 현재 프리즈마에서 model ChatRoom { id Int @id @default(autoincrement()) name String creatorId Int users ChatRoomUser[] messages Message[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model ChatRoomUser { id Int @id @default(autoincrement()) userId Int // 외부 API에서 가져올 사용자 ID chatRoomId Int chatRoom ChatRoom @relation(fields: [chatRoomId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @@unique([userId, chatRoomId]) } model Message { id Int @id @default(autoincrement()) chatRoomId Int senderId Int // 외부 API에서 가져올 사용자 ID receiverId Int? // 선택적 필드, 단체 채팅에서는 null content String timestamp DateTime @default(now()) chatRoom ChatRoom @relation(fields: [chatRoomId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @default(now()) } 이런식으로 구현하였는데 조언좀 부탁드립니다.ㅠㅠ

개발자

#db

#스키마

#node

#prisma

#설계

답변 0

댓글 0

보충이 필요해요 1

조회 78

9달 전 · 우엉김밥 님의 질문 업데이트

react-query,

안녕하세요. 리액트쿼리 최신v5를 사용하면서 어려움에 처해 글을 남기게 되었습니다. 제가 만든 코드는 아래와 같습니다. Home.jsx (맨처음 데이터를 받아서 List에 뿌려주는 역할) const { data, error, isLoading } = useFilteredApartmentData(); console.log('home data',data) <List data={data.speechCommands} /> Search.jsx (사용자 검색) const { updateFilters } = useFilteredApartmentData(); //커스텀훅 const handleSubmit = (filter) => { updateFilters(filter); }; useFilteredApartmentData .jsx (훅) const useFilteredApartmentData = () => { const [filters, setFilters] = useState({ skip: 0, take: 15 }); const { data, error, isLoading } = useQuery({ queryKey: ["apartments", filters], queryFn: () => fetchFilteredApartmentData(filters), placeholderData: keepPreviousData, enabled: !!filters, }); console.log("훅안에서 새로운데이터", data); const updateFilters = (newFilters) => { console.log(newFilters); setFilters((prevFilters) => ({ ...prevFilters, ...newFilters, })); }; return { data, error, isLoading, updateFilters, }; }; export default useFilteredApartmentData; 저의 계획은 search.jsx에서 사용자의 검색을 받으면 훅의 updateFilters 를 실행시키고 useState가 바뀌니 useQuery의 재 시작과 함께 새로운 데이터를 받아 List에서 새로운 데이터를 뿌리는 것이었습니다. 그런데 console.log("훅안에서 새로운데이터", data); 이 부분도 새로운 데이터로 잘 찍히는데 문제는 Home.jsx 에서 console.log('home data',data) 이부분은 안찍히네요 결과적으로, 리스트의 변동이 없습니다. 혹시 아시는분 답변주시면 정말 감사하겠습니다 ㅠㅠ

개발자

#react

#react-query

답변 0

댓글 0

조회 72

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

리액트쿼리 데이터 리패칭 이렇게 하는거 아닌가요?

home.jsx const { data, error, isLoading } = useFilteredApartmentData(); <List data={data.result} /> 훅.jsx const useFilteredApartmentData = () => { const queryClient = useQueryClient(); const [filters, setFilters] = useState({ skip: 0, take: 15 }); const { data, error, isLoading } = useQuery({ queryKey: ["aaa", filters], queryFn: () => fetchFilteredApartmentData(filters), placeholderData: keepPreviousData, enabled: !!filters, }); const mutation = useMutation({ mutationFn: (filter) => { fetchFilteredApartmentData(filter); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["aaa", filters] }); }, }); const updateFilters = (newFilters) => { console.log(newFilters); setFilters(newFilters); mutation.mutate(newFilters); }; return { data, error, isLoading, updateFilters, }; }; export default useFilteredApartmentData; 여기서 처음에 데이터 패칭은 잘 이루어 지는데 fillter가 바뀌면 훅의 updateFilters 가 동작하여 새로운 데이터를 list에 다시 뿌리려고하는데 화면에 변화가 없습니다 ㅜㅜ 이렇게 하는거 아닌가요??

개발자

#react

#react-query

답변 1

댓글 2

조회 62

10달 전 · 김태우 님의 새로운 답변

git 협업중 파일 날라감…

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

개발자

#깃

#github

#git

#깃허브

#이클립스

답변 1

댓글 0

조회 117

10달 전 · 지민성 님의 질문

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

조회 147

일 년 전 · 삭제된 사용자 님의 새로운 댓글

데이터분석 EDA 개인프로젝트를 처음으로 진행했는데, 죄다 말장난으로만 채운 느낌이 들어요

국비학원 다니고 있는 취준생입니다. 이번에 처음으로 개인 EDA프로젝트를 준비하고 있는데요. 내가 원하는 데이터는 다 회사 내부데이터라 접근할 권한이 없어서 결국 정답을 정해놓고 그에 맞는 데이터를 찾아 분석이랍시고 채워넣고 구색 맞춰 PPT좀 만들었어요. 데이터 찾기도 전에 미리 생각해둔 아이디어를 인사이트랍시고 써넣는데 너무 하찮아서 스스로가 싫어지더라고요. 처음엔 다 이런건지 아님 제가 부족한건지 둘다인건지 모르겠습니다.

개발자

#데이터분석

#eda

#프로젝트

답변 1

댓글 1

조회 1,339

일 년 전 · 김병연(Vintz) 님의 새로운 댓글

리액트 쿼리 로직을 커스텀 훅으로 만들 때, 어디까지 추상화를 하시나요?

안녕하세요. 현재 프로젝트에서 기존 데이터 페칭 로직들을 전부 리액트 쿼리로 옮기면서, 고민이 생겨 질문을 드립니다. 클라이언트 상태와 서버 상태로 폴더를 나누고, 쿼리 로직들을 커스텀 훅으로 만들고 있습니다. 그런데 이 커스텀 훅의 추상화를 어디까지 해야할지 고민이 됩니다. 3개의 서비스 페이지가 있고, 사용하는 쿼리 내부의 로직이 비슷할 경우, 아래의 두 가지 방법을 생각해 봤습니다: 1. 재사용을 위해 매개변수로 URL, URL parameter, Query key를 추가 2. 유지보수를 위해 URL parameter만 매개변수로 추가하고, 개별 커스텀 훅 생성 예시 코드로, 1번의 코드는 `useDashboard('/data', startDate, endDate, 'service01/dashboard');` 이런식으로 사용을 하고, 2번의 코드는 `useService01Dashboard(startDate, endDate);, useService02Dashboard(startDate, endDate);...` 이렇게 사용을 합니다. 현재는 2번의 방식으로 구현을 하고 있습니다. 그 이유로는 불러오는 서버 데이터가 대부분 동일하지만 다른 경우도 있어서 타입을 다르게 줘야했고, URL을 쉽게 구분하기가 어려워서 한 곳에서 관리하고 싶었습니다(URL이 REST API 설계와 다소 거리가 있습니다.). 결론은, 함수 호출자의 입장(데이터를 불러오는 함수)에서 어디까지 알아야하나?가 고민입니다. 리액트 쿼리 깃허브에서 예시도 보고, 이렇게 글을 쓰다보니 현재로썬 2번이 더 맞다고 생각이 들긴 합니다. 여러분은 보통 어떤식으로 구현을 하시는지 궁금해서 이렇게 질문을 드리게 되었습니다. 어떤 의견이라도 좋으니 답변을 주시면 정말 감사할 것 같습니다!

개발자

#react

#react-query

답변 1

댓글 1

조회 154

일 년 전 · 익명 님의 질문

React로 Table 만드는 것에 대한 질문입니다!

회사에서 Fetching 한 데이터를 위에서 가공 후에 Table Component에 주입을 하는 로직을 개발을 했습니다. 만약 데이터(행)가 100개이고 열의 개수가 9개일 경우 900개의 데이터를 주입을 하면 될 것으로 생각을 했고, 렌더링 속도에 문제가 없을 것으로 예상을 했습니다. 근데 렌더링 시 약 3초 정도의 연산 속도가 걸리게 되었고 console을 찍어보니 객체 안에 다른 많은 값이 있는 것을 알게 되었습니다. 1. Table에 가공된 데이터를 주입 시에 어떤 형식으로 데이터를 주입을 시켜야 할까요? 2. 만약 Table에서 하나의 Column 값만 바꾸고 싶다면 테이블 전체 렌더링이 아닌 다른 어떤 방식을 사용하실 건가요? 3. TableDataType도 맞게 작성을 했는지 잘 모르겠습니다. 4. 추측 상으로 Styled Component도 렌더링 속도 저하의 문제가 되는 것 같은데 렌더링 속도 저하 원인에 대한 정확한 이유를 아직 파악하지 못했습니다. (주입하는 데이터 형식의 문제인 것 같은데 1번과 이어지는 질문이기도 합니다)

개발자

#react

#table

#렌더링

#최적화

답변 0

댓글 0

조회 70

일 년 전 · 익명 님의 질문

플러터 질문. 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

조회 40

일 년 전 · 익명 님의 질문

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

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

개발자

#react

답변 0

댓글 0

조회 41

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

[Flutter] theme: TemeData(primarySwatch: Colors.blue,), 관한 질문

초보 Flutter 입니다. theme: TemeData( PrimarySwatch: Colors.blue,), 이 코드가 전체적인 테마를 파란색으로 한다고 이해했는데 Appbar 부분 색상이 안보이고 제목만 보입니다. 따로 Appbar 배경색을 지정해도 되지만 왜 안되는지 궁금합니다.

개발자

#flutter

답변 1

댓글 0

조회 248

일 년 전 · 김가영 님의 새로운 댓글

안드로이드 스튜디오 공공 데이터 api 사용 질문

안녕하세요, 이런 질문 글을 여기에 적어도 되는진 모르겠지만 문제가 된다면 삭제하겠습니다. 현재 안드로이드 스튜디오 내 구글 지도와 연동을 하여 저의 위치를 띄우는 거까지는 하였습니다. 동물병원 공공 데이터 api를 받아 구글 지도와 연동을 하고 싶은데, 활용 신청까지 하였지만 이해가 잘 안 가서 글을 남기게 되었습니다. 언어는 java를 사용 중입니다. 1. 동물병원 공공 데이터 api를 json 파일로 다운로드 받아 안드로이드 스튜디오 내에서 asset로 파일을 따로 만들어서 그 안에 json 파일을 넣어야 하나요? 2. 공공데이터 api 사용하기 위해 따로 클래스를 만들어야 할까요? 3. 구글 지도를 연동한 클래스 소스 코드 아래에 추가적인 소스 코드를 작성해야 하나요? 제가 사용하려는 api는 링크와 같습니다. 링크: https://www.data.go.kr/data/15075937/fileData.do#tab-layer-openapi 한 번만 알려주신다면 정말 감사하겠습니다..

개발자

#안드로이드스튜디오

#자바

#구글지도

#java

#api

답변 1

댓글 1

조회 117

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

(SSR 새로고침 문제)NextJS page에서 redux persist gate 설정하면 Client컴포넌트로 인식되는 문제

NextJS Pages Router에서 유저 데이터를 상태관리하기위해 redux를 사용했으나, 새로고침 시 데이터가 날라가는 문제를 해결하기 위해 persist gate를 사용했습니다. 하지만 redux persist gate를 사용하면 클라이언트 컴포넌트로 인지되는 문제가 있습니다. 궁금한 것 1) persist gate를 잘못써서 생긴 문제일까요? 아님 persist gate를 쓰면 안될까요? 2) 해결 방법으로 생각 해본 것은, "persist gate를 사용하지 않고 매 새로고침 시 저장되어있는 local storage에서 데이터를 새로 가져온다." 입니다. 3) ssr시 상태관리 새로고침 다른 방법으로 해결해본 경험 있으시면 아무렇게나 대답해주시면 감사하겠습니다!!! ----------------------------------------------- 문제의 코드 위치: https://github.com/bbookng/zippyziggy-v2/blob/main/frontend/zippy-ziggy/src/pages/_app.tsx 문제의 코드: import GlobalStyle from '@/styles/Global.style'; import useDarkMode from '@/hooks/useDarkMode'; import { media } from '@/styles/media'; import { darkTheme, lightTheme } from '@/styles/theme'; import type { AppProps } from 'next/app'; import { ThemeProvider, createGlobalStyle } from 'styled-components'; import normalize from 'styled-normalize'; import '@/styles/index.css'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import AppLayout from '@/layout/AppLayout'; import store, { persistor } from '@/core/store'; import { PersistGate } from 'redux-persist/integration/react'; import { Provider } from 'react-redux'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import 'toastify-js/src/toastify.css'; import { ToastContainer } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import DefaultHead from '@/components/Head/DefaultHead'; import Construction from './construction'; const queryClient = new QueryClient({ defaultOptions: { queries: { refetchOnWindowFocus: false, // default: true }, }, }); function App({ Component, pageProps }: AppProps) { const { colorTheme, toggleTheme } = useDarkMode(); return ( <Provider store={store}> <PersistGate persistor={persistor}> <QueryClientProvider client={queryClient}> <ThemeProvider theme={colorTheme === 'dark' ? darkTheme : lightTheme}> <AppLayout toggleTheme={toggleTheme}> <Component {...pageProps} /> ... </AppLayout> </ThemeProvider> <ReactQueryDevtools initialIsOpen={false} /> </QueryClientProvider> </PersistGate> </Provider> ); } export default App;

개발자

#next.js

#persis

#redux

답변 1

댓글 0

조회 538

일 년 전 · 유자 님의 질문 업데이트

react-day-picker

react-day-picker 라이브러리를 이용. showoutsidedays =true 속성값을 준 상태에서 캘린더에 5주까지만 보여주고 싶은 경우 어떻게 해야하나요? 어떤 경우에는 6주 5주 보여지는데 5주로 통일하고 싶어요

개발자

#typescript

#react

#next.js

답변 1

댓글 0

조회 157

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

[TypeScript] tuple 타입 명시할 때, 길이는 어떻게 지정해줄 수 있나요?

typescript에서, 길이나 타입이 항상 고정적인 배열의 데이터인 경우 tuple로 타입을 선언하였습니다. const threeData : [number, number, number] = [1,2,3]; 그런데 위에 처럼 값이 3개가 아닌 20개가 넘어가는 경우, 타입 선언이 number를 20번 작성해야하는 걸까요? const twentyData : number[] = [1,2,...]; 위 코드처럼 배열로 받으면 간단하겠지만, 배열 내부에 데이터가 몇 개인지 아는 상태라서 정확히 길이를 한정짓고 싶습니다.

개발자

#typescript

#tuple

#array

답변 4

댓글 3

추천해요 7

보충이 필요해요 1

조회 974

2년 전 · 커리어리 AI 봇 님의 새로운 답변

리액트로 스프링과 웹소켓 채팅방을 구현했는데 자동 랜더링이 안됩니다..

안녕하세요! 현재 웹소켓으로 스프링과 채팅기능을 구현중에 있습니다 채팅방에서 채팅을 보내고 받는 건 가능한 상태인데 같이 채팅방에 입장해서 A가 B한테 보냈을 때 B가 페이지를 새로고침 하지 않으면 채팅이 자동 랜더링이 되지 않는 상황인데 여러 방법을 참고하고 해봤지만.. 성공하지 않았습니다 어떻게 풀어나가야 할지 잘 모르겠습니다 ㅠㅠ 코드가 길지만 ... 혹시 답변이 가능할까해서 참고해봅니다 좋은 키워드도 추천해주시면 감사하겠습니다!!... export const ChatRoomPage = () => { //메뉴 모달 const [isModalOpen, setIsModalOpen] = useState(false); const [isExitModalOpen, setIsExitModalOpen] = useState(false); const [backgroundPosition, setBackgroundPosition] = useState('static'); const location = useLocation(); const params = location.pathname; const segments = params.split('/'); const RoomUniqueId = segments[4]; const RoomId = segments[5]; const [messageData, setMessageData] = useState([]); const [messageList, setMessageList] = useState([]); const [message, setMessage] = useState(''); const accesskey = Cookies.get('Access_key'); // 채팅방 입장시 안내 문구 기능 const [showModal, setShowModal] = useState(false); const client = useRef({}); useEffect(() => { console.log('유즈이펙트 쉴행'); setShowModal(true); connect('L'); return () => disconnect(); }, []); const connect = type => { client.current = new StompJs.Client({ brokerURL: 'ws://222.102.175.141:8081/ws-stomp', connectHeaders: { Access_key: `Bearer ${accesskey}`, }, debug: function (str) { console.log('str ::', str); }, onConnect: () => { if (type === 'L') { subscribe(); publish(); } else { subscribe1(); publish1(); } }, }); client.current.webSocketFactory = function () { return new SockJS('http://222.102.175.141:8081/ws-stomp'); }; client.current.activate(); return () => disconnect(); }; const subscribe = () => { client.current.subscribe(`/sub/chat/messageList/${localStorage.memberUniqueId}`, message => { // console.log('messageData11 : ', JSON.parse(`${message.body}`)); setMessageData(JSON.parse(`${message.body}`)); const data = JSON.parse(`${message.body}`); setMessageList(data.data.chatMessageList); }); }; const publish = () => { client.current.publish({ destination: `/pub/chat/messageList/${localStorage.memberUniqueId}`, body: JSON.stringify({ chatRoomId: RoomId, chatRoomUniqueId: RoomUniqueId, page: 0, }), }); }; const closeModal = () => { setIsModalOpen(false); setBackgroundPosition('static'); }; const openModal = () => { setIsModalOpen(true); setBackgroundPosition('fixed'); }; const handleBackdropClick = e => { console.log('e ::', e); if (e.target === e.currentTarget) { closeModal(); } }; const ExitopenModal = () => { setIsExitModalOpen(true); }; const ExitcloseModal = () => { setIsExitModalOpen(false); }; const ReportButtonHandler = () => { alert('곧 업데이트 예정입니다!'); }; // 채팅 보내기 const sendMessage = message => { console.log('message :: ', message); connect(); setMessage(''); return () => disconnect(); }; const subscribe1 = () => { client.current.subscribe(`/sub/chat/message/${RoomUniqueId}`, message => { setMessageData({ ...messageList, message }); }); }; const publish1 = () => { client.current.publish({ destination: `/pub/chat/message/${RoomUniqueId}`, body: JSON.stringify({ memberId: `${localStorage.memberId}`, memberName: `${localStorage.memberName}`, memberUniqueId: `${localStorage.memberUniqueId}`, memberProfileImage: `${localStorage.profileImage}`, chatRoomId: RoomId, chatRoomUniqueId: RoomUniqueId, message: message, }), }); }; const disconnect = () => { client.current.deactivate(); }; console.log('messageList :: ', messageList); return ( <> <div style={{ width: '100%', height: '100%', position: backgroundPosition, }} > <Background> <Topbar> <Link to={`${PATH_URL.PARTY_CHAT}/${localStorage.memberUniqueId}`}> <TopBackDiv> <LeftBack /> </TopBackDiv> </Link> <TopbarName>모임이름</TopbarName> <ModalBtn onClick={() => { openModal(); }} > <RoomMenuIcon /> </ModalBtn> </Topbar> <Container> <Contents> <ParticipantDiv>ㅇㅇㅇ님이 참여했습니다.</ParticipantDiv> {messageList?.map((data, index) => { return ( <OtherDiv key={index}> <div style={{ position: 'relative', }} > <OtherImg> <OtherProfile> <img src={data.memberProfileImage} alt="profile" style={{ width: '100%', height: '100%', borderRadius: '8px', }} /> </OtherProfile> <OtherHostIcon> <PartHostIcon /> </OtherHostIcon> </OtherImg> <OthertInfo> <OtherName>{data.sender}</OtherName> <OtherContents> <OtherChatText>{data.message}</OtherChatText> <OtherChatTime>12:19 pm</OtherChatTime> </OtherContents> </OthertInfo> </div> </OtherDiv> ); })}

개발자

#채팅

#웹소켓

#채팅기능

답변 2

댓글 0

조회 595

2년 전 · 손정현 님의 새로운 답변

useState에서 previous state인자를 사용하는 방법과 이전 값을 spread해서 사용하는 방법중 어떤 방법을 사용해야 할지 고민입니다

const [imageArray, setImageArray] = useState([]); 혹시 어떤 배열안에 있는 객체요소 state변경을 할때, setState 인자인 previous state를 받아서 수정하는게 나은가요? 예) setImageArray((prev)=> [ …prev, {something}]) 아니면 spread로 새로운 배열로 복사해서 이것을 수정하고 setState에 넣는게 나은가요? 예) const copiedArray = […imageArray]; copiedArray. something something 작업 setImageArray(copiedArray);

개발자

#usestate

#previous-state

#spread-operator

답변 1

댓글 0

조회 100

2년 전 · 커리어리 AI 봇 님의 새로운 답변

Db 시각화 도구 추천 부탁드려요

회사에서 sql 쿼리로 차트, 표 같은 통계낼 때 어떤 툴 사용하시나요? 저희는 redash 사용중인데 단축키나 sql 정렬 이 잘 안되는 점, 그리고 쿼리 유지보수나 버전 관리 같은 문제로 다른 툴 알아보고 있는데 각자 어떤 툴 사용하시는지 궁금해서요!! 장단점 같은 것도 함께 알려주시면 감사하겠습니다

개발자

#redash

#통계

#sql

#데이터

#시각화

답변 1

댓글 0

추천해요 1

조회 204

2년 전 · 커리어리 AI 봇 님의 새로운 답변

EDA에서 스냅샷을 찍는다는건 뭔가요?

요즘 EDA 공부를 하고 있는데, “스냅샷을 찍는다”라는 표현이 뭔지 헷갈려서 질문합니다. 제가 이해하기로는 이벤트 스토어에 저장된 모든 이벤트를 리플레이한 특정 상태를 캐싱해놓는다 입니다. 질문은 이 스냅샷이라는 것은 어떻게 만드는 것이며 이걸 어디다 어떻게 저장하는거죠? 그리고 이 캐싱된 상태를 저장해놓는거면 이전 이벤트 스토어의 데이터는 날려버려도 되는것 아닌가요?

개발자

#eda

답변 1

댓글 0

조회 66

2년 전 · 혁 님의 새로운 댓글

EDA를 공부하기 좋은 영상이나 강의가 있나요?

안녕하세요. 저는 비전공자로 관심을 갖고 데이터 분석을 하는 일반인입니다. 다름이 아니라 EDA가 데이터 분석과정에서 중요하다는 생각이 많이 들어서 관련된 부분을 공부하거나 인사이트를 얻을 수 있는 강의가 있다면 추천해주실 수 있을까요?? 노하우 같은 것도 알려주시면 감사하겠습니다..!

개발자

#eda-

답변 2

댓글 1

조회 312

2년 전 · 김형준 님의 답변 업데이트

사용자가 생성하는 컨텐츠에 대해서 Sitemap 을 동적으로 생성해주려고 하는데 Sitemap 을 위한 전용 테이블을 추가하는 방법이 효율적일까요 ?

이번에 Sitemap 을 추가해야 하는데 사용자가 생성하는 컨텐츠라서 dynamic url path 를 가집니다. ex) articles/[:id] 그래서 사이트맵을 직접 만들어 줘야 하는데 어떤 방법으로 해야할지 고민이에요. 현재 문제는 테이블의 updatedAt 값을 sitemap 의 lastmod 값에 어떻게 적용할지 인데요. 처음에 생각한 방법은 Article 테이블의 updatedAt 을 그대로 사용해서 sitemap 을 동적으로 만들어 주려고 했는데, 이렇게 하면 실시간으로 페이지를 생성하는데 한계가 있어서 캐싱이 무조건 필요 하겠더라고요. 그래서 차라리 테이블을 추가해서 (ArticleSitemap ?) 여기에 updatedAt 을 실시간으로 업데이트 시켜두고 Sitemap 생성에 활용하려고 하는데 문제 없을까요 ? 참고로 사용하는 스택은 next.js, nest.js, MySQL 입니다.

개발자

#sitemap

#next.js

#react

답변 1

댓글 1

추천해요 1

조회 158

2년 전 · 성원 님의 답변 업데이트

mongoDB Data API 사용시에 string 날짜를 Date 타입으로 insert 하는 방법?

안녕하세요 해결책이 도저히 떠오르지 않아 커리어리에 질문을 올립니다.. nodejs, axios를 사용해서 mongoDB Data API 요청을 하고 있습니다. 다음과 같은 데이터 타입을 insert 하려고하는데 문제가 있습니다. 데이터 타입 예시 { collection: 'myCollection', database: MONGODB_DATABASE, dataSource: MONGODB_DATA_SOURCE, documents: myDocuments.map((doc) => ({ ...doc, insertedAt: new Date(), })), }; new Date()로 보낸 insertedAt 값을 mongDB에서 확인하면 Date 타입이 아닌 string값으로 저장됩니다. axios가 요청할 때 Date를 string으로 파싱해서 그런 것 같은데 Date타입 자체로 몽고DB에 저장할 수 있는 방법이 없을까요? 이것 때문에 다 구현해놓고 시간을 엄청 사용하는 중입니다.. 해결해 보신분 답변 부탁드립니다!

개발자

#mongdb

#insert

#node.js

답변 1

댓글 0

추천해요 2

조회 561

2년 전 · 손정현 님의 답변 업데이트

SQL에서 subquery는 인덱싱이 안 먹히나요?

아래와 같은 SQL을 작성해서 쓰려고 했는데, 인덱싱이 제대로 안먹더라구요. 혹시 sub query 로 만들어진 SQL은 인덱스를 안타나요? 인덱스는 pm, bm 모두 memberId에 걸려있고 추가로 bm.upgradedAt에도 걸려있습니다. 사용하고 있는 DB는 mariaDB 입니다.

개발자

#sql

답변 1

댓글 1

추천해요 1

조회 192

2년 전 · 커리어리 AI 봇 님의 새로운 답변

리액트 axios로 api 호출해서 파일 url을 받았는데요, 이걸 다운로드할 수 있을까요?

<a> 태그를 사용하여 파일을 다운로드하려고 하니, 새 창에서만 열리고 다운로드는 되지 않는 문제가 있습니다. <a href= { fileData.map((e)=>{ return ( e.fileurl ) }) } download> 다운로드 </a> 대략적인 코드는 아래와 같습니다. axios로 api를 호출하면, json 형식으로 간단한 파일 정보와 파일 url이 넘어오는 구조입니다. [ { "id": "1", "fileurl": "https://도메인/filename", }, ] /** 파일 정보 가져오기 */ const [fileData, setFileData] = useState([]); const FILECONFIG = { method: "POST", // [요청 타입] url: "/apiURL", // [요청 주소] params: { "id" : id, }, // [요청 데이터] headers: {}, // [요청 헤더] } // [axios 요청 수행 실시] useEffect(() => { const fetchData = async () => { const response = await axios(FILECONFIG) .then(function(response) { setFileData(response.data); }) .catch(function(e) { console.log(e); }); }; fetchData(); }, [id]);

개발자

#react

#axios

#api

답변 4

댓글 3

추천해요 4

조회 1,152

2년 전 · 김석현 님의 새로운 답변

리액트 axios로 받은 데이터 state에 담아서쓰기

제가 혼자 포폴만들어볼 겸 만들어보는중인데 데이터 자료들은 서버를 만들진못해서 json으로 깃허브에 올려서 사용중입니다. 깃허브에 올려둔 json을 axios로 받아와서 state에 넣어서 사용하려는데 에러가나서 질문합니다..ㅠ 코드는 현재 사진처럼 작성했는데요 에러가나는게 저렇게 작성했을 땐 에러가안나는데 SwiperSlide 태그 안에 img에 puzzledata[0].img를 [1], [2], 로 변경하면 그때 에러가납니다. 아마 위에 puzzledata 이름으로 만든 state에 임시로 만든 배열객체를 늘려주면 에러가 고쳐질거같긴한데 좋은방법인지 잘 모르겠습니다.. 보통 이럴땐 어떻게 코드를 수정하나요? 에러가 나는이유가 useEffect로 데이터를 변경해주기전에 html을 구성해버려서 에러가 발생하는것같은데 맞나요? 해결방안을 알려주시면 감사하겠습니다!.. 상단에 import는 다 해왔습니다.

개발자

#react

#axios

#에러

답변 2

댓글 0

추천해요 2

조회 336

2년 전 · 엄홍재 님의 답변 업데이트

group by를 사용한 후 가장 최신데이터를 가져오고 싶어요.

group by를 이용해서 간단한 쿼리를 만들고 있는데요. group by를 사용하면 같이 합쳐지는 데이터들은 전부 사라지나요??ㅜㅜ 사라지면 남는 데이터는 무엇인가요? count(*)을 이용해서 개수를 새고 가장 최신순으로 들어온 데이터를 먼저 가져오고 싶어서 order by createdAt desc를 사용해도 이미 있던 데이터는 최신순 정렬이 안되더라고요. 제 추측으로는 id 값을 보면 group by를 하면 다른 컬럼의 데이터는 id 값이 가장 낮은걸 가져오는 것 같아요.

개발자

답변 1

댓글 0

추천해요 1

조회 338

2년 전 · 엄홍재 님의 새로운 답변

[SQL] 중복데이터 개수를 세는 방법?

sql을 처음 합니다. 학원에서 실습과제중에 막혔습니다.ㅜㅜ 중복데이터가 몇 개 있는지 알고 싶습니다. 방법을 알려주세요. 테이블 구조에서 column은 id, userId, itemId, createdAt, updatedAt. userId가 여러 itemId를 가질 수 있습니다. 각 userId가 몇개의 itemId를 가지고 있는지 보고싶습니다. 그래서 userId중복을 제거하고 count를 붙여서 아래와 같이 했습니다. SELECT userId, COUNT(DISTINCT userId) FROM table; 중복은 제거되는것 같은데 전체 중복제거 된 userId가 몇개인지 나오는것 같아요 저는 userId별로 총 몇개의 row가 있는지 알고싶은데... 혹시 아시는분 있으면 알려주세요.

개발자

#sql

답변 1

댓글 0

추천해요 2

조회 328