Spring(30)
-
[Spring boot] stomp를 활용해서 1:1 채팅 만들기
1:1 채팅하기 WebSocket & STOMP WebSocket은 웹 상에서 쉽게 소켓통신을 하게 해주는 라이브러리로 실시간 채팅 서비스 등등 여러 유요한 서비스에 기반이 된다. 스프링 부트환경에서는 이러한 서비스를 구현하기 위해서 필요한 2가지가 있다. WebSocket의 기능을 보완해주고 향상시켜주는 SockJs라이브러리와 메시징 전송을 좀 더 효율적으로 지원해주기 위한 STOMP 프로토콜이 존재한다.일반 스프링 환경에서는 핸들러만 구현해주고 직접 호출했지만 부트 환경에서는 핸들러와 브로커라는 개념을 이용해서 서로간의 통신을 하게 된다. STOMP STOMP는 Simple/Streaming Text Oriented Messaging Protocol의 약자이다. 텍스트 기반의 메세징 프로토콜이다. 유..
2021.04.25 -
[Spring JPA] 다양한 연관관계 매핑
다양한 연관관계 매핑 다대일[N:1] 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향 개념 x 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체 양방향 관계는 A->B , B->A 처럼 참조가 2군데 연관관계의 주인: 외래 키를 관리하는 참조 주인의 반대편: 외래 키에 영향을 주지 않는다. (단순 조회만) 다대일 단방향 Member.java @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; 다대일 양방향 Team.java @OneToMany(mappedBy = "team") private List perso..
2021.04.19 -
[Spring] @Valid
Spring @Valid 메세지 커스텀하기 개요 React + SpringBoot 개발하고 있었기 때문에 프론트에서 회원가입이나 로그인할 때 데이터 값을 넘겨받을 때 유효성 검사를 하고 에러가 있으면 그 에러가 있는 필드에 대한 message를 넘겨주는 부분이다. 문제 만약 유효성 검사가 맞지 않는다면 { time": "2021-04-05 06:25:21", "status": 400, "errorMessage": "비밀번호가 일치하지 않습니다." } JSON 형태로 프론트 개발자분들에게 넘겨주어야 한다. 혼자 개발할 때는 타임리프를 사용해서 Model에 담아서 사용했으면 되었지만 이부분을 JSON형태로 만들고 시간과 status, message를 어떻게 넘겨야할지가 고민이었다. 해결방법 Controlle..
2021.04.11 -
[Spring] Bcrypt로 암호화하기
[Spring] Bcrypt를 이용하여 비밀번호를 암호화하여 저장하는 방법 개요 단순 텍스트에 비밀번호를 저장하는 것은 보안상 매우 취약하다. 이 글에서는 자바를 이용하여 데이터베이스에 해시된 패스워드를 저장하는 방법을 다룬다. 이렇게 한다면 BDA들 조차도 실제 패스워드를 뺴내기 불가능하다. 기존의 MD5, SHA-1, SHA-2로 패스워드를 해싱할 수도 있지만 솔트를 치는것은 추가적인 보안을 만들 수 있다. (여기서 솔트를 친다는 말은 원문에 추가적인 문자열을 넣어서 해시를 강화한다고 이해하면 된다.) 이 글에서는 jBCrypt를 사용할 건데 그것은 패스워드를 인코딩할 때 내부적으로 랜덤 솔트를 생성하여 단순 텍스트를 인코딩하고 DB에 저장한다.( 솔트를 하게 되면 같은 문자열로 부터 다른 해시 값이..
2021.04.11 -
Spring으로 Token 받기
쿠키와 세션 들어가기전에 인증을 먼저 알고가자! 인증은 Front-end 관점에서 봤을 때 사용자의 로그인, 회원가입과 같이 사용자의 도입부분을 가리키곤한다. 반면 Back-end 관점에서 봤을 때는 모든 API 요청에 대해 사용자를 확인하는 작업이다. 사용자A와 사용자 B가 앱을 사용한다고 가정하자. 두 사용자는 기본적을로 정보가 다르고 보유하고 있는 컨텐츠도 다르다. 따라서 서버에서는 A,B가 요청을 보냈을 때 누구의 요청인지를 정확히 알아야한다. 만일 그렇지 않다면 자신의 정보가 타인에게 유출되는 최악의 상황이 발생한다. 그렇기에 앱(Front-end) 에서는 자신이 누구인지를 알만한 단서를 서버에 보내야 하며, 서버(Back-end) 는 그 단서를 파악해 각 요청에 맞는 데이터를 뿌려주게 된다. ..
2021.04.11 -
spring jpa localtime between
타임라인 서비스가 불러오는 __ 목록의 시간을, 조회 시간으로부터 24시간 이내로 바꿔보세요. 힌트 spring jpa localtime between 지금은 LocalDateTime.now(), 하루 전은 LocalDateTime.now().minusDays(1) 입니다. LocalDateTime startDatetime = LocalDateTime.of(LocalDate.now().minusDays(1), LocalTime.of(0,0,0));//어제 LocalDateTime endDatetime = LocalDateTime.of(LocalDate.now(), LocalTime.of(23,59,59)); List memos = memoRepository.findAllByModifiedAtBetween..
2021.03.23