728x90

Programming/Spring 86

Spring - JDBC 이해

- 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다. 1. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다. 2. SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. - 여기에는 2가지 큰 문제가 있다. 1. 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용 코 드도 함께 변경해야 한다. 2. 개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 그리고 그 결과를 응답 받는 방법을 새로 학습 해..

Programming/Spring 2023.06.29

Spring - 파일 업로드

- HTML 폼 전송 방식 1. application/x-www-form-urlencoded 2. multipart/form-data - 문자와 바이너리를 동시에 전송하기 위해서 HTTP는 "multipart/form-data"라는 전송 방식을 제공한다. - 방식을 사용하려면 Form 태그에 별도의 enctype="multipart/form-data" 를 지정해야 한다. - 파일을 업로드하기 위해 실제 파일이 저장되는 경로가 필요하다. - application.properties file.dir=파일 업로드 경로 설정(예): /Users/kimyounghan/study/file/ - 주의 1. 꼭 해당 경로에 실제 폴더를 미리 만들어두자. 2. application.properties 에서 설정할 때 마..

Programming/Spring 2023.06.26

Spring - 스프링 타입 컨버터

- HTTP 요청 파라미터는 모두 문자로 처리된다. 따라서 요청 파라미터를 자바에서 다른 타입으로 변환해서 사용하고 싶으면 타입 변환하는 과정을 거쳐야 한다. 1. @RequestParam 2. @ModelAttribute 3. PathVariable - 위 3가지의 경우 스프링이 중간에서 타입을 변환시켜 준다. @GetMapping("/hello-v2") public String helloV2(@RequestParam Integer data) //RequestParam @ModelAttribute UserData data class UserData { Integer data; } //ModelAttribute /users/{userId} @PathVariable("userId") Integer data..

Programming/Spring 2023.06.26

Spring - 예외 처리와 오류 페이지

- 서블릿 예외 처리 - 서블릿은 다음 2가지 방식으로 예외 처리를 지원한다. 1. Exception (예외) 2. response.sendError(HTTP 상태 코드, 오류 메시지) - Exception(예외) - 웹 애플리케이션 WAS(여기까지 전파) 컨트롤러 2. WAS(여기까지 전파) 컨트롤러(/error-page/500) -> View - 스프링 부트 - 오류 페이지1 - 지금까지 예외 처리 페이지를 만들기 위해서 다음과 같은 복잡한 과정을 거쳤다. 1. WebServerCustomizer 를 만들고 2. 예외 종류에 따라서 ErrorPage 를 추가하고 3. 예외 처리용 컨트롤러 ErrorPageController 를 만듬 - 스프링 부트는 이런 과정을 모두 기본으로 제공한다. 1. Erro..

Programming/Spring 2023.06.24

Spring - 로그인 처리2 - 필터, 인터셉터

- 서블릿 필터 - 필터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 - 필터는 특정 URL 패턴에 적용할 수 있다. /* 이라고 하면 모든 요청에 필터가 적용된다 - 필터 제한 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 //로그인 사용자 HTTP 요청 -> WAS -> 필터(적절하지 않은 요청이라 판단, 서블릿 호출X) //비 로그인 사용자 - 필터 체인 HTTP 요청 -> WAS -> 필터1 -> 필터2 -> 필터3 -> 서블릿 -> 컨트롤러 - 필터는 체인으로 구성되는데, 중간에 필터를 자유롭게 추가할 수 있다. 예를 들어서 로그를 남기는 필터를 먼저 적용하고, 그 다음에 로그인 여부를 체크하는 필터를 만들 수 있다. - 필터 인터페이스 public i..

Programming/Spring 2023.06.23

Spring - 로그인 처리 1 - 쿠키, 세션

- package 구조 - hello.login - domain - item - member - login - web - item - member - login - 도메인 = 화면, UI, 기술 인프라 등등의 영역은 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역을 말함 - 향후 web은 다른 기술로 바꾸어도 도메인은 그대로 유지되어야 한다. 이렇게 하려면 web은 domain을 알고 있지만 domain은 web을 모르도록 설계해야 한다. web -> domain 의존, domain -> web 의존 X - domain.member 클래스 package hello.login.domain.member; import lombok.Data; import javax.validation.constraint..

Programming/Spring 2023.06.22

Spring - Bean Validation

private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; @NotNull @Max(9999) private Integer quantity; - 검증 애노테이션 1. @NotBlank : 빈값 + 공백만 있는 경우를 허용하지 않는다. 2. @NotNull : null 을 허용하지 않는다. 3. @Range(min = 1000, max = 1000000) : 범위 안의 값이어야 한다. 4. @Max(9999) : 최대 9999까지만 허용한다. - 검증 순서 1. @ModelAttribute 각각의 필드에 타입 변환 시도 1. 성공하면 다음으로 2. 실패하면..

Programming/Spring 2023.06.22

Spring - 검증 1 - Validation

- 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다. - 사용자가 상품 등록 폼에서 정상 범위의 데이터를 입력하면, 서버에서는 검증 로직이 통과하고, 상품을 저장하고, 상품 상세 화면으로 redirect한다. - 고객이 상품 등록 폼에서 상품명을 입력하지 않거나, 가격, 수량 등이 너무 작거나 커서 검증 범위를 넘어서면, 서버 검증 로직이 실패해야 한다. 이렇게 검증에 실패한 경우 고객에게 다시 상품 등록 폼을 보여주고, 어떤 값을 잘못 입력했는지 친절하게 알려주어야 한다. - FieldError 생성자 요약 public FieldError(String objectName, String field, String defaultMessage) {} - 필드에 오류가 있으면 Field..

Programming/Spring 2023.06.22

Spring - 메시지, 국제화

- 메시지 1. 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 한다. hello=안녕 hello.name=안녕 {0} label.item=상품333 label.item.id=상품 ID333 label.item.itemName=상품명333 label.item.price=가격333 label.item.quantity=수량333 page.items=상품 목록333 page.item=상품 상세333 page.addItem=상품 등록333 page.updateItem=상품 수정333 button.save=저장333 button.cancel=취소333 - resources 폴더 아래 messages.properties라는 파일을 생성한 후 위와 같이 내용을 작성한다. - 스프링 부트를 사용하면 ..

Programming/Spring 2023.06.22
728x90