728x90

Spring 25

Spring(스프링) - 스프링 MVC 기본기능

로깅 로깅 라이브러리를 통해서 콘솔에 로그를 출력 로그 라이브러리는 Logback, Log4J 등이 있고 이를 통합한 인터페이스가 SLF4J 임 구현체로 Logback 같은 라이브러리 사용 → 스프륑 부트에서 기본으로 제공 로그 포멧 시간, 로그 레벨, 프로세스 ID, 쓰레드 명, 클래스명, 로그 메시지 로그 레벨 TRACE > DEBUG > INFO > WARN > ERROR 기본 설정은 INFO logging.level.[groupname].[artifactname] = [level 지정] 프로젝트 단위 로깅 레벨 지정 log.debug(”debug log={}”, name) 으로 사용 문자열끼리 + 를 하게 되면 사용하지 않아도 연산이 일어나게 되서 리소스 낭비를 하게 됨 @RestControlle..

Spring(스프링) - 스프링MVC 구조이해

스프링 MVC 전체 구조 DispatcherServlet 프론트 컨트롤러 패턴으로 구현 스프링 MVC의 핵심 HttpServlet을 상속 서블릿으로 등록하면서 모든 경로에 대해서 매핑 urlPatterns=”/” 요청 흐름 서블릿이 호출되면 HttpServlet이 제공하는 service() 메서드 호출 스프링MVC는 DispatcherServlet의 부모인 FrameworkServlet에서 service() 메서드를 오버라이드 해 둠 FrameworkServlet.service()를 시작으로 여러 메서드가 호출되면서 DispatcherServlet.doDispatch()가 호출 됨 동작 순서 핸들러 조회 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러를 조회 핸들러 어댑터 조회 핸들러를 실행할 수 있는 ..

Spirng(스프링) - MVC 프레임워크 만들기

프론트 컨트롤러 패턴 특징 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음 프론트 컨트롤러가 요청에 맞는 컨트롤러 찾아서 호출 공통 처리 가능 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 스프링 웹 MVC도 DispatcherServlet이 프론트 컨트롤러 패턴으로 구현되어져 있음 를 이용하면 하위 요청을 모두 받을 수 있음 단계별 도입 프론트 컨트롤로 도입 호출이 되면 프론트 컨트롤러에서 받아서 처리 frontController에서 처리 View 분리 각 View를 컨트롤러에서 직접 실행 하던것을 객체화 하여 경로만 넘겨주어 해당 객체에서 forward 수행을 함 MyView 객체에서 처리 Model 추가 각 컨트롤러에서는 논리 이름을 반환하고 프론트 컨트롤러에서 실제..

Spring(스프링) -서블릿, JSP, MVC패턴

Servlet으로 만들어진 HTML 서블릿과 자바만으로 HTML 생성 → 이 방식은 동적인 HTML 생성이 불편 자바코드로 HTML을 생성하는 것보다 HTML에 동적으로 변경해야 하는 부분만 자바 코드를 넣는 것이 더 효율적 → 템플릿 엔진 사용 템플릿 엔진으로 JSP, Thymeleaf 등이 있음 JSP로 만들어진 HTML JSP 안에서의 requst와 response는 그냥 사용이 가능 객체명을 request, response로 사용해야함 Java 코드는 안에 넣어 주어야 함 Java 코드 출력은 안에 넣어 주어야 함 실행할 때 .jsp까지 경로에 작성해 주어야 함 MVC 패턴 하나의 서블릿이나 JSP에서 뷰와 로직을 모두 처리하는 것은 하나의 곳에서 너무 많은 역할을 하고 유지보수가 어려워짐 뷰와 ..

Spring(스프링) - 서블릿

Hello Servlet @ServletComponentScan 서블릿을 찾아 자동으로 등록 해줌 @WebServlet name:서블릿 urlPatterns: url 매핑 servlet을 사용하기 위해서는 HttpServlet을 상속받아 사용 요청을 통해 매핑된 url이 실행되면 service 메서드를 실행 logging.level.org.apache.coyote.http11=debug; 개발용 로깅 설정 HttpServletRequest - 개요 서블릿은 HTTP요청 메시지를 편리하게 사용할 수 있도록 HTTP 요청 메시지를 파싱하고 그 결과를 HttpServletRequest 객체에 담아서 제공 Start line HTTP 메서드 URL 쿼리스트링 스키마, 프로토콜 헤더 헤더 조회 바디 form 파라..

