framework/spring 50

스프링 mvc2 - 6. 예외 처리와 오류 페이지

목표 예외가 터질 때 어떤 내용의 오류페이지를 작성할지, 어떻게 배치할지 고려하는 것 학습 방향 서블릿부터 이해 -> 서블릿 컨테이너가 어떤식으로 예외를 처리하는지 메커니즘을 이해 서블릿 위에 spring이 예외를 어떻게 처리하는지 순차적으로 이해 학습을 위해 스프링 부트에서 자동으로 제공하는 기본 예외 페이지를 꺼둔다. # application.properties server.error.whitelabel.enabled=false 1. 서블릿 예외 처리 2가지 방식으로 예외 처리 Exception(예외) - 무조건 500 error, 서버에서 처리 못하는 exception이 was까지 넘어가기 때문에 server문제라고 해석할 수 밖에 없다. response.sendError(Http status, e..

framework/spring 2023.05.07

스프링 mvc2 - 5. 로그인 처리2 - 필터, 인터셉터

사용 목적 필터, 인터셉터 동일 기능 제공 필터 : 서블릿이 제공 인터셉터 : 스프링이 제공 공통 관심 사항 : 로그인 하지 않은 사용자도 URL을 호출하면 상품 관리 화면에 들어갈 수 있게 된다. 해결방안 컨트롤러에서 로그인 여부를 체크하는 로직을 하나씩 작성 -> 등록, 수정, 삭제 , 조회 등 동일 로직을 작성하는 부분들이 너무 많다. -> 로그인 관련 로직이 변경시, 작성한 모든 로직 다 수정 필요 웹과 관련된 공통관심사는 서블릿 필터 or 스프링 인터셉터 사용하는 것이 유리 1. 서블릿 필터 서블릿 필터 흐름 Http 요청 -> WAS(톰캣서버) -> 필터1 -> 필터2 -> 필터3 -> 서블릿 -> 컨트롤러 * 역순으로 돌아가면서 응답을 보낸다. 필터는 필터링 한다는 의미도 가지지만 서블릿으로..

framework/spring 2023.05.07

스프링 mvc2 - 4. 로그인 처리1 - 쿠키, 세션

1. domain 도메인 화면, UI, 기술 인프라 등등의 영역을 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역 controller, Service, Repository에서 사용하는 data 향후 web을 다른 기술로 바꾸어도 도메인은 그대로 유지할 수 있어야 한다. web은 domain에 의존하지만 domain은 web에 의존하지 않게 설계해야한다. web 패키지를 모두 제거해도 domain에는 전혀 영향이 없도록 의존관계를 설계하는 것이 중요 == domain은 web을 참조하면 안된다. domain: data, service 로직 web: controller, form 관리하는 로직 2. test data package hello.login; @Component @RequiredArgsCo..

framework/spring 2023.05.06

스프링 mvc2 - 3. 검증 2 - Bean Validation

1. Bean Validation 소개 Bean Validation 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고, 표준화 한 것 @NotBlank @NotNull @Range @Max ... 특정한 구현체가 아니라 JSR-380이라는 기술 표준 == 검증 애노테이션 + 인터페이스 구현체 : 하이버네이트 Validator Bean Validation 구현 기술 중 일반적으로 사용하는 구현체 검증 애노테이션 모음(한번보는 걸 추천): https://docs.jboss.org/hibernate/validator/6.2/reference/en-US/html_single/#validator-defineconstraints-spec 2. Bean Validation - 시작 스프링과 통합하지 않는 순수한..

framework/spring 2023.05.06

스프링 mvc2 - 2 검증 1 (Validation)

추가할 것 :th:errors bindingResult에 errors를 타임리프 th: errors로 쓴다던데 errors란게 원래 있는거야? ChatGPT BindingResult는 스프링에서 제공하는 유효성 검사 결과를 저장하는 객체입니다. BindingResult는 @Valid와 함께 사용되어 폼 데이터의 유효성 검사를 수행하고, 유효성 검사 결과를 저장합니다. th:errors는 Thymeleaf 템플릿 엔진에서 제공하는 유효성 검사 결과를 출력하는 태그입니다. BindingResult에서 FieldError나 ObjectError 등의 유효성 검사 결과가 있으면, 해당 결과를 th:errors 태그를 통해 출력할 수 있습니다. th:errors 태그를 사용할 때 path 속성을 이용하여 출력하려..

