목록Server/Spring (24)
새발블로그
1. Spring MVC 프로젝트의 구조스프링 MVC는 Model 2 아키텍처 기반으로 웹 애플리케이션을 구성한다.Model: 비즈니스 로직 처리 (Service, Repository)View: 사용자에게 보여지는 화면 (JSP, Thymeleaf 등)Controller: 요청 받고 응답을 조작하는 로직Controller는 사용자의 요청을 받고, Model을 통해 처리한 결과를 View로 전달한다.2. 스프링 MVC 구성 요소와 흐름 요약전체 요청 처리 순서[요청] → Filter → DispatcherServlet → HandlerMapping → HandlerInterceptor (선택) → Controller → Service → Reposito..
Bean Scope란?스프링 컨테이너에서 Bean이 생성되고 존재하는 범위를 의미. 기본은 singleton.주요 스코프 비교Scope설명사용 예singleton한 개만 생성, 모든 요청 공유대부분 서비스 Bean에 사용prototype요청마다 새로 생성상태를 갖는 객체 필요 시requestHTTP 요청마다 Bean 생성웹 애플리케이션 컨트롤러 등sessionHTTP 세션마다 Bean 생성로그인 정보 등 세션 유지 필요 시생명주기 어노테이션@PostConstructpublic void init() { // 초기화 로직}@PreDestroypublic void destroy() { // 종료 전 로직}@PostConstruct: 의존성 주입 후 초기화@PreDestroy: 컨테이너 종료 전 정리..
DI란?객체 간의 의존 관계를 프로그래머가 아닌 프레임워크가 주입해주는 설계 방식. 스프링은 이 DI를 통해 객체 생성과 관리 책임을 분리시킨다.DI 방법 비교방식특징장점단점필드 주입@Autowired로 필드에 바로 주입코드 간단테스트/유지보수 어려움생성자 주입생성자를 통해 주입불변성 확보, 테스트 용이코드 길어질 수 있음Setter 주입Setter 메서드를 통한 주입선택적 의존성 주입 가능누락 시 런타임 에러 가능성어노테이션 정리@Autowiredprivate UserService userService;@Autowiredpublic OrderService(UserService userService) { this.userService = userService;}@Autowiredpublic void..
컴포넌트 스캔이란?스프링이 특정 패키지를 탐색하면서, @Component 계열 어노테이션이 붙은 클래스를 자동으로 Bean으로 등록하는 기능작동 원리@ComponentScan 선언내부적으로 ClassPathScanningCandidateComponentProvider가 클래스 경로 탐색@Component, @Service 등 등록 대상 클래스 찾음Spring Container에 Bean으로 등록대상 어노테이션어노테이션설명@Component기본 컴포넌트@Service서비스 계층@RepositoryDAO 계층@ControllerMVC 컨트롤러설정 방법Java 기반 설정@Configuration@ComponentScan(basePackages = "com.example")public class AppConfi..
스프링 빈(Bean)이란?Spring IoC 컨테이너가 관리하는 객체를 "Bean"이라고 부른다. 이 Bean들은 애플리케이션 구동 시 스프링 컨테이너에 의해 생성되고, 주입되고, 소멸된다. 우리가 어떤 객체를 Bean으로 등록하느냐에 따라 스프링의 DI(의존성 주입) 및 생명주기 관리가 이루어진다.수동 등록: @Bean직접 자바 설정 파일에서 메서드를 정의해 Bean을 등록한다.@Configurationpublic class AppConfig { @Bean public UserService userService() { return new UserServiceImpl(); }}장점: 외부 라이브러리처럼 수정할 수 없는 클래스 등록에 유용단점: 코드가 많아지고 관리 포인트 증가..
1. Spring Container란?Spring Container는 스프링 프레임워크의 핵심 구성 요소이다.객체(Bean)의 생성 및 관리객체 간의 의존성 주입(DI)객체의 생명주기 관리설정 및 구성 정보 로딩이러한 기능을 통해 애플리케이션 전반의 객체를 스프링이 대신 관리하므로, 개발자는 비즈니스 로직에 집중할 수 있다.2. Spring Container가 없을 때 발생하는 문제문제점설명직접 객체 생성new로 객체 생성 → 클래스 간 강한 결합 발생수정 어려움구현체 바꾸려면 코드 수정 + 재컴파일싱글톤 보장 어려움객체가 매번 새로 생성되어 상태 공유 안 됨의존성 주입 어려움수동 DI나 Reflection 사용은 번거롭고 에러 유발예시 코드 (Spring 없이 직접 DI) (비권장..)class Ser..
1. Front Controller 패턴이란?정의모든 요청을 단일 진입점(Controller) 으로 받아서, 적절한 처리 로직(Controller, Service, DAO 등)에 분기(dispatch) 하는 아키텍처 패턴주요 역할요청 URI 분석어떤 컨트롤러나 커맨드로 보낼지 결정응답 방식(Forward, Redirect) 결정예외 및 404 처리2. FrontController 아키텍처[Client] ↓ 요청[FrontControllerServlet (Front Controller)] ↓ URI 분기[Command 구현체 (Controller 역할)] ↓[Service → DAO → DB] ↑[View(JSP)] ← Forward/Redirect ← FrontController핵심 구성 ..
forward vs redirect 구분forward redirect처리 주체서버 내부클라이언트 브라우저URL 변경 안 바뀜바뀜요청 횟수1번2번 (요청 → 응답 → 재요청)request 객체공유됨공유 안됨사용 예로그인 처리, 내부 페이지 이동외부 페이지 이동, 새 URL로 유도코드 예시// forwardRequestDispatcher rd = request.getRequestDispatcher("result.jsp");rd.forward(request, response);// redirectresponse.sendRedirect("result.jsp");RequestDispatcher, HttpServletResponse용어설명RequestDispatcher서버 내부에서 요청을 다른 자원(JSP, 서블릿..