전체 글

전체 글

    [Spring] SpringBoot EC2에서 AWS RDS MariaDB 연동 및 배포

    SpringBoot 프로젝트를 EC2로 배포하고 AWS RDS MariaDB를 연결해서 실행되는 것까지 확인할 것이다. 1. 인스턴스 생성 1) 인스턴스 생성 키페어를 새로 생성해주었다. 스토리지는 무료 최대 사이즈인 30으로 설정하고 생성해주면 된다. 2) 인바운드 규칙 편집 MariaDB는 MYSQL/Auroa 유형으로 설정해주면 된다. 3) 탄력적 IP 설정 인스턴스를 중지했다가 다시 실행해도 IP가 변경되지 않도록 탄력적 IP를 설정했다. 설정하지 않아도 무관하다. 나중에 인스턴스를 삭제하면 탄력적 IP도 삭제해주도록 하자. 기본 설정 그대로 할당했다. 연결된 인스턴스 ID가 비어있다. 연결시켜 주자! 이 탄력적 IP 주소 연결 클릭한다. 이전에 생성한 인스턴스를 선택해준다. 2. AWS EC2 ..

    [Spring] AWS RDS MariaDB 생성 및 SpringBoot 프로젝트 연동

    AWS RDS MariaDB를 생성해 스프링 부트와 연동해보자. 1. AWS RDS MairaDB 생성 데이터베이스 생성 버튼을 클릭하고 MariaDB를 선택한다. 템플릿은 프리티어, 식별자는 원하는대로 작성하면 되고, 마스터의 사용자 이름과 비밀번호도 원하는대로 설정한다. 20GB까지 무료이므로 변경해주고, 스토리지 자동 조정 활성화를 꺼준다. 외부에서 DB에 접근이 가능하도록 하기 위해 퍼블릭 액세스 부분은 '예'로 변경했다. 추가 구성을 열어, 초기 데이터베이스를 생성해주었다. 자동 백업 활성화는 비활성화 해주었다. (필자는 혹시 몰라 보존기간 0일, 스냅샷으로 태그 복사를 비활성화 한 뒤 자동 백업을 비활성화 시켰다.) 마이너 버전 자동 업그레이도도 비활성화 해주었다. 이제 데이터베이스를 생성하면..

    [Spring] AWS RDS MariaDB + Spring Boot, Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_unicode_ci,COERCIBLE) for operation '=' 해결

    AWS RDS MariaDB와 Spring Boot를 연동하고, 서버 실행 후 PostMan으로 테스트를 해보려고 했는데 다음과 같은 에러가 발생했다. Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_unicode_ci,COERCIBLE) for operation '=' 찾아보니, JOIN 조건에 있는 각 테이블 컬럼의 문자셋이 달라서 발생하는 에러 라고 한다. HediSQL에서 데이터베이스와 각 테이블의 문자셋을 변경해주었다. -- 데이터베이스 문자셋 변경 alter database DB이름 character set utf8 collate utf8_general_ci; -- 테이블 문자셋 변경 alter table 테이블명 con..

    [TIL - 20230506] 회원/비회원 전체 게시글 조회 처리

    💻문제점 현재 프로젝트에서는 비회원/회원 모두 전체 게시글을 조회할 수 있도록 되어있다. 게시글 조회 API 응답으로 회원이 해당 게시글을 좋아요 했는지 여부를 함께 넘겨주는데, 비회원이면 무조건 false이므로 좋아요 여부를 확인할 필요가 없었고, 회원이면 각 게시글 마다 좋아요를 했는지 여부에 따라 true/false를 넘겨주어야 했다. 📃시도 API의 요청 URL이 /anonymous 시작하는 비회원 조회 API를 만들어서 비회원이면 해당 API로 요청을 보내고, 좋아요 여부는 무조건 false를 넘겨주도록 했다. AnonymousController @RestController @RequestMapping("anonymous") @RequiredArgsConstructor public class A..

    [TIL - 202030504] WebSocket+Stomp 채팅방에 직접 참여하지 않은 사용자 구독시키기2 + 자잘한 문제점 해결

    💻문제점 1 어제의 문제가 오늘까지 이어진다. 문제점은 다음과 같았다. A가 B에게 채팅을 보내기 위해 1:1 대화하기 버튼을 누른다. 이때 A와 B의 채팅방이 만들어지고, 서버에서 해당 채팅방의 UUID를 넘겨주면 A는 해당 채팅방을 구독한다. 이때 B가 A와 1:1대화하기 버튼을 직접 누르지 않는 이상, 해당 채팅방에 대해 구독되어 있지 않기 때문에 메세지를 받을 수 없다. A가 1:1대화하기 버튼을 눌렀을 때 B도 구독할 수 있는 방법이 없을까? 📃문제점1 시도 시도3. 새로운 방법을 고안했다. 이 방법은 StompSession 객체를 찾을 필요가 없다! 우선, 모든 사용자는 웹 소켓을 연결할 때 자기 자신의 개인 채팅방도 구독한다. ex) /sub/chat/queue유저1 유저2가 유저1에 대해 ..

    [TIL - 20230503] WebSocket+Stomp 채팅방에 직접 참여하지 않은 사용자 구독시키기1

    💻문제점 A가 B에게 채팅을 보내기 위해 1:1 대화하기 버튼을 누른다. 이때 A와 B의 채팅방이 만들어지고, 서버에서 해당 채팅방의 UUID를 넘겨주면 A는 해당 채팅방을 구독한다. 이때 B가 A와 1:1대화하기 버튼을 직접 누르지 않는 이상, 해당 채팅방에 대해 구독되어 있지 않기 때문에 메세지를 받을 수 없다. A가 1:1대화하기 버튼을 눌렀을 때 B도 구독할 수 있는 방법이 없을까? 이 문제로 이미 이틀을 고민하는 중이다... 생각한 방법은, 사용자가 로그인을 할 때 생성된 WebSocketSession을 sessionId와 함께 저장하는 것이다. Map의 형태로 Key는 sessionId, value는 WebSocketSession 객체를 저장한다. Map sessionMap = new Conc..

    [TIL - 20230501] 채팅 시스템 프론트와 연결

    빈 프로젝트에서 진행한 WebSocket Stomp 채팅을 스프링 시큐리티와 JWT가 있는 원래 진행하던 프로젝트로 가져와 적용했다. 프론트 분이 깃허브에 올려둔 WebSocket Stomp 채팅 레포지토리를 받으셔서 구현해 두셨는데, 원래 프로젝트로 가져오고 코드가 바뀐 부분이 있어 함께 의논하며 프론트 코드를 수정했다. 현재까지 진행된 채팅 화면이다. 현재는 대화할 상대방의 이름을 입력하게 되어있지만, 나중에는 1:1대화하기 버튼을 눌러 대화가 가능하도록 변경할 예정이다. 회원가입 화면 채팅할 상대방 닉네임 입력 (추후에는 1:1대화 버튼으로 변경할 예정) 채팅 보내기 여기서 다른 사람이 user111에게 채팅을 보내면 user111 쪽에 user333 이 보낸 채팅방이 목록에 뜬다. ?!! user..