애플리케이션 컨텍스트 (Application Context)스프링 애플리케이션에서는 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당제어의 역전 (Inversion of Control): 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고있음을 의미스프링 컨테이너를 IoC 컨테이너라고도 함애플리케이션 컨텍스트는 그 자체로 IoC와 DI를 위한 빈팩토리이면서 그 이상의 기능을 가졌음ApplicationContext와 BeanFactory의 관계둘 다 스프링에서 제공하는 인터페이스.ApplicationContext는 BeanFactory 인터페이스를 상속받음public interface ApplicationContext extends ListableBeanF..
“자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크” 애플리케이션 프레임워크특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션 전 영역을 포괄하는 범용적인 프레임워크스프링은 자연스럽게 애플리케이션의 전 영역을 지원하는 종합적인 애플리케이션 프레임워크가 되었음경량급불필요하게 무겁지 않다는 의미과거 EJB 시절 무거운 WAS 서버가 필요했던 것과 달리, 스프링은 가장 단순한 서버환경인 Tomcat, Jetty 등에서도 완벽하게 동작함. 그만큼 개발 과정도 단순해짐자바 엔터프라이즈 개발을 편하게엔터프라이즈 개발의 복잡함을 제거해내고 진정으로 개발을 편하게 해주는 해결책을 제시개발자가 복잡하고 실수하기 쉬운 로우레벨 기술에 많은 신경을 쓰지 않으면서 비즈니스 로직을 빠르게 ..
스프링은 트랜잭션, 메일 전송, OXM 등 다양한 서비스 추상화 기능을 제공한다.분야추상화 인터페이스설명대표 구현체트랜잭션PlatformTransactionManager선언적/프로그래밍 방식 트랜잭션 관리DataSourceTransactionManager, JpaTransactionManager, ChainedTransactionManager 등메일 전송MailSender (JavaMailSender)이메일 전송 기능 추상화JavaMailSenderImplOXM (XML 매핑)Marshaller, Unmarshaller객체 ↔ XML 변환Jaxb2Marshaller, CastorMarshaller, XStreamMarshaller, XmlBeansMarshaller데이터 액세스DataSource, Jdb..
AOP란 무엇인가?애스펙트(Aspect)전통적인 객체지향 설계만으로는 트랜잭션 경계 설정과 같은 부가기능을 독립적으로 모듈화하기 어렵습니다.이런 부가기능을 모듈화하는 작업은 기존 객체지향 패러다임과 구분되는 새로운 특성을 가집니다.애스펙트는 **어드바이스(Advice)**와 **포인트컷(Pointcut)**을 함께 포함합니다.어드바이저(Advisor) = 어드바이스 + 포인트컷핵심 기능과 부가기능을 분리하여 **애스펙트(Aspect)**라는 독립된 모듈로 설계하고 개발하는 방식을애스펙트 지향 프로그래밍(Aspect-Oriented Programming, AOP) 이라고 합니다.AOP는 OOP(객체지향 프로그래밍)를 보조하는 기술로, OOP를 대체하는 개념은 아닙니다. 적용 기술프록시 기반 AOP스프링은 ..
팩토리 빈 (Factory Bean)Spring에서 사용되는 특수한 빈으로, 일반적으로 객체를 생성하는 로직을 포함하고 있는 빈Proxy.newProxyInstance() 메소드를 통해서만 생성이 가능한 다이내믹 프록시 오브젝트는 일반적인 방법으로는 스프링 빈으로 등록할 수 없으나, 팩토리 빈을 사용하면 빈 등록 가능. 장점프록시 팩토리 빈을 이용하면 프록시 기법을 빠르고 효과적으로 적용 가능코드 한 줄 만들지 않고 기존 코드에 부가적인 기능 추가 가능다이내믹 프록시 + 팩토리 빈 조합 사용 시 번거로운 다이내믹 프록시 생성 코드 제거 가능단점프록시로 타깃에 부가기능 제공하는 것은 메소드 단위로 일어나는 일. 한 번에 여러 개 클래스에 공통 부가기능 추가는 불가능하나의 타깃에 여러 부가기능을 적용하고자 ..
AOP는 IoC/DI, 서비스 추상화와 더불어 스프링의 3대 기반기술의 하나다스프링에 적용된 가장 인기 있는 AOP의 적용 대상은 바로 선언적 트랜잭션 기능이다.DI 적용을 이용한 트랜잭션 분리트랜잭션을 비즈니스 로직에서 직접 사용하는 것이 문제가 된다면 간접적으로 사용하면 된다. DI의 기본 아이디어는 실제 사용할 오브젝트의 클래스 정체는 감춘 채 인터페이스를 통해 간접으로 접근하는 것이다. 그 덕분에 구현 클래스는 얼마든지 외부에서 변경할 수 있다. 트랜잭션 경계설정 코드 분리의 장점비즈니스 로직 코드를 작성할 때는 트랜잭션과 같은 기술적인 내용에는 전혀 신경 쓰지 않아도 된다.비즈니스 로직에 대한 테스트를 손쉽게 만들어낼 수 있다 데코레이터 패턴타깃에 부가적인 기능을 런타임 시 다이내믹하게 부여해..
작성된 코드에 대해 질문해보기코드에 중복된 부분은 없는가?코드가 무엇을 하는 것인지 이해하기 불편하지 않은가?코드가 자신이 있어야 할 자리에 있는가?앞으로 변경이 일어난다면 어떤 것이 있을 수 있고, 그 변회에 쉽게 대응할 수 있게 작성되어있는가?public void upgradeLevels() { List users = userDao.getAll(); for(User user : users) { Boolean changed = null; if (user.getLevel() == Level.BASIC && user.getLogin() >= 50) { user.setLevel(Level.SILVER); changed = true; } else if (user.getLevel() == Leve..
예외의 종류와 특징Errorjava.lang.Error 클래스의 서브클래스들시스템에 뭔가 비정상적인 상황이 발생했을 경우 사용됨ex) OutOfMemoryError, ThreadDeath Exceptionjava.lang.Exception 클래스와 그 서브클래스들개발자들이 만든 애플리케이션 코드의 작업 중에 예외상황이 발생했을 경우 사용 체크 예외 CheckedExceptionRuntimeException 클래스를 상속하지 않은 예외들try/catch, throws를 사용하여 반드시 예외처리를 해야 함. 그렇지 않으면 컴파일 에러 발생언체크 예외 UncheckedExceptionRuntimeException을 상속한 예외들try/catch, throws로 처리하지 않아도 상관없음ex) NullPointe..
400 BAD_REQUEST "Validation failure" 라는 에러메시지와 함께 못보던 에러가 발생했습니다4xx에러는 센트리알림이 안찍히도록 핸들링이 되어있는데, 이 알림은 왜 왔는지 조사해봤습니다. HandlerMethodValidationExceptionSpring Framework 6부터 생긴 예외클래스입니다. 운영하는 애플리케이션을 최근 Spring Boot 3로 업그레이드 하여 이 예외가 발생하였으나 핸들러가 없었기 때문에 InternerServerError로 처리되어 센트리 알림이 오게 되었습니다.global exception handler를 추가하는 것으로 쉽게 해결하였지만, 이 exception은 어떤 케이스에서 생기는건지 궁금해졌습니다. 발생 케이스requestParam, pa..
코드 개선하기코드 개선에서 가장 먼저 할 일은 변하는 부분과 변화지 않는 부분을 찾아내서 분리하는 것. Spring context 의존 주입 (DI) 방식컨텍스트는 별도의 빈으로 등록해서 DI 받거나 클라이언트 클래스에서 직접 생성해서 사용한다. 클래스 내부에서 컨텍스트를 사용할 때 컨텍스트가 의존하는 외부의 오브젝트가 있다면 코드를 이용해서 직접 DI 해줄 수 있다. 컨텍스트를 빈으로 등록하고 DI 받기스프링 컨텍스트를 빈으로 등록하고, 필요할 때 DI(의존성 주입)받아서 사용스프링이 자동으로 ApplicationContext를 주입해주므로, 개발자가 직접 컨텍스트를 생성할 필요 없음@Componentpublic class MyService { private final ApplicationCont..
- Total
- Today
- Yesterday
- Infra
- 대규모 데이터 처리
- mongoDB
- phpUnit
- 몽고디비
- 쿠버네티스
- JUnit
- 라라벨
- php
- docker
- devops
- java
- 샤딩
- Container
- kubernetes
- k8s
- 카프카
- laravel
- MySQL
- Spring
- database
- 분산처리
- springboot
- NoSQL
- CS
- 캐시
- index
- 스프링
- AOP
- kafka
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |