Spring 21

H2 인메모리 DB의 동작 원리

Spring Boot 프로젝트를 실행하고, POST로 데이터를 전송한 후 GET으로 조회해 보니, 방금 저장한 데이터가 잘 나온다.application.properties에 DB 연결 정보가 없음MySQL이나 PostgreSQL 같은 데이터베이스를 설치하지도 않음이게 가능한 이유는 Spring Boot의 기본 동작 때문이다. Spring Boot의 기본 동작 — 자동 H2 인메모리 DB Spring Boot에서 JPA(JpaRepository)를 사용하지만 DB 설정이 없는 경우,자동으로 인메모리 H2 데이터베이스를 사용한다.인메모리 DB란?디스크가 아닌 메모리(RAM)에 데이터가 저장되는 데이터베이스로,애플리케이션이 종료되면 모든 데이터가 사라진다. Spring Boot는 다음 조건에서 H2를 자동..

IT/Spring 2025.08.12

Spring Data JPA 페이지네이션(Pagination) 처리

웹 애플리케이션에서 데이터를 조회할 때, 수만 건 이상의 데이터를 한 번에 내려받는 것은 매우 비효율적이다.이런 경우에 사용하는 대표적인 기법이 바로 페이지네이션(Pagination)이다.페이지네이션이란? 페이지네이션은 대량의 데이터를 페이지 단위로 나누어 사용자에게 제공하는 방식이다.예를 들어, 데이터베이스에 10,000건의 로그가 있을 때, 이를 한 번에 모두 내려받기보다 20개씩 나눠서 보여주는 방식이다.이를 통해 메모리 사용을 줄이고, 사용자 경험을 개선하며, 네트워크 비용도 줄일 수 있다.Spring Data JPA에서 페이지네이션 구성 요소Spring Data JPA는 페이지네이션을 위해 여러 유틸리티를 기본 제공한다. 대표적으로 아래 3가지가 있다. 1. Pageable 인터페이스페이지 요청..

IT/Spring 2025.07.30

JPA에서 deleteAll() vs deleteAllInBatch()의 차이와 주의할 점

Spring Data JPA를 사용하다 보면 전체 데이터를 삭제해야 할 때 deleteAll()과 deleteAllInBatch() 두 가지 메서드 중 무엇을 써야 할지 고민하게 된다두 메서드는 이름만 보면 비슷해 보이지만, 동작 방식, 성능, 주의사항 모두 다르기 때문에 잘 구분해서 사용해야 한다 1️⃣ deleteAll() — 하나씩 순회하며 삭제userRepository.deleteAll();내부적으로는 findAll()로 모든 데이터를 조회한 뒤,for 루프로 한 건씩 EntityManager.remove() 호출즉, n개의 delete 쿼리가 실행된다✅ 특징JPA가 영속성 컨텍스트를 유지한 채 개별 엔티티를 추적엔티티 리스너, 연관된 Cascade, orphanRemoval 등 모두 동작❗ 단점..

IT/Spring 2025.07.19

스프링 어노테이션

