반응형

SpringBoot 34

QueryDSL 이란?

QueryDSL 이란SQL, JPQL 등을 코드로 작성할 수 있도록 해주는 빌더 오픈소스 프레임워크이다.사실, QueryDSL 이 JPA에서만 사용하는 프레임워크로만 알 수도 있지만 공식 사이트를 보면 JPA 뿐만 아니라 SQL, MongoDB, Lucenece 등 다양한 언어에 대해서 서비스를 제공한다. QueryDSL JPAQueryDSL JPA 는SQL, JPQL 을 코드로 작성할 수 있도록 해주는 빌더 API 이고,Entity 클래스와 매핑되는 QClass 라는 객체를 사용해서 쿼리를 실행한다.QClass 란?QueryDSL은 컴파일 단계에서 엔티티를 기반으로 QClass를 생성하는데 JPAAnnotationProcessor 가 컴파일 시점에 작동해서 @Entity 등의 어노테이션을 찾아 해당 파..

SpringBoot 2024.07.17

Spring WebSocket

Spring Framework는 WebSocket API를 제공한다.여기서 중요한 점은 Spring에서 제공하는 WebSocket API는 Spring MVC 기술에 종속되지 않는다는 것이다.WebSocket 서버는 WebSocketHandler 인터페이스의 구현체를 통해서, 각 경로에 대한 핸들러를 구현할 수 있다. 뿐만 아니라, Message 형식에 따라 TextWebSocketHandler 또는 BinaryWebSocketHandler 핸들러를 확장해 구현할 수도 있다.  Spring WebSocket 설정문자열 메시지 기반으로 테스트를 진행하기 때문에 TextWebSocketHandler를 상속받아 메시지를 전달받는다.public class Handler extends TextWebSocketHa..

SpringBoot 2024.07.16

JPA Entity에 @Setter를 지양하는 이유

@Setter 어노테이션 사용을 지양해야 하는 이유 ① @Setter는 사용 의도 / 목적이 분명하지 않다. (Update 인지 / Create 인지)Entity를 만들 때는 외부에서 쉽게 변경할 수 없게 @Setter를 사용하지 않는다. 그 이유는 @Setter를 사용하면 의도가 불명확하고 변경하면 안되는 중요한 값임에도 불구하고 변경 가능한 값으로 착각할 수 있다. 이말은 안정성 보장이 되지 않는다는 의미이다. ② 무분별한 변경으로 객체의 일관성을 보장하기 어렵다 -> @Builder 패턴 적용 권장@Builder 패턴 사용 시 장점가독성을 높일 수 있다.Board board = Board .builder() .title("안녕하세요 과거일지입니다.") .writer("안정균") ..

SpringBoot 2024.06.29

SpringSecurity Bcrypt 를 이용한 비밀번호 암호화

서론계정의 정보에는 아이디와 비밀번호가 기본적으로 구성되어 있다. 사용자가 계정을 DB에 저장 후 만약 DB가 털리는 사고가 발생한다면 비밀번호가 유출되는 사고가 발생할 수 있다. 그렇기 때문에 비밀번호를 저장할 때 암호화하여 저장하는 것이 좋다. 본론암호화를 하는 기법에는 크게 2가지가 있다. 암호화를 한 뒤 복호화가 가능한 양방향 암호화 기법, 복호화가 불가능한 단방향 암호화 기법이 있다. 계정의 정보를 암호화할 때 다시 복호화할 필요가 없으므로 단방향 암호화 기법을 적용한 해시(Hash) 알고리즘을 사용한다. 해시를 사용하면 고유한 길이의 무작위 문자열로 변환시킬 수 있으므로, 해시의 변환된 비밀번호를 얻어도 기존의 원본 비밀번호를 알아낼 수 없으므로 보안을 지킬 수 있다. 해시 알고리즘에는 여러 ..

SpringBoot 2024.06.26

@Controller와 @RestController 차이점