Spring(스프링) - 웹 애플리케이션 이해

웹 서버, 웹 애플리케이션 서버 웹 - HTTP 기반 HTTP 메시지에 모든 것을 전송 웹 서버 HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적 파일, CSS, JS 등 ex) nginx, apach 웹 애플리케이션 서버(WAS) HTTP 기반으로 동작 웹 서버 기능 포함(정적 리소스 제공) 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML, HTTP API 서블릿, JSP ex) 톰캣 웹 서버, WAS 차이 웹 서버는 정적 리소스, WAS는 애플리케이션 로직 둘의 경계 모호 자바는 서블릿 컨테이너 기능을 제공하면 WAS WAS는 애플리케이션 코드를 실행하는데 더 특화 웹 시스템 구성 - WAS , DB WAS가 너무 많은 역할을 담당하면 서버 과부하 우려 가장 비싼 애플리케이..

Spring(스프링) -빈 스코프

빈 스코프 싱글톤 기본 스코프 스프링 컨테이너의 시작과 종료까지 유지 됨 프로토타입 스프링 컨테이너가 생성과 의존관계 주입까지만 관여 웹 관련 스코프 request 웹 요청이 들어오고 나갈때 까지의 스코프 session 쉡 세션이 생성되고 종료될 때까지의 스코프 application 서블릿 컨텍스와 같은 범위로 유지되는 스코프 프로토타입 스코프 싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환 스프링 컨테이너는 프로토타입 빈을 생성하고, 의존관계 주입, 초기화까지만 처리 프로토타입 스코프는 종료 메서드가 호출되지 않음 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문..

Spring(스프링) - 빈 생명주기 콜백

빈 생명주기 콜백 시작 스프링 빈의 간단한 라이프 사이클 객체 생성 의존관계 주입 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 줌 스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 스프링 빈 생성 의존관계 주입 초기화 콜백 빈이 생성되고 , 빈의 의존관계 주입이 완료된 후 호출 사용 소멸전 콜백 빈이 소멸 스프링 종료 객체의 생성과 초기화를 분리하는 것이 좋음 각자의 역할에 집중하는 것이 좋음(SRP - 단일 책임 원칙)⇒ 단순 작업의 경우 같이 처리하는 것이 효율 적일 수도 있음 ⇒ 무거운 작업이 있을 경우 인터페이스 InitializingBean, DisposableBean..

Spring(스프링) - 의존관계 자동 주입

다양한 의존관계 주입 방법 생성자 주입 생성자를 통해서 의존관계를 주입 생성자 호출시점에 딱 1번만 호출되는 것이 보장 불변과 필수 의존관계에 사용 생성자가 1개만 존재하면 @Autowired를 생략해도 자동 주입이 됨(스프링 빈만 해당) setter 주입 setter 메서드를 통해서 의존관계를 주입 선택, 변경 가능성이 있는 의존관계에 사용 주입대상이 없을 경우에 대비하여 @Autowired(required = false)로 지정 필드 주입 필드에 바로 의존관계를 주입 외부에서 변경하기 어렵기 때문이 추천하지 않는 방식 => 테스트하기 어려움 일반 메서드 주입 일반 메서드를 통해서 주입 받을 수 있음 잘 사용하지 않음 옵션처리 자동주입 대상 옵션처리 @Autowired(required=false) : ..

Spring(스프링) - 컴포넌트 스캔

컴포넌트 스캔과 의존관계 자동 주입 컴포넌트 스캔 설정 정보 없이 자동으로 스프링 빈을 등록 해주는 기능 설정 파일에 @ComponentScan 사용 excludeFilters를 사용하여 특정 클래스를 제외 가능 @Component 어노테이션이 붙은 클래스를 스캔하여 스프링 빈으로 등록 => ("빈 이름")으로 수동적으로 빈 이름 지정 가능 의존 관계를 위해서 @Autowired를 이용해 자동 의존 주입을 이용해야 함 @Autowired 의존 관계주입을 자동으로 주입 해주는 기능 타입이 같은 빈을 찾아 주입 탐색 위치와 기본 스캔 대상 탐색 위치 @ComponentScan의 옵션으로 basePackages를 이용해 시작 위치를 지정할 수 있음 basePackagesClasses를 통해 클래스 지정 후 해..