본문 바로가기
  • 실행력이 모든걸 결정한다
반응형

Spring Series97

[Spring] XML 설정 방식을 Annotation으로 바꾸기 1. 자바 코드에 의한 설정이 편리한 점 - 컴파일러나 IDE를 통한 타입 검증이 가능 - IDE의 자동완성 기능의 이용 가능 - 이해의 편리함 - 복잡한 bean 설정이나 초기화 작업을 쉽게 적용 가능 2. 컨텍스트 설정 변경 - 처음부터 프로젝트를 Spring Boot로 만들었을 경우에는 해당 과정을 생략할 수 있다. - web.xml에서 루트 컨텍스트와 서블릿 컨텍스트의 contextClass 파라미터 값을 모두 AnnotationConfigWebApplicationContext으로 설정하고, contextLocations 파라미터 값을 설정 클래스 또는 스캔 대상 패키지로 설정하면 된다. contextClass org.springframework.web.context.support.Annotati.. 2022. 5. 6.
[Spring] 리소스 추상화 1. 리소스 추상화란? 외부 파일을 가져오는 방법은 다양하다. 예를 들어, 개발 시스템의 특정 폴더에 있는 파일, HTTP 또는 FTP 프로토콜로 접근할 수 있는 웹상의 파일, Classpath에 있는 파일 등이 있다. 이렇게 리소스가 저장되는 방식은 다양한데, 다른 방식으로 저장되어 있는 리소스 파일을 가져올 때마다 자바 소스코드를 바꾸는 것은 좋지 않다. 그래서 스프링은 리소스 추상화를 위해 Resource라는 추상화 인터페이스를 정의한다. public interface Resource extends InputStreamSource { boolean exists(); boolean isOpen(); URL getURL() throws IOException; File getFile() throws IO.. 2022. 5. 1.
[Spring] Static 멤버 클래스를 Bean으로 등록하기 보통 특정 테스트 클래스에서만 사용되는 클래스를 static 멤버 클래스로 만들곤 한다. Static 멤버 클래스를 Bean으로 등록하는 방법은 약간 특이하다. 내부 staitc 클래스를 감싸는 클래스를 외부 클래스라고 한다면, 아래 예시와 같이 $ 기호를 외부 클래스의 뒤에 붙이고 그 뒤에 static 멤버 클래스를 작성하면 된다. 2022. 4. 14.
[Spring] 여러 AOP 및 트랜잭션 기법들 1. AOP란? Aspect Oriented Programming - 애플리케이션에 흩어져 있는 부가적인 공통 기능들을 독립적으로 모듈화하는 프로그래밍 모델이다. Aspect는 핵심기능에 부가되는 모듈을 의미한다. - 핵심 기능과 공통 기능을 분리 시켜놓고, 핵심 기능들 중에서 공통 기능을 필요로 하는 것이 있을 때 사용된다. 핵심 기능은 프로그램의 특정 목적에 대해 사용되는 기능이고, 공통 기능은 일반 연산처럼 다양한 프로그램들에서 공통적으로 사용되는 기능이다. 2. 비즈니스 로직과 트랜잭션의 분리 1) 원리 - 비즈니스 로직과 트랜잭션 코드를 분리할 때, 동일한 인터페이스를 상속하는 트랜잭션용 구현체를 만들면 된다. - 아래 코드처럼 UserServiceTx의 트랜잭션 메소드 안에서 UserServi.. 2022. 4. 1.
[Spring] 트랜잭션 추상화 트랜잭션의 기본 개념을 설명한 포스팅을 첨부했으니 필요하다면 참고하길 바란다. https://kimcoder.tistory.com/242 [Spring] JDBC 트랜잭션 1. 개념 트랜잭션의 개념을 이해하기 전에 COMMIT과 ROLLBACK이 무엇인지 알 필요가 있다. COMMIT : 변경된 내용을 모두 영구적으로 저장하는 명령어 ROLLBACK : 문제가 발생 했을 때, 이전에 COMMIT 했던 시 kimcoder.tistory.com 1. 트랜잭션 추상화란? - 트랜잭션 추상화는 JDBC, JTA, Hibernate, JPA 등과 같이 트랜잭션의 개념을 갖는 여러 기술들에 독립적인 구조를 가지게 하기 위한 방법이다. 즉, 트랜잭션 기술의 공통점을 담은 것이다. - 아래 그림처럼 트랜잭션 기술마다 .. 2022. 3. 27.
[Spring] 예외처리 전략 1. 일반적인 예외 처리 방법 1) 예외 복구 - 예외 상황에 대한 문제를 해결해서 정상적인 작업 흐름으로 돌아오게 하는 방법이다. - 사용자에게 다른 접근 방법을 안내하거나, 정해진 횟수만큼 작업을 재시도하도록 처리하는 경우가 대표적인 사례다. 2) 예외 회피 - 예외처리를 자신이 담당하지 않고 throws 또는 throw문을 통해 자신을 호출한 쪽으로 던져버리는 방법이다. - 예외 회피를 너무 남발하면 예외의 위치와 종류를 찾기 힘들어질 수 있다. - 예외 회피를 사용할 때는 자신을 호출한 쪽에서 예외를 다루는 것이 최선의 방법이라는 확신이 있어야 한다. public void task() throws SQLException { try { ... } catch(SQLException e) { // 로그.. 2022. 3. 20.
[Spring] Template/Callback 패턴 템플릿/콜백 방식은 전략 패턴과 DI의 장점을 익명 내부 클래스 방식과 결합하는 방법을 사용한다. 1. Template - 어떤 목적을 위해 미리 만들어둔 틀을 말하며, 이 고정된 틀 안에 바꿀 수 있는 부분을 넣어서 효율적으로 사용된다. - 고정된 작업 흐름을 가진 코드를 재사용할 때 유용하게 쓰인다. - Template/Callback 패턴에서 Callback 오브젝트를 받는 곳이다. 2. Callback - 다른 오브젝트에서 실행되는 것을 목적으로 다른 오브젝트의 메소드에 전달하는 오브젝트로, 주로 파라미터를 통해 전달된다. - 다른 오브젝트에서 콜백 오브젝트의 값을 참조하기보다는, 콜백 오브젝트의 메소드를 실행시키기 위한 목적으로 사용된다. - 일반적으로 하나의 메소드를 가진 인터페이스를 구현한 .. 2022. 3. 19.
[Spring] 테스트 코드의 작성 1. 테스트 소개 - 테스트는 자신이 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인하는 것이다. - Spring은 편리하고 빠른 테스트에 큰 가치를 두고 있다. - 구현한 기능을 직접 동작시키는 방법으로 테스트를 한다면 반드시 필요한 모든 기능들이 구현이 되어 있어야 하는데, 작은 단위의 테스트를 진행해주면 에러가 났을 때의 위치도 파악하기 쉬워지고, 에러는 없지만 기능이 제대로 동작하지 않는 경우에도 문제의 원인을 찾기가 수월해진다. - 실제 개발 소스코드와 테스트 소스코드를 구조적으로 분리하면 개발에도 큰 도움이 될 것이고, 코드를 작성하면서 머릿속에서 이루어졌던 테스트들을 테스트 코드로 구현하여 로직 작성에 더욱 집중할 수 있게 된다. - 다양한 조건에 따른 테스트가 가능하기 때문에 오류를.. 2022. 3. 10.
[Spring] @Value가 null을 가져오는 문제 @Value가 property값을 받아오지 못했다면 아래 4가지 사항을 검토해보기를 바란다. 1) 프로퍼티 이름의 스펠링이 틀렸을 경우 2) 오브젝트가 스프링에서 관리되도록 하지 않은 경우 클래스 위에 @Service, @Component와 같이 Bean으로 등록하지 않았다면 Spring의 DI를 활용할 수 없다. DI를 활용하기 위해서는 호출하는 쪽에서도 스프링에서 빈으로 관리가 되어야 한다는 점은 잊지 말도록 하자. 3) static 변수로 받는 경우 @Value값을 static 변수로 직접 받을 수는 없다. 꼭 static 변수로 저장해야 한다면, @Value값을 setter 메소드의 파라미터로 받아서 static 변수에 저장하면 된다. 4) 외부에서 이 클래스를 new로 생성했을 경우 이 클래스에.. 2022. 3. 6.