주요 차이점은HTTP ResponseBody가 생성되는 방식이고,@Controller + @ResponseBody 조합이@RestController라고 말할 수 있다. @Controller 이란전통적인 Spring MVC의 컨트롤러 어노테이션인 @Controller는 주로 View(화면)를 반환하기 위해 사용한다.@Controller@RequiredArgsConstructorpublic class UserController { private final UserService userService; @GetMapping(value = "/users") @ResponseBody // 차이점 public ResponseEntity findUser(@RequestParam String us..

SpringBoot 2024.06.25

RedirectAttributes

1. RedirectAttributes리디렉션을 수행할 때 한 컨트롤러 메서드에서 다른 컨트롤러 메서드로 Attributes를 전달하는데 이용되는 스프링 프레임워크의 인터페이스이다.리다이렉트(Redirect)는 사용자가 처음 요청한 URL이 아닌, 다른 URL로 보내는 것을 의미한다.일반적인 시나리오에서 Attributes 를 저장할 땐 Model의 addAttribute() 메서드를 많이 사용한다.  (1) RedirectAttributes 가 필요할 때예를 들어, 주문이 완료된 후 주문 결과 상세페이지로 리다이렉팅하고 그 결과를 보여주고 싶을 때 사용주문 처리가 끝났을 때 생성된 주문 번호를 리다이렉트 페이지 쪽으로 넘겨줄 수 있다 (2) RedirectAttributes 적용하고 데이터 저장하기간단..

SpringBoot 2024.05.02

웹 소켓 (WebSocket)

1. 웹 소켓 (WebSocket) 개념 웹소켓(WebSocket)은 양방향 통신을 지원하는 네트워크 프로토콜로, 클라이언트와 서버 간의 실시간  데이터 전송을 위해 사용된다.기존의 HTTP 프로토콜은 클라이언트가 서버에 요청을 보내고 서버가 응답을 반환하는 단방향 통신을 지원했지만, 웹소켓은 이와 달리 양방향 통신을 가능하게 한다.웹소켓은 주로 웹 애플리케이션에서 실시간 통신을 구현하는 데 사용된다.  (1) 웹소켓의 특징양방향 통신웹소켓은 클라이언트와 서버 간에 데이터를 양방향으로 실시간으로 주고받을 수 있다. 이를 통해 실시간 채팅, 멀티플레이어 게임, 주식 시세 업데이트 등 다양한 응용 프로그램을 개발할 수 있다.낮은 지연웹소켓은 TCP 연결을 사용하며, 연결을 유지한 상태에서 데이터를 교환하기 ..

SpringBoot 2024.04.27

SSE (Server-Sent Event) 구현

📝 이론  Client가 서버와 한 번 연결을 맺고 나면, Server에서 이벤트가 발생할 때마다 데이터를 전송받는 단방향 통신 방법이다.  장점HTTP 프로토콜만으로 사용할 수 있어 구현이 용이하다.접속에 문제가 있는 경우 자동으로 연결을 재시도한다.단점클라이언트가 접속을 Close 해도 서버에서 감지하기 어렵다.  ❓ 동작 과정 ❓ 1️⃣ Client 측 - SSE Subscribe 요청클라이언트가 서버의 이벤트를 구독하기 위한 요청 전송이벤트의 mediaType은 text/event-stream이 표준 스펙으로 정해져 있음 2️⃣ Server 측 - Subscription에 대한 응답Response의 mediaType은 text/event-stream서버는 동적으로 생성된 컨텐츠를 스트리밍하기 때..

SpringBoot 2024.04.10

Spring Security + JWT 토큰을 사용한 로그인

JWTJWT(Json Web Token)은 일반적으로 클라이언트와 서버 통신 시 권한 인가(Authorization)을 위해 사용하는 토큰이다. 📝Security + JWT 기본 동작 원리클라이언트에서 ID/PW를 통해 로그인 요청서버에서 DB에 해당 ID/PW를 가진 User이 있다면, Access Token과 Refresh Token을 발급클라이언트는 발급받은 Access Token을 헤더에 담아서 서버가 허용한 API를 사용할 수 있다.여기서 Refresh Token은 새로운 Access Token을 발급하기 위한 토큰이다. 기본적으로 Access Token은 외부 유출 문제로 인해 유효기간을 짧게 설정한다. 정상적인 클라이언트는 유효기간이 끝난 Access Token에 대해 Refresh Tok..

SpringBoot 2024.04.02

String Data JPA를 이용하여 json 형태의 칼럼을 RDB에 저장하기

기존의 프로젝트는 json 형식의 데이터를 MySQL의 한 컬럼으로 저장하기 위해 List> 형태의 input data를 생성하고, ObjectMapper를 사용해 json 형식의 String을 writeValueAsString으로 생성 후 varchar 타입 컬럼에 insert 하는 과정을 거치고 있었다. 매번 ObjectMapper로 해당 데이터들을 파싱하는 작업은 번거롭기 때문에 해당 라이브러리를 사용하자. GitHub - vladmihalcea/hypersistence-utils: The Hypersistence Utils library (previously known as Hibernate Types) gives you SprinThe Hypersistence Utils library (prev..

SpringBoot 2024.04.01
반응형