Develop/Spring 10

[Springboot] Gmail SMTP 서버 연결하기

✅ Gmail SMTP용 앱 비밀번호 생성 방법 (2025년 기준 최신 방법)Gmail SMTP를 사용하려면 **앱 비밀번호(App Password)**를 설정해야 한다.앱 비밀번호는 Google이 보안 강화를 위해 제공하는 특별한 16자리 비밀번호로,SMTP 인증을 위해 일반 비밀번호 대신 사용해야 함.📌 1. 2단계 인증(2FA) 활성화앱 비밀번호를 사용하려면 먼저 2단계 인증을 활성화해야 해.Google 계정 보안 설정으로 이동"2단계 인증"을 클릭화면 안내에 따라 2단계 인증 설정 진행본인 휴대폰으로 인증받거나, 다른 인증 옵션을 설정할 수 있음.2단계 인증이 활성화되면, 앱 비밀번호를 생성할 수 있음.📌 2. 앱 비밀번호 생성2단계 인증을 설정한 후, 앱 비밀번호를 생성할 수 있어.앱 비밀번..

Develop/Spring 2025.03.07

[Spring]대용량 데이터 엑셀 다운로드 구현하기

[기존].jsp에서 ExcelForm을 따로 만들고 스크립트에서 ajax를 사용하여 Json형식으로 Contoller에서 데이터를 불러온 후에 성공하면 ExcelController에 data를 던져서 다운로드를 구현하였다. >> [변경]기존 방식으로 Excel 다운로드를 구현하려고 할 때, Ajax 요청을 사용하여 데이터를 불러온 후 , 데이터를 을 통해 다시 excelController에 전달하는 방식은 소규모데이터에 적합할 수 있지만 대용량 데이터를 처리할 때는 몇가지 비효율성이 발생할 수 있다.*Json은 대용량 데이터를 처리하기에 적합하지 않음  문제점1. 브라우저 메모리 사용 증가JSON 데이터를 불러오면 모든 데이터가 브라우저 메모리에 저장된다. 대용량 데이터를 JSON형식으로 다루면, 클라이..

Develop/Spring 2024.10.30

[Spring]빌드도구 Maven과 Gradle의 차이

Maven과 Gradle은 빌드 도구로, 프로젝트의 빌드, 테스트, 배포 등의 작업을 자동화하는 역할을 하지만, 두 도구는 동작 방식과 설정 방법, 성능 측면에서 차이가 있다.Maven 설정방식XML기반 설정 파일인 pom.xml을 사용 org.springframework.boot spring-boot-starter-web 2.5.0 빌드속도XML 설정 파일 기반으로 빌드를 수행하며, 빌드 시 매번 모든 작업을 다시 수행하는 경향이 있다.빌드 속도 : 상대적으로 느릴 수 있다.병렬 빌드 : Maven 3.0 이후부터 병렬 빌드를 지원하지만, 성능 최적화는 Gradle에 비해 제한적이다.의존성 관리중앙 저장소(Maven Central)를 기본으로 사용하며,..

Develop/Spring 2024.10.18

[Spring]Filter와 Interceptor의 개념 및 차이

개발을 하다보면 공통적으로 처리해야할 것들이 많은데, 이러한 공통적인 업무에 관련된 코드를 페이지 마다 작성한다면 중복코드가 많아지게 되고 프로젝트 단위가 커질수록 서버에 부하를 줄 수 있으며, 소스 관리가 되지 않을 수 있다. 이에 따라 Spring에서는 공통적으로 여러작업을 처리함으로써 중복된 코드를 제거할 수 있는 다음과 같은 기능들을 지원하고있다. 1. Filter2. Interceptor3. AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)* Spring에서 사용되는 위의 3가지 기능들은 모두 어떠한 행동을 하기 전에 먼저 실행하거나, 실행한 후에 추가적인 행동을 할 때 사용하는 기능들이다. 먼저 Filter와 Interceptor의 개념과 차이점을 알아보고 In..

Develop/Spring 2024.10.17

[Spring] Validator의 주요개념과 적용 방법

