TIL

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

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

    [WIL - 20230424~20230430]

    ORM 객체-관계 매핑으로, 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 객체지향 프로그래밍에서는 클래스를, 관계형 데이터베이스에서는 테이블을 사용한다. 객체지향적인 코드로 직관적이고, 비지니스 로직에 집중할 수 있다. 재사용성 및 유지보수에 대한 편리성이 증가하고, DBMS에 대한 의존성이 줄어든다. 하지만 ORM으로만 서비를 구현하기는 어렵다. SQL SQL이란 Structured Query Language 구조적 질의 언어의 줄임말이다. 관계형 데이터베이스(RDBMS)에서 자료를 관리 및 처리하기 위해 설계된 언어이다. MVC MVC 패턴은 모델, 뷰, 컨트롤러로 이루어진 디자인 패턴이다. 어플리케이션의 구성 요소를 세 가지 역할로 나누어 개발 과정에서 각 구성 요..

    [TIL - 20230430] WebSocket+Stomp 사용자들이 있는 채팅방 찾기

    💻문제점 사용자가 채팅을 하려고 할 때 이미 해당 사용자들로 생성된 채팅방이 있는지 찾아야 했다. 채팅방의 참여한 사용자는 리스트를 통해 저장하는데, 저장하기 전 정렬을 한다. 그래서 사용자들의 이름으로 채팅방을 찾기 위해 이름 순으로 정렬해서 넣어주고 해당 참여자들이 있는 방이 있는지 확인하려고 했다. @PostMapping("/chat") public ResponseDto createChatRoom(@RequestBody String receiver, String sender) { // @Param sender should be replaced to UserDetails.getMember(); return chatService.createChatRoom(receiver, sender); // crea..

    [TIL - 20230429] WebSocket + Stomp 적용기2

    스프링시큐리티 + JWT 기반에서 개발을 하려고 하니 어떤 문제가 원인인지 찾기 어려웠다. 다른 코드들도 적용해보면서 여러 시도를 해봤지만 결과는 항상 4xx에러 였다. 그래서 생각한 방법은 아예 새로운 프로젝트에서 스프링시큐리티나 JWT 없이 개발하는 것이었다. 그러면 스프링시큐리티나 JWT에 대해 생각하지 않고 온전히 채팅 개발에만 집중할 수 있을 것 같았다. 공식문서를 찾아보다가 WebSocket + Stomp 관련한 가이드를 발견했다. https://spring.io/guides/gs/messaging-stomp-websocket/ Spring | Home Cloud Your code, any cloud—we’ve got you covered. Connect and scale your servic..

    [TIL - 20230428] WebSocket + Stomp 적용기1

    💻문제점 웹소켓+Stomp 사용한 채팅 서버를 구현하고 PostMan으로 테스트 하려고 했는데 영 쉽지 않았다. Post로 웹 소켓을 연결하고, PostMan의 WebSocket Request를 사용하여 테스트하려고 했다. 웹 소켓 연결을 위해 다음과 같이 요청 uri를 작성해서 보냈지만 오류가 발생... 📃시도 시도1. raw에서 socket.io로 변경하여 요청 시도2. uri 변경 ws://localhost:4000/ws-edit/chat/enter 시도3. 연결을 POST로 시도, uri 변경 여기서 이제 연결은 http post 요청으로 하는 것임을 알게되었다...! 웹소켓 연결 자체를 웹 소켓으로 하려고 했으니...ㅎㅎ 연결했으니 채팅방을 입장하고자 했다. 여러 uri로 테스트 했으나 매번 4..

    [TIL - 20230428] failed to lazily initialize a collection of role

    💻문제점 @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "member_id") private Long id; @Column(nullable = false) private String userId; @Column(nullable = false) private String password; @Column(nullable = false) private String email; @Column(nullable = false) private String nickname; @Col..

    [TIL - 20230427] message properties 사용한 @Valid 메시지 처리

    💻문제점 @Valid 를 통해 유효성 검사를 할 때 ExceptionAdvisor를 통해 클라이언트로 응답 메시지를 보내지만, 메시지가 마음에 들지 않았다. 비밀번호의 패턴이 올바르지 않을 때 다음과 같은 메시지를 출력한다. @ControllerAdvice public class ExceptionAdvisor { /** * Valid 예외 처리 */ @ExceptionHandler({MethodArgumentNotValidException.class, HttpMessageNotReadableException.class}) public ResponseEntity signValidException(MethodArgumentNotValidException exception) { BindingResult bin..