8달 전 · 조현아 님의 질문 업데이트
PostLike 테이블에서의 JPA 관계 설정 (Web, Spring, JPA)
Post 테이블 (Long pno, String cotent) UserInfo 테이블 (String uid, String nickname) PostLike 테이블 (Long pno, String uid) Post에 대한 좋아요 정보를 PostLike테이블에서 관리하고 있습니다. 여기서 PostLike 엔티티를 정의할 때 1) UserInfo userInfo, Post post를 @ManyToOne으로 관리할지, 2) 아니면 그낭 Long pno, String uid로 관리할지 고민입니다. 1번 방법) 장점 : Post, UserInfo를 delete 할때 알아서 관련된 좋아요 정보를 찾아서 삭제해준다는 면에서 무결성 관리가 편함. 단점 : JPA는 where pno=(삭제하는 게시글 id)처럼 쿼리 한 번으로 삭제하지 못 한다. 먼저 PostLike 테이블에 pno가 삭제 게시글 id와 같은 것들이 무엇이 있는지 확인하고, 해당 id에 해당하는 row를 deleteById로 하나하나 삭제하기 때문에 쿼리가 N+1 필요해서 성능 이슈가 생긴다. 2번 방법 ) 장점 : 성능 문제가 해결된다. 쿼리 한 번으로 게시글 혹은 유저를 삭제했을 때 관련 좋아요 정보를 삭제할 수 있다. 단점 : 무결성 관리를 직접 해줘야 해서 프로그래머가 신경써서 관리해야 한다. ◼️ 질문 1 1번 방법과 2번 방법 중에서 2번 방법을 선택하려고 합니다. Trade off를 제대로 한 게 맞을까요? Post와 Comment에서는 @ManyToOne을 사용하고, Follow나 PostLike에서는 @ManyToOne을 사용하지 않는 것이 제멋대로인 것 같아서 고민입니다. ◼️ 질문 2 유저를 삭제할 때 해당 유저가 좋아요를 누른 기록을 유지하는 것이 좋을까요, 삭제하는 것이 좋을까요? 요구사항에 따라 달라진다는 것은 알지만 그래도 일반적으로 사용되는 방법이 궁금합니다.
개발자
#spring-boot
#jpa
#backend
#web
답변 0
댓글 0
조회 28
일 년 전 · 세혁 님의 새로운 댓글
클라이언트, 서버 두 DB의 데이터를 동시에 수정할 때 무결성 보장
안녕하세요 어플리케이션을 만드는 도중 문제가 생겼습니다. indexedDB( 클라이언트 ), postgreSql( 서버 ) 2곳의 데이터를 동일하게 수정해야할 때 ( 추가, 삭제, 수정 등 ) 한 곳의 api 가 실패하는 순간 이미 수정이 된 곳의 트랜잭션을 롤백 ( abort ) 하여 연동된 두 곳의 데이터가 동일 하도록 무결성을 보장하고자 합니다. 그런데 2가지 문제를 발견하였습니다. 1. indexedDB 의 트랜잭션 도중 다른 api 의 await를 쓰는 순간 indexedDB 는 트랜잭션을 즉시 종료시켜 서버 데이터 수정이 실패해도 abort() 가 불가능하다. 2. postgreSql 의 트랜잭션은 next.js 의 서버사이드 api에서 쿼리를 날리기에 중간에 클라이언트 사이드의 indexedDB 수정 api 사용이 불가능하다. indexedDB는 idb, postgreSql 은 pg 라이브러리를 사용중입니다. 수정 되기 전 상태를 임의로 기록 > 2번째 api 실패? > 기록된 상태로 수정하는 api 요청 이라는 단순한 방법도 생각해봤지만 결국 마지막 상태로 수정하는 것도 별도의 api 요청이기에 이 것또한 실패할 시 무결성 보장이 되지않기에 포기하였습니다... 선배님들은 서버와 클라이언트 데이터를 연동할때 무결성 보장을 어떻게 하시나요? next.js 14 환경입니다.
개발자
#next.js
#indexeddb
#postgresql
#무결성
#데이터베이스
답변 1
댓글 1
조회 140
일 년 전 · 장성호 님의 새로운 댓글
토큰은 클라이언트에 노출되어도 상관없나요?
안녕하세요! 프론트엔드 공부하고 있는 취준생입니다. 토큰에 대해 이해가 안되는 것이 있어서 질문을 올립니다. 토큰은 복호화, 암호화와 달리 서명을 통해 무결성을 확인하는 것으로 알고 있는데요, 이를 통해 토큰을 로컬스토리지나 전역 상태 라이브러리등을 사용하여 저장하는 걸로 배웠습니다. 로컬스토리지나 전역 상태 라이브러리를 사용하는 것이 클라이언트에 노출하는 것이랑 보안적으로 다른 것인가요? 사실 이것이 어떻게 안전한 것인지 의아해서 질문을 올립니다. 토큰도 결국 string 문자열일 뿐이고, 이를 복사하여 서버 데이터에서 유저 정보를 빼낼 수 있지 않나요?
개발자
#token
#토큰
답변 1
댓글 2
조회 125
일 년 전 · 이상선 님의 새로운 답변
코드리뷰해주실 프론트엔드 현직자 선배님을 구합니다!
안녕하세요, 현재 안녕하세요, 현재 신촌 지역 연합 개발 동아리를 운영 중인 학생입니다. 저희는 프로젝트를 진행하며 서로의 코드를 리뷰하고 있는데요, 서로 실력이 비슷하다 보니 피드백의 질적인 측면에서 아쉬움을 많이 느낍니다. 코드의 가독성, 효율성, 무결성, 이런 본질적인 이야기보다는 서로 이해가 안 가는 함수를 질문하거나 오류를 잡는 수준에 그치고 있습니다. 그래서 현직 개발자 분들께 코드 리뷰를 받아보고 싶다고 생각하게 되었는데, 주변에 도움을 요청드릴 만한 분들이 없어 이렇게 글을 쓰게 되었습니다. 구체적인 리뷰 방식과 비용은 아래와 같이 생각하고 있으며 얼마든지 조정 가능합니다. - 리뷰 비용: 깃허브 화면 700줄 기준 6-8만원 정도(조정 가능) - 리뷰 방식: 깃허브 PR 기능 활용한 서면 리뷰(비대면 화상 리뷰나 대면 리뷰를 더 선호합니다) 관심 있으신 분들은 아래 구글폼에 정보 남겨주시면 정말 감사하겠습니다! ❗️신청 구글폼: https://forms.gle/a56rRg61J7vpE1zW9** 추가적으로 궁금하신 내용이 있으시면 아래 오픈채팅방에 질문 남겨주시면 감사하겠습니다 :) 오픈채팅방 링크: https://open.kakao.com/o/sSZkFwIf
개발자
#프론트엔드
#코드리뷰
답변 1
댓글 0
조회 107
2년 전 · 육영민 님의 새로운 답변
현업에서 foreign key(FK)를 정말 안쓰는지 궁금합니다
안녕하세요 1년차 백엔드 개발자 입니다 옛부처 많이 들어왔던 얘기입니다 FK는 현업에서 사용하지 않는다 그 이유는 1. 무결성 체크로 인한 성능 저하 가능성 2. 스키마 수정 시의 번거로움 3. FK 설정 시 제약조건 관련 테이블들의 S Lock 발생 이라고 이해했습니다 정말 현업에서는 FK를 사용하지 않는지, 사용하지 않는다면 정확히 어떤 이유인지 알고 싶습니다
개발자
#db
#mysql
답변 1
댓글 0
추천해요 1
조회 668