framework/spring 2023.05.05

스프링 MVC 6 - thymeleaf, @ModelAttribute, PRG, Redirection

0. 부트스트랩 html form 이쁘게 보이도록 하려고 사용 https://getbootstrap.com 동작 https://getbootstrap.com/docs/5.0/getting-started/download/ Compiled CSS and JS 항목을 다운로드 압축을 풀고 bootstrap.min.css 를 복사 폴더에 추가 : resources/static/css/bootstrap.min.css intellij css 작동 안할시 해결방안 'out' 이란 build folder(=compile folder) 삭제후 서버 재시작 정적 리소스가 공개되는 /resources/static folder에 HTML 두면, 실제 서비스에서도 공개된다. = 실제 서비스 운영시 해당 위치 html를 아무나 ..

framework/spring 2023.04.30

스프링 MVC 0 - 웹애플리케이션 이해

1. web server, web app server 웹 http 기반으로 작동 = http protocol의 규칙을 따라서 요청과 응답이 오고 간다. http 메시지 거의 모든 형태의 데어터 전송 가능 ex) HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML (API) 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 1.1. 용어 1.1.1. 웹 서버(WEB) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 webServer가 가지고 있는 html,css.js.img,avi 를 client가 요청시, http로 응답해주는 것 ex) NGINX, APACHE 1.1.2. 웹 애플리케이션 서버(WAS) HTTP 기반으로 동작 웹 서버 기능 포함 + (정적 리소스 제공..

framework/spring 2023.04.26

스프링 핵심 원리 이해 2 - 객체 지향 원리 적용

흐름 java로만 이용해서 스프링의 container가 작동하는 원리를 보여준다. 이후 실제 SpringContainer의 작동방식을 보여준다. 1. 문제점 DIP, OCP 위반 DIP : 인터페이스에만 의존해야하는데 구현체에도 의존을 했었다. OCP : 기능을 확장하게 되면 clientCode에 영향을 준다. 2. 관심사의 분리 역할과 실제배역은 분리되어야 한다. 역할 = 인터페이스, 실제배역 = 구현체 이를 확실히 구분해주기 위해선 역할에 맞는 구현체를 선정해주는 설정(=기획자)이 필요 예시 연극에서 로미오 역할을 하는 디카프리오가 줄리엣 역할을 하는 여주인공을 직접 선정하는 것과 같다. - 여주인공 선정하는 기획자 필요 memberService의 역할을 하는 memberServiceImpl 가 me..

framework/spring 2023.04.08

스프링 핵심 원리 이해 1 - 예제 만들기(회원)

1. 비즈니스 요구사항과 설계 2. 설계 - 회원 도메인 2가지의 도메인이 존재 회원 주문 우선 회원 도메인 먼저 설계 회원 가입 목록 -> 회원서비스(가입, 조회) -> 회원저장소(메모리저장소, DB저장소, 외부 시스템 연동 회원 저장소) Member service repository 2.1. 회원 도메인 개발 1. 회원 등급 public enum Grade { BASIC, VIP } 2. 회원 public class Member { private Long id; private String name; private Grade grade; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String..

framework/spring 2023.04.08

스프링 mvc2 - 9. 파일 업로드

1. 파일 업로드 소개 form 전송 방식 2가지 application/x-www-form-urlencoded multipart/form-data application/x-www-form-urlencoded 가장 기본적인 방법 Form tag에 별도의 enctype 옵션이 없는 경우 web browser 역할 content-type: application/x-www-form-urlencoded를 추가 form에 입력한 전송할 항목을 HTTP Body에 문자로 & 로 구분해서 전송 multipart/form-data file 업로드시 application/x-www-form-urlencoded의 방식의 문제점 binary 데이터 전송이 필요한데 문자 전송 방식이기 때문에 부적합 실제로 파일만 전송하는 경우..

framework/spring 2023.04.05