목록전체 글 (348)
파게로그
IndexController extends HttpServlet... 이렇게 컨트롤러를 만들 수도 있지만, 그러한 서블릿의 기능은 Spring DispatcherServlet이 가져가도록 분리할 것이다. 이렇게 분리한 후 Controller는 POJO로 생성한다. Front Controller는 모든 URL에 대한 요청을 다 받아야만 한다. 다시 말해서, Front Controller가 매핑해주지 않은 URL은 표시가 되지 않아야 한다. URL mapping을 위해서 기존에는 annotation을 사용했는데, 이제는 소스 코드가 없으므로 annotation을 이용하는 것은 불가능하다. 즉, web.xml을 이용해야 한다. web.xml dispatcher org.springframework.web.ser..
정확히는 Spring Tools 4를 이용하지 않고 Eclipse에서 Java EE perspective를 이용한다. 먼저, Maven Project를 생성한다. JAR(Java Archive)와 WAR(Web Archive)는 둘 다 Java 기반의 어플리케이션 배포 형태이며, Java JAR Tool을 통해 압축된 파일이다. 그러나 WAR는 웹 어플리케이션 설정 정보가 들어있는 web.xml 등을 추가적으로 포함하고 있다. 지금 생성하고 있는 Maven Project 또한 패키징 방식으로 WAR을 선택한다. pom.xml에서 위와 같은 에러가 발생한다. 이는 web.xml이 지정된 경로에 존재하지 않기에 발생한 것이다. Tomcat Root/webapps/ROOT 해당 위치에 존재하는 WEB-INF ..
MVC Pattern MVC는 소프트웨어 디자인 패턴으로서 어떤 프로젝트나 애플리케이션의 구성 요소를 Model, View, Controller로 구분한다. 🎯 Model: data storage, integrity, consistency, queries & mutations 애플리케이션의 데이터를 가진 객체를 뜻한다. 즉 데이터베이스, 초기에 정의하는 상수, 초기화 값, 변수 등을 뜻하거나, 또는 이러한 데이터의 가공을 책임지는 컴포넌트를 뜻한다. DAO(Data Access Object), DTO(Data Transfer Object ~ VO(Value Object))로 구분할 수 있다(velog.io/@emawlrdl/DAO%EC%99%80-DTO) 규칙 ▪ 사용자가 편집하길 원하는 모든 데이터를 ..
Program.java package admin.school.ui; import admin.school.entity.Exam; public class InlineExamConsole implements ExamConsole { private Exam exam; @Override public void print() { System.out.printf("SUM: %d, AVG: %.2f\n", exam.sum(), exam.avg()); throw new IllegalStateException("oops..."); } public void setExam(Exam exam) { this.exam = exam; } } JavaConfig.java package admin.school; import admin.s..
Spring으로 AOP 구현 XML이든 annotation이든, 공통 기능이 가시적이지 않다. 여기서는 먼저 XML을 통해서 AOP를 구현해보자. Program.java는 다음과 같아서 마치 비즈니스 로직만 존재하는 것처럼 보인다. Program.java package spring.aop; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import spring.aop.entity.Exam; public class Program { public static void main(String[] args) { Applicatio..
AOP(Aspect Oriented Programming) 비즈니스 로직 외에 개발자나 관리자가 프로그램 구현이나 테스트 등을 위해 사용하는, 사용자는 인식할 수 없는 코드가 존재한다. 곧, OOP가 사용자 관점에서 이루어진 프로그래밍이라면, AOP는 개발자 또는 운영자 관점 또한 고려하는 것이다. 어플리케이션의 특정 모듈에게 기대하는 행동, 즉 우리가 구현하기를 원하는 기능이 concern이라면 비즈니스 로직과 같은 것은 Primary Concern(Core Concern, 핵심 기능)이며, 여기에 해당하면 객체로, 그리고 실질적인 업무는 메서드로 만들어진다. 하지만 로그 처리, 보안 처리, 트랜잭션 처리 등 메서드의 앞이나 뒤에 포함되는 부분은 Cross-cutting Concern(공통 기능)으로서..
XML Configuration을 Java Configuration으로 변경하기 XML 파일의 내용을 Java 소스코드로 작성한다. 설정을 위한 자바 클래스라는 것을 표시하기 위해서, @Configuration annotation을 추가한다. ▼ @ComponentScan("admin.school.ui") ▼ @ComponentScan({"admin.school.ui", "admin.school.entity"}) 스프링에게 객체 생성을 부탁함 ▼ @Bean public Exam exam() { // 컨테이너에 담겨졌을 때 해당 객체의 이름(파란색 글씨, bean id와 동일) return new MidTermExam(); } 이건 내가 객체를 직접 만드는건데...?라고 생각이 들지만, @Bean anno..
annotation을 활용한 객체 생성 클래스 위에 @Component를 붙이면.. 얘가 객체화된다. base-package에서 component를 스캔하라 객체 생성하게 되면 안쪽도 읽기 때문에 얘는 더이상 필요가 없다 @Component("name") 을 통해서 객체에 이름을 부여할 수 있음 @Component의 종류와 시멘틱 @Component annotation을 이용해 객체를 생성했다면, 초기값을 어떻게 설정할 수 있을까? @Value annotation을 이용한다. @Component public class MidTermExam implements Exam { @Value("20") private int kor; @Value("30") private int eng; /* ... */ } @Co..