Spring & Springboot

Springboot, AWS S3를 이용해서 이미지 처리하기 - (2)

0. 들어가면서 이번 시간에는 지난 포스팅에 이어 Springboot와 AWS S3를 이용해서 이미지를 업로드하는 과정을 코드로 살펴보도록 하겠습니다. 지난 포스팅에서 S3 버킷 생성과 IAM 사용자 생성을 다뤘으니 이 부분이 궁금하신 분은 아래 글을 참고해주세요. 그리고 이전 글과 마찬가지로 이동욱님의 블로그에서 많은 도움을 받았습니다. Springboot, AWS S3를 이용해서 이미지 처리하기 - (1) 0. 들어가면서 이번 포스팅에서는 Springboot와 AWS S3를 이용해서 이미지를 처리하는 과정을 기록해보려고 합니다. 내용이 길어질 것 같아 두 편으로 나누어서 글을 쓰려고 하는데요. 이번 편에서는 studyandwrite.tistory.com 그럼 이제 의존성을 추가하는 과정부터 시작해보겠..

2022.02.07 게시됨

Spring & Springboot

Springboot, AWS S3를 이용해서 이미지 처리하기 - (1)

0. 들어가면서 이번 포스팅에서는 Springboot와 AWS S3를 이용해서 이미지를 처리하는 과정을 기록해보려고 합니다. 내용이 길어질 것 같아 두 편으로 나누어서 글을 쓰려고 하는데요. 이번 편에서는 AWS S3 버킷 생성과 IAM 사용자 생성을 다뤄보고, 다음 편에서 Springboot에서 AWS S3를 이용해 이미지를 처리하는 코드를 살펴보겠습니다. 이동욱님의 블로그에서 많은 도움을 받았습니다. 감사합니다. 그럼 바로 시작해보겠습니다. 1. AWS S3 버킷(Bucket) 생성하기 [1] 먼저 아래와 같이 Amazon S3에 접속해서 버킷 만들기를 선택해줍니다. 아래 daangn-images라고 만들어진 버킷은 제가 기존에 만들어둔 버킷이니 무시하셔도 됩니다. [2] 아래와 같이 버킷 이름을 입..

2022.02.05 게시됨

Spring & Springboot

[Spring] JPA Enum Converter를 사용하여 Entity Mapping하기(Feat. Parameter value [~] did not match expected type Error)

0. 문제 먼저 아래와 같은 상품게시물(ItemPost) 엔티티를 보겠습니다. ItemPost(상품게시물)은 자신의 Id, 게시물의 제목과 내용, 이미지 사진들, 그리고 해당 상품의 카테고리를 갖고 있는데요. 여기서 상품의 카테고리를 Enum 타입으로 관리하려고 했습니다. 간단히 두 개의 카테고리만 넣어놓고 테스트를 진행하겠습니다. 그리고 아래와 같이 Enum 필드를 가진 엔티티를 해당 필드를 조건으로 하여 DB에서 조회하고 싶다고 해보겠습니다. 위와 같이 컨트롤러, 서비스, 레포지토리 코드를 작성하고 아래와 같이 세 개의 기본 데이터를 넣어뒀습니다. 이제 Postman으로 SPORTS 카테고리를 갖는 아이템 게시물을 조회해보면 아래와 같은 에러가 발생합니다. 에러 내용을 자세히 보면, Parameter..

2022.01.25 게시됨

Spring & Springboot

[Spring/스프링] JPA에서 엔티티를 수정할 때 - 쿼리와 변경 감지

0. 들어가면서 얼마 전, 새로운 프로젝트를 시작하게 되면서 처음 엔티티 설계부터 컨트롤러, 서비스 등을 어떻게 하면 좋을 지 고민하고 있습니다. 그런데 문득 엔티티의 수정에 대한 컨트롤러를 작성하면서 무의식적으로 업데이트 DTO를 만들고 있는 제 모습을 보게 됐습니다. 사실 DTO를 통해 엔티티를 수정하는 것은 아래에서 소개할 '변경 감지'를 통한 엔티티의 수정 방법인데요. 과연 이 방법이 베스트인가에 대해 다른 블로그들의 글도 보고 JPA 책도 보면서 나름대로 이해한 내용을 글로 옮겨보겠습니다. 1. Update 쿼리를 이용한 엔티티 수정 업데이트 쿼리를 이용해서 엔티티를 수정하는 방법은 간단해보입니다. 우선 Member 엔티티와 JPA 레포지토리를 생성합니다. @Entity @Getter @Sett..

2022.01.13 게시됨

Spring & Springboot

@OneToMany 관계에서 Fetch Join의 사용과 페이징 처리 문제

1. 상황 회원(Member)과 주문(Orders), 주문상품(OrderItem), 상품(Item)이라는 네 개의 엔티티를 중심으로 @OneToMany 관계에서 Fetch Join의 사용과 페이징 처리 문제에 대해 다뤄보겠습니다. 우선 간단한 엔티티 설계와 요구사항을 살펴보겠습니다. 회원(Member)은 여러 주문(Orders)을 가질 수 있으며, 하나의 주문(Orders)은 여러 개의 주문상품(OrderItem)을 가질 수 있습니다. 주문상품은 해당 상품의 수량과 가격을 가지고 있는 엔티티이며, 상품은 단순히 상품 정보만을 가진 엔티티입니다. 하나의 상품(Item)이 여러 주문상품(OrderItem)에 나타날 수 있으며, 주문상품을 통해 상품을 조회하기 때문에 단방향 연관관계를 갖습니다. 그리고 아래는..

