본문 바로가기

Archived(Programming)

(74)
예외처리 # Spring 예외처리 개요 서버에서 발생된 예외를 최종 사용자에게 전달되는 것을 방지 DAO와 Service에서 발생된 예외는 Controller로 모여짐 System 예외는 Business 예외로 다시 던지는(re-throwing) 방식 사용 @ExceptionHadnler와 @ControllerAdvice를 사용하여 예외를 처리 # Spring 예외처리 특징 1) 컨트롤러 기반 부가기능을 제공하는 Advice 클래스를 작성함 XML 설정 파일에 를 이용해서 Aspect를 설정함(=어드바이스와 포인트 컷 설정) 2) 글로벌 Exception 핸들러 예외처리는 cross-cutting concern, 어플리케이션 전체에 포인트컷이 적용되어야 함 @ControllerAdvice 어노테이션을 포함한 클래..
트랜잭션과 로깅 # 스프링 트랜잭션 선언적 트랜잭션 - 스프링은 선언적 트랜잭션 방식을 사용 어노테이션을 이용한 선언적 방식 AOP를 이용한 선언적 방식 프로그래머틱한 방식(권장되지 않음) 스프링에서 트랜잭션 처리 모범 사례 선언적 방식에 의한 트랜잭션 처리 트랜잭션은 주로 서비스 메서드를 대상으로 함 # 어노테이션에 의한 트랜잭션 @root-context.xml 에 Transaction Manager를 설정 설정 트랜잭션이 필요한 클래스나 메소드에 @Transactional 어노테이션 추가 주로 서비스 클래스의 메소드에 적용 # AOP를 이용한 트랜잭션 트랜잭션 매니저 설정 트랜잭션 어드바이스 설정 AOP 설정 # SLF4J와 Logback을 이용한 로그 남기기 Java 진영에는 많은 로깅툴이 존재(commons-lo..
PointCut 표현식과 Advisor 구현 # PountCut 표현식 문법 AspectJ 포인트컷 표현식은 포인트컷 지시자를 이용하여 작성함 대표적으로 execution() 지시자를 사용해 표현 ex) execution(* hello(..)) hello라는 이름을 가진 메소드를 선정(..은 파라미터는 모든 종류를 허용) ex) execution(* hello()) hello 메서드 중 파라미터가 없는 것만 허용 ex) execution( * myspring.user.service.UserServiceImpl.*(..)) myspring.user.service.UserServiceImpl 클래스를 직접 지정하여 해당 클래스의 모든 메서드 지정 ex) execution( * myspring.user.service.*.*(..)) myspring.us..
AOP(Aspect Oriented Programming) # AOP 업무 로직을 포함하는 기능을 핵심기능(Core conecrens) 핵심기능을 도와주는 부가적인 기능(로깅, 보안 등)을 부가 기능(Cross-cutting Concerns)이라고 부른다. 객체 지향의 기본 원칙을 적용하여도 핵심기능에서 부가기능을 분리해서 모듈화하는 것은 매우 어렵다. 핵심기능과 부가기능을 별도로 관리하여 런타임 시에 처리할 수 있도록 지원하는 것이 AOP AOP는 애플리케이션에서 관심사의 분리(기능의 분리) 핵심적인 기능에서 부가적인 기능을 분리 분리한 부가기능을 Aspect라는 독특한 모듈 형태로 만들어서 설계하고 개발하는 방법 OOP를 적용하여도 핵심 기능에서 부가기능을 쉽게 분리된 모듈로 작성하기 어려운 문제점을 AOP가 해결 AOP는 부가기능을 애스펙트(Aspect)로..
Dynamic SQL # Dynamic SQL 검색 조건에 따라 검색해야 하는 SQL문이 달라지기 때문에 이를 처리하기 위해서 동적 SQL이 사용됨 MyBatis 표현식 if, trim(where, set), choose(when, otherwise), foreach 동적 SQL 작성 시 유의사항 Mybatis 구문을 이용하여 SQL문이 실행 시에 변경되기 때문에 모든 케이스에 대해 테스트가 이루어져야 함 동적 SQL문이 없는 상태에서 정상적인 실행 확인 후에 동적 SQL을 추가해서 개발 # 예시 if를 활용한 동적 구문 if를 통해 쿼리문에 조건을 걸 수 있다. 파라미터 타입 안에 다른 타입(클래스)가 포함되어 캡슐화를 이용할 경우 .(연산자)를 통해 접근 가능 SELECT * FROM BLOG WHERE state='AC..
Mapper XML 파일 # Mybatis Mapper XML 파일 SQL 문을 저장하는 존재를 매핑파일이라고 함 JDBC 코드에 비하면 코드가 95% 감소 Mybatis는 SQL 작성에 집중할 수 있도록 만들어짐 # XML Mapper 작성 DAO 클래스가 작성되면 이를 사용하는 SQL문 작성이 필요 XML로 작성된 Mapper의 위치 결정 XML Mapper 파일을 작성하고 필요한 DTD 추가(템플릿 팡리 사용) SQL 작성 # Select Mybatis에서 가장 많이 사용하는 엘레멘트 어플리케이션은 데이털르 수정하는 기능보다 데이터 조회를 주로 함 Mybatis는 데이터 조회하는 기능에 집중함 SELECT * FROM PERSON WHERE ID = #{id} 위 쿼리 이름은 selectPerson 파라미터는 int이고 결..
Spring Mybatis # MyBatis의 개요 Mybatis는 자바 오브젝트와 SQL 문 사이의 자동 Mapping 기능을 지원하는 Object Mapper이다. MyBatis는 SQL을 별도의 파일로 분리해서 관리하게 해주며, 객체-SQL 사이의 파라미터 mapping 작업을 자동으로 해주기 때문에 많은 인기를 얻고 있는 기술이다. Mybatis는 Hibernate나 JPA(Java Persistence API) 처럼 새로운 DB 프로그래밍 패러다임을 익혀야하는 부담이 없이 개발자가 익숙한 SQL을 그대로 이용하면서 JDBC 코드 작성의 불편함도 제거해주고, 도메인 객체나 VO 객체를 중심으로 개발이 가능하다는 장점이 있다. # Mybatis의 특징 1) 쉬운 접근성과 코드의 간결함 가장 간단한 퍼시스턴스 프레임워크 XML..
Context 분리와 전략 # Servlet Context DispatcherServlet - 웹의 요청을 최초로 접수(프론트 컨트롤러) DispatcherServlet - 설정파일을 이용해서 ServletContext(스프링 컨테이너) 로딩 Spring MVC와 관련있는 빈을 설정 # Root Context Spring MVC와 분리되어 빈을 관리하고 싶을 때 사용 일반적으로 Servlet Context와 Root Context 로 분리하여 운용 # Root Application Context 전체 계층 구조에서 최상단에 위치한 컨텍스트 서로 다른 서블릿 컨텍스트에서 공유해야 하는 Bean들을 등록해놓고 사용 웹 어플리케이션 전체에 적용가능한 DB 연결, 로깅 기능 등에 이용 Servlet Context에 등록된 Bean 이용 ..