본문 바로가기

전체 글46

스프링 컨테이너 ApplicaitonContextAnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);스프링 컨테이너라고 부름인터페이스스프링 컨테이너 생성 과정스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 함여기서는 AppConfig.class를 구성 정보로 지정빈 이름은 메서드 이름을 사용빈 이름은 직접 부여 가능@Bean(name = "빈 이름 지정")빈 이름은 항상 다른 이름을 부여스프링으로 전환하기package hello.core;import hello.core.discount.DiscountPolicy;import hello.core.discount.FixDiscountPolicy;i.. 2024. 8. 17.
AppConfig 할인 정책 적용과 문제점public class OrderServiceImpl implements OrderService { //private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy();}문제점1. DIP 위반 : 인터페이스 뿐만 아니라 구현 클래스에도 의존추상 인터페이스 의존 : DiscountPolicy구현 클래스 의존 : FixDiscountPolicy, RateDiscountPolicy2. OCP 위반 : 기능을 확장해서 변경하려면 클라이언트 코드에 영향을 줌FixDiscountPolicy에서 Rat.. 2024. 8. 15.
좋은 객체 지향 설계의 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.