CS/Spring 14

Front Controller & DispatcherServlet

⚠️ MVC 패턴의 한계단점forward 중복View로 이동하는 코드가 항상 중복 호출되어야 한다. ViewPath에 중복공통 처리가 어렵다. 이 문제를 해결하려면 Controller 호출 전에 먼저 공통 기능을 처리해야 한다. 그것이 바로 프론트 컨트롤러 패턴이다. Front Controller Pattern 특징프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음프론트 컨트롤러가 요청에 맞게 컨트롤러를 찾아서 호출입구 하나 → 공통 처리가 가능프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨스프링 웹 MVC와 Front Controller스프링 웹 MVC의 핵심 = Front ControllerDispatcherServlet이 Front Controller 패턴으로 구현되어 있..

CS/Spring 2025.05.26

Spring vs Spring Boot

Spring은 자바 기반 엔터프라이즈 애플리케이션 개발을 위한 범용 프레임워크로,개발자가 직접 설정(빈 등록, 의존성 주입 등)을 수행해야 한다. 반면 Spring Boot는 Spring의 복잡한 설정을 자동화하고 실행을 간편화한 생산성 중심의 확장 프레임워크이다. 주요 특징으로는 자동 설정 (Auto Configuration)의존성 스타터 (Spring Boot Starters)내장 웹 서버 (Tomcat 등)실행 가능한 JAR 파일 생성 등 이 있으며Spring Boot는 빠른 개발과 배포에 적합하다. Spring은 더 세밀한 세어와 설정이 필요한 경우에 적합하다.

CS/Spring 2025.05.26

좋은 객체 지향 설계의 5가지 원칙 (SOLID)

