Spring 20

QuickStart 스프링부트_Chapter03_테스트와 로깅, 빌드

1. 스프링 부트 테스트 자신이 작성한 코드에 문제가 없음을 검증하기 위해 어떤 방법으로든 테스트 코드를 작성한다. 그리고 이렇게 작성된 테스트 코드는 유지보수 과정에서 재사용되어 시스템의 안정성을 보장하는 중요한 장치가 된다. 그래서 대부분의 프로젝트에서는 jUnit을 기반으로 일관성 있는 단위 테스트를 진행하는데, 단위 테스트란 자신이 작성한 클래스에 대한 테스트로서 테스트 단계 중에서 가장 기본이라 할 수 있다. 단위 테스트는 테스트할 객체가 최대한 단순해야 한다. 하지만 웹 애플리케이션은 테스트 대상 객체가 특정 서버와 관련 있거나 다른 객체들과 연관되어 관계가 복잡한 경우가 일반적이다. 따라서 서버를 구동하지 않고 컨트롤러만 단독으로 테스트하거나 컨트롤러와 연관된 비즈니스 컴포넌트를 실행하지 않..

Spring 2022.12.12

QuickStart 스프링부트_Chapter02_스프링 부트의 의존성 관리

1. 스프링 부트의 의존성 관리 스프링 부트를 구성하는 핵심 요소는 다음과 같다. 요소 기능 스타터(Starter) 스프링이 제공하는 특정 모듈을 사용할 수 있도록 관련된 라이브러리 의존성을 해결한다. 자동설정 (AutoConfiguration) 스타터를 통해 추가한 모듈을 사용할 수 있도록 관련된 빈 설정을 자동으로 처리해준다. 액추에이터(Actuator) 스프링 부트로 개발된 시스템을 모니터링할 수 있는 다양한 기능을 제공한다. 스프링 부트의 동작 원리를 이해할 수 있도록 위 세 가지 요소중 스타터와 자동설정을 중심으로 살펴본다. 1.1 스타터로 의존성 관리하기 스타터 이해하기 Spring boot은 build.gradle 또는 pom.xml에서 의존성을 관리한다. 그렇기에 새로운 의존성을 추가하기 ..

Spring 2022.12.07

QuickStart 스프링부트_Chapter01_스프링 부트 시작하기

1.1 스프링 프레임워크 프레임워크란?? 프레임워크는 소프트웨어 관점에서 해석해보면 애플리케이션의 아키텍처에 해당하는 골격 코드라고 할 수 있다. 애플리케이션을 개발할 때 가장 중요한 것이 애플리케이션 전체 구조를 결정하는 아키텍처다. 그런데 이를 프레임워크로부터 빌려쓰면, 개발자는 비즌니스 로직 개발에만 집중할 수 있게된다. 1.2 스프링 부트의 등장 스프링 부트의 등장 배경 스프링 프레임워크가 처음 등장했을 때와는 달리 현재의 스프링은 엔터프라이즈 시스템 개발에 필요한 모든 분야를 지원하는 하나의 플랫폼으로 자리잡았다. 하지만 이렇게 다양한 프레임워크와 기술들을 지원하면서 동시에 개발자가 처리해야하는 설정도 많아지고 복잡해졌고, 이를 설정하는 데 많은 시간과 노력을 들일 수 밖에 없다. 이런 문제들을..

Spring 2022.12.01

토비의 Spring_chapter09_스프링 프로젝트 시작하기

스프링을 이용해 애플리케이션 프로젝트를 처음 구성할 때 알아야 할 기본적인 내용과 스프링 개발에 도움이 되는 개발 툴과 빌드 방법도 살펴볼 것이다. 스프링은 어떤 종류의 애플리케이션에도 잘 들어맞도록 매우 유연하게 설계된 범용 프레임워크다. 그래서 아키텍처의 종류나 프로젝트를 구성하는 방법에 대한 자유도가 높아 프로젝트 구성 방법이나 아키텍처 선택에 신중을 기해야한다. 9.1 자바 엔터프라이즈 플랫폼과 스프링 애플리케이션 스프링으로 만들 수 있는 애플리케이션의 종류에는 제한이 없지만, 주로 자바 엔터프라이즈 환경에서 동작하는 애플리케이션을 개발하는 목적으로 사용된다. 자바 엔터프라이즈 애플리케이션은 서버에서 동작하며 클라이언트의 요청을 받아서 그에 대한 작업을 수행하고 그 결과를 돌려주는 것이 기본적인 ..

Spring 2022.11.29

토비의 Spring_Chapter08_스프링이란 무엇인가?

