전체 95

DB / Transaction

Transaction하나의 거래를 안전하게 처리하도록 보장모든 작업이 성공해서 데이터베이스에 정상 반영하는 것 : 커밋(Commit)작업 중 하나라도 실패해서 거래 이전으로 되돌리는 것 : 롤백(RollBack) ACID원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability) 보장원자성 : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공 하거나 모두 실패해야 함일관성 : 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지>> 예를 들어 데이터베이스에서 정한 무결성 제약 조건을 항상 만족격리성 : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리>> 예를 들어 동시에 같은 데이터 를 수정하지 못하도록 해야 함..

Spring 2025.04.21

DB / Connection Pool, DataSource

Connection Pool데이터베이스 커넥션 획득커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 소모DB는 물론이고 애플리케이션 서버에서도 TCP/IP 커넥션을 새로 생성하기 위한 리소스를 매번 사용해야 함>> 응답 속도에 영향>> 해결을 위해 커넥션을 미리 생성해두고 사용 커넥션 풀 초기화애플리케이션을 시작하는 시점에 커넥션 풀은 필요한 만큼 커넥션을 미리 확보해 풀에 보관>> 기본값 보통 10개>> 커넥션 풀에 들어있는 커넥션은 TCP/IP로 DB와 연결되어 있는 상태여서 즉시 SQL을 DB에 전달 가능 커넥션 풀 사용애플리케이션 로직에서 DB 드라이버를 통해 커넥션을 획득 x이미 생성되어 있는 커넥션을 객체 참조로 가져다 씀받은 커넥션을 사용해 SQL을 데이터베이스에 전달하고 결과를 받아 ..

Spring 2025.04.20

DB / JDBC

JDBC 등장 이유애플리케이션 개발할 때, 중요한 데이터는 대부분 데이터베이스에 보관커넥션 연결 : 주로 TCP/IP를 사용해 커넥션 연결SQL 전달 : 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 전달결과 응답 : DB는 전달된 SQL 수행하고 결과 응답, 애플리케이션 서버는 응답 결과 활용 문제점>> 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용코드도 변경해야 함>> 개발자가 각각의 데이터 베이스마다 커넥션 연결, SQL 전달, 결과 응답 받는 방법 새로 학습해야 함 JDBC 표준 인터페이스Java Database Connectivity는 자바에서 데이터 베이스에 접속할 수 있게 하는 자바 API이 인터페이스를 각각의 DB ..

Spring 2025.04.19

MVC / 파일 업로드

서블릿 파일 업로드request.getParts() : multipart/form-data 전송 방식에서 각각 나눠진 부분을 받아 확인 가능 멀티파트 사용 옵션업로드 사이즈 제한사이즈를 넘으면 예외(SizeLimitExceededException) 발생 max-file-size : 파일 하나의 최대 사이즈, 기본 1MBmax-request-size : 멀티파트 요청 하나에 여러 파일 업로드 가능한데 그 전체 합, 기본 10MB spring.servlet.multipart.enabled 켜기스프링 부트는 서블릿 컨테이너에게 멀티파트 데이터를 처리하라 설정 스프링의 DispatcherServlet에서 멀티파트 리졸버(MultipartResolver) 실행 Part 주요 메서드part.getSubmittedF..

Spring 2025.04.18

MVC / 스프링 타입 컨버터

ConversionService스프링은 개별 컨버터를 모아두고 그것들을 묶어 편리하게 사용할 수 있는 기능 제공 등록과 사용 분리컨버터를 등록할 때 타입 컨버터를 명확히 알아야 함반면 사용하는 입장에서는 타입 컨버터를 전혀 몰라도 됨>> 타입 컨버터들은 모두 컨버전 서비스 내부에 숨어서 제공됨>> 인터페이스 분리 원칙 Formatter객체를 포맷에 맞춰 문자로 출력하거나 그 반대의 역할을 하는 기능 기본 포맷터스프링은 자바에서 기본으로 제공하는 타입들에 대해 수 많은 포맷터를 기본으로 제공 @NumberFormat : 숫자 관련 형식 지정 포맷터 사용, NumberFormatAnnotationFormatterFactory@DateTimeFormat : 날짜 관련 형식 지정 포맷터 사용, Jsr310Dat..

Spring 2025.04.16

MVC / API 예외 처리

