본문 바로가기

Spring

(7)
스프링5 웹플럭스와 테스트 전략 - 이일민 (토비) [ifkakao-2018] web flux spring 5.0에 새로 등장한 웹 프레임워크 + 리액티브 스펙 spring mvc와 두 개의 웹 기술 트랙 초기 이름은 스프링 웹 리액티브 플럭스-리액티브 Sprint Data Reactive Repository Mongo, Cassandra, Redis, Couchbase 스프링 웹 플럭스 도입 이유 100%(I/O, 데이터 처리) 논블록킹 개발 확장성과 고효율성이 매우 중요 업, 다운 스트리밍과 Back pressure가 필요 고속 서비스 오케스트레이션 개발 유사한 프로그래밍 모델의 경험 유연하게 커스터마이징이 가능한 웹 프레임워크 구성 본격적인 함수형 프로그래밍 모델 사용 스프링 웹 플럭스를 사용하지 않는게 좋은 이유 웹 플럭스가 왜 필요한지 분명하게 모름 블로킹이 서버, 코드,..
Toby's Spring - Chap 6 - AOP 6. 트랜잭션 속성 6-1 트랜잭션 정의 트랜잭션이라고 모두 같은 방식으로 동작하지 않습니다. 하지만 트랜잭션의 기본 개념인 더 이상 쪼갤 수 없는 최소 단위의 작업이라는 개념은 유효합니다. DefaultTransactionDefinition이 구현하고 있는 TransactionDefinition 인터페이스는 트랜잭션의 동작방식에 영향을 줄 수 있는 네 가지 속성을 정의하고 있습니다. 트랜잭션 전파 트랜잭션 전파(transaction propagation)란 트랜잭션의 경계에서 이미 진행 중인 트랜잭션이 있을 때 또는 없을 때 어떻게 동작할 것인가를 결정하는 방식입니다. A 트랜잭션 중에 B 트랜잭션을 진행하다 B 에서 에러가 나면 B 만 롤백 할 것인지 A 를 다 롤백할 것인지, (2) 에서 에러가 나..
Toby's Spring - Chap 4 - Exception 자바에서 예외를 처리할 때 try/catch구문을 사용합니다. 그 후 catch에서 예외를 제대로 처리해야 하는데 대부분의 개발자들은 catch로 잡아 놓기만하고 제대로 처리를 하지 않습니다. 그럼 프로그램내에서 닫히지 않은 리소스, 복구 안된 데이터가 DB로 들어가는 등 심각한 문제를 초래할 수 있습니다. Spring에서는 어떤 예외의 종류가 있고 어떻게 처리하는지에 대해서 알아봅시다. 에러의 종류와 특징 Error 에러는 시스템에서 뭔가 비정상적인 상황이 발생했을 경우에 사용됩니다. 주로 자바 VM에서 발생시키는 것이고 애플리케이션 코드에서 잡으려고 하면 안 됩니다. 예로는 OutOfMemory, ThreadDeath 같은 에러가 있습니다. Exception과 체크 예외 에러와 달리 개발자들이 만든 ..
Spring - Assert 값에 대한 검증을 위해서 스프링에서 Assert라는 추상 클래스를 지원해줍니다. Assert는 단순히 if문을 줄여줄 뿐만 아니라 프로젝트 규칙을 적용하고 공통된 코드를 공유할 수 있는 장점이 있습니다. if(user == null) { throw new IllegalArgumentException(); } 다음과 같이 user가 null값이면 예외를 뱉는 코드가 있습니다. 이때 Assert를 사용하면 다음과 같은 코드로 표현할 수 있습니다. Assert.isNull(user, "user is null"); 코드가 더 간결해지고 읽기도 좋아졌습니다. Assert에는 여러 종류의 메소드가 정의되어 있고 원하는 예외를 뱉을 수 있도록 상속받아 커스텀할 수 도 있으니 클래스를 확인하고 확장해보는 것도 좋은 방..
Toby's Spring - Chap 3 - Template/Callback practice 템플릿/콜백으로 변환하는 사고 흐름 1. 고정 된 작업 흐름을 갖고 여기저기서 자주 반복되는 코드 발견! 2. 중복되는 코드를 분리할 방법 생각해본다. 3. 그 중 일부 작업을 필요에 따라 바꿔야 한다면 인터페이스를 두고 전략 패턴을 적용한다. 4. 만약 바뀌는 부분이 한 어플리케이션 안에서 동시에 여러 종류가 만들어질 수 있으면 템플릿/콜백 패턴을 적용해본다. 예제 파일의 숫자 합을 계산하는 코드의 테스트가 있습니다. @SpringBootTest public class CalcSumTest { @Test public void sumOfNumbers() throws IOException { Calculator calculator = new Calculator(); int sum = calculator.c..
Toby's Spring - Chap 3 - Template 객체지향 설계의 핵심 원칙인 OCP (개방 폐쇄 원칙)은 코드에서 어떤 부분은 변경을 통해 그 기능이 다양해지고 확장하려는 성질이 있고, 어떤 부분은 고정되어 있고 변하지 않으려는 성질이 있음을 말합니다. 템플릿이란 코드에서 변하는 부분과 변하지 않는 부분을 구분하고 변하지 않는 부분을 독립시키는 방법입니다. 이 템플릿에 변하는 부분만 바꿔 끼우면 여러 곳에서 재사용이 가능하기에 객체지향적 이점을 잘 활용할 수 있습니다. 1. 다시 보는 초난감 DAO UserDao의 deleteAll() 메소드 입니다. public void deleteAll() throws SQLException { Connection c = dataSource.getConnection(); PreparedStatement ps = c..
Toby's Spring - Chap 2 - Test ※ 해당 내용은 '토비의 스프링 3.1'을 정리한 내용입니다. 스프링이 개발자에게 제공하는 가장 중요한 가치 2개를 뽑자면 바로 객체지향과 테스트일 것입니다. 그 중 테스트란 개발자가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인하기 위한 작업입니다. 웹을 개발하는 개발자들 중 대부분은 웹 화면을 통해서 테스트를 진행 할 것입니다. DB 콜을 위한 DAO 클래스를 확인하기 위해서 DAO 클래스를 개발하고 서비스 로직, MVC 프레젠테이션 계층까지 개발후에 로컬서버에서 웹을 띄우고 input값을 입력 후 버튼을 눌러 잘 동작하는지 확인합니다. 이 방법은 가장 간단하지만 클래스 하나를 확인하기 위해 작성해야 할 부가적인 코드가 너무 많습니다. 그리고 DAO클래스를 제외하고도 에러가 날 부분이 많이 ..