@Transactional@Transactionalpublic void createUser(User user) { userRepository.save(user); emailService.sendWelcomeEmail(user);}해당 범위 내의 DB 작업을 하나의 트랜잭션으로 묶어 처리한다.모두 성공하면 커밋, 하나라도 실패하면 모두 롤백한다.적용 위치에 따라 다르게 작동한다:클래스에 선언 → 해당 클래스의 모든 public 메서드에 적용메서드에 선언 → 해당 메서드에만 적용주의: private, protected, default 접근자 메서드에는 적용되지 않다.옵션:@Transactional(rollbackFor = Exception.class) @Valid@PostMapping("/user..

IT/Spring 2025.07.15

RestTemplate WebClient RestClient

Spring Framework에서 HTTP 요청을 처리하기 위해 사용할 수 있는 주요 클라이언트는 RestTemplate, WebClient, 그리고 RestClient 이다.1. RestTemplate- 동기식 HTTP 클라이언트: 요청을 보내고 응답을 받을 때까지 블로킹된다- 간단하고 직관적인 API: 사용하기 쉽고, 간단한 HTTP 요청을 처리하는 데 적합하다. - Spring 5.0 이후로는 더 이상 새로운 기능이 추가되지 않음: 유지보수는 계속되지만, 새로운 기능은 추가되지 않는다. - 기존 코드와의 호환성: 많은 기존 프로젝트에서 사용되고 있으며, 기존 코드와의 호환성이 중요할 때 유용하다- Spring 5.0 이후로는 더 이상 새로운 기능이 추가되지 않으며, WebClient로 대체될 예정이..

IT/Spring 2025.01.23

React 프로젝트 Spring으로 가져오기

✅ DashboardController.java 만들기  ✅ proxy 변경✅ "proxy": "http://localhost:8080"  ➡️  "homepage": "/dashboard"  ✅ yarn start 후 페이지 뜨는 것 확인 후 ✅yarn build✅ build 후 index.html 이름 변경   dashboard.html  (컨트롤러 맵핑 주소 맞춤)✅ Spring 프로젝트의 📁templates 폴더 안에 dashboard.html   복붙 ✅  📁 resources > static > dashboard 폴더 만들기✅ dashboard 폴더 안에 yarn build 후 생성된 파일 중 html 파일 제외하고 모두 복사✅ spring 재가동  끝 !

IT/Spring 2024.12.31

Swagger

https://swagger.io/ API Documentation & Design Tools for Teams | SwaggerSwagger and OpenAPI go hand‑in‑hand. Swagger offers powerful and easy to use tools to take full advantage of the OpenAPI Specification. See how we do itswagger.io Spring Boot 프로젝트에서 Swagger-UI를 통해 개발한 Rest API 들의 목록을 확인하고 테스트 할 수있다. Swagger- 개발한 Rest API를 문서화 한다. - API 호출을 통한 테스트를 가능하게 한다. => api 단위테스트, 명세서 다 가능하다 build.grad..

IT/Spring 2024.12.24

Mapper Error (@ResultMap)

[ERROR] 24-12-04 15:07:02 [PaymentServiceImpl:169] - 결제완료 데이터 조회에 실패했습니다. org.apache.ibatis.binding.BindingException: Mapper method 'kr.co.sonystore.mappers.PaymentMapper.selectCountPayComplete' attempted to return null from a method with a primitive return type (int). /**     * 결제완료된 데이터를 조회한다     * @param input - 조회할 결제내역 정보에 대한 모델 객체     * @return 조회된 데이터 수     */    @Select(        "SELECT C..

IT/Spring 2024.12.04

@ResponseBody

@ResponseBody 애노테이션은 Spring MVC에서 컨트롤러 메서드가 반환하는 값을 HTTP 응답 본문으로 직접 변환하여 클라이언트에게 전송할 때 사용한다 주로 RESTful 웹 서비스에서 JSON 또는 XML 형식의 데이터를 반환할 때 사용된다@ResponseBody를 사용하면, 반환된 객체가 JSON 또는 XML 형식으로 변환되어 HTTP 응답 본문에 포함된다.  @RestController 애노테이션은 @Controller와 @ResponseBody를 결합한 것이다따라서 @RestController를 사용하면 메서드에 @ResponseBody를 명시적으로 추가하지 않아도 된다

IT/Spring 2024.12.03

Spring MVC 다중삭제

cart.html.. 선택 삭제 ...   ()   axios.delete 요청에서 배열을 쿼리 매개변수로 전달할 때, Spring MVC에서 이를 올바르게 처리하기 위해서는 배열의 각 요소를 개별적으로 쿼리 매개변수로 전달해야 한다이를 위해 paramsSerializer를 사용하여 쿼리 매개변수를 올바르게 직렬화 할 수 있다/* = = = = = 다중 상품 삭제 = = = = = */document.querySelector('.button_del_checked_ite..

IT/Spring 2024.11.27

Thymeleaf

Thymeleaf 템플릿 엔진을 사용하여 숫자를 형식화하고 HTML 요소에 값을 삽입하는 구문이 구문은 cart.price 값을 천 단위 구분 기호(쉼표)를 사용하여 형식화하고,그 값을 요소의 텍스트로 설정한다 Thymeleaf 표현식#numbers는 Thymeleaf의 유틸리티 객체로, 숫자 형식화를 위한 메서드를 제공한다formatInteger 메서드는 정수를 형식화한다첫 번째 인수: 형식화할 숫자 값 (cart.price). 두 번째 인수: 최소 자릿수 (1). 세 번째 인수: 천 단위 구분 기호 ('COMMA').

IT/Spring 2024.11.26

Spring 파일 업로드 경로 맵핑

application.properties 와 MyWebConfig.java  설정 설명  application.properties # 업로드 된 파일이 저장될 폴더 경로 ("/"로 끝나면 안됨)# => 이 경로가 프로젝트 폴더 안에 존재하면 안됨# [mac, linux 용]# upload.dir=/Users/hyeon/upload# [widows 용] => 드라이브 문자열 앞에 "/" 적용 필요upload.dir=/C:/HYEON/upload# 업로드 된 파일이 노출될 URL 경로 ("/" 로 끝나면 안됨)# => "http://localhost:8080/files" 를 의미# => "http://localhost:8080/files" 가 "upload.dir"에 명시한 폴더를 의미upload.url=/..

IT/Spring 2024.11.21

File Upload

코드 분석회원관리 - 회원가입부분  파일업로드 🫛 RestController 🫛 업로드 받기  UploadItem uploadItem = null;uploadItem = fileHelper.saveMultipartFile(photo);  >>> FileHelper 🗂️ 🗂️ 파일의 원본 이름 추출String originName = multipartFile.getOriginalFilename();ex)  originName = imgname.png 🗂️ 업로드 된 파일이 저장될 폴더의 이름을 "년/월/일" 형식으로 생성  Calendar c = Calendar.getInstance();String targetDir = String.format("%s/%04d/%02d/%02d", uploadDir..

IT/Spring 2024.11.21

Interceptor

핸들러 인터셉터  Handler Interceptor - 웹 브라우저가 보내는 컨트롤러의 실행 요청을 중간에 가로채서 어떠한 일을 수행하게 하는 기능 - 모든 웹 페이지가 공통적으로 동일하게 실행해야 하는 기능들을 구현할 수 있다 - 컨트롤러에 들어오는 요청 HttpRequest와 컨트롤러가 응답하는 HttpResponse를 가로채는 역할- 웹 어플리케이션 내에서 특정한 URL 호출을 가로채는 역할- 요청과 응답을 가로채서 원하는 동작을 추가하는 역할 - 요청을 받아들이기 전, 세션에서 로그인 한 사용자가 있는지 보고 없다면 로그인 페이지로 redirect 시킬 수 있다- 주기적으로 결과 페이지에 등장하는 데이터들을 인터셉터에서 응답을 가로채 데이터를 추가한 다음 보낼 수 있다 - 클라이언트의 요청이 컨..

IT/Spring 2024.10.23

Spring 프로젝트 구성

패키지 정보패키지 이름 (com.hyeon.cookie)GroupId  :  com.hyeonArtifactId  :  cookie의존성 설정프로젝트 생성 과정에서 dependencies 항목에 대해 아래의 항목을 선택Spring Boot DevTools Spring Boot Acturator Ops Spring WebThymeleaf Template EnginesLombok(Java Mail Sender)추가 설정logback 설정파일 추가/src/main/resources/logback-spring.xml 파일 추가프로젝트명 변경라이브러리 설정필요한 라이브러리 추가UserAgent 라이브러리 추가MyWebConfig.java,  application.properties 파일 추가 및 설정패키지 추가 ..

IT/Spring 2024.10.16

Auto Reload

Spring 프로젝트 브라우저로 여는데,웹브라우저가 VS Code 안에서 뜨는 경우가 있다그럴 경우 아래 설정을 VS Code 설정 (settings.json) 에 추가하고,Chrome Extension에 RemoteLiveReload 설치 하면 기본 브라우저로 열린다Settings(단축키 Ctrl+,)  >  우측상단의 "Open Settings (JSON)" 버튼 클릭"java.debug.settings.hotCodeReplace": "auto","spring.dashboard.openWith": "external"  "java.debug.settings.hotCodeReplace": "auto"   => 코드 변경시 자동 리로드된다

IT/VS Code 2024.10.15

Spring 프로젝트 생성하기

VS Code 에서 Spring 프로젝트 생성하기Ctrl + Shipt + P > spring initializer: Create a Gradle Project 선택Spring 버전 선택첫 번째 항목이 추천버전이므로 첫번째 선택사용할 언어 선택  :  JavaGroupId 지정  :  회사 이름의 도메인 역순 ( ex: com.hyeon )ArtifactId 지정  :  버전 없는 Jar파일 이름 ( 최종 산출물 이름 / 실행 파일 이름 / 프로그램 이름 )특수문자는 사용할 수 없고, 소문자만 사용되어야 한다배포 타입 지정  :  JarJava Version 선택  :  17 (설치되어 있는 버전을 선택)dependency 선택기본으로 탑제할 라이브러리 의미Spring WebSpring Boot DevT..

IT/Spring 2024.10.15

웹 개발 발전

- 1990년대 후반: 동적 웹의 등장- 초기 웹은 주로 정적 페이지로 구성되었으나, 1995년 자바스크립트(JavaScript)가 등장하면서 브라우저에서 클라이언트 측에서 실행되는 동적 웹 페이지 제작이 가능해졌다- 이를 통해 사용자와 상호작용할 수 있는 웹 페이지가 탄생.- 1995년에는 PHP와 MySQL 같은 서버 측 스크립트 언어와 데이터베이스가 등장하여 동적 콘텐츠 생성이 가능해졌고, 이는 웹 애플리케이션의 기본 요소가 되었다- 2000년대 초: 웹 2.0과 AJAX의 등장- 2000년대: 웹 2.0이라는 개념이 등장. 사용자 생성 콘텐츠, 소셜 네트워킹, 블로그, 위키와 같은 동적 웹 애플리케이션의 확산- AJAX(Asynchronous JavaScript and XML)가 대두되면서 웹 페..

IT/IT 2024.10.15
반응형