** 전에 바빠서 어느정도 메모 해둔걸 바탕으로 적습니다. 날짜가 달라도 양해 부탁드립니다.
[MultiIt Backend] |
서론
오늘은 길고길었던 멀티캠퍼스 수료날이다. 정말 반년동안 아침 9-6시까지 강의를 듣고 코딩을 해나가며, 잘 못따라간날도 있지만 전반적으로 열심히 하기 위해 노력했던거 같다. 특히 근 2주동안 글을 아예쓰지 못했었다. 시험공부랑 이것저것 겹쳐져서 프로젝트에만 전반적으로 집중을 하지 못하다보니, 실 서비스 개발은 나는 늦게 시작한 터라 정말 남았던 프젝기간동안 진짜 쉬지도 않고 열심히 코딩했던거 같다. 특히 발표, 즉 오늘전까지 거진 저번주 목요일 (5/11)일 부터 5일동안은 주말이든 상관없이 하루에 한 2시간자고 밤새서 코딩했다. 내가 맡은 기능은 완벽히 끝내고 싶었고, 실제로 서비스로선 어느정도 완성을 했는데 되게 디테일한 부분들도 신경쓰느라 더 오래 시간이 걸린것 같다. 또한 프론트 부분에 대해 아예 처음하다보니 진짜 애를 많이 먹었었다. 하지만 내가 처음부터 프로젝트를 할떄 구현하고 싶었던 웹소켓을 통한 실시간 채팅 부분이다 보니 그래도 재밌게했다. 또 결국 못할줄 알았던 랜덤 추천까지 다해낸게 정말 뿌듯했다. 발표날 아침까지 view가 반응형으로 이쁘게 안나와서 계속 수정한건 안비밀 ㅎㅎ 근데 관심사 기반 추천은 시간상 못해서 아쉬웠다.. 생각해둔 알고리즘이 있었는데 ㅠㅠ 이부분은 개인 프로젝트를 하나 진행하면서 추천알고리즘을 하나 해볼생각이다. 매일같이 밤을 새며 핫식스, 커피와 함께 에러와 싸우며 고생하던 그 시간과 과정이 그저 힘든게 아니라, 하나씩 기능을 구현할때마다 오는 성취감과 할 수록 늘어나는 실력이 와닿을때마다 정말 짜릿하고 기분이 좋았다. 특히 에러하나씩 해결해서 ajax로 불러서 view에 이쁘게 출력됬을때 진짜 그때 그 기분만큼은 정말 보람차고 밤샌게 하나도 안힘들었다. 무언가 열정을 가지고 밤새며 코딩한게 오랜만이라 더 의미 있었고 특히 이런 시간을 보내며 내가 진짜 생각보다 개발에 진심이고, 개발 그 자체를 즐기는 사람이구나를 깨달을 수 있었다. 비록 블로그 정리하고 이런건 좀 소홀했지만.. 그래도 팀안에선 되게 많은 일을 했다. 실제 서버 배포부터(네이버클라우드플랫폼은 처음이라, 보조강사님 도움과 함께! 성공!), 발표자료 및 팀 자료들은 다 제작했던거 같다. 진짜 그런 자료 만드는데도 시간을 썼지만, 누군가는 해야하는 일이고, 잘할 수 있다 생각해 먼저 하겠다 하고 제작했고, 결론적으로 잘 만들어서 발표까지 잘 끝내서 좋았다. 또! ㅎㅎ 비록 프로젝트로 상은 못받았지만 (아무래도 우리조는 전체적으로 기능에 중시해 기획을 하다보니, 다른 조에 비해 기획의도가 뚜렷하지 않아서 그런듯 ㅠㅠ) 우수 훈련생에 뽑혀서 의미 있었다. 멀캠을 끝마치고, 진짜 현업의 개발자가 되기 위해 준비하는 이제부터의 과정이 매우 중요할거 같다.
그동안 프로젝트 진행 내용
전체적인 구현하고자 하는 기능을 다 구현했다. 특히 채팅부분에서 다양한 기능을 구현해봤다.
단순히 실시간 채팅이 아닌 기존의 sns처럼 채팅 내역을 저장하고 방도 저장되게 개발하였다. 실제 읽은 시간같은것도 로직에 맞게 저장해 최대한 sns와 같도록 정보를 저장 front에 전달해주고, 이를 활용해 front로 view에서도 실제 채팅과 같이 개발하는데 성공했다. 또한 네이버클라우드의 ObjectStorage를 아마존 s3와 연결해 이미지도 url을 통해 반환해 작업할 수 있도록 개발하고, 사용법을(어떻게 해야 우리 코드내에서 이미지 불러오는지, 내가 짠 코드 기반으로..) 팀원들에게 알려줘 전체 우리 사이트에서 이미지데이터를 사용할수 있게했다. 팔로우 기능도 전담해 다 만들었고, 특히 팔로우는 여러 view에서 사용되다보니 api를 나눠 front에서 좀 더 편하고 필요한 정보만 받아볼 수 있도록 고려해 개발했다. 그 결과 내 팔로우&팔로잉을 보는 경우와, 다른사람의 팔로우&팔로잉을 보는 경우를 모두 api를 만들고, 맞팔 여부나 실제 팔로우 리스트를 반환할때 필요한 정보들만 볼수 있게 반환했다. 초기엔 팔로우, 언팔로우 api를 나눠놨지만 다른 팀원이 팔로우 언팔로우를 front에서 하나의 버튼에서 사용하는 방법을 어려워하길래 팔로우 api로 만약 팔로우가 되어있음 언팔로우, 아니면 팔로우를 하도록 유동적으로 사용할 수 있도록 코드를 변경하기도 했다. 마지막으로 일정한 알고리즘에 따라 겹치지 않는 랜덤 피드를 반환하는, 탐색부분 또한 개발했는데, 이때 데이터(피드 개수)의 부족으로 겹치는 것도 랜덤하게 나올 수 있도록 수정하였다. 이렇게 다양한 파트를 전담해 개발을 진행하였고, 실제 네이버클라우드 플랫폼을 통해 서버 배포도 진행하였다.

