SpringBoot 11

[Spring] JPA 란 무엇일까

JPA ?자바에서 ORM 기술 표준으로 사용되는 인터페이스 모음으로자바의 클래스와 DB의 테이블을 매핑 시키기 위해 사용하는 프레임워크 ORM 이란?Object Relational mapping이라는 의미로 자바에서는 클래스와 객체로 사용하고DB에서는 테이블과 행으로 관리한다. 이 둘을 형식차이를 자동으로 변환해주는 것이 ORM이다. 자바에서의 ORM은 JPA , MyBatis가 있다. JPQL과 Native Query의 차이 둘은 JPA에서 쿼리를 작성하는 방식이다. ▪️JPQL엔티티에 맞춘 객체 지향적인 쿼리문이다.JPA가 작성된 JPQL을 SQL로 변환 시켜준다. 엔티티를 중심으로 하기때문에 컬럼은 자바에서 사용하는 카멜표기법으로 표기하며테이블은 엔티티 클래스 이름을 따라 앞글자는 대문자로 표..

SpringBoot 2025.07.11

[SpringBoot] 스프링 레거시가 무엇이고 스프링부트와의 차이점

이건 내가 참고로 알아두고싶은 개념이라 포스팅으로 간단하게 정리해두는거다. Spring Legacy 전통적인 스프링 프레임워크 방식이다. 라이브러리 설정이 자유로우며Ioc / DI / AOP 설계원칙으로 인해 코드의 결합도를 낮추고 간결하게 작성할 수 있다는 장점이 있다. 그러나 SpringLegacy에는 단점이 있다.XML 설정 파일을 통해 빈을 수동으로 등록해주어야한다.초기 환경설정이 복잡하다.별도의 내장 서버가 없어 설치해주어야한다.이러한 단점들이 있어 개발에 불편함을 느껴 만들게 된것이 SpringBoot이다. SpringBoot SpringBoot 는 SpringLegacy의 단점을 보완한 스프링 프레임 워크이다. SpringBoot의 특징과 Legacy와의 차이점▪️자동 설정XML 파일을 ..

SpringBoot 2025.07.10

[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