2021.11.21 게시됨

Spring & Springboot

[스프링/Spring] Spring JPA의 지연 로딩과 N+1 문제

1. N+1 문제란? N+1 문제는 JPA를 이용해서 개발을 하다보면 처음에 무조건 만나게 되는 문제라고 생각합니다. N+1 문제란 무엇인지 설명하기 위해 아래 엔티티와 코드를 보도록 하겠습니다. 회원(Member)과 주문(Orders), 배송(Delivery) 테이블이 있고 회원과 주문은 일대다, 주문과 배송은 일대일 관계를 가지고 있습니다. * N+1 문제 설명에 집중하기 위해 생성자나 연관 관계 메서드는 생략하고, 테이블도 간단하게 설계했습니다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String name; @Embedded p..

2021.11.13 게시됨

Spring & Springboot

[스프링/Spring] 스프링 MVC? DispatcherServlet 이해하기

0. 들어가면서 이전에 작성했던 포스팅에서는 스프링 MVC 프레임워크의 기초가 되는 FrontController(프론트 컨트롤러) 패턴에 대해 공부했습니다. 프론트 컨트롤러는 통해 개별 컨트롤러가 공통적으로 수행해야 하는 로직을 없애줄 수 있었고, 개별 컨트롤러가 일일이 서블릿의 request, response를 핸들링할 필요가 없게 만들어주었습니다. 그리고 이번 포스팅에서 자세히 다뤄볼 DispatcherServlet은 이러한 FrontController 패턴을 그대로 받아들여 스프링 MVC 프레임워크에서 발전시킨 개념입니다. 1. 스프링 MVC의 구조 아래 그림은 스프링 MVC 구조를 보여줍니다. DispatcherServlet이 어떤 역할을 하는지 이해하기 위해서 위 구조에 대해 간략하게 설명을 해..

2021.11.07 게시됨

Spring & Springboot

[스프링/Spring] FrontController 패턴과 스프링 MVC

0. 들어가면서 스프링 MVC 프레임워크의 핵심은 모델(Model), 뷰(View), 컨트롤러(Controller)입니다. 어떻게 보면 이 세 가지 요소가 스프링 MVC 자체를 의미한다고 볼 수도 있죠. 그런데, 이를 역으로 생각해보면 스프링 MVC 프레임워크가 자리 잡기 전에는 개발을 할 때 여러 문제점이나 어려움이 있었다는 뜻이겠죠. 그래서 이번 포스팅에서는 이러한 문제점들을 진단해보고, 스프링 MVC 프레임워크가 어떤 원리로 동작하는지 FrontController 패턴과 함께 살펴보려고 합니다. 특히, 어떤 어노테이션이나 다른 스프링의 기능없이 다형성을 적극 활용해서 스프링 MVC 프레임워크를 따라해보겠습니다. 이를 경험해보면 스프링 MVC가 어떤 원리로 동작하는지를 이해하는 데 도움이 되리라 생각..

2021.11.05 게시됨

Spring & Springboot

[스프링/Spring] 서블릿(Servlet)과 서블릿 컨테이너

0. 들어가면서 자바 웹 기술 역사를 살펴보면 서블릿은 JSP보다도 이전에 생긴 근본적인 개념입니다. 아래에서 서블릿에 대해 자세히 기술하겠지만, 서블릿을 공부하다보면 그 당시 개발자들이 서블릿'만'으로 개발을 하면서 얼마나 고통받았을지 안타깝기도 합니다. 아무튼 서블릿에 대해 공부한다는 것은 현재 스프링 MVC 패턴의 필요성과 MVC 패턴이 서블릿을 활용하여 어떻게 수많은 기술적 어려움을 쉽게 풀어냈는지를 이해하는 데 도움이 되리라 생각합니다. 1. 서블릿(Servlet) 자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램을 말하는데요. 쉽게 이야기하면, 클라이언트가 서버에 요청을 보낼 때와 응답을 받을 때 필요한 HTTP 작업을 도와주는 녀석이 서블릿입..

2021.11.03 게시됨

Spring & Springboot

[스프링/Spring] 스프링 시큐리티(Spring Security) 가이드라인 따라하기

0. 소개 스프링 시큐리티는 스프링 기반의 어플리케이션의 보안(인증, 권한)을 담당하는 프레임워크입니다. 스프링 시큐리티가 없다면 자체적인 세션 체크나 리다이렉트 등의 기능 구현이 필요하죠. 스프링 시큐리티는 필터(filter) 기반으로 동작하기 때문에 spring MVC와 분리되어 관리 및 동작합니다. 이번 포스팅에서는 아래 링크의 가이드라인을 따라서 스프링 시큐리티(Spring Security)를 실습해보고, 스프링 시큐리티에 대한 기본 개념을 익혀보고자 합니다. Securing a Web Application this guide is designed to get you productive as quickly as possible and using the latest Spring project rel..

2021.10.30 게시됨