응애개발자
article thumbnail
[JPA] List 조회시 N+1문제 Fetch join으로 성능 개선하기
프로젝트/WMS 2024. 8. 8. 00:08

문제상황ERD구조는 위와 같은 상황에서 유저들의 목록을 가져오는데 부서이름과 직급이 필요했다.데이터베이스에서는 회원 총 21명, 부서 5개, 직책 5개가 존재했다.ResponseDTO그래서 리스트 각각에는 밑과 같은 ResponseDTO정보들을 넣어주었다.@Data@Builderpublic class UserListResponseDTO { private Long id; private String name; private String email; private Role role; private String profileImage; private String departmentName; private String positionName; //DTO메서드로 재사용성을..

article thumbnail
[오류해결] resolved [org.springframework.web.multipart.maxuploadsizeexceededexception: maximum upload size exceeded]
오류해결 2024. 8. 6. 18:00

Error resolved [org.springframework.web.multipart.maxuploadsizeexceededexception: maximum upload size exceeded] 회원가입에서 프로필 사진을 저장하는 로직도중에 위와 같은 문제가 발생하며 이미지는 저장이 안되었다. 에러 뜻을 해석하면 업로드 할 수 있는 최대 용량을 넘긴 파일을 업로드하려 했을때 발생하는 에러였다. 용량을 설정하지 않으면 최대 용량은 1MB로 설정이 된다.  Solution위 문제를 해결하기 위해 application.yml에서 최대 용량을 설정해 주었다. -SpringBoot 2.x 버전 이상부터는 밑과 같이 작성해주시면 됩니다. -Spring Boot 3.x.x 버전(필자가 진행하는 프로젝트)spri..

article thumbnail
[AWS/S3] Spring에서 S3에 데이터 저장하기
프로젝트/WMS 2024. 8. 6. 02:10

프로젝트 진행 시 이미지를 서버에 저장해야 할 경우가 많다. AWS의 S3를 이용하면 이미지를 저장하고 해당 링크를 DB에 저장하여 효율적으로 관리할 수 있다. 이를 통해 서버 용량을 절약하고, 비용 절감 효과를 얻을 수 있다. 그럼 AWS의 S3를 활용하여 이미지를 저장하고 확인해보자.1. S3 버킷 생성하기1.버킷 생성하기AWS > S3 > 버킷 > 버킷만들기 클릭또는 밑의 주소로 접속합니다.https://ap-northeast-2.console.aws.amazon.com/s3/bucket/create?region=ap-northeast-2# 2. 버킷 생성버킷을 생성하기 위해 이름을 만들어 줍니다.버킷은 디렉토리/폴더 개념으로 이해하시면 됩니다. 그리고 버킷의 퍼블릭 엑세스 차단을 해제해줍니다. 3..

article thumbnail
Spirng Security + JWT + OAUTH2 를 활용한 일반로그인, 소셜로그인(Kakao) (2)
프로젝트/WMS 2024. 7. 3. 00:17

이번 시간은 Kakao 로그인이다.🤔 왜 OAUTH2를 진행했나?OAUTH2를 사용하는 또다른 중요한 이유는 회원에 대한 중요한 개인정보(ex. 계정과 계정에 대한 비밀번호, 기타 개인정보)를 내 DB에 저장하지 않음으로써 혹시라도 노출될 사고를 줄일 수 있다는 점때문에 사용하였다. 결론적으로 사용자와 개발자 모두에게 편의성과 보안성을 제공할 수 있기 때문에 진행하게 되었다.  📌 Spring Security 동작 원리모든 책임을 백엔드가 맡음필자는 소셜 로그인을 백엔드로만 진행했다. 보통 백엔드와 프론트엔드를 섞어서 프론트에서 코드를 받거나 토큰을 발급받는 경우가 있는데 카카오와 같은 대형 서비스 개발 포럼 및 보안 규격에서는 책임을 나누어 받는 것을 지양한다. 따라서 모든 책임을 프론트에서 맡거나..

article thumbnail
Spirng Security + JWT + OAUTH2 를 활용한 일반로그인, 소셜로그인(Kakao) (1)
프로젝트/WMS 2024. 7. 2. 16:57

프로젝트를 진행하며 일반 로그인 과정에서 Spring Security와 JWT(Json Web Token)를 활용하여 로그인 기능을 구현하였다. Spring Security를 사용한 이유와 동작과정을 알아보고 구현해 보자. OAUTH2를 활용한 소셜로그인은 다음장에서 알아보자.🤔 왜 Spring Security를 사용했나?강력한 인증 및 권한 부여 기능중앙에서 보안 설정 관리확장성과 커스터마이징먼저 스프링 시큐리티는 인증(Authentication)과 권한 부여(Authrization)를 손쉽게 구현할 수 있는 안전한 프레임워크이고 추후에 진행할 OAuth2(소셜 로그인)을 지원하고, 보안 설정을 중앙에서 처리할 수 있게 도와준다. 이를 통해서 보안 정책을 일관되게 적용하고 유지할 수 있으며, 다양한 ..

article thumbnail
Entity의 생성일과 수정일을 자동으로 관리하자 ( BaseEntity )
프로젝트/WMS 2024. 6. 5. 19:47

스프링 부트 프로젝트에서 Entity를 만들며 항상 밑과 같은 방식으로 Entity마다 생성날짜와 수정날짜를 관리했었다.매번 이렇게 따로 생성일과 수정일을 저장해야 하나 고민하다가 이러한 공통 속성을 묶어주는 BaseEntity를 발견했다.바로 한 번 살펴보자. 먼저 build.gradle에서 의존성을 추가해주자. 그 이후  메인 애플리케이션에 @EnableJpaAuditing을 추가하자.JPA AuditingAuditing 뜻은 감시한다는 뜻으로 JPA를 감시한다는 의미이다. 즉 JPA Auditing은 JPA를 감시하며 엔티티와 관련된 이벤트를 추적하고 기록한다. 이것을 사용한다면 엔티티의 생성일과 수정일을 자동으로 관리하는 기능을 제공하여 개발자가 수동으로 관리하지 않아도 되는 장점이 있다. 그다음..

article thumbnail
[Java] 백준 14453번 : Hoof, Paper, Scissors (Silver)
코딩테스트/백준 2024. 6. 4. 21:25

문제https://www.acmicpc.net/problem/14453  코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public class Main { private static BufferedReader br; private static StringTokenizer st; private static StringBuilder sb; private static int N; private static int[][] arr; private static int max = Integer.MIN_VALUE; ..

article thumbnail
[Java] 백준 14719번 : 빗물
코딩테스트/백준 2024. 5. 31. 13:08

문제https://www.acmicpc.net/problem/14719 접근 방법이 문제는 창고 다각형과 비슷한 문제이다.왼쪽부터 오른쪽으로 탐색하며 큰 값을 저장하고, 오른쪽부터 왼쪽으로 탐색하며 큰 값을 저장한뒤두 배열의 작은 값을 기준으로 기둥을 빼주면 빗물이 나온다.코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static BufferedReader br; private static StringTokenizer st; private stati..

article thumbnail
[Java] 백준 1912번 : 연속합
코딩테스트/백준 2024. 5. 31. 12:15

문제https://www.acmicpc.net/problem/1912 접근 방법각 수가 주어졌을때 연속된 수를 선택(1~N개)해서 구할 수 있는 합중 가장 큰 합을 구하는 문제이다.따라서 이전부터 계속 연속한 값과, 현재부터 연속된 값의 경우를 비교하며 큰 값만 담아주면 된다. 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static BufferedReader br; private static StringTokenizer st; private st..

article thumbnail
[Java] 백준 2304번 : 창고 다각형
코딩테스트/백준 2024. 5. 31. 11:53

문제https://www.acmicpc.net/problem/2304  접근 방법왼쪽부터 오른쪽으로 탐색하며 원본 배열과 prefix배열을 비교하며 큰 수를 담아주었고오른쪽부터 왼쪽으로 탐색하며 원보 배열과 suffix배열을 비교하며 큰 수를 담아주었다.prefix 배열, suffix 배열은 각 방향으로 진행하며 큰 수가 담겨져 있을 것이고 그 수중 작은 것드리 창고의 지붕이 된다. 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; p..