입력 데이터의 유효성 검증을 담당하는 기능 으로, 사용자로부터 입력된 값이 특정 조건을 만족하는지 확인하는 역할을 한다. Spring Framework에서 제공하는 Validator는 주로 폼 데이터나 요청 데이터의 유효성을 검증할 때 사용된다.  Spring Validator의 주요 개념- Spring에서는 Validator 인터페이스를 제공하여 사용자 정의 검증 로직을 구현할 수 있다.- 이 인터페이스는 다음 두 가지 메서드를 포함한다.supports(Class clazz): 해당 클래스가 이 Validator에서 검증 가능한지 여부를 결정validate(Object target, Errors errors): 검증 로직을 구현하는 메서드로, 실제 검증이 이 메서드에서 이루어진다. 검증이 실패하면 Er..

Develop/Spring 2024.10.02

@RequestBody와 @ModelAttribute

@RequestBody와 @ModelAttribute는 Spring MVC에서 요청 데이터를 컨트롤러 메서드의 파라미터로 바인딩하는 두 가지 주요 방법이다. 둘 다 요청 데이터를 처리하지만, 사용하는 방식과 목적이 다르다.💻 @RequestBody용도: HTTP 요청의 본문(body)을 직접 객체로 변환. 주로 JSON, XML 등의 형식으로 요청 본문이 전송될 때 사용돤다.사용 예:클라이언트가 JSON 형태의 데이터를 서버로 전송할 때RESTful API에서 JSON/XML과 같은 데이터를 처리할 때예제:@PostMapping(value = "/words/popup/jquery") public String operate(@RequestBody ConditionDto conditionDto, Model..

Develop/Spring 2024.08.01

RedirectAttributes란 무엇일까

Create를 할때 Controller에서 자주 볼 수 있었던 RedirectAttributes의 정확한 역할이 궁금해져서 이 글을 쓰게 되었다. RedirectAttributesRedirectAttributes는 Spring Framework에서 제공하는 인터페이스로, 리다이렉트 이후에 플래시 속성(flash attributes)을 전달하는 데 사용된다.플래시 속성은 리다이렉트 이후에도 데이터가 유지되도록 하는 일시적인 저장소이다. 리다이렉트는 일반적으로 HTTP GET 요청을 통해 수행되며, 리다이렉트되는 페이지로 데이터를 전송할 때 쿼리 매개변수나 세션을 사용하지 않고, 일회성 데이터를 전달하기 위해 RedirectAttributes를 사용한다.

Develop/Spring 2024.07.12

@Component 어노테이션과 Validator

Validator를 만들면서 @Component 어노테이션을 추가하는 이유가 궁금해져서 이 글을 쓰게 되었다. 먼저, Validator에 @Component 어노테이션을 추가한 이유는 Spring의 컴포넌트 스캔 메커니즘을 통해 해당 밸리데이터 클래스를 스프링 컨텍스트에서 관리하는 빈(Bean)으로 등록하기 위함이다.  이유 및 장점1. 자동 등록 및 의존성 주입 - '@Component' 어노테이션을 사용하면 Spring이 해당 클래스를 스프링 컨택스트의 빈으로 자동으로 등록한다.이렇게 되면 다른 빈에서 이 밸리데이터를 자동으로 주입 받을 수 있으며 명시적으로 빈을 등록하거나 주입하는 번거로움을 줄일 수 있다. @Component@RequiredArgsConstructorpublic class Noti..

Develop/Spring 2024.07.10

파일 첨부 할때의 두가지 방법(파일서버 사용, 로컬경로 업로드)

프로젝트를 진행할때 파일첨부를 구현하면서 AWS S3를 주요 사용해왔지만, 로컬 경로를 통한 업로드 또한 가끔 사용해보면서 스프링부트에서 파일첨부할 때 대표적으로 사용하는 방법에 대해서 알아보게 되었다. 일단, 스프링 부트에서 파일 첨부를 처리하는 주요 방법에는 대표적으로 두가지가 있다.  파일 서버 또는 클라우드 스토리지 사용:AWS S3, Google Cloud Storage, Azure Blob Storage 등과 같은 클라우드 스토리지 서비스를 이용하여 파일을 업로드하고 관리할 수 있다.이 방법의 장점은 파일 저장소가 클라우드에 있기 때문에 확장성과 접근성이 뛰어나며, 데이터 백업과 보안이 비교적 쉽다는 점이 있다.서버 로컬 경로에 파일 업로드:파일을 서버의 특정 디렉토리에 직접 저장하는 방식이 ..

Develop/Spring 2024.06.28