전체 글69 [Spring DB](2) 트랜잭션 트랜잭션은 데이터를 안전하게 처리하도록 보장해주는 것을 뜻한다. 계좌이체를 예시로 들면, 거래를 안전하게 처리하려면 A의 잔고를 감소시키고, B의 잔고를 증가시켜야 한다. 만약 하나라도 문제가 발생한다면 계좌의 금액은 원래 상태로 돌아가야 하며, 계좌이체는 실패해야한다. 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것을 커밋(Commit)이라 하고, 하나라도 실패해서 거래 이전으로 되돌리는 것을 롤백(Rollback)이라 한다. 트랜잭션 ACID 1. 원자성: 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하다거나 모두 실패해야한다. 2. 일관성: 모든 트랜잭션은 일관성있는 데이터베이스 상태를 유지해야 한다. 3. 격리성: 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않.. 2024. 2. 26. [Spring DB](1) JDBC H2 데이터베이스 설정 개발이나 테스트 용도로 사용하기 좋은 가볍고 편리한 DB인 H2 데이터베이스를 설치한다. 테이블 생성하기 테이블 관리를 위해 프로젝트 루트에 sql/schema.sql 파일을 생성한다. drop table member if exists cascade; create table member ( member_id varchar(10), money integer not null default 0, primary key (member_id) ); insert into member(member_id, money) values ('hi1', 10000); insert into member(member_id, money) values ('hi2', 2000); JDBC 애플리케이션 - DB간 데.. 2024. 2. 23. [Spring MVC](16) 파일 업로드 HTML 폼 데이터를 서버로 전송을 할때, 문자(이름, 나이 등)와 바이너리(첨부파일)를 동시에 전송해야 하는 상황이 있다. 이 문제를 해결하기 위해 HTTP는 multipart/form-data라는 전송 방식을 제공한다. 이 방식은 다른 종류의 여러 파일과 폼의 내용을 함께 전송할 수 있다. 서블릿 파일 업로드1 package hello.upload.controller; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.Part; import lombok.extern.slf4j.Slf4j; import org.springframework.ster.. 2024. 2. 21. [Spring MVC](15) 스프링 타입 컨버터 간단히 타입을 변환해야하는 경우, @RequestParam을 사용해보자 public String helloV2(@RequestParam Integer data) { System.out.println("data = " + data); return "ok"; } HTTP 퀴리 스트링으로 전달하는 부분은 String 타입이다. 스프링에서 제공하는 @RequestParam을 사용하면 문자 10을 Integer 타입의 숫자 10으로 편리하게 받을 수 있다. 이러한 예는 @ModelAttribute, @PathVariable에서도 확인할 수 있다. @ModelAttribute @ModelAttribute UserData data class UserData { Integer data; } @PathVariable /.. 2024. 2. 21. [Spring MVC](14) API 예외 처리 HTML 페이지는 4xx, 5xx 와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다. 하지만 API의 경우에는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. API 예외 처리 학습을 위해 서블릿 오류 페이지 방식을 사용해보겠다. WebServerCustomizer 다시 동작 package hello.exception; import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.springframework.boot.web.server.ErrorPage; import org.springframework.boot.web.server.WebServerFactoryCus.. 2024. 2. 20. [Spring MVC](13) 기본 예외 처리 예외를 어떻게 처리해야하는지 알아보자. 만약 애플리케이션에서 예외가 발생했는데 어디선가 try ~ catch로 잡아 처리하지 않으면 어떻게 될까? WAS 컨트롤러 -> View /error-ex 오류 요청 필터는 DispatchType 으로 중복 호출 제거: dispatchType=REQUEST 인터셉터는 경로 정보로 중복 호출 제거: excludePathPatterns("/error-page/**") 전체 흐름 1. WAS(/error-ex, dispatchType=REQUEST) -> 필터 -> 서블릿 -> 인터셉터 -> 컨트롤러 2. WAS(여기까지 전파) 컨트롤러(/error-page/500) -> View 스프링 부트 - 오류 페이지 스프링 부트는 예외 처리 페이지를 기본으로 제공한다. : /e.. 2024. 2. 20. 이전 1 2 3 4 5 6 7 8 ··· 12 다음