목록스프링 (9)
삶 가운데 남긴 기록 AACII.TISTORY.COM
Spring MVC 프로젝트 구조 설명 src/main/java/ : 자바 소스 경로 src/main/resources/ : 실행시 자동 참고되는 경로(주로 설정파일, log4j.xml 등등) src/test/java/ : 테스트 자바 코드 경로 src/test/resources/ : 테스트 관련 설정 파일 경로 src/webapp/WEB-INF/spring/appServlet/ : sevlet-context.xml 외 spring 설정 파일 src/webapp/WEB-INF/spring/ : root-context.xml 외 spring 설정 파일 src/webapp/WEB-INF/views/ : MVC 패턴 중 view 페이지(jsp) 들이 위치 한 경로 src/webapp/WEB-INF/ : tom..
관점 지향(Aspect Oriented Programming) 로깅 보안/인증 트랜잭션 리소스 풀링 에러 검사 / 처리 정책 멀티 스레드 안전 관리 데이터 영속처리 위 항목들은 소프트웨어 개발 시 발생하는 공통적인 문제들입니다. 핵심 관심(core concern)은 업무 로직을 말합니다. 횡단 관심(cross-cutting concern)은 위에서 언급한 로깅이나 보안등 공통 시스템 로직을 말합니다. 이처럼 업무 기능과 시스템 기능간에 결합성을 제거하도록 분리하여 작성하는 방법을 관점 지향이라고 합니다. 관점 지향 용어 advice : 관점이 언제, 무엇을 하는지를 정의 joinpoint : 관점이 실행될 수 있는 위치들 pointcut : joinpoint 중에서 advice 하는 위치(어디서) asp..
Spring bean을 XML로 관리 할 수 있지만, bean객체가 많아지면 XML 설정도 많아져 불편해집니다. 그래서 나온 방법이 auto wiring(bean 연결) 과 annotation wiring(bean 연결) 입니다. annotation wiring 어노테이션 와이어링을 사용하기 위해서는 context를 관리하는 XML 설정 파일에 context 네임스페이스를 추가해야 합니다. 이렇게 패키지 이름을 component-scan 으로 지정해주면 Spring이 자동으로 bean을 스캔해서 발견해줍니다. @Autowired Spring의 기본 의존성 주입을 위한 어노테이션입니다. 필드, 생성자, setter 메서드에 사용할 수 있습니다. 타입 와이어링을 시도 한 후 실패하면 이름 와이어링으로 후보 ..
의존성 주입(Dependency Injection) 의존성 주입은 디자인 패턴으로 제어의 역전(Inversion of Control)을 구현하기 위한 방법중의 하나입니다. 객체를 직접 생성하는 것이 아닌 외부에서 생성하여 주입 받는 방법을 말합니다. 클래스들은 서로 연결되어 있어서 의존성(dependency)이 강합니다. 그래서 인터페이스를 통해 클래스 사이의 직접적인 의존성을 제거해서 서로 느슨하게 결합하도록 유도하는 것입니다. 그래서 요구사항이 변경되어 클래스를 수정하게 될 때 의존하고 있던 클래스에 영향을 끼치지 않으면서 클래스를 수정할 수 있게 해주는 것입니다. IoC 컨테이너는 시스템의 모든 인스턴스 객체를 관리하고 인스턴스 객체들 사이의 의존성이 있으면 주입하는 일을 담당합니다. 일반적인 자바..
Spring bean 스프링 프레임워크가 관리하는 클래스들의 인스턴스 객체들을 Spring bean 이라고 합니다. Spring bean 설정 방법 XML로 설정 할 때에는 아래 처럼 설정합니다. 어노테이션을 이용해서 설정할 때에는 아래처럼 클래스 위에 @Configuration 어노테이션을 설정하고, 메서드 위에는 @Bean 어노테이션을 설정해 줍니다. 패키지 경로는 net.aacii.app 으로 가정합니다. import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import net.aacii.app.service.SampleService; import ne..
서비스(비즈니스 로직) 서비스 레이어는 controller와 persistence 사이에서 비즈니스 로직을 수행하는 역할입니다. service 패키지를 만들어 아래 예제를 작성합니다. package ds.co.kr.todo.service; import org.springframework.stereotype.Service; @Service public class TodoService { public String testService() { return "Test Service"; } } @Service 어노테이션은 비즈니스 로직을 수행하는 컴포넌트이며 서비스 레이어임을 알려주는 어노테이션입니다. 스테레오 타입 어노테이션으로 내부에 @Component를 포함하고 있습니다. @RestController 에도 ..
REST 제약 조건 Client - Server 구조를 따릅니다. stateless 클라이언트가 서버에 요청을 보낼 때 이전 요청의 영향을 받지 않습니다. 그래서 요청을 보낼 때 로그인(인증) 정보를 항상 함께 보내야 합니다. http는 기본적으로 staeless 구조입니다. Cacheable 캐시가 가능한지 명시할 수 있어야 합니다. http는 헤더에 cache-control 에서 캐시 여부를 명시할 수 있습니다. Uniform Interface 리소스를 URI를 통한 인터페이스로 관리합니다. Layered System 인증서버, 캐싱 서버, 로드 밸런서 등 여러 레이어로 된 서버들을 거치지만 클라이언트는 서버 사이의 레이어의 존재 유무를 알지 못합니다. Code on demand 클라이언트는 서버에 ..
Gradle 빌드 도구 빌드 도구는 컴파일, 라이브러리 다운로드, 패키징, 테스팅 등을 자동화 해주는 도구를 말합니다. 프로젝트가 커지면 라이브러리가 많아지므로 전체를 빌드하기에는 비효율 적이므로 빌드를 나눠서 해야합니다. gradle은 이런 컴파일, 빌드, 유닛 테스트 등을 코드(그루비 언어)로 관리해줍니다. build.gradle plugins { id 'org.springframework.boot' version '2.6.12-SNAPSHOT' id 'io.spring.dependency-management' version '1.0.13.RELEASE' id 'java' } group = 'ds.co.kr' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1..
스프링 부트(Spring boot) 기존 스프링 프레임워크는 세팅이 매우 복잡하기 때문에 세팅을 자동으로 해주는 스프링 부트가 등장했습니다. 스프링 부트 덕분에 Stand-alone 어플리케이션을 쉽게 구동가능해졌습니다. 기존에는 자바 웹 어플리케이션을 WAR 파일로 압축해서 WAS에 배포했었고 다수의 WAR 파일을 동시 구동할 수 있어서 stand-alone이 아닙니다. 스프링 부트는 내장된 임베디드 WAS(tomcat, jetty 등)로 구동하게 됩니다. IDE 는 전자정부프레임워크 4.0 이상이나 STS 에서 스프링 부트를 지원합니다. DispatcherServlet 기존 웹 어플리케이션 개발은 HttpServlet을 상속하는 클래스를 만들고 doGet()이나 doPost()메서드를 구현하고 Htt..