느낀점
프로젝트를 진행하며 크게 협업의 중요성을 느낄 수 있었고 특히!!! 초기 설계의 중요성을 많이 느낄수 있었다. 초기 설계가 하나씩 변경될때마다 기존의 개발하고 있던 코드를 많이 변경해야하고 특히 모든 파트에서 사용되는 기능이 있으니 (회원) 아직 내가 필요한 기능이 포함된 부분을 맡는 팀원이 개발을 완료하지 못했을때 임의의 데이터를 넣어 개발하는 등, 이런 협업 프로젝트에서의 다양한 개발 방식을 좀 생각해 볼 수 있었다. 또한 db 설계와 jpa에 대한 개념과 다른 테이블간의 조인(전체 데이터가 필요없을 시 굳이 joinColum을 사용하지 않는 등..)등 데이터베이스 설계 및 관리(사용)하는 쪽이 많이 늘었다. 또한 아예 못다루던 front를 진짜 이제는 js를 통해 view는 이쁘게는 못하더라도, 데이터를 가지고 기초적인 뷰는 만들 정도로 실력이 많이 향상된 것을 느꼈다. 어느정도의 풀스택의 기반이 될 수 있었다. 원래 애초에 저번 이노캠에서 프로젝트를 진행하며 백엔드로서의 역량만이 아닌, 전체 사이트의 서비스 로직을 파악하고 효율적으로 개발하기 위해 웹페이지를 개발하는데 필요한 다양한 역량(db관리, front, 서버 관리)을 기르고 싶었는데 어느정도 조금은 실력이 향상된 것 같아서 그래도 그동안 시간을 막 보낸건 아니구나 싶었다. 또 특히 소켓 부분을 거의 ㅎㅎ 좀 마스터 까진 아니더라도 엥간하게는 다 관련해서 개발을 진행 할 수 있을것 같다. 되게 어렵다 느꼈는데 결국 실력이 늘어 이렇게 개발해낸것이 매우 뿌듯했다.
하지만 한편으로는 좀더 시간이 있었으면 더 개발하고 싶었던게 있었는데 하는 아쉬움도 좀 큰거 같다.
<추후 개발하고 싶던 부분 : 전체 게시글 및 페이지 실시간 처리 -> 데이터 업로드시 실시간으로 생성, 알림 실시간 처리 등 (이런 실시간 처리를 위해 사용자가 페이지 접속시 세션 유지해 관리하는 db를 만들었지만 시간 상 활용을 못함), 사용자 관심사 기반 피드 추천 (사용자가 보는 게시물의 hashtag 분석을 통해 관심사를 나눠 일정 비율로 반환해주는 형식 - 원래는 각 피드 보기, 좋아요, 저장, 댓글 등 다양한 기준을 가지고 점수를 분석해 일정 기간이나 일정 점수 이상 올라가면 관심사로 등록, 이를 갱신해 반환해주는 방식으로 하고 싶었음)>
이런 부분은 지금 현재 이걸 기존 noldaga를 업그레이드 하는 방식으로 할까, 아니면 새 개인 프로젝트를 진행 할까 하는 부분이 고민이다. 근데 일단 새로운 개인 프로젝트를 진행하는 방식으로 좀 더 생각 중이다. 웹이 아닌 어플로 만들고 싶던 예전에 생각해논 아이디어가 있어 ㅎㅎ 취준을 하며 진행할 까 생각중이다. + 이거랑 그 외에 기본 포폴을 위해 클론코딩을 하나 진행해볼까 싶다.
배운점 - (배운점 대신 그동안의 적어둔 트러블 슈팅을 간단히 정리를 하겠습니다.)
2023.04.18
1. mysql 인텔리제이 연동안됨 -> 같은 오류가 떠서 찾아보니 connect j문제 -> connect j를 다운그레이드 해도 안됨, 계정과 디비를 다시 만들어도 안됨 -> mysql 재설치 후 문제 해결
2. 타임리프 동작 시 이벤트 처리가 안됨 = 스크립트가 실행이 안됨
-> 비동기적 처리를 위한 ajox의 jquery 추가로 해결
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.3/dist/jquery.js">
3. 비동기 처리를 위해 엔터를 눌렀을떄 화면이 바뀌면 안되는 데, input에 엔터 클릭시 화면 재 리로드 -> 인터넷 검색 후 false 설정을 해주거나, input 창을 hide로 넣어서 해결
2023.04.19
1. jpa -> 레포지토리 생성 안됨
: 이유는 모르겠지만 레포지토리 생성이 정상적으로 안됬다.. 뭔 핸들러가 생성이 안된다는 오류
= 처음에 기본 id와 속성 하나만을 넣어 생성 후 후에 차츰 컬럼을 추가하는 방식으로 수정하니 됬다 -> 이유는 모르겠음..
->
@MappedSuperclass //시간 체크를 위해 추가
@EntityListeners(value = {AuditingEntityListener.class})
{ @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@Column(name = "reg_date", updatable = false) //변화되면 안됨
@CreatedDate
private LocalDateTime regDate; //메시지 보낸 시간 }
이걸 추가하니 오류가 생김
->
@MappedSuperclass //시간 체크를 위해 추가 = 오류 원인
@MappedSuperclass 이게 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을 때 사용하는 거라 이걸 상속받아 사용하지 않고 엔티티에서 바로 reg_date를 컬럼으로 생성해 생긴 오류다. 저 두개 어노테이션 붙이지 않고 그냥 reg_date 넣었을때는 정상적으로 작동, 즉 저 어노테이션를 사용하는데 상속받지 않고 바로 선언해서 생긴 문제
2. json으로 채팅 연결, 사용자 구분 연습
-> 분명 데이터가 잘 넘어갔는데 왜 내용이 화면에 안뜨지 하고 확인해보니 불러올 때 id명을 chating 으로 해왔는데 실수로 다르게 chatting로 해놔서 안읽혀졌던것이였다. 알맞은 id명으로 변경해 해결했다.
2023.04.20
1. 타임리프 사용해 채팅룸 생성시 데이터가 안보이는 것 -> 변수명과 스크립트 내부에서 받아오는 d.name = chat {String name} 이 같아야 같은거라 인지해 불러와짐
+ @GeneratedValue(strategy = GenerationType.IDENTITY)는 repository 에 저장되는 동시에 생성되는 것같다 -> 저장하는게 아닌 임시로 new chatRoom 으로 build 했을때는 id값인 roomNumber가 맞게 불러지지 않았다
= id를 임시로 0을 주고 build할 때 ++id를 해 해결
2023.04.25
1. 통합시 에러
팀원이 짠 부분과 내가 짠 회원부분이 달라서 sql create 오류가 남.
이를 해결하기 위해 회원은 공통 부분임을 감안해 회원을 짠 걸로 새 레포지토리를 생성해
그거에 맞게 조합하는 형식으로 변경해 해결
2023.04.26
1. null포인터 엑셉션 -> 팔로우 서비스 부분에 repository에서 설정해줄 때
private UserRepository로 했다.. private final로 변경후 해결
2. script src 설정 안됨 – 경로 이상
R_ABORTED 404
-> 모든 상관없이 절대 경로로 설정해줘야함
/static/assets/js/a.js ->가 아닌
/assets/js/a.js 형식으로 해줘야함, 변경 후 해결
2023.04.28
1. JDBC를 이용해서 Database로 연결을 하려고 하는데, 아래와 같은 에러가 발생한다.
Communication link failure
The last packet successfully received from the server was 0 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
The last packet successfully received from the server was 1 milliseconds ago. The last packet sent successfully to the server was 1 milliseconds ago.
-> 이 오류가 ssl 오류로 뜬다해서 찾아보니 ssl false를 설정해줘도 정상작동하지 않았다
-> 그 결과 인텔리제이의 옆에 db connecter 로 해보니 대충 mysql이 꺼진 것 같았다.
실제로 중간에 너무 컴퓨터가 느려서 프로세스 정리를 한번 돌렸는데 그때 꺼진 듯 했다
실제로 netstat –ano를 해본결과 mysql로 설정해둔 3306포트가 뜨지 않았고, 이걸보고
정리할 때 꺼져서 안되는구나 싶었다.
이걸 해결하기 위해 mysql 포트 실행하는 것부터 겨우겨우 찾아서 했지만 안되는 걸 보고
https://flexiblecode.tistory.com/76
이걸 보고 서비스에서 확인하니 실행중이 아니라서 나의 추측이 맞다는 것을 파악하고, mysql80을 켜줌으로써 해결했다.
2023.04.30
1. org.hibernate.LazyInitializationException
가장 최근 채팅 반환해주는데서 282번째 줄에서 연결된 chatromm 의 영속성 때문에 razy 전략으로 찾는게 문제가 생겨서 생겼다.
-> chat 엔티티를 확인해보니 user를 연결한 부분에 회원 정보를 늘가져올 필요가 없다 생각해 manyToOne을 lazy로 연결해놨는데 여기서 에러가 생겼다.
-> 생각을 바꿔보니 sender가 메시지를 보낸 사람인데 이건 늘 필요한 데이터라 생각이 들어
(보낸 사람을 가져와야.. 프론트에서도 다른 식으로 표시가 가능함.. 늘필요)
lazy를 없애 many to one 자체가 fetch가 eger이라 해결됬다.
2023.05.01
1. ajax parsererror 200
ajax에서 위와 같은 에러가 떴다 error 코드를 통해 확인해보니 응답은 제대로 됬으나 위와 같은 에러가 ajax에서 데이터 응답을 받아올 때 반환타입이 달라서 그렇다는 것을 알 수 있었다.
나역시도 컨트롤러에서 따로 json으로 반환해주는 방식이아닌 가져온 데이터를 json으로 반환 후 script에서 가져와 사용할려해서 즉 반환값의 타입이 달라서 생긴 에러였다.
-> 이 에러가 난 부분은 dataType을 주석처리하며 해결할 수 있었다.
dataType = request로 들어가는 데이터 타입이 아니라 서버에서 response로 넘어오는 dataType을 의미 = 서버에서 어떤 타입을 받을 것인지를 의미
-> 서버에서 json으로 보내주는 응답이 아니라서 반환 타입 불일치로 api요청은 되지만 제대로 응답을 받아올 수 없어서 생긴 오류..
: dataType 주석 후 해결
+ https://velog.io/@think2wice/Ajax-status-200%EC%9D%B8%EB%8D%B0-parse-error
+ https://byeongyeon.tistory.com/40
->를 해도 결과가 받아와지긴 하지만 결론적으로 api를 요청했던 결과로 오는 json을 받지 못했다 아무리 봐도 계속 html 파일만 와지고 그래서 컨트롤러 문젠가 하고 봐도 restcontroller로 잘 json파일로 와지고 postman에서도 잘와지고 이래서 도저히 진짜 개 뻘짓을 2시간넘게 했다..
그런데 찾다가 js파일을 다시 보니 2시간 넘게 동안 안보였던... url을 내가 utl로 써서 안됬던 것이다..
하.. 그래서 ajax에 있는 utl을 url로 바꿔주는 정상적으로 실행되었다.
2. .append 오류 -> 자바스크립트에서 정상적 작동안함 나는 붙일려면 append로 붙여야하는 줄알았는데 아니였음
https://webruden.tistory.com/634 를 참고해 해결
2023.05.04
1. stomp 오류
-> 거의 나머지는 연결하고 소켓을 연결할려했는데 socketjs와 stomp를 위해 좀더 간편하게 연결할려고 한부분이 이유는 모르겠지만 stomp로 연결이 되지 않아 버전도 바꾸고 해도 결국 실패했다. 우선 완성하는 것이 중요하니
-> 그냥 websocket을 통해 변경했다. 추후에 stomp로 학습해 만들어봐야겠다.
2023.05.05
1. 소켓 관련 에러 (소켓 주소 반환이 안됨 -> 에러로인한 소켓 닫힘)
(1) 소켓을 여는데 소켓핸들러에서 같이보낸 uuid와 name을 받아오지 못하고, index가 벗어났다는 에러 발생
-> 찾아보니 내가 보내는 주소는 chatting인데 받을려고 한 주소는 url.split(“/chating/”)으로 해서 에러가 생김 -> chatting으로 고치고 정상적 수행 그 후
(2) name자체가 한글이나 특수문자가 보내질 때 올바르게 받아서 사용이 안됨
-> js에서는 소켓에서 url을 보낼 때 encodeURIComponet(name)으로 URL 인코딩을 위한 함수로 인코딩해 보내고
-> 여기서 이름을 실제로 받아서 사용해야하는 hadller에서는 URLDecoder를 통해 이름을 처음의 이름으로 받아 db에서 회원을 찾는데 사용
-> 한글화 가능
(3) uuid는 잘 받아지는데 name을 받을 때 자꾸 indexout에러가 떴다
디버그를 찍어가며 확인해보니 내가
String uuid = url.split("/chating/")[1];
String name = url.split("/chating/")[2]; 이런식으로 코드를 짜서
url이 이미 한번 chatting기준으로 나눠지니 당연히 2번째 인덱스는 존재하지 않아
위와 같은 에러가 발생했다 이를 해결하기 위해
->
String[] splitUrl = url.split("/");
String uuid = splitUrl[4];
String name = URLDecoder.decode(splitUrl[5]);로
코드를 변경했다. 실제로 나눠지는 것을 확인해보면 4, 5번째에 위치하므로 정상적으로 작동한다.
-> 해결
2. 메시지 발송시 에러
메시지를 발송할떄 나는 효율성을 위해서 uuid를 통해 받을 찾고 이를 보내는 방식으로 진행할려함. 하지만 uuid로 방을 찾는데 분명 존재하는 방이 존재하지 않다고 돼서 전송된 메시지가 화면에 출력이 안됨
-> 확인결과 json을 parser로 변환해준다음에 그 json안에서 uuid를 가지고 오지 않았다.
-> jsonsimpleuuid에 맞게 값을 가져올수 있도록 수정한 후 성공했다.
3. caught TypeError: Cannot read properties of undefined (reading 'username')
at ws.onmessage (chatting.js:26:40) 에러
onmessage에서 응답받은 json오브젝트에서 username을 가져와 같다면 내가 보낸 것, 다르다면 다른 사람이 보낸 것으로 표현해주는 과정에서 에러가 발생
-> 타입을 가져올 수 없다
-> 확인해보니 obj.chat.sender.username 밑에 있었다.. 이를 위로 올려주며 해결
4. joinRoom Listener 에러
원래 조인룸이 생성될 때 그 인원수를 표시해주기 위해
@perPersits로 했는데 이렇게 되면 채팅방을 만들 때 바로 되는게 아니라 채팅방 저장후 조인룸이 생성되다 보니까 @transation처리라 커밋이 안된 상태에서 방을 가져오려니 참조가 안되 null 포인터 에러가 떴다.
-> 이 에러를 해결하기위해 영속성으로 생성될때가 아닌 @PostUpdate, @PostDelete로처리해 변경했다. 방을 만들땐 인원수에 대해 바로 알수 있으니..
2023.05.06
1. joinroom error
처음 채팅방 생성시 방을 가입시 회원들이 들어가지 않고 내 자신만 반복해서 들어가짐
-> 그러다보니 세션을 못가져와 웹소켓이 이미 close됬다는 에러
-> 확인해보니 userlist에서 하나씩 빼서 넣어야하는데 user 자기자신을 넣어 생긴 오류 이 부분을 고쳐 해결
2. 뷰네임 관련 에러
저장할 때 뷰네임이 자꾸 response로 보내는 이름으로 변경이됬다.
저장을 미리 해도 그렇게 보여주길래 확인해보니
@Transaction 이 있는데서 set을 responsedto가 아닌 이미 저장된 가져온 채팅방 엔티티에 하니 내가 따로 .save 처리를 안해줘도 자동으로 저장이 됬다.
-> response를 하기 위한 dto엔티티에 추가해주는 방식으로 변경해 정상적으로 이름이 저장되고 보여준다.
2023.05.08
(1) Uncaught ReferenceError, Uncaught typeError가 떠서 js에서 함수를 사용하지 못함
: 한 js에서 있던 코드들을 너무 길어져서 js파일을 나눠 분류를 했다
-> 그랬더니 위와 같은 에러가 뜨더니 한페이지 내부에서는 정상적으로 실행되던 것이 저렇게 에러를 발생시켰다. 찾아보니 옮겨간 함수들이 선언되어 있는 js가 기존의 js보다 아래 선언해둬서 즉 함수가 선언되기 전에 다른 스크립트에서 호출되니, 당연히 없는 것을 참조한 함수이다보니 에러가 뜨는거였다.
-> <script src="assets/js/Chat/chat-session.js"></script>에 세션을 부르는 함수들을 선언했는데 이를 사용하는 스크립트보다 위로 올려주면서 에러를 해결했다.
2023.05.12
1. org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
-> 채팅방 삭제시 리스너안에서 entityManager가 불러지지 않아 실패..
-> 해결하기 위해 제거하니 이름을 변경하는 부분에서 저장이 안되서 실패..
-> 따로 저장하는걸 뺴니 null포인터 에러가 뜸
-> SQL Error: 1451, SQLState: 23000 에러로 참조하는게 잘못되서 뜨는 에러
-> Cannot delete or update a parent row: a foreign key constraint fails (`noldaga`.`chat_session`, CONSTRAINT `FKa3h6ed3nxrc94h4lpvaafrkqm` FOREIGN KEY (`chat_room_id`) REFERENCES `chat_room` (`id`)) 에러임
-> 살펴보니 chatroom을 삭제하는 경우 만약
아예 방이 사라질떄 chat이 존재하면 chatroomid를 외래키로 가지고 있는 값이 존재하게 되는 거니 이걸 (cascade = CascadeType.ALL, orphanRemoval = true)
를 추가해 함께 사라지게해 해결..
(2) 이메일인증 에러.. -> yaml에 이메일인증을 위해 입력한 네이버 로그인 데이터를 비밀번호 변경해서 안되는 것이였음
-> 변경된 비밀번호 넣고 해결
2023.05.13
1. Cannot delete or update a parent row: a foreign key constraint fails -> joinroom의 room에서 에러가 뜸.. 참조를 너무 다양한 곳에서 여러개를 하느라 지울떄 무결성 체크가 계속 필요함 -> joinroom의 room을 참조해서 안된다.. 찾아보니 하나이상의 참조를 할 때 이런 참조가 외래키가 엮어서 오류가 생김.. 이를 해결하는 방법을 여러개 찾아봤지만 실질적으로 잘 되는게 없었음
-> 생각을 바꿔본 결과 굳이 chatroom 자체를 참조할 필요가 없겠다 생각..
-> 실질적으로 joinroom에서 room을 구분하는데만 사용하고 쓸필요가 없어서
과감하게 외래키 관계를 지우고, 어처피 room은 고유의 키 uuid를 가지고 있으니 이걸로 대체해 서비스가 구동되게 바꿈
++ 마찬가지도 채팅에서도 실질적으로 채팅방 정보는 한번만 가져오면됨.. 즉 그냥 uuid로 변경 -> 굳이 가져오지 않음.. 이런식으로 가져오면 외래키 참조로 제약이 너무 생겨 데이터 베이스 관리가 어려워짐.. 실제로 jpa에서도 잘안됨..
프로젝트 깃허브 (noldaga)https://github.com/FeedTypeSNS/noldaga
GitHub - FeedTypeSNS/noldaga
Contribute to FeedTypeSNS/noldaga development by creating an account on GitHub.
github.com
'기록 > TIL' 카테고리의 다른 글
2023/04/25 TIL (8) | 2023.04.25 |
---|---|
2023/04/18 TIL (0) | 2023.04.19 |
2023/04/17 TIL (3) | 2023.04.18 |
2023/04/14 TIL (0) | 2023.04.15 |
2023/04/13 TIL (0) | 2023.04.14 |