목록Spring (34)
코딩항해기

Layered Architecture (계층화 아키텍처)소프트웨어 개발에서 일반적으로 흔히 사용되는 아키텍처의 개념으로 각 구성 요소들의 관심사 분리를 달성하기 위해 책임을 가진 계층으로 분리한 아키텍처이다. 관심사의 분리 (Separation of Concerns)책임(관심사)을 기준으로 다른 책임(관심사)를 분리하는 것 관심사 분리 필요성하나의 계층에 관심사가 여러 개 존재한다면 해당 계층의 응집도가 떨어지고, 결합도가 높아진다.각 계층의 관심사를 기준으로 분리해 계층의 응집도를 높이고 결합도를 낮출 수 있다.응집도가 높아지고 결합도가 낮아지면 재사용성과 유지보수성이 올라간다. 2-Layered Architecture (2-Layered 아키텍처) 일반적으로 프레임워크 기반의 웹 프로젝트를 보면 ..

[Spring] springframework.DispatcherServlet 구조org.springframework.web.servlet.DispatcherServlet DispatcherServlet은 이름에도 쓰여있듯이 Servlet 파일이다. Spring에서는 페이지 이동 구분을 ViewResolver가 해주기 때문에 ViewResolver에 대한 의존성을 가지고 있으minibcake.tistory.com 기존에 DispatcherServlet을 사용하기 위해 xml로 의존성을 주입했다. 밸류 값--> login boardWrite ..

org.springframework.web.servlet.view.InternalResourceViewResolver DispatcherServlet이 의존성을 가지고 있는 두 가지 객체 중 하나인 ViewResolver는 포워드랑 리다이렉트에 따라 path를 완성해준다. ViewResolver는 DispatcherServlet xml에 태그로 정의할 수 있다. 이 구조를 풀어보면 이러한 형태가 된다.package com.koreait.app.view.controller;public class ViewResolver { private String prefic; private String suffix; //단어의 앞 뒤에 S..

Spring Boot에서 지원하는 내장 서버 말고 로컬 서버를 추가하는 방법이다.JSP 기반 웹프로젝트를 진행할 때(eclipse에서 Servers) 사용한 아파치톰캣이다. 먼저 상단의 Run/Debug Configuration에 있는 Edit Configurations를 연다. Edit Configuration에서 +를 눌러 서버를 추가할 수 있다. 그 중 이번에 연결할 톰캣 local를 고른다. Configure...를 눌러 서버 폴더를 연결해주면 되며, 포트 번호는 HTTP port에서 설정할 수있다.Name은 자유롭게 설정할 수 있지만 Application server이름과 동일하게 하는 것을 권장하고 있다. 이 때 VM options에 -Dfile.encoding=UTF-8 를 작성하면 한글..

org.springframework.web.servlet.DispatcherServlet DispatcherServlet은 이름에도 쓰여있듯이 Servlet 파일이다. Spring에서는 페이지 이동 구분을 ViewResolver가 해주기 때문에 ViewResolver에 대한 의존성을 가지고 있으며, 객체관리를 위해 HandlerMapping을 사용하기 때문에 HandlerMapping에 대한 의존성도 가지고 있다. 그 외의 형태는 JSP기반 FrontController와 유사한 형태를 가지고 있다. 1. 사용자의 요청을 추출2. 요청에 해당하는 기능을 수행 (HandlerMapping사용)3. 응답 (ViewResolver사용) Servlet으로 구조를 보면 이러한 형태를 가지고 있다고 볼 수 있다.@W..

org.springframework.web.servlet.mvc.Controller 구조분석 JSP 기반 프로젝트에서 oooAction으로 사용자의 요청을 처리했던 것처럼 Spring에서도 oooController가 사용자의 요청을 처리한다. oooController는 스프링 프레임워크에서 제공하는 Controller를 구현한다. Controller를 구현하는 이유는 메서드 시그니처, 즉 선언부를 통일해 HandlerMapping을 사용할 수 있도록 하기 때문이다. 다 각기 다른 메서드 시그니처를 사용하면 한 번에 사용할 수도 없고, 다른 객체이기 때문에 업캐스팅 할 수도 없다. //메서드 오버라이딩 강제 == 메서드 시그니처 (선언부) 강제public interface Controller { //Act..

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping DispatcherServlet이 의존성을 가지고 있는 두 가지 객체 중 하나인 HandlerMapping은 팩토리 패턴을 지킬 수 있도록 new를 줄여주고 호출 시 해당 객체를 반환해주는 역할을 한다. DispatcherServlet xml에 태그로 정의할 수 있는데, 이러한 구조를 가진다. 밸류 값--> login main 이 구조를 java Class로 풀어보면 JSP 기반 프로젝트에서 사용했..

Spring 생태계 스프링이란 하나의 기술이 아닌 여러가지 스프링 프로젝트들의 모음이다. 스프링에는 다양한 프로젝트가 있다. 이 모든 스프링 프로젝트는 스프링 프레임워크를 기반으로 동작한다. 이 때 생태계가 확장됨에 따라 사용에 어려움이 생겼다. 이 때 문제를 도와주기 위해 등장한 서브 프로젝트가 스프링 부트이다. Spring Framwork스프링 프레임워크를 사용하면 자바 기반의 어플리케이션을 만들 수 있고, 개발자들은 비즈니스 로직에 집중할 수 있는 장점이 있다. 스프링 이전에는 EJB라는 프레임워크가 있었다. EJB는 2000년대 초반 등장했고 비즈니스 로직과 앤터프라이즈 기술의 분리를 통해 편리한 애플리케이션을 개발하고자하는 목적을 가지고 있었다. 그러나 EJB는 가격이 높았고 비즈니스 로직보다..

지난번에 의존성 주입 어노테이션 중 Component에 대해 정리했다.컨테이너가 관리하는 객체라는 것을 알려주는 가장 기본적인 어노테이션이기 때문에, 전부 Component를 사용할 수도 있다. 그러나 용도에 따라 별도의 어노테이션으로 구분짓는 것이 명시적으로 나타내기 좋기 때문에 구분해서 사용한다.즉, 세 어노테이션 모두 Component의 역할(컴포넌트 스캔 가능/컨테이너 Bean 등록)을 수행한다. @Repository Persistence/Data Access LayerRepository는 DB에 접근하는 코드라는 의미로 일반적으로 DAO에 많이 사용된다. 실무에서는 DAO라는 표현을 잘 적어두지 않기 때문에 Repository 어노테이션으로 이 객체가 DAO라는 것을 알 수 있다. @Servi..

[Spring] xml Bean을 통한 의존성 주입 (CI, SI)의존성 주입 DI (Dependency Injection)Spring 컨테이너에서 객체 Bean을 먼저 생성해두고 생성한 객체를 지정한 객체에 주입하는 방식을 의존성 주입이라고 한다.기존에는 new를 사용해 개발자가 직접 관minibcake.tistory.com xml 방식의 단점전통적인 Spring에서는 xml방식을 주로 사용했으나, 객체가 무수히 많아지면 전부 xml에 작성해야하므로 양이 방대해지고, 오탈자가 있을 경우 ctrl F를 통해 원하는 객체를 찾는 것도 어려워진다. 이러한 과도한 설정 문제를 개선하기 위해 어노테이션을 활용한 설정을 개발했다.(복잡성, 유효성 검사의 어려움, 타입 안정성 부재, 추가 작업 필요 등의 단점을 ..