본문 바로가기

전체 글80

좋은 객체 지향 설계의 5가지 원칙(SOLID) 다형성의 본질인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.클라이언트(호출하는 코드)를 변경하지 않고, 서버(호출 당하는 코드)의 구현 기능을 유연하게 변경할 수 있다.중요점유연하며 변경이 용이확장 가능한 설계클라이언트에 영향을 주지 않는 변경 가능인터페이스를 안정적으로 잘 설계하는 것이 중요한계역할(인터페이스) 자체가 변하면 클라이언트, 서버 모두 큰 변경이 발생인터페이스를 안정적으로 잘 설계하는 것이 중요SOLIDSRP(single responsibility principle) : 단일 책임 원칙OCP(Open/closed principle) : 개방-폐쇄 원칙LSP(Liskov substitution principle) : 리스코프 치환 원칙ISP(Interface seg.. 2024. 8. 13.
파일 업로드 HTML 폼 전송 방식1. application/x-www-form-urlencodedHTML 폼 데이터를 서버로 전송하는 가장 기본적인 방법Form 태그에 별도의 enctype 옵션이 없으면 웹 브라우저는 요청 HTTP 메시지의 헤더에 Content-Type : application/x-www-form-urlencoded를 추가폼에 입력한 전송할 항목을 HTTP Body에 문자로 &로 구분해서 전송파일을 업로드 하려면 문자가 아닌 바이너리 데이터를 전송해야 하는데, 해당 방식으로는 어려움2. multipart/form-data문자와 바이너리를 동시에 전송하는 방법Form 태그에 별도의 enctype="multipart/form-data를 지정다른 종류의 여러 파일과 폼의 내용을 함께 전송 가능Conte.. 2024. 8. 5.
스프링 API 예외 처리2 API 예외처리의 어려운 점HandlerExceptionResolver의 경우 ModelAndView를 반환하는데, 이는 API 응답에서는 불필요또한, API 응답을 위해서 HttpServlerResponse에 직접 응답 데이터를 넣었지만, 과정이 불편특정 컨트롤러에서만 발생하는 예외를 별도로 처리하기 어려움ExceptionHandlerExceptionResolver@ExceptionHandler({예외처리1.class, 예외처리2.class..})Method 선언스프링에서 기본 제공ExceptionResolver 중 우선순위가 가장 높음@ExceptionHandler 애노테이션을 선언하고, 해당 컨트롤러에서 처리하고 싶은 예외를 지정지정한 예외 또는 그 예외의 자식 클래스는 모두 예외 처리 가능다양한 .. 2024. 7. 23.
스프링 API 예외 처리 스프링 부트가 기본으로 제공하는 ExceptionResolverHandlerExceptionResolverComposite에 다음 순서로 등록ExceptionHandlerExceptionResolverResponseStatusExceptionResolverDefaultHandlerExceptionResolverResponseStatusExceptionResolver예외에 따라서 HTTP 상태 코드를 지정해주는 역할@ResponseStatus가 달려있는 예외를 처리ResponseStatusException 예외를 처리1. @ResponseStautsExcepiton 정의@ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "잘못된 요청 오류")public cl.. 2024. 7. 21.
API 예외 처리 정상 응답과 오류 응답@RestControllerpublic class ApiExceptionController { @GetMapping("/api/members/{id}") public MemberDto getMember(@PathVariable("id") String id){ if(id.equals("ex")){ throw new RuntimeException("잘못된 사용자"); } if(id.equals("bad")){ throw new IllegalArgumentException("잘못된 입력 값"); } if(id.equals("user-ex")){ throw n.. 2024. 7. 21.
HttpEntity HttpEntitypublic class HttpEntity { private final HttpHeaders headers; @Nulladble private final T body;}HTTP 요청 또는 응답에 해당하는 HttpHeader와 HttpBody를 포함하는 ClassHTTP 메시지를 편하게 조회 가능해당 Class를 상속받은 RequestEntity, ResponseEntity가 대표적ResponseEntitySpring MVC에서 HTTP  요청에 대한 응답을 제어하는데 사용하는 ClassHttpEntity를 상속받고 사용자의 HttpRequest에 대한 응답 데이터가 포함된 Class이기 때문에 HttpStatus, HttpHeader, HttpBody를 .. 2024. 7. 21.