SRP, 단일 책임 원칙 (Single Responsibility Principle)한 클래스는 단 하나의 변경 이유만 가져야 한다. 예시ReportPrinter 클래스가 보고서 생성 + 출력까지 다 하면 SRP 위반생성은 ReportGenerator, 출력은 ReportPrinter로 분리 OCP, 개방-폐쇄 원칙 (Open/Closed Principle)확장에는 열려있고, 변경에는 닫혀 있어야 한다. 기존 코드를 건드리지 않고, 기능을 확장할 수 있어야 한다. 이를 위해 다형성과 추상화(인터페이스)를 활용 예시다형성을 사용했더라도 client 코드에서 직접 구현체를 생성한다면 OCP 위반해결 방법 : 스프링의 DI로 객체 조립 책임을 외부로 분리 LSP, 리스코프 치환 원칙 (Liskov subs..

CS/Spring 2025.05.26

@Autowired

💡@Autowired 란? 스프링 프레임워크에서 제공하는 의존성 주입(DI) 기능 중 하나이다. 스프링 컨테이너가 자동으로 해당 빈(Bean)을 찾아서 주입한다. 즉, 스프링은 @Autowired를 사용하여 의존성을 갖는 객체를 찾아서 해당 객체를 자동으로 생성하고 주입해준다. 👉🏻 @Autowired 주입 방법 1️⃣ 생성자 주입 (Constructor Injection)public class UserService { private final UserRepository userRepository; @Autowired // 생성자가 1개면 생략 가능 public UserService(UserRepository userRepository) { this.userRep..

CS/Spring 2025.05.26

Filter vs Interceptor

🟥 FilterFilter란 Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대한 부가작업을 처리할 수 있는 기능을 제공한다. Dispatcher Servlet은 스프링의 가장 앞단에 존재하는 Front Controller이므로 필터는 스프링 범위 밖에서 처리가 되는 것이다. 즉, 필터는 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리된다. Filter 메소드 1️⃣ init 메소드필터 객체를 초기화하고 서비스에 추가하기 위한 메소드이다. 웹 컨테이너가 1회 init 메소드를 호출하여 필터 객체를 초기화하면 이후의 요청들은 doFilter를 통해 처리된다. public default void init(FilterConfig filterConfi..

CS/Spring 2025.05.22

Spring Bean Scope

🫘 Spring BeanSpring IoC 컨테이너(Application Context)가 생성하고 관리하는 객체를 말한다. 즉, 개발자가 직접 new로 생성하는 객체가 아니라, 스프링이 대신 생성하고 주입해주는 객체다. 🔹 언제 Bean이 되는가? 클래스를 아래와 같은 방식으로 스프링에 등록하면 Bean이 된다. @Component 또는 그 파생 어노테이션 사용ex. @Controller, @Service, @Repository@Configuration 클래의 안의 @Bean 메서드에서 등록Java 코드 기반 수동 등록 방식XML 설정 파일에서 태그로 등록 (과거 방식)🔹 Bean 특징기존적으로 Bean은 Singleton으로 관리된다. (요청마다 같은 인스턴스 반환)필요한 Bean을 자동으..

CS/Spring 2025.05.12

POJO,PSA,AOP

📖 POJO의 등장스프링이 탄생하기 전에 자바 엔터프라이즈 시장은 EJB(Enterprise Java Bean)가 독점하고 있었다. 변수, 예외처리, 상속까지 EJB에 의존하는 문제점이 존재했다. EJB같이 복잡하고 제한적인 기술보다 자바의 단순 오프젝트를 이용해 비즈니스 로직을 구현하는 것이 낫다는 생각 아래 POJO가 등장하게 되었다. POJO(Plain Old Java Object)는 간단한 오래된 자바 오브젝트를 뜻한다. 즉, 다른 환경에 종속되지 않고 필요에 따라 재사용이 가능한 자바 오브젝트를 뜻한다. 또한 POJO를 지키기 위해 PSA, IoC, AOP 의 개념이 Spring에 추가되었다. 🔹PSA (Portable Service Abstraction)PSA는 Spring Framew..

CS/Spring 2025.05.12

ApplicationContext, BeanFactory

📖 설명BeanFactory와 ApplicationContext는 둘 다 스프링 컨테이너이다. 🫘 BeanFactory기본 IoC 컨테이너스프링 컨테이너의 최상위 인터페이스스프링 빈을 관리하고 조회하는 역할을 담당getBean()을 제공📺ApplicationContextIoC + DI + 부가기능을 제공하는 확장형 컨테이너BeanFactory 기능을 모두 상속 받아서 제공❓BeanFactory를 직접 사용하지 않는 이유애플리케이션을 개발할 때는 빈을 관리하고 조회하는 기능은 물론이고, 수 많은 부가기능이 필요하다. Spring의 기본 IoC(Inversion of Control) 컨테이너는 BeanFactory이지만 고급 기능을 지원하지 않기 때문에 Spring에서는 이를 확장한 Applicati..

CS/Spring 2025.05.08

MVC 패턴

👉🏻 MVC 패턴 등장 이유Servlet은 동적인 HTML을 만드는 일이 불가능하고 매우 복잡하며 비효율적이다. 템플릿 엔진이 나온 이유이기도 하다. (템플릿 엔진 : JSP, Thymeleaf 등) JSP는 비즈니스 로직 영역과 뷰 영역이 함께 존재하여 모두 JSP에 노출되어 너무 많은 역할을 한다. 이렇듯, Servlet과 JSP는 비즈니스 로직과 뷰 렌더링 과정까지 모두 처리하기 때문에 유지보수가 어렵다. 그래서 MVC 패턴이 등장했다. JSP- Java Server Pages의 약자로 HTML+Java 형태의 서버 사이드 템플릿 엔진이다. - 뷰를 생성하는 HTML 작업과 중간중간 동적으로 변경이 필요한 부분만 자바 코드를 작성한다.- JSP 페이지(파일) 자체가 자바 클래스이다. (앱 실..

CS/Spring 2025.05.02

HttpServletResponse

HttpServletResponse 역할HTTP 응답 메시지 생성HTTP 응답 코드 지정헤더 생성바디 생성편의 기능 제공Content-TypeCookieRedirectHeader 관련1. 헤더 정보@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")public class ResponseHeaderServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //응답 코드 set..

CS/Spring 2025.05.02