Spring

·Spring
✨ 개요도서 엔티티의 soft delete 구현 방식을 고민하던 중, @SQLDelete와 엔티티 내에 메소드를 구현하는 방식을 두고 비교하였다.도서 엔티티에는 삭제 시각을 저장하는 deletedAt, 삭제한 관리자 id를 저장하는 deletedBy 필드가 있는 상황이었다.지난 프로젝트에서 사용했던 @SQLDelete를 사용하려 했으나, 지난번과 다르게 이번에는 deletedBy라는 필드가 있었기 때문에 다른 방식을 찾아보게 되었다.   ✨ @SQLDelete vs 엔티티 내부 메소드@SQLDelete를 사용하는 경우에는 쿼리가 간소화되며 JPA에서 제공하는 자동화된 방식으로 엔티티의 상태 변경을 자동으로 처리할 수 있다.하지만 @SQLDelete는 update 쿼리만 지원하므로 추가적인 로직을 구현하기..
·Spring
✨ PUT vs PATCHput과 patch 모두 리소스를 수정할 때 사용하는 HTTP Method이다. 둘의 차이점은 put은 리소스의 전체 내용을 수정할 때 사용하고, patch는 리소스의 일부 내용만 수정할 때 사용한다는 정도로 알고 있는데, 좀 더 자세히 둘의 차이점과 실제 예시를 정리해보겠다. ✨ 멱등성멱등성이란 어떤 대상에 같은 연산을 여러번 실행해도 변하지 않는 성질을 말한다. 예를 들어 곱하기 연산을 한다고 가정하면, 어떤 수에 * 1하는 연산을 여러번 실행했을 때, 몇번을 실행하던지 그 결과는 동일하다. 이 연산은 멱등성이 보장된다고 할 수 있다. 다른 예로 더하기 연산을 한다고 하면, 어떤 수에 + 1하는 연산을 여러번 실행했을 때, 항상 동일한 결과를 반환하지 않는다. 이 연산은 멱등..
·Spring
✨Pageable vs @RequestParam페이징을 구현하던 중 페이징과 정렬에 관한 정보를 파라미터를 Pageable로 받아오는 방식과 @RequestParam으로 받아오는 방식의 차이점에 대해 찾아보게 되었다.   ✨ PageablePageable은 Spring Data JPA에서 제공하는 기능으로 페이징과 정렬 정보를 자동으로 처리한다. 컨트롤러에서 Pageable을 파라미터로 받으면. Spring이 요청 파라미터에서 page, size, sort을 자동으로 매핑해준다.파라미터를 자동으로 매핑해주기 때문에 코드가 간결해진다는 장점이 있다.그리고 Pageable에서 지원하는 sort 파라미터를 이용해 동적으로 정렬 조건을 설정할 수 있다.   ✨ @RequestParam@RequestParam을 ..
·Spring
✨ Map vs DTOSpring Security로 login을 구현하며 사용자에게 login 정보를 받아올 때 Map을 사용하여 받아왔는데데이터 전달 시 Map이나 DTO를 많이 사용하는데 Map보다는 DTO 사용이 더 권장된다고 한다.   ✨ Map과 DTO의 장단점MapMap은 키-값 형태의 자료구조로 동적으로 필드를 추가하거나 제거하는 것이 가능하여 데이터 구조가 유연하다는 장점이 있다.Map의 value은 Object 타입이다. 때문에 잘못된 타입의 데이터가 들어와도 컴파일 에러를 발생하지 않아 데이터 검증이 어려워진다.가독성이 떨어진다는 단점도 있다. 내부 구조를 알 수 없기 때문에 필드가 어떤 의미를 갖고 있는지 파악하기 어렵다.또한 Map의 데이터를 사용하기 위해서는 타입 캐스팅이 필요하기..
·Spring
🔔 참고 블로그 🔔 위 블로그를 참고해 CodeDeploy 설정을 하던 중에 EC2 IAM Role과 CodeDeploy IAM Role을 생성하게 되는데,나는 CodeDeploy가 일방적으로 EC2에 배포를 한다고 생각하고 있었는데EC2 IAM Role을 왜 생성하는가 대해 찾아보다가 CodeDeploy Agent의 존재에 대해 알게되었다.   ✨ CodeDeploy와 CodeDeploy Agent가 배포를 진행하는 과정일단 내가 하려는 CI/CD 흐름은 Github Actions가 S3에 빌드 파일을 업로드하고 CodeDeploy에게 배포 요청을 보내면 CodeDeploy가 S3에 업로드된 빌드 파일을 EC2에 배포하는 것이다.  🔔 CodeDeploy with 배포 지침 👉🏻 CodeDep..
·Spring
✨ 아키텍처 흐름🔔 배포 흐름코드 수정 후 깃허브에 push하면 Github Actions 트리거가 동작하여 빌드 및 DockerFile, deploy.sh, application.yaml 등을 포함하여 zip 파일을 생성한다.생성된 zip파일은 S3에 업로드되고 CodeDeploy에 배포 요청을 보내면 S3에 업로드 된 zip파일을 EC2에 배포한다. EC2 인스턴스에서 DockerFile을 통해 이미지가 만들어지고 Docker 컨테이너에 애플리케이션과 Redis가 띄워진다.Spring Boot 애플리케이션과 Redis는 동일한 Docker 네트워크에 연결되어 실행된다. 우리 서비스는 처음에는 MVC로 구현되었다가 Rest API로 리팩토링을 하였는데 모든 도메인이 리팩토링이 되지 않았기 때문에 m..
·Spring
스프링 프레임워크와 의존성 주입 스프링이란 오픈 소스의 경량 프레임워크이다. 오픈 소스란 소스 코드가 공개되어 있는 것이고, 경량 프레임워크란 사용 시 메모리나 CPU 자원이 많이 들지 않거나 사용이 쉽고 간편한 경우를 지칭한다. 프레임워크란 확장하여 사용 가능한 코드를 말하는데 여기서 확장이란 프레임워크가 제공하는 클래스나 라이브러리를 사용하거나 상속 및 구현을 통해 프레임워크의 일부로 실행하는 것을 말한다. 의존성 주입 의존성 주입은 IoC를 디자인 패턴으로 구현하는 방법 중 하나로, 한 클래스가 의존하는 다른 클래스들을 외부에서 주입하는 것이다. 여기서 IoC란 제어의 역전을 말하며, 디자인패턴 중 하나이다. 제어의 역전이란 오브젝트 생성 및 소멸 등의 제어를 프레임워크나 컨테이너에게 넘기는 것을 ..