SpringBoot 9

[SpringBoot + React] 최근 7일의 회원 가입 수 통계를 Rechart 라이브러리를 사용하여 구현하기

관리자 페이지를 만들다가 최근 7일의 회원가입 수를 통계해서 한눈에 볼 수 있다면 좋겠다 생각이 들었다. 1. API 요청을 받아 Service 로직에서 최근 7일의 날짜와 가입 수를 가져온다.더보기◾ Repository@Query(nativeQuery = true, value = "WITH RECURSIVE date_seq AS (\n" + " SELECT CURDATE() - INTERVAL 7 DAY AS dt\n" + " UNION ALL\n" + " SELECT dt + INTERVAL 1 DAY\n" + " FROM date_seq\n" + " WHERE dt + INTERVAL 1 D..

SpringBoot 2025.06.04

[React+SpringBoot] Multipart 요청에서 file을 찾지 못하는 MissingServletRequestPartException 해결하기

프로필 변경하는 기능을 구현하고있었다. 프론트에서 axios로 요청을 할 경우 직접 content-type으로 지정하지 않고 자동으로 지정하게 두어야한다. //업로드 이미지 uploadImage: async (file) => { const formData = new FormData(); formData.append("file", file); const result = await instance.post( `${KH_DOMAIN}/user/uploadimage`, formData ); return result.data; },👉 formData를 통해 file을 담아 요청에 포함하여 전송한다. axios는 formData로 넘길 경우 Content-Type:..

SpringBoot 2025.06.03

[SpringBoot] JpaRepository의 save() 동작 원리

JPA의 계층 구조? 흔히 JPA를 사용하게되면 JpaRepository 라는 인터페이스를 상속 받을 것이다.해당 인터페이스에는 여러 SQL문을 처리하는 로직이 담긴 메서드들이 많이 있는데, 이 또한 여러 계층으로 나뉘어 상속 받은 인터페이스이다. 🔍 JPA의 계층 구조Lv 1 Repository👉 최상위 계층 Lv 2 CrudRepository ( CRUD 기능을 지원) , PagingAndSoringRepository(Page 기능 지원)👉 CRUD기능만을 구현한 인터페이스와 Paging 기능만을 구현한 인터페이스 Lv 3 ListCrudRepository, ListPagingAndSoringRepository 👉 결과값을 List 형태로 반환하는 인터페이스 Lv 4 JpaRepo..

SpringBoot 2025.05.07

[SpringBoot] JPA와 MyBatis은 어떤 원리로 ApplicationProperties에 설정된 정보를 통해 SQL을 실행하는지 알아보자

스프링 부트에서 DB를 조회하기위해선 여러 작업들이 필요하다. DB에 접근하기 위한 Connection 을 생성하고 PreparedStatement를 생성하여 동적으로 SQL문을 처리하고 결과를 반환한다.그러나 이런 과정은 너무 번거로울뿐더러 DB에 접근하고 실행하기 위해 필요한 코드들이 계속해서 중복된다. 이러한 DB 처리를 위한 과정을 자동으로 간편하게 할수있게 해주는것이영속 계층 프레임워크 이다. ❓ 영속 계층 프레임 워크더보기데이터베이스에 연동을 더욱 단순화하여 간편하게 할 수 있도록 도와주며 코드의 유지 보수를 쉽게하기 위한 라이브러이며,대표적으로 JPA , MyBatis가 있다. JPA가 조금 더 간편하게 사용할 수 있는 기능들이 MyBatis 보다 많이 있으나 기능이 많은 만큼 무거워지게된..

SpringBoot 2025.04.29

[SpringBoot] MultipartFile을 사용한 업로드 파일 저장 구현

업로드 파일? 우리가 이미지 파일등을 업로드 하게 되면 단순히 파일명 (basic.jpg) 가 저장되는 것이 아닌 원본 파일 그 자체가 File이라는 객체의 형태로 담기게된다. 이때 업로드를 할 File을 MultipartFile에 저장한 뒤 다양한 메서드를 통해 저장을하고 관리를한다. ❓ MultipartFile스프링부트에서 파일 업로드를 처리할 때 사용되는 여러 편리한 메서드를 제공하는 인터페이스이다.주로 form에서 multipart/form-data 를 통해 파싱된 파일 데이터를 처리하게된다. 🌟MultipartFile 의 메서드 종류 ◾ getName() : 파라미터 이름의 속성 값 ◾ getOriginalFileName() : 업로ㄷ된 파일의 원래 이름 ⭐ ◾ isEmpty..

SpringBoot 2025.04.25

[Spring Boot] JSP를 통해 Controller의 페이지 요청 시 공백 메서드 view name inference 동작에 대해 알아보기

Controller의 공백메서드? public class Controller { @GetMapping("/list") public void listPage(){};}👉 요청만 있으며 내용이 없는 빈 메서드 ❓ 해당 매핑으로 요청하게 되면 어떻게 될까◾ 매핑 요청 태그 리스트​ ◾ 결과👉 url이 /list 경로로 이동 되는것을 확인 🤔 아무런 반환 값이 없는데 왜 페이지가 이어질까? 스프링 부트에는 JSP를 View로 활용하기 위해 JSP파일을 찾아 렌더링 할수 있도록 돕는 설정이 되어있다.spring.mvc.view.prefix=/WEB-INF/views/spring.mvc.view.suffix=.jsp Controller에 요청이 들어갈 경우 해당 요청에 메서드가 실행..

SpringBoot 2025.04.21

[SpringBoot] @Component Bean은 언제 생성될까?

❓ @Component설정한 클래스의 Bean을 생성해주는 어노테이션 🔍 간단한 Component를 활용한 Bean 생성◾ 클래스 생성 후 @Component 설정interface TV{ void powerOn(); void powerOff(); void volumeUp(); void volumeDown();}@Component("lgtv")class lgTV implements TV{ public lgTV() { System.out.println("lg 기본 생성"); }}@Component("sstv")class ssTV implements TV{ public ssTV() { System.out.println("ss 기본 생성!"); ..

SpringBoot 2025.04.16

[SpringBoot] @Conponent 어노테이션으로 더욱 편리하게 Bean 설정하기

오늘 스프링을 배우며 xml을 설정하여 직접 객체를 등록해주는 작업을 배우고 난 뒤이를 좀 더 간편하게 처리 하기 위해서 어노테이션 기반으로 객체를 생성하는 방법을 공부해보았다. 어노테이션을 사용하려면 우선적으로 해야할 일들이 있다. 📌 설정 (app.xml) ◾ Context NameSpace 설정 // 추가 ◾Conponent-scan 설정 //추가 👉 iocDI02_anno 패키지 안에 있는 클래스들을 스캔하게 한다. 🤔 context : component-scan 의 역할?해당 클래스 패스에 있는 클래스들을 스캔하여 @Component가 설정된 객체는 자동으로 생성되게끔한다. 이전 xml 설정 ..

SpringBoot 2025.04.15