목록Spring/인프런_개념 (25)
빙응의 공부 블로그

📝요구사항 분석 필요한 기능을 분석하는 단계이다. 회원 회원은 이름, 주소를 통해 등록할 수 있다. 회원은 자신의 이름, 주소, 주문 내역을 조회할 수 있다. 회원은 여러개를 주문할 수 있다. 상품 상품은 이름, 가격, 재고수량을 가지고 있다. 상품을 주문하면 재고수량이 줄어든다. 상품의 종류로는 도서, 음반, 영화가 있으며 각각 사용하는 속성이 다르다. 주문 주문은 상품을 주문한 회원과 배송 정보, 주문 날짜, 주문 상태를 가지고 있다. 주문 상태는 주문, 취소로 표현할 수 있다. 주문은 여러 개의 주문 아이템을 가지고 있다. 주문 상품 주문 상품은 주문한 상품 정보와 주문금액, 주문 수량 정보를 가지고 있다. 주문 상품은 상품에서 상품 정보를 조회한다. 배송 주문 시 하나의 배송 정보를 가지고 있다...

📝파일업로드 일반적으로 사용하는 HTML Form을 통한 파입 업로드를 이해하려면 먼저 폼을 전송하는 다음 두 가지 방식의 차이를 이해해야 한다. application/x-www-form-urlencoded 방식은 HTML 폼 데이터를 서버로 전송하는 가장 기본적인 방법이다. Form 태그에 별도의 enctype 옵션이 없으면 브라우저는 요청 http 메시지 헤더에 다음 내용을 추가한다. Cotent-Type : application/x-www-form-urlencoded 파일을 업로하드 하려면 파일은 문자가 아니라 바이너리 데이터를 전송해야 한다. 문자를 전송하는 이 방식으로 파일을 전송하기는 어렵다. 그리고 또 한가지 문제가 있는데, 보통 폼을 전송할 때 파일만 전송하는 것이 아니다. 게시판으로 예를..

📝스프링 타입 컨버터 문자를 숫자로 변환하거나, 반대로 숫자를 문자로 변환해야 하는 것 처럼 애플리케이션 개발을 하다보면 타입을 변환해야 하는 경우가 상당히 많다. 다음 예를 보자 @RestController public class HelloController { @GetMapping("/hello-v1") public String helloV1(HttpServletRequest request){ String data = request.getParameter("data"); Integer intValue = Integer.valueOf(data); //숫자 타입으로 변경 System.out.println("intValue = " + intValue); return "ok"; } } 여기서 request...

📝API 오류 처리 API의 예외 처리는 다르게 처리해줘야 한다. HTML 페이지의 경우 지금까지 설명했던 것 처럼 4XX,5XX 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다. 그러나 API의 경우에는 생각할 내용이 더 많다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만, API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. @GetMapping("/api/member/{id}") public MemberDto getMember(@PathVariable("id") String id){ if(id.equals("ex")){ throw new RuntimeException("잘못된 사용자"); } return new MemberDto(..

📝서블릿 예외 처리 스프링 예외 처리를 이해하기 위해선 순수 서블릿 컨테이너의 예외를 어떻게 처리하는지 알아야 한다. 서블릿은 다음 2가지 방식으로 예외 처리를 지원한다. Exception (예외) response.sendError(HTTP 상태 코드, 오류 메시지) Exception (예외) 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main 이라는 이름의 스레드가 실행된다. 실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 스레드가 종료된다. 웹 애플리케이션 웹 애플리케이션은 사용자 요청별로 별도의 스레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 애플리케이션에서 예외가 발생했는데, 어디선가 try - catch로 예외를 ..

📝필터와 인터셉터 우리가 바로 전 포스팅에서 보안에 신경쓴 웹 사이트는 한가지 큰 문제가 있다. 그것은 바로 로그인을 안해도 URL을 통해 사이트에 접근이 가능하다. 상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 작성해야한다. 그러나 모든 컨트롤러에 해당 로직을 넣어야 하는 문제가 발생한다. 이것을 로직에서 공통으로 관심이 있는 것으로 공통 관심사라고 한다. 이러한 공통 관심사는 스프링의 AOP로 해결할 수 있지만, 웹과 관련된 공통 관심사는 지금부터 설명할 서블릿 필터 또는 스프링 인터셉터를 사용하는 것이 좋다. 서블릿 필터 필터는 서블릿이 지원하는 수문장 역할이다. 로직이라 생각하면 편하다. 필터 흐름 HTTP 요청 - WAS - 필터 - 서블릿 - 컨트롤러 필터를 적용하면 필터가 호출된 다음..