프로젝트

채팅 프로젝트 - 현황

미뿌감 2024. 6. 9. 18:35
728x90

> Webflux + Mongodb를 이용한 채팅 구현

> Websocket을 이용한 전체 채팅방 구현

> S3 bucket을 이용한, 프로필 이미지 저장 [2024/6/9]

> chatRoomUser entity 형성을 통한 참여 중인 채팅방만 반환하도록 구성 [2024/06/10]

> 친구 연관관계를 맺고, 출력 - lazyInitializationException 발생 [2024/06/11]

    - @Transactional 을 통해 영속성을 보장하려고 해도 에러가 남 -> why? controller 에서 service로 user를 넘겼다면, 그것을 다시 userRepository에서 findById를 해줘야 함. 아니면, controller에서는 이미 영속성이 마감이 되었기 때문에, 에러가 나게 되는 것임.

    - 일단 출력하는 거 성공. 하지만, ManyToOne mapping 개념이 조금 흔들려서 처음에 코드를 잘못짜서 고생을 많이 함. 결국 알아차리고 해결하긴 했지만, 힘듦. [ 추후: 자기 자신을 친구 추가 못하도록, 중복 되어서 수강신청 못하도록, global exception handler 작성 ] 

 

> ModelAndView를 이용해서 @ControllerAdvice 를 통한 globalExceptionHandler 작성. errorEnum 작성. 친구 추가 예외 처리

> myPage에서, 친구들 이미지와 내 이미지를 출력하도록 구성. username과 프로필 사진 변경하는 API 구성 완료.

[ 추후: username을 기반으로 하게 하는 것이 아니라, name을 기반으로 이름을 수정하게 바꿔야 함. -> why? 로그인 시, usernname을 기반으로 비교하기 때문]

[2024/06/12]

 

> 로그인 시, name을 추가적으로 요청하게 함. myPage에서, username이 아니라, name을 출력하도록 함.

> 이름, 프로필 사진 수정 api 프론트에 적용. == 으로 적으면, 입력을 하지 않았는지 인지를 못함. .isEmpty() 로 확인해주어야 함.

그 이유는... 

 - ==null의 경우 MultipartFile 객체가 아예 전달 되지 않았는지 확인.

 - .isEmpty()의 경우엔 객체가 전달 되었지만, 실제 객체가 비어있는지 확인하는 역할을 함.

> 친구 이름도 수정이 가능하도록 함. + 원래 친구가 설정한 이름도 수정 시 모달에 보이도록 함.

[ 추후: say Hello 를 클릭할 때, 메시지도 같이 입력해서 보낼 수 있도록 수정. 메시지 옆에 친구 추가 버튼을 만들어서 친구 추가도 가능하도록 기능 추가 ]

[ 추후: security 공부하기 ]

[2024/06/14]

 

> 채팅방 생성 API 작성 [2024/06/20]

> CI/CD 구축 (1) [2024/06/21]

 

>CI/CD 구축 - 탄력적 IP 할당; 탄력적 IP 할당을 통해 인스턴스가 중지되었다가 다시 실행되어도 동일한 IP 주소로 접근이 가능하도록 도와줌. [2024/06/22]

ssh -i "chat_EC2_key.pem" ubuntu@ec2-13-125-52-207.ap-northeast-2.compute.amazonaws.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:2cuCmvnXNea3+R55XYl05Yf8T5pnBjfUvc6D1NoPK3s.
Please contact your system administrator.
Add correct host key in /Users/gimhyeon-yeong/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/gimhyeon-yeong/.ssh/known_hosts:53
Host key for ec2-13-125-52-207.ap-northeast-2.compute.amazonaws.com has changed and you have requested strict checking.
Host key verification failed.

linux 로 ec2 생성했다가, ubuntu 로 바꿔야 되서 바꾼 후, ssh 클라이언트로 접근 시도 했을 때, 위 에러가 발생하였다.

해당 에러가 발생한 이유가 무엇일까.

 

ssh-keygen -R ec2-13-125-52-207.ap-northeast-2.compute.amazonaws.com

이 코드를 작성한 후에는, 접근 성공하였는데, 이 코드는 어떤 역할을 하는가.

 

> CI/CD 인바운드 규칙 - 위치(IP)가 바뀔수록 보안 그룹에서 추가해주어야 함. EIP 를 사용해도 동일함.

그렇다면 인바운드 규칙을 사용하는 이유는 DNS 서버를 이동하면서 찾기 보다 바로 해당 위치를 반환할 수 있도록 도와주기 때문. [2024/06/23]

ssh -i "chat_EC2_key.pem" ubuntu@11.111.11.1111 // EIP 주소 적기

ssh -i "chat_EC2_key.pem" ubuntu@ec2-13-111-111.ap-northeast-2.compute.amazonaws.com // IP

 

> CI / CD 구축 - EC2에 mongodb와 mysql을 설치해 주었다. 그러자 RAM 부족으로 인해 deploy를 하게ㅐ 되면 서버가 터지게 됨. -> t2.Medium으로 upgrade 후 배포 성공 [2024/06/24]

 

> CI/CD 구축 과정 블로그에 적기

> 전반적인 html chatGPT 이용해서 꾸미기. 

const stompClient = new StompJs.Client({
    brokerURL: 'ws://localhost:8080/greeting-websocket'
});


const stompClient = new StompJs.Client({
    brokerURL: 'ws://ec2-13-11111.ap-northeast-2.compute.amazonaws.com:8080/greeting-websocket'
});

web-socket 부분이 연길이 안되어서 왜 그런가 살펴보니, 해당 부분을 바꾸지 않아서 발생하였던 문제였음.

[2024/06/25]

 

> web-socket : 메시지 보낼 수 있도록 + 엔터로도 메시지 보내지도록 기능 추가

> 자신의 아이디를 인지할 수 있도록 html 추가

>  web-socket connect - disconnect 합치기 -> 페이지에 연결되면 connect되고 이런식으로

> 채팅방 ID 보이지 않게 지우기

[2024/06/26]

 

[추후:  친구 검색 기능 - 검색으로 친구 찾기 ]

[추후: Web Socket 부분에 메시지 작성해서 보낼 수 있도록 하고, 해당 메시지를 보고 친구 추가도 보낼 수 있도록 하도록 하기]

[추후: MyPage 꾸미기 + login 꾸미기 + social login 도 포함해보기]

[추후: 채팅방 ID 보이지 않게 지우기]

[추후: https 적용하기]

[추후: web-socket connect - disconnect 합치기 -> 페이지에 연결되면 connect되고 이런식으로]

 

-- 추후 --

> 배포도 해야지

> CORS 확인해보고 - 다 open 되어 있지 않은지

> CSRF 보안도 적용해보면 좋겠다.

> 코드 최적화

> 채팅방에 들어가면 누가 있는 지

> 채팅방에 프로필 사진도 같이 뜨도록 구성하면 좋을 듯

728x90