전체 글
-
@ManyToMany, @OneToMany, @ManyToOne관계 작성하기Spring 2021. 9. 5. 21:33
엔티티 매핑을 하다보면 엔티티와의 관계가 1:N, N:1이 아닌 N:N의 관계를 가진 경우가 존재한다. (ex. 팀-회원의 관계) 이러한 경우 다:다 의 관계로 매핑되는데, 이럴경우 조회 쿼리, 외래키를 어디에 위치시키는 가에 대한 여부를 알아본다. @ManyToMany 관계 조인테이블에서 데이터정보의 추가와 부가기능추가는 불가능해지기 때문에, 다대다 관계는 권유되지 않는다. 실무에서는 일대다, 다대일-다대일, 일대다의 관계로 풀도록 가운데 엔티티를 추가해서 풀어주도록 한다. 엔티티 설정 유저와 팀의 엔티티에 다음과 같이 작성해준다. 멤버와 팀은 서로 다대다 관계이다. 외래키는 user가 가지고 있기 때문에 다대다 관계의 매핑정보를 수정하기 위해서는 user측에서 다음과 같은 addTeam의 함수를 이용..
-
MultipartFile 파일업로드(with. react)Spring 2021. 9. 5. 20:49
spring에서 파일업로드 기능을 실행해보자. 파일을 저장하기 위해서는 spring프로젝트 내부에 파일저장 폴더가 위치해야 한다. File Upload Utils 먼저 파일을 업로드하는 util코드를 작성해준다. saveFile을 이용해서 파일폴더가 존재하지 않으면 폴더를 만들어주고 파일을 저장한다. cleanDir는 프로필이미지를 저장하는 경우에 아이디를 이용한 폴더안에 이미 파일이 존재하면 기존파일을 삭제한 후에 새로 파일을 저장해준다. import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import ja..
-
예외처리전략 (Exception Handler)Spring 2021. 9. 5. 20:25
스프링에서 예외처리를 해주자. 예외발생 데이터타입을 일관된 형태로 생성해서 반응하도록 설정해준다. Error Response 먼저 예외의 형태를 잡아주는 클래스를 작성해준다. 메세지와 상태, 시간정보를 담고있다. 발생된 에러를 다음의 형태로 반환할 것이다. import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor public class ErrorResponse { private String message; private int status; private long timestamp; } Global Exception Handler 발생된 예외 형태에 따라서 처리를 해주는 exception handler를 작성해준다. @Co..
-
JWT 토큰을 이용해서 로그인 인증 구현하기Spring 2021. 9. 5. 18:27
회원의 로그인정보를 통한 authentication을 구현해보자. Authentication 로그인 인증 구현 방식에는 session cookie 방식과 jwt 토큰 방식이 존재한다. session cookie 방식은 사용자에 따라서 고유의 session ID가 발급되며 유의미한 정보를 담고 있지 않기 때문에 쿠키방식보다는 안전하지만, 세션저장소에 모두 담아두기 때문에 다수의 요청이 발생시 부하가 발생할 수 있다. JWT 세션쿠키와 하게 인증에 필요한 정보들을 암호화한 토큰을 사용하는 방식으로, 비밀키가 유출되지 않는 이상 토큰을 복호화 하지 못하므로 보안이 유리하다. access token의 기한은 유효하지만, access token이 만료되기전에 사용자가 로그인하면 refresh token을 이용해서..
-
WebSocket 사용해서 react와 함께 채팅구현하기 (Stomp사용하기)Spring 2021. 9. 5. 17:30
nodejs에서 socketio를 이용해서 클라이언트와 서버의 채팅을 구현한다면, spring에는 stompjs가 존재한다. STOMP stomp는 websocket와 같이 양방향(클라이언트-서버)네트워크 프로토콜로 HTTP에서 모델링되는 프레임기반의 프로토콜이다. spring에서 stomp를 사용한다면, spring websocket 어플리케이션은 Stomp Broker로 작동하게 된다. websocket에서는 text나 binary데이터를 전송하면서 추가적인 정보(예를들면, 어디로 route하고 어떻게 처리할지)의 부재로 추가코드작성이 불가피해진다. 이를 해결하기위한 서브프로토콜이 stomp이다. stomp덕분에 CONNECT, SUBSCRIBE, UNSUBSCRIBE, ACK, SEND와 같은 웹소..
-
@Many to Many 혹은 연관관계에서 stackOverFlow 에러 발생시Spring 2021. 8. 17. 11:19
연관관계 매핑시에 lombok의 데이터 사용시 내부적으로 toString을 불러내면서 연관관계의 객체를 연속해서 불러내게 된다. 이때 stackOverFlow 에러가 발생하게 되므로 롬복의 Data-> @Getter, @Setter로 변경해준다. (참고) https://stackoverflow.com/questions/17445657/hibernate-onetomany-java-lang-stackoverflowerror Hibernate OneToMany java.lang.StackOverflowError It's my first question here on stack, so please be gentle :D I'm trying to create hibernate OneToMany relationsh..
-
백준 1956번)브루트포스- 분해합알고리즘/백준 2021. 8. 16. 11:06
https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 자연수 n이 주어질때, n =m+ m각자릿수의 합이 이루어질 때, m 은 n의 생성자, n은 m의 분해합이다. 생성자를 구하는 문제였다. 가장 작은 생성자를 구하는 문제로, 1부터 n까지 실행해서 가장 작은 생성자가 나오면 Break하도록 하였다. 각자릿수의 합을 구할때, while문의 /100...의 형식이 아닌 list sum을 이용하자! n = int(input(..
-
Social Media 만들기 - 22) Call 기능 만들기 ( Web RTC사용하기 (peer))NODE.JS 2021. 8. 8. 23:00
이번에는 web rtc를 사용해서 사용자간의 통화를 실시간으로 주고받을 수 있도록 설정할 것이다. 먼저 서버는 npm i peer, 클라이언트는 npm i peerjs 해서 peer 사용을 가능하도록 해준다. 이제 peer 정보를 서버에서 설정해주고, 클라이언트에서는 실행후, socket 처럼 정보를 state에 저장해준다. server.js const {PeerServer} = require('peer') //Create peer server PeerServer({port:3001, path:'/'}) peer와 함께 call의 정보도 저장할 것이다. call constant export const CALL = 'CALL' export const PEER = 'PEER' callReducer impor..