목록개발 공부/Spring (17)
Just Do IT!

데이터 흐름사용자가 브라우저에서 데이터를 입력하여 DTO 형태로 서버에 전송서버는 이 DTO를 받아 DAO를 통해 데이터베이스에 저장데이터를 조회할 때 DAO를 통해 데이터베이스에서 데이터를 가져와 DTO로 클라이언트에게 반환 Spring Boot 에서의 활용Repository : DAO 역할을 한다Controller : DTO를 받아 서비스 계층으로 전달하거나, 서비스 계층에서 받은 데이터를 DTO로 변환하여 클라이언트에게 반환한다추가 구조 보러가기: https://daydream-sy.tistory.com/333 DTO (Data Tranfer Object)계층 간(Controller, View, Business Layer / Spring Boot에서는 뷰, 컨트롤러, 서비스, DAO, DB..

지난 주에 window 환경에서 redis 를 설치하는 글을 썼었다.https://daydream-sy.tistory.com/360 [Redis] Window 환경에서 Redis 설치하기공식 문서https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-windows/ Install Redis on WindowsUse Redis on Windows for developmentredis.io 내 노트북은 window라 window에서 설치하기 부분을 찾아봤daydream-sy.tistory.com 그런데,스프링 프로젝트에 redis 적용한 부분이 있는데 실제로 실행해보니 계속 redis 관련 오류가 나는 ..

프로젝트를 진행하는데,특정 엔티티를 삭제할 때 연관된 엔티티를 전부 삭제하도록 해야 하는데 제대로 되지 않았다. 이 부분을 팀원분이 해결해주셨고, 나는 그걸 참고해서 내가 맡은 문제집 쪽 삭제 로직을 수정하였다. https://daydream-sy.tistory.com/358 JPA Cascade 알아보기Cascade란? 부모 엔티티가 영속화될 때 자식 엔티티도 같이 영속화되고, 부모 엔티티가 삭제될 때 자식 엔티티도 삭제되는 등 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태daydream-sy.tistory.com 여기서 정리했던 CascadeType.ALL과 orphanRemoval=true 옵션을 사용했고다른 로직도 일부 수정하면서 테스트 해본 결과 한번에 삭제되는 걸 알 수 ..

Cascade란? 부모 엔티티가 영속화될 때 자식 엔티티도 같이 영속화되고, 부모 엔티티가 삭제될 때 자식 엔티티도 삭제되는 등 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 전이되는 것을 의미한다. JPA에서는 영속성 전이를 Cascade 옵션을 통해 설정하고 관리할 수 있다.JPA Cascade를 활용하면 ‘어떤 엔티티와 다른 엔티티가 밀접한 연관성이 있을 때’에 대한 관리가 매우 수월해진다. 예를 들어,문제와 문제에 대한 댓글이 있다고 가정해보자.문제와 댓글은 연관 관계에 있는 것이다. 이 두 연관 관계의 관리를 하는 데 cascade가 유용하게 사용된다. Cascade 옵션ALLPERSISTMERGEREMOVEREFRESHDETACHcascade는 여섯 가지 옵션..

프로젝트에 북마크 기능이 있는데, boolean을 이용해서 삭제 여부를 update하는 soft delete를 구현하기로 했다.북마크 db가 따로 있고 로그인한 사용자가 특정 문제집을 북마크하는 것이다. 처음 북마크를 한다면 db에 새로운 북마크가 생성되고,북마크를 취소하는 경우 is_deleted가 true로 업데이트 되는 형식이다. 기능 구현 전에 api 명세서를 작성할 때는POST /api/books/{id}/bookmarkUPDATE /api/books/{id}/bookmark이렇게 두 가지를 따로 작성했었는데 토글 방식으로 구현할 수 있지 않을까 하다가 참고할만한 글을 발견해서적용해보았고 포스트맨으로 테스트까지 마쳤다. BookmarkResponse 생성@Getter@Builder@..

