deedee0905 / CreateType

0 stars 0 forks source link

개인 채널 이동 연결 #36

Open deedee0905 opened 2 years ago

deedee0905 commented 2 years ago

개인채널 이동 연결

deedee0905 commented 2 years ago

포스트에 달려있는 덧글을 누르면 해당 계정의 프로필 채널로 이동할 수 있게끔 코드를 수정하였다.

데이터를 받아오는 과정에서 필요한 부분이 있어서 코드들을 추가하였는데 bean들이 충돌하는 에러가 발생해서 원인을 찾고있는중이다....

deedee0905 commented 2 years ago

순환참조 에러 발생한 에러를 찾아보니 bean들이 충돌하는 이 에러는 '순환참조 에러' 라고 하였다. 서로 연결되는 객체들이 많아지다보니 이런 경우가 종종 발생할 수 있는데 이렇게 순환구조가 되는 객체들을 스프링 자체에서 허용하지 않아 서버가 켜지지 않던 것이었다.

해결 방법을 찾아보니

  1. 테이블 구조를 변경하기
  2. 객체 안에서 문제가 되는 순환 객체 호출을 삭제하기
  3. 또는 순환 참조를 피하기 위한 별도의 BO를 만들어서 관리하기

크게 이렇게 3가지 방법 정도가 있었는데 지금 내 상황에서는 덧글을 작성한 사용자의 channelId를 얻기 위해서 channel BO를 다른 객체에서 호출하게끔 만들었다가 벌어진 상황이었기에 아예 덧글 자체를 insert 할 때에 channelId를 parameter 값으로 받을 수 있게끔 테이블 구조를 변경하기로 하였다.

우선 순환참조 오류가 발생하게 만든 코드들을 삭제하였고 서버가 정상 작동 되는지 확인해보았는데 문제되었던 코드들을 삭제하니 서버가 다시 정상 작동되었다.

캡처2

deedee0905 commented 2 years ago

순환참조 에러도 해결하였고 기존에 사용하던 comment 테이블을 드랍하고 channelId 컬럼을 추가해서 테이블을 다시 만들었다. parameter 값으로 channelId를 받아오도록 코드를 수정하였다.

insert, delete 기능은 정상적으로 작동하는데 데이터를 view 화면에서 출력할 때에 새로운 에러가 발생했다. DB에서는 정상적으로 작성자의 channelId값이 저장되는데 view 화면에서 데이터를 가져올 때에는 로그인한 아이디가 달라져도 고정적으로 0값으로 가져오고 있어서 어디서 이런 에러가 발생했는지 새롭게 찾고있는 중이다.

캡처3

캡처4

deedee0905 commented 2 years ago

캡처5

덧글 insert시에 channelId가 정상적으로 저장됨에도 데이터 출력시 channelId가 일괄적으로 0으로 나오는 문제를 해결하였다.

이전에 사용하던 comment 테이블에는 channelId 컬럼이 없었는데 그 테이블을 드랍하고 새로운 테이블에는 channelId 컬럼이 추가됬지만 덧글을 select 해오는 sql 쿼리에는 해당 컬럼이 빠져있어서 생긴 간단한 문제였다. MAPPER 부분을 수정하고 데이터를 하나씩 출력해보면서 정상 작동 되는 부분을 확인하였다 :-) !!!

이제 게시글에 덧글을 작성한 사람의 프로필 또는 이름을 누르면 해당 계정의 프로필 채널로 이동 할 수 있게끔 기능을 완성하였다.

큰 틀을 이미 만들어두고 그 안에서 세부적인 것들은 건들이는 작업이다보니까 조금씩 건드리는데도 생각을 많이 해야하고 어떻게 코드를 써야할지 생각을 많이 해야하는 것 같다..

그래도 결과물의 디테일이 하나씩 더 보완되고 있어서 서비스를 완성해간다 라는 기분이 든다!

deedee0905 commented 2 years ago

캡처1

캡처2

게시글 >> 덧글 작성자의 profile 페이지로 이동 위 기능을 사용할때 c 조건문에 해당된 코드가 세션에 저장된 channelId 값을 기반으로 동작하여 로그인한 사용자가 채널이 없다면 이동된 페이지의 계정 주인이 채널이 있더라도 데이터가 출력되지 않았다.

코드를 수정하여서 이 부분을 깔끔하게 해결 완료했다 :-) !!

deedee0905 commented 2 years ago

방금 전에 기능을 테스트하고 이슈를 적으면서 어? 왜 채널생성 버튼이 계속 노출되고 있지?? 하는 생각이 들었다.

내가 의도한대로 라면

  1. 로그인한 상태여야 하고
  2. 로그인한 사용자가 해당 계정의 프로필 view 페이지에서 요구하는 parameter(userId / channelId) 값과 세션에 저장된 값(userId / channelId)값이 같은 상태

이 두 조건이 충족됬을때 >채널생성 버튼<이 나타나야 했는데 작성되어있던 코드는 channelId값이 0이라면 채널생성 버튼을 화면에 출력해주고 있었다.

이 부분을 해결하기 위해서 코드를 수정해야했는데, 캡처3 이렇게 페이지 이동시 받아온 parameter 값과 세션에 저장된 userId값을 비교해주면 쉬울 것 같은데... 생각을 했지만 저 parameter 값을 jsp에 어떻게 가져오지?? 부분에서 생각이 막혀서 꽤 오랫동안 이 코드를 수정하지 못하고 있었다.

그러다가 받아온 parameter 값은 model에 저장시켜서 jsp로 가져오면 되지 않을까? 라는 생각을 해보고 controller에서 request했던 값을 model로 저장해서 jsp에서 활용해보았다!!

캡처1 캡처2

결과적으로 내가 의도한대로 코드가 수행이 되었다 ㅎㅎ 디테일한 부분을 수정할 때에는 이것저것 생각을 더 꼼꼼히 해야해서 아직은 조금 버벅대는게 많은 것 같다...!!!