8.1 스프링의 정의 스프링에 대한 정의는 "자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크"이다. 이 정의를 하나씩 풀어서 살펴보자. 애플리케이션 프레임워크 핵심 기술에 담긴 프로그래밍 모델을 일관되게 적용해서 엔터프라이즈 애플리케이션 전 계층과 전 영역에 전략과 기능을 제공해줌으로써 애플리케이션을 편리하게 개발하게 해주는 애플리케이션 프레임워크라는게 존재 목적이다. 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표를 두는 프레임워크 프레임워크는 이상적인 프로그래밍 모델을 추구하는 데 필요한 기반이 돼주는 코드이다. 경량급 EJB에서 불필요한 복잡함을 제거해 코드는 더 단순하고 개발 과정은 편리하게 만들었다. 만들어진 코드가 지원하는 기술수..

Spring 2022.11.27

토비의 Spring_Chapter07_스프링 핵심 기술의 응용

지금까지 살펴봤던 세 가지 기술을 애플리케이션 개발에 활용해서 새로운 기능을 만들어보고 이를 통해 스프링의 개발철학과 추구하는 가치, 스프링 사용자에게 요구되는 게 무엇인지를 살펴보겠다. 7.1 SQL과 DAO의 분리 UserDao에 이제 남은건 SQL을 DAO에서 분리하는 것이다. XML 설정을 이용한 분리 가장 손쉽게 생각해볼 수 있는 SQL 분리 방법은 SQL을 스프링의 XML 설정파일로 뺴내는 것이다. 스프링은 설정을 이용해 빈에 값을 주입해줄 수 있다. 개별 SQL 프로퍼티 방식 UserDaoJdb 클래스의 SQL문을 프로퍼티로 만들고 이를 XML에서 지정해보자. UserDaoJdbc.java 일부 public class UserDaoJdbc implements UserDao { private ..

Spring 2022.11.15

토비의 Spring_Chapter06_AOP

AOP를 바르게 이용하려면 등장배경과 스프링이 도입한 이유, 그에 대한 장점이 무엇인지에 대한 충분한 이해가 필요하다. 6.1 트랜잭션 코드의 분리 트랜잭션 인터페이스를 썼음에도 비즈니스 로직 내 트랜잭션코드가 많다. 하지만 트랜잭션의 경계는 비즈니스 로직의 전후에 설정돼야 하는 것이니 문제가 없다. 메소드 분리 UserService.java public void upgradeLevels() throws Exception { TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition()); try { List users = userDao.getAll(); for (User user : u..

Spring 2022.11.10

토비의 Spring_Chapter04_예외

JdbcTemplate을 대표로 하는 스프링의 데이터 액세스 기능에 담겨 있는 예외처리와 관련된 접근 방법에 대해 알아본다. 이를 통해 예외를 처리하는 베스트 프랙틱스도 살펴본다. 4.1 사라진 SQLException 3장에서 JdbcTempltae을 적용하면서 SQLException이 사라졌다. UserDao.java 일부 //jdbcTemplate 적용 전 public void deleteAll() throws SQLException { this.jdbcContext.executeSql("delete from users"); } //jdbcTemplate 적용 후 public void deleteAll() { this.idbcTemplate.update("delete from users"); } 그렇..

Spring 2022.10.27

토비의 Spring_Chapter03_템플릿

변화의 특성이 다른 부분을 구분해주고, 각각 다른 목적과 다른 이유에 의해 다른 시점에 독립적으로 변경될 수 있는 효율적인 구조를 만들어주는 것이 개발 폐쇄 원칙이다. 템플릿이란 이렇게 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법이다. 3.1 다시 보는 초난감 DAO UserDao의 코드에는 아직 문제점이 남아 있다. 바로 예외상황에 대한 처리다. 예외처리 기능을 갖춘 DAO 자원 과부화를 예방하기 위해 어떤 이유로든 예외가 발생했을 경우에도 사용한 리소스를 반드시 반환하도록 만들어야 한다. JDBC 수정 기능의 예외처리 코드 UserDao.java 일..

Spring 2022.10.19

토비의 Spring_Chapter02_테스트

애플리케이션은 계속 변하고 복잡해져 간다. 그 변화에 대응하는 첫 번째 전략이 확장과 변화를 고려한 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IoC/DI 같은 기술이라면, 두 번째 전략은 코드의 확신과 변화에 유연하게 대처할 수 있는 자신감을 주는 테스트 기술이다. 2.1 UserDaoTest 다시보기 테스트란 결국 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서, 확신할 수 있게 해주는 작업임과 동시에 코드나 설계에 결함을 확인할 수 있다. UserDaoTest의 특징 UserDaoTest의 특징은 다음과 같다. main() 메소드를 이용한다. 테스트할 대상인 UserDao의 오브젝트를 가져와 메소드를 호출한다. 테스트에 사용할 입력 값(User 오브젝트)을 직접 코드에 만들..

Spring 2022.10.14