8달 전 · CP 님의 답변 업데이트
RDBMS 실무 관계 연결 등 질문사항
혼자 프론트, 백엔드, DB 공부를 강의 보면서 독학하고 있는데 이번에 토이프로젝트로 쇼핑몰 웹을 하나 만들려고 합니다. 실무에서는 개발을 어떤식으로 하는지 궁금하여 질문 드립니다. 1. mysql 등 과 같은 RDBMS 테이블 관에 관계를 설정 안 하고 즉 외래키 연결 하나도 안 하고 사용할 때 장단점이 무엇인가요? 2. 지인 DBA분(오래 되심)께서 하시는 말씀은 관계 연결하면 DB 부하 심하다, 성능 저하된다 이런식으로 말씀하셨는데 맞나요? 2-1. 성능이 저항된다면 심하게 저하되나요? 3. 쿠팡, G마켓, 무신사, 유튜브 등과 같은 대형 플랫폼들은 RDBMS를 사용할 때 실제로 관계 연결을 안 하나요? 4. DB에서 값을 불러 올 때도 join 하나도 안 하고 소프트웨어적으로 수동으로 연결 한다. 제가 이해 하기로는 사진에 있는 예시 사진 참고 하면서 예를 들면 cart 불러오는데 user이름도 알아야 한다면 DB에 join을 해서 가져오는게 아니라 백엔드에 각 각 user, cart를 따로 호출하고 백엔드에서 if, for, array function 같은 메소드를 사용해 작업을 거쳐 가공 한다는 것 같은데 이러면 실무 적으로 봤을 때 장단점이 무엇인가요? 5. 대형 플랫폼 같은 실무에서는 4번 방식 처럼 하나요? 참고로 테이블이 20개 이상 정도 될 경우의 상황이 궁금합니다 실무에 관해서 민감한 질문 드려서 죄송합니다. 아는 것 없이 질문을 여러번 드려 번거롭게 만들어서 죄송합니다. 답변해 주신다면 열심히 공부하겠습니다.
개발자
#rdbms
답변 2
댓글 0
조회 74
일 년 전 · 익명 님의 질문
동시성+데드락 제어를 위한 비관적 락 잠금 질문
안녕하세요 글쓰기 커뮤니티 프로젝트를 개발하는 중입니다 회원이 소설을 찜하는 기능(좋아요)을 구현 중에 있는데요 찜 객체는 아래 첨부한 코드와 같이 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
조회 53
일 년 전 · Angela 님의 새로운 댓글
디비에는 저장이되는데 리스트조회하면 null로 나오는 이유
숙소등록하고 조회했는데 null값이나옵니다.. List<AccommodatuonsVo>로 임폴트 util로 했습니다 마이바티스로 작업한 쿼리를 디비에 조회했을때 제대로 나옵니다.. 매핑도 dto로 저장하고 vo로 리스트로 조회했는데 필드와 칼럼명도 확인했습니다 서비스랑 컨트롤러도 로직도 공지사항이나 문의글 처럼 동일하게했거든여.. 다른점은 외래키설정때문일까요... db에 저장될때 null값 없이 저장됐는데 리스트로 조회하니 null이 나오는게 이해가 안돼요...........
개발자
#null
#리스트조회오류
#스프링부트
#마이바티스
답변 1
댓글 1
보충이 필요해요 1
조회 150
일 년 전 · 김도열 님의 답변 업데이트
mysql 실행계획 질문드립니다 (조인과 where문 조건 필터링 순서)
쿼리는 아래와 같습니다 EXPLAIN SELECT SUM(t.fee) FROM team t INNER JOIN student s ON s.student_id = t.student_id WHERE s.teacher_id = 3 AND t.team_unit in ('SOCCER', 'COOKING'); teacher 테이블과 student 테이블이 있고, student 테이블이 teacher 테이블의 id를 외래키로 갖고 있습니다 student 테이블과 team 테이블이 있고, team 테이블이 student 테이블의 id를 외래키로 갖고 있습니다 위 쿼리는 student와 team을 조인해서 특정 teacher_id와 team _type을 갖는 로우에 대해 fee 컬럼을 sum하는 쿼리입니다 조인은 nested loop 조인 방식으로 돌아갑니다 (인터넷에서 본 예제를 조금 변행해서 문법이 틀릴 수도 있습니다 양해 부탁드립니다) 사진은 해당 쿼리의 실행계획입니다 실행계획 역시 제가 원래 예제에서 약간 변형한거라 실제와 틀린 부분이 있을 수 있습니다 질문: 아래 두 가지 쿼리 실행 동작 과정 중에 어느 것이 맞는 건가요?? 1번 1. 두 테이블을 nested loop로 조인한 뒤 2. teacher_id가 3이고 team_unit이 SOCCER와 COOKING인 로우를 가져온 뒤에 sum 2번 1. student 테이블에서 teacher_id가 3인 로우 select 2. 1번에서 나온 결과를 바탕으로 team 테이블에서 student_id와 student 테이블의 student_id와 일치하는 로우를 nested loop 방식으로 조인, team_unit이 SOCCER와 COOKING인 로우를 가져온 뒤에 sum Where 조건에 명시된 필터 조건이 조인 전에 발생하는 건지 이후에 발생하는 건지 헷갈려서 질문드립니다
개발자
#mysql
#쿼리실행계획
#실행계획
답변 1
댓글 0
조회 70
일 년 전 · Angela 님의 새로운 댓글
숙소등록시 숙소테이블,객실정보테이블 을 동시에 넣어서 외래키 null값 오류
완전신입입니다.. 몇일를찾아보고 해도 제가 로직을 잘못짠건지 모르겠어서 질문을 남깁니다 숙소등록을 구현중인데 숙소테이블accommodation, 객실정보테이블room_info 두개를 나눴고 객실정보테이블에 aid(숙소테이블 기본키) 외래키로 설정을 했습니다 그리고 마이바티스에 각 테이블별로 insert로 넣었고 MySql 자동키 부분 설정도하였습니다. 서비스단을 각 두개의 클래스를 묶고 roominfo에 aid를 받아서 저장하는 로직으로 넣었습니다 그리고 컨트롤단에서 PostMapping으로 두개를묶은 클래스를 파라미터로 넣었습니다 ㅠㅠ 여기서 궁금한게 1. 테이블을 나눠서 한번에 저장할 때 다른분들은 어떻게 처리하는지 궁금합니다. 2. 숙소등록을 입력할때 필드값이 동시에 진행되는부분이라 객실테이블에 지정된 외래키aid 가 아직 없으니까 null값으로 들어가서 자꾸 aid를 찾을수없다는오류가 나오는데 이 부분을 어떤식으로 처리해야하는지 키워드를 말씀해주시면 감사하겠습니다...
개발자
#스프링부트
#외래키
#null
#마이바티스
답변 1
댓글 1
조회 181
일 년 전 · 김도열 님의 새로운 댓글
RDB에서 복합키를 참조하는 외래키에 NULL이 있다면 부모에 없는 값이 들어갈 수 있는 이유가 궁금합니다.
결론부터 말씀드리자면 부모테이블에 복합키를 참조하는 자식테이블에 외래키가 nullable하게 설정했을 때, 왜 부모에 없는 값을 허용하는지 이유 또는 구동 원리가 궁금합니다. 간단한 예 부모-자식 관계(FK걸려있음)일 때 부모에는 단 두 컬럼이 있으며, 복합키(두컬럼 모두 PK) 자식은 두 컬럼을 참조하는 컬럼 2개만 존재하며 nullable하다. 부모에는 (1, 'A') 라는 값이 있으면 왜 자식에 (null, '가나다') 값이 들어가도록 허용하는지에 대한 이유 또는 구동 원리가 궁금합니다! - 물론 외래키는 잘 걸려있습니다. 자세한 내용과 사례는 아래 링크를 통해서 정리를 해봤습니다. (링크는 댓글을 받기 위해 임시로 velog로 작성하였으며, 어디에 댓글을 달아주시던 상관없습니다) https://velog.io/@corder/외래키FK에-부모에-없는-값이-들어갔어요
개발자
#rdb
#fk
#외래키
답변 2
댓글 3
조회 250
2년 전 · 김도열 님의 새로운 댓글
nysql에서 외래키 참조
syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[CONSTRAINT fk_name] FOREIGN KEY(name) REFERENCES uesr_into(name) ON UPD' at line 5 CREATE TABLE a_check( id MEDIUMINT AUTO_INCREMENT PRIMARY KEY, name MEDIUMTEXT not null, age MEDIUMINT not null, [CONSTRAINT fk_name] FOREIGN KEY(name) REFERENCES uesr_into(name) ON UPDATA CASCADE ); 무슨 에러에요? 데이터가 있어야 한다는 걸까요?
개발자
#mysql
답변 1
댓글 1
보충이 필요해요 2
조회 60
2년 전 · 김병수 님의 답변 업데이트
mysql에서의 외래키
CREATE TABLE a_check( id INT INTEGER AUTO_INCREMEnT PRIMART KEY, name MEDIUMBLO not null, age MEDIUMINT not null [CONSTRAINT CASCADE] FOREIGN KEY(name) REFERENCES uesr_into(name) ON UPDATA ) 여기에다가 age 의 외래키를 더 추가할건데 추가할 수있나요?
개발자
#mysql
답변 1
댓글 0
보충이 필요해요 1
조회 87
2년 전 · seungcho 님의 새로운 댓글
Transactional 어노테이션 관련
스프링 부트의 Transactional 어노테이션 관련 질문입니다. 저희 회사 서비스는 선생님들과 학생 대상으로 제공하고 있습니다. 관리자 페이지에서 선생님이 학생을 등록하는 API에서 Transactional 어노테이션 관련 오류가 생겨 질문드립니다. 먼저 학생 등록 api의 플로우를 말씀드리면 jwt 토큰을 통해 선생님 권한을 인증서버에서 확인 한 뒤 파라미터로 넘어온 학생 정보를 바탕으로 회원가입을 진행합니다. 회원가입 시 회원 테이블에 정보가 생겨 해당 테이블의 PK값을 학생 테이블에 외래키로 지정하여 학생정보를 등록하게 됩니다. 근데 이 과정에서 Transactional 어노테이션을 사용하면 회원가입 이후 PK값을 가져오는 과정에서 commit이 안되어 회원 테이블에 값이 없는 상태여서 오류가 발생합니다. 간단히 정리하면 권한인증 -> 회원 테이블 등록-> 학생 테이블 등록 순입니다.이 상황에서는 어떤 방식으로 처리를 해야될까요?
개발자
#spring-boot
답변 1
댓글 1
조회 755
2년 전 · joseph 님의 새로운 답변
현업에서 외래키 자주 거나요?
안녕하세요 데이터베이스에서 어떤 테이블의 기본 키를 다른 테이블에서 사용할 때 실제로 외래키 제약조건을 많이 설정하는지 궁금합니다. 개발할 때 테스트나 수정 삭제가 번거로워 걸지 않고 개발하는 곳도 더러 있는 것 같은데요 의견이 궁금합니다.
개발자
#db
#database
#mysql
답변 3
댓글 0
추천해요 1
조회 1,161
2년 전 · 김태훈 님의 새로운 답변
자바 JPA onetomany manytoone 차이가 뭔가요?
안녕하세요 주니어 백엔드 개발자로 얼마전 입사하여 미니 프로젝트를 진행하며 엔티티 설계를 맡게 되었는데요 테이블끼리 연결할 때 onetomany와 manytoone 연결을 사용하는데 시니어 개발자분 께서 이러면 꼬일 수 있다고 하셨는데 어떤 차이가 있고 왜 어떤건 사용을 하지 않는지 모르겠어요 외래키를 여러개 갖는다는 것도 부담이라고 하셔서 어떻게 설계해야 할지 감이 오지 않습니다
개발자
#java
#jpa
#db
답변 1
댓글 0
조회 258