본문 바로가기

Spring7

[Spring Boot] PresignedUrl 활용한 AWS S3 버킷에 이미지 업로드 구현 0. PresignedUrl 사용 배경보통 이미지의 업로드/다운로드의 과정은 어떻게 진행할까?이미지 자체는 S3에 업로드하고, S3의 url을 백엔드 서버에 저장클라이언트가 이미지를 요청하면 서버는 저장된 url을 반환한다.즉, 크게 나눈다면 "S3에 이미지 업로드/다운로드", "S3에 접근하는 url 저장" 두가지라고 생각할 수 있다.하지만 S3에 이미지를 업로드/다운로드를 하는 과정은 어떻게 진행되었을까? 기존의 방식서버가 클라이언트에게 이미지 자체를 받는다.서버가 보안절차를 거친다.(AWS sdk secret key를 활용해 s3접속)서버가 버킷에 이미지를 올린다.이렇게 구현된 이유는 보안이슈 때문이다. 아무나 이미지를 업로드하게 하면 안되기에, 서버를 거쳐 이미지 업로드를 구현했었다. 그렇다면 위.. 2024. 8. 28.
[Spring Boot] IoC(제어의 역전, Inversion of Control) / DI(의존성 주입, Dependency Injection) 1. IoC(Inversion of Control)란IoC는 Inversion of Control의 약자로 말 그대로 제어의 역전이라 한다.제어의 역전은 메서드나 객체의 호출 작업을 개발자가 아닌 프레임워크에게 제어권을 넘기는 행위다.스프링에서의 IoC는 Controller, Service와 같은 객체들의 동작을 개발자가 직접 구현하지만 해당 객체들의 호출 시점을 개발자가 제어하지 않는다.스프링 프레임워크가 요구하는 방식으로 메서드나 객체를 구현하면 해당 메서드와 객체의 생성, 호출, 소멸은 프레임워크가 알아서 해주는 것을 의미한다.이전까지는 개발자가 객체의 생성을 관리하며 제어했지만, 스프링을 사용하게 되면 스프링 컨테이너에게 제어권을 넘겨 스프링 컨테이너가 흐름을 제어하게 된다.2. IoC의 장점객체.. 2024. 7. 28.
[Spring Data JPA] 실전! 스프링 데이터 JPA 정리 해당 포스팅은 인프런에서 김영한님의 "실전! 스프링 데이터 JPA" 강의를 수강 후 핵심 개념을 정리한 내용입니다. 실전! 스프링 데이터 JPA 강의 | 김영한 - 인프런김영한 | 스프링 데이터 JPA는 기존의 한계를 넘어 마치 마법처럼 리포지토리에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 모두 제www.inflearn.com 1.  공통 인터페이스 적용컴포넌트 스캔을 스프링 데이터 JPA가 자동으로 처리하기 때문에 @Repository 애노테이션 생략이 가능하다.JpaRepository 인터페이스를 통해 기본적인 CRUD를 제공한다.생성하는 인터페이스는 "엔티티명" + Repository로 네이밍 해야 한다.인터페이스를 생성 후 JpaRe.. 2024. 7. 18.
[Spring Boot] Spring Facade Pattern 1. Facade 패턴이란?포스팅에 앞서, Spring Boot에서는 Bean이 Controller, Service, Repository를 어노테이션만으로 알아서 의존성을 주입해주는 좋은 기능을 가지고 있다.그렇다면 우리가 개발을 진행하면서 하나의 Controller가 하나의 Service를 참조하고, 하나의 Service는 하나의 Repository만 참조해가면서 간단하게 데이터만 반환하는 상황만 있을까?? 간단한 기능을 만들면서도 확인한 결과 절대 아니다. 왜냐하면 하나의 데이터(DTO로 변환해서)를 반환할 때도 여러 엔티티를 참조해서 상황에 맞는 데이터를 잘 조립해서 반환해야 했기 때문이었다. Service 레이어에서 Repository를 너무 많이 의존하고 여러 엔티티를 통해 데이터를 가져온다는 .. 2024. 5. 18.
[Spring Boot] QueryDSL을 활용한 동적 쿼리(Dynamic SQL) 조회하기 (BooleanBuilder 활용) 1. Query DSL 이란?Spring boot에서 Spring Data JPA는 개발자가 간단한 CRUD 메서드 및 쿼리 메서드를 사용할 수 있다.하지만, 원하는 조건의 데이터를 검색해야 할 때 다양한 조건들이 있다면 매개변수는 점차 증가하게 되고 성능 및 가독성이 떨어진다.이때, 개발자는 JPQL을 활용해서 직접 SQL을 작성하여 데이터를 조작할 수 있지만, 로직이 점점 복잡해지면 마찬가지로 SQL에서의 개행이 반복되다보면 해당 쿼리가 어디에 어떻게 쓰이는지 알 수 없을 때가 있다. 또한, JPQL의 경우 복잡한 SQL을 작성하다보면 나올 수 있는 오타/문법적인 오류에 대해서 컴파일 시점에 확인할 수 없고 런타임에서 발생한 에러를 추적해야 한다. 이러한 불편함을 해소해주는 요소 중 하나로 Query.. 2024. 5. 14.
[Spring Boot] Spring MVC / 3-tier Layered Architecture 1. MVC 패턴의 개념과 Spring에서의 MVC 패턴 1-1. MVC 패턴 MVC 패턴이란? 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴어플리케이션을 개발할 때 개발 영역을 Model - View - Controller로 나누어 각 역할에 맞게 코드를 작성하는 방식UI 영역과 비즈니스 로직 영역으로 구분하여 서로에게 영향을 주지 않으며 개발 및 유지 보수가 가능하게 한다. 각 패턴 구분Model : 값과 기능을 가지고 있는 객체데이터 및 비즈니스 로직을 관리한다.추가적으로 3-tier Layer Architecture에서 서비스 계층에 비즈니스 로직이 들어가 있으므로 서비스 계층은 모델에 더 가깝다고 볼 수 있다.View : 모델에 포함된 데이터를 시각화하여 사용자에게 보여주는 역할Model을.. 2024. 4. 2.
[Spring Boot] Spring / Spring Boot 비교 1. Spring Framework스프링 프레임워크(Spring Framework)는 Java 기반 애플리케이션 개발을 지원하는 오픈소스 애플리케이션 프레임워크로 간단히 스프링(Spring)이라 한다.스프링은 순수 자바 객체(POJO)만을 사용하여 복잡성을 제거하고, 단순하고 가벼운 코드로 기업용 애플리케이션을 개발하기 위한 목적으로 개발된 프레임워크(Framework)이다. 1-1.  Spring Framework 특징Spring Framework는 아래의 네가지 특징을 가진다.1. 제어 역전( Invesion of Control, IoC ) 스프링은 객체의 생명 주기 및 의존성 관리를 담당하는 프레임워크에서 IoC 컨테이너를 제공한다. IoC 컨테이너를 통해 개발자는 객체의 생성과 관계 설정 및 생명.. 2024. 3. 27.