ControllerAdvice전역적으로 ExceptionHandler를 적용할 수 있는 @ControllerAdvice와 @RestControllerAdvice 어노테이션을 제공하고 있다.@ControllerAdvice는 여러 컨트롤러에 전역적으로 ExceptionHandler를 적용해준다만약 특정 클래스에만 제한적으로 적용하고 싶다면 @RestControllerAdvice의 basePackages 등을 설정함으로 제한할 수 있다.@RestControllerAdvice는 @ControllerAdvice와 다리 @ResponseBody가 붙어 있어 응답을 JSON으로 내려준다 @RestControllerAdvice 와 @ControllerAdvice 의 특징과 차이@RestControllerAdvice 는..

H2 Database를 사용하는 이유?H2 DB는 In-Memory DB로 스프링 애플리케이션과 함께 실행되며, 매우 가벼운 용량을 가지고 있다.복잡한 mocking 없이도 서비스 및 레포지토리 레이어를 테스트할 수 있기 때문에 mocking으로 인한 부분적인 오류나 가짜 성공(실 서비스에서는 오류가 발생하지만 mocking으로는 성공으로 표기되는 상황)을 방지할 수 있다.테스트 과정에서 데이터가 영향을 받지 않도록 한다.만약 다른 Database를 사용하는 경우, 테스트 데이터가 롤백되어 DB에 남아있지 않아도 auto increment로 지정한 id가 계속 증가되는 등의 문제가 발생할 수 있다.=> 테스트용 DB가 따로 필요하다.기존 Database 대신에 H2 Database를 이용하여 테스트를 하..

월요일부터 JWT 실습을 하고 있는데 token을 두 가지로 발급하는 이유에 대해 정리해보고자 한다. JWT 토큰 인증 방식어제 블로그글에도 정리했지만 JWT 토큰 인증 방식은 비밀키로 암호화를 해서 안전하게 통신한다.JWT 토큰이 유저의 신원이나 권한을 결정하는 정보를 담고 있는 데이터 조각이니까. JWT는 헤더, 페이로드, 서명 세 가지 정보를 base64로 인코딩한 값을 콤마('.')를 사이에 두고 이어붙인 형태로 생성된다.헤더: JWT 서명에 사용된 알고리즘을 담는다.페이로드: 토큰에 담긴 주체(Subject), 만료일(exp), 생성자(iss) 등을 담는다.시그니처: 헤더와 페이로드를 각각 base64로 인코딩한 후 콤마로 이어붙인다. 그리고 이를 헤더에 명시된 알고리즘으로 암호화한 값을 담는다..

토큰 기반 인증이란?토큰 기반 인증은 토큰을 사용하는 방법이다.토큰 : 서버에 요청을 받을 때, 요청을 보낸 클라이언트를 구분하기 위한 유일한 값서버가 토큰을 생성해서 클라이언트에게 제공하면, 클라이언트는 해당 토큰을 보관하고 있다가 여러 요청을 토큰과 함께 보내게 된다.그러면 서버는 토큰을 보고 해당 클라이언트가 유효한 사용자인지 검증하고, 요청을 처리해주게 된다. JWT?발급받은 JWT를 이용해 인증을 하려면 HTTP 요청 헤더 중에 Authorization 값에 Bearer + JWT 토큰값을 넣어서 보내야 한다.JWT는 .을 기준으로 헤더(Header), 내용(Payload), 서명(Signature)으로 구성되어 있다.JWT 구성헤더 : 토큰의 타입과 해싱 알고리즘을 지정하는 정보내용 : 토큰과..

작년 이맘때쯤, 멋쟁이 사자처럼 동아리에서 팀 프로젝트를 진행했었다.그 때 나는 프론트엔드 팀원으로 참여했었고, 백엔드와 협업이 처음이라서 삽질을 많이 했었다.그리고 그때, jar 파일에 대해 처음 알고 postman을 써보고 등등...그런데 기간 내에 프로젝트를 완성했어야 하는 터라 야매(?)로 라이브 코딩을 하듯이 백엔드 팀원들과 소통했었다. https://daydream-sy.tistory.com/274 백엔드 서버와 연결하기 (jar 파일 공유)멋쟁이 사자처럼 팀 프로젝트를 진행하면서 처음으로 백엔드 서버와 연동해서 프로젝트를 했었다. 나중에 비슷한 프로젝트를 할 때도 여기저기 흩어진 메모장을 보면서 진행할 것 같아서 블로daydream-sy.tistory.com 이 글을 보면,내가 얼마나 백엔드..