API 예외 처리오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝 API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 함produces = MediaType.APPLICATION_JSON_VALUE의 뜻>> 클라이언트가 요청하는 HTTP Header의 Accept 값이 application/json일 때 해당 메서드 호출>> 클라이언트가 받고 싶은 미디어 타입이 json이면 이 컨트롤러 메서드 호출 응답 데이터를 위해 Map을 만들고 statue, message 키에 값 할당>> Jackson 라이브러리는 Map을 JSON 구조로 변환 가능 스프링 부트 기본 오류 처리BasicErrorControllererrorHtml() : produces = MediaTyp..

Spring 2025.04.15

MVC / 예외 처리와 오류 페이지

서블릿 예외 처리Exception(예외)웹 애플리케이션은 사용자 요청별로 별도 쓰레드 할당, 서블릿 컨테이너 안에서 실행톰캣 같은 WAS까지 예외 전달됨>> tomcat이 기본으로 제공하는 오류 화면 보여줌>> HTTP 상태 코드 500>> Exception의 경우 서버 내부에서 처리할 수 없는 오류가 발생한 것으로 생각 response.sendError(HTTP 상태 코드, 오류 메시지)오류가 발생했을 때, HttpServletResponse가 제공하는 sendError 메서드 사용 가능>> 서블릿 컨테이너에게 오류 발생을 전달 가능>> HTTP 상태 코드와 오류 메시지 추가 가능 sendError 흐름response.sendError()를 호출하면 response 내부에는 오류 발생 상태를 저장>> ..

Spring 2025.04.14

MVC / 로그인 처리 - 필터, 인터셉터

서블릿 필터애플리케이션 여러 로직에서 공통으로 관심이 있는 것>> 공통 관심사(cross-cutting concern) 웹과 관련된 공통 관심사 처리할 때는 HTTP 헤더나 URL 정보들 필요>> 서블릿 필터, 스프링 인터셉터가 HttpServletRequest 제공 필터 흐름 필터가 호출 된 다음 서블릿이 호출(수문장 역할)>> 모든 고객의 요청 로그를 남기는 요구사항일 때>> 특정 URL 패턴에 적용 가능 필터 제한로그인 여부 체크하기 굳 필터 체인중간에 필터를 자유롭게 추가 가능 스프링 인터셉터스프링 인터셉터 흐름컨트롤러 호출 직전에 호출됨 스프링 인터셉터 제한로그인 여부 체크하기 굳 스프링 인터셉터 체인중간에 인터셉터 자유롭게 추가 가능 스프링 인터셉터 호출 흐름preHandle : 컨트롤러 호출..

Spring 2025.04.13

MVC / 로그인 처리 - 쿠키, 세션

로그인 요구사항홈 화면 - 로그인 전>> 회원 가입>> 로그인 홈 화면 - 로그인 후>> 본인 이름(누구님 환영합니다.)>> 상품 관리>> 로그 아웃 보안 요구사항>> 로그인 사용자만 상품에 접근, 관리 가능>> 로그인 하지 않은 사용자가 상품 관리에 접근하면 로그인 화면으로 이동 회원 가입, 상품 관리 Package 구조도메인이 가장 중요!>> 도메인 = 화면, UI, 기술 인프라 등의 영역을 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역 향후 web을 다른 기술로 바꿔도 도메인은 그대로 유지할 수 있어야 함>> web은 domain을 의존하지만 domain은 web을 의존하지 않게 설계 로그인 처리하기 - 쿠키 사용쿠키서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아 브라우저에 전달>>..

Spring 2025.04.12

MVC / Bean Validation

Bean Validation특정 구현체 x, 기술 표준>> 검증 애노테이션과 여러 인터페이스의 모음>> 일반적으로 사용하는 구현체는 Hibernate Validator @NotBlank : 빈값 + 공백만 있는 경우를 허용 x@NotNull : null 을 허용 x@Range(min = 1000, max = 1000000) : 범위 안의 값이어야 함@Max(9999) : 최대 9999까지만 허용 스프링 적용spring-boot-starter-validation 라이브러리를 넣으면 자동으로 Bean Validator를 인지 LocalValidatorFactoryBean을 글로벌 Validator로 등록>> @NotNull 같은 애노테이션을 보고 검증을 수행>> @Valid , @Validated 만 적용..

Spring 2025.04.11