미소를뿌리는감자의 코딩
채팅 프로젝트 - 현황 본문
> 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 보안도 적용해보면 좋겠다.
> 코드 최적화
> 채팅방에 들어가면 누가 있는 지
> 채팅방에 프로필 사진도 같이 뜨도록 구성하면 좋을 듯
'프로젝트' 카테고리의 다른 글
[CI/CD 구축] Github actions - ECR - EC2 + 도커 (9) | 2024.07.24 |
---|---|
Webflux+ WebSocket + mongosh + netty 을 이용한 채팅 기능 구현 (0) | 2024.07.18 |
채팅 프로젝트 - CI/CD 구축 (0) | 2024.06.21 |
Webflux + mongodb 를 통한 채팅 구현 (0) | 2024.05.23 |
도서 기능 구현 API (0) | 2024.03.05 |