Spring38 스프링 컨테이너 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 예외 처리 스프링 부트가 기본으로 제공하는 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. 이전 1 2 3 4 5 ··· 7 다음