#sre

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

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

마이크로 프론트 구현(Nextjs, React)

요구사항 마이크로 프론트엔드로 A라는 프로젝트에서 B라는 프로젝트의 컴포넌트를 사용하고 싶다 프로젝트 설명 ModuleFederationPlugin 사용해서 expose remote 설정 A 프로젝트 (remote) : react, styled-component 사용 B 프로젝트 (expose) : nextjs, scss 사용 첫번째 오류 styled 이 달라서 nextjs 에서 노드가 불러와지지 않는 것 해결 : <noscript id="**next_css__DO_NOT_USE**"></noscript> → 두번째 오류 발생 오류 내용 Cannot read properties of null (reading 'parentNode') TypeError: Cannot read properties of null (reading 'parentNode') at options.insert (webpack- 두번째 오류 Nextjs 에서 expose 할 때 Page 컴포넌트에 있는 useState를 사용 못한다고함 해결 : peerDependencies 로 nextjs 추가 → 오류동일 오류 내용 TypeError: Cannot read properties of null (reading 'useState') at useState (react.development.js:1623:21) at Page (index.js:8:40) react-dom.development.js:18704 The above error occurred in the <Page> component: 참고 : https://dev.to/omher/building-react-app-with-module-federation-and-nextjsreact-1pkh 두번째 오류를 해결해야 되는데 가능한 방법인지 모르겠습니다. 아시는 분은 댁글 남겨주세요~(코드상에 보안상 문제되는 부분은 a b 로 바꿨습니다.

개발자

#micro-frontend-architecture

#react

#next.js

#modulefederationplugin

답변 0

댓글 0

조회 250

일 년 전 · 삥 님의 새로운 댓글

[React] 도움!! 같은 함수 2번 실행하는 방법

안녕하세요, 스타트업에 취업한 신입 프론트 개발자입니다. 지금 회사에서 jwt 토큰으로 로그인을 구현하고있는데, 지금 3일째 붙잡고있는데 전혀 해결이 안되서 너무 막막합니다 ... 페이지가 처음 열릴 때 load_board()라는 함수를 실행합니다. 이는 axios 통신을 하는 함수이고 만약 res.data=== 'reload' 라면 refresh_token()함수를 실행한 후 다시 load_board()를 실행하고 싶습니다. 이걸 어떻게하면 좋을까요 ?... 제가 해봤던 방법은 1번 .then((res) =>{ setIsRefresh(true); } useEffect(()=>{ if(isRefresh){ refresh_token(); setIsRefresh(false); load_board() },[isRefresh]) 이 방법은 되긴되나 서버와 통신을 최소 3번씩하고 ... (refresh_token()를 실행하기전에 자꾸 load_board()를 실행해서...) 2범 async await을 써보니 useEffect(()=>{ const res = load_board(); if(res.data ==='reload'){ await refresh_token(); await load_board} ... },[]) 이건 확실히 한번만 실행이되는데 refresh_token()의 리스폰이 오기전에 load_board()를 실행하니까 의도한대로 안돼요 . . . . . . . . 이걸 어쩌면 좋을까요. . . . . .

개발자

#react

#로그인

#jwt

#비동기

답변 4

댓글 7

조회 392

일 년 전 · 일본에서 님의 질문

SRE 엔지니어에서 개발자로 돌아올수 있나요?

안녕하세요. 일본에서 일하고 있는 백엔드 엔지니어입니다. 현재 담당중인 프로덕트가 너무 익숙해져서 사고보다 경험적으로 일을 하는 경우가 많아서 이직을 시도하고 있습니다. 이곳 저곳 구인에 응모해보던 도중에 SRE 엔지니어직에도 지원하게 되었고, 현직에서 AWS를 다뤄본 경험덕에 코딩테스트에 통과하게 되었습니다. SRE 엔지니어로 근무하며 획득 가능한 역량이 SLI, SLO를 수호하는 방안, AWS와 같은 클라우드 심화지식이라고 생각했고, 이것들은 백엔드 엔지니어로서 필요한 역량이니까 SRE 엔지니어의 경력도 엔지니어로서의 역량을 쌓는데 도움이 되지 않을까하고 생각하였습니다. 그런데 SRE 엔지니어에서 개발자로 돌아오기가 어렵다는 말을 들어서 겁이 나서 망설이고 있습니다. 백엔드 엔지니어로 돌아오고 싶다면 SRE 엔지니어로 가지 않는게 좋을지요? 조언 부탁드립니다.

개발자

#sre

#backend

#엔지니어

답변 0

댓글 0

조회 81

일 년 전 · 익명 님의 질문

안녕하세요 HardDelete를 하는 과정속에서 궁금한 점이 생겨 이렇게 질문을 남깁니다.

현재 저는 프로젝트를 진행하고 있습니다. hard delete 특정 연관관계 칼럼까지 삭제를 해야 하는데 이에 있어 보통 어떻게 삭제하는지 궁금합니다. 저희는 프로젝트 용이기 때문에 매 년마다 HardDelete를 구현을 담당하고 있습니다.(내부적인 회의를 통해서 hard delete를 구현하기로 함) 근데 구현에 있어서는 스케줄러를 통해서 삭제를 할 예정이고(코드 참고) @Scheduled(cron = "0 */2 * * * ?") // test cron public void teamDisbandCheckAndDelete() { List<Long> teamIds = teamRepository.findIdsByIsDeleteIsTrue(); teamRepository.deleteAll(teamIds); // cascade remove } 할 생각이었지만 이는 성능상 이슈가 있을 것이라고 생각합니다. 그러한 이유는 팀을 하나만 삭제하는데 다른 연관 관계 테이블은 최소 10배가 최대 100배 넘는 데이터를 가지고 있을 것이라고 예상합니다. 이러한 관점에서 봤을 때 성능상 이슈가 있을 것이라고 예상하고 배치 delete를 구현하려고 했습니다. 근데 만약 이렇게 배치 delete를 아래와 같이 진행을 하려고 합니다.(예시 코드) // 연관된 데이터 삭제 // (예: TeamParticipants, SimpleSchedule, RepeatSchedule 등) teamParticipantsRepository.deleteByTeamIdIn(ids); simpleScheduleRepository.deleteByTeamIdIn(ids); repeatScheduleRepository.deleteByTeamIdIn(ids); // Team 엔터티 삭제 teamRepository.deleteAllByIdIn(ids); 근데 이렇게 삭제하는 게 최선인지도 궁금합니다. 여기서 문제점은 만약 다른 엔티티(TeamParticipants 등등) 삭제 시 제약조건 오류가 났을 때 그렇다면 그 해당 칼럼도 삭제를 해줘야 하는데 이렇게 구현하는 게 맞나?? 싶어서 이렇게 글을 남깁니다.

개발자

#java

#spring

#batch

#delete

#jpa

답변 0

댓글 0

추천해요 1

보충이 필요해요 1

조회 60

일 년 전 · 김하림 님의 새로운 답변

예외처리가 더 효율적인 코드

유저 로그인 관련 메서드를 구현하던 중, 예외처리 방법 두가지 중 어느 것이 더 효율적(가독성, 유지보수 측면 등등..)인지 여쭤보고 싶습니다 첫번째 방법: try문에 NotFoundException을 던지고, catch문에서 instanceof를 사용해서 예외의 타입을 확인하고 처리하기 async userLogin(nickname: string, password: string) { try { const user = await this.usersRepository.findOne({ where: { nickname } }); // console.log(user) if (user && (await bcrypt.compare(password, user.password))) { return user; } else { throw new NotFoundException('아이디 또는 비밀번호가 일치하지 않습니다.'); } } catch (e) { console.error(e); if (e instanceof NotFoundException) { throw e; // NotFoundException은 그대로 던지기 } else { throw new InternalServerErrorException('알 수 없는 오류'); } } } 두번째 방법: try문에서는 일반적인 Error객체를 던진 후 catch문에서 error.message를 확인하여 예외 유형을 판단하기 async userLogin(nickname: string, password: string) { try { const user = await this.usersRepository.findOne({ where: { nickname } }); // console.log(user) if (user && (await bcrypt.compare(password, user.password))) { return user; } else { throw new Error('아이디 또는 비밀번호가 일치하지 않습니다.'); } } catch (error) { if (error.message === '아이디 또는 비밀번호가 일치하지 않습니다.') { throw new NotFoundException('아이디 또는 비밀번호가 일치하지 않습니다.'); } else { // 다른 예외 처리 throw new InternalServerErrorException('알 수 없는 오류'); } } }

개발자

#node.js

#예외처리

답변 1

댓글 0

추천해요 1

조회 243

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

typeorm 서브쿼리 관련 질문

user라는 테이블이 있고, userLikes라는 테이블이 있는데 user를 가져올때 userLikes의 개수를 같이 포함시켜주고 싶어요. users를 조회하는 query에 addSelect에서 user 값을 사용하고 싶은데 어떻게 하면 되는지 잘모르겠어요. userLikesRepository.findOne에 어떻게 넣어줘야하나요? 각 엔티티는 다음과 같습니다. user: { id: number, firstName: string; lastName: string} userLikes: {id: number, originUserId: number, targetUserId: number} users를 조회 했을때 원하는 값 user: { id: number, firstName: string, lastName: string, likes: number }

개발자

#typeorm

답변 2

댓글 0

조회 173

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

안드로이드 블루투스 권한 요청

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) if (bluetoothAdapter == null) { Toast.makeText(this, "블루투스를 지원하지않는 기기입니다", Toast.LENGTH_SHORT).show() finish() } setContentView(binding.root) binding.btn3.setOnClickListener { checkBlueToothConnectPermission() } } override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == PERMISSION_REQUEST_BLUETOOTH_CONNECT) { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 권한이 허용된 경우 처리할 코드 } else { Toast.makeText(this, "BLUETOOTH_CONNECT 권한이 필요합니다.", Toast.LENGTH_SHORT).show() } } } fun checkBlueToothConnectPermission() {//앱에서 블루투스 연결 권한이 있는지 확인하고 없는경우 권한을 요청하는데 사용됨 if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED ) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.BLUETOOTH_CONNECT)){ AlertDialog.Builder(this) .setTitle("권한 요청") .setMessage("블루투스 연결 권한이 필요합니다.") .setPositiveButton("확인") { _, _ -> ActivityCompat.requestPermissions( this, arrayOf(Manifest.permission.BLUETOOTH_CONNECT), PERMISSION_REQUEST_BLUETOOTH_CONNECT ) } .setNegativeButton("취소", null) .show() }else{ ActivityCompat.requestPermissions( this, arrayOf(Manifest.permission.BLUETOOTH_CONNECT), PERMISSION_REQUEST_BLUETOOTH_CONNECT ) } } } 버튼을 눌러서 권한요청을하는데 거부를 했다면 다시한번 눌렀을때 다시권한요청을 하고싶은데 어떻게 하시는지 아시는분 계신가요ㅜ 한번 거부가 되면 요청다이얼로그가 뜨지않는걸 알고 대화상자로 처리할라고하는데 대화상자도 안뜨네요 ㅜ

개발자

#안드로이드

#권한처리

#블루투스

답변 2

댓글 1

조회 366

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

React Native 에서 Navigation param 을 사용해서 값을 전달할 경우 화면 렌더링이 잘 안되는 문제

React Native 고수님들께 질문이 있습니다.ㅠㅠ 현재 HomeScreen에서 리스트들을 보여주고 DetailScreen으로 navigation.navigate를 통해 페이지를 이동하면서, 리스트의 요소를 params로 전달해주었습니다. (리스트 데이터는 리덕스 스토어의 값) DetailSreen에서 데이터를 받아와서 잘 렌더링을 시켜주었는데 DetailScreen에서 어떤 이벤트를 통해 받아온 요소의 리덕스 스토어의 값을 업데이트 시켜주었더니, HomeScreen에서는 잘 업데이트가 되지만 DetailScreen에서는 업데이트가 바로 되지 않고 한번 나갔다 들어와야 업데이트가 되어있습니다.. 일단 setParams라는 메서드를 통해서 DetailScreen에서도 업데이트를 시켜서 구현해주긴 했으나, 원래 navigation으로 이동 시 업데이트가 안되는 것이 맞는지 궁금합니다ㅠㅠ

개발자

#react-native

#렌더링

답변 1

댓글 0

조회 254