토비의 스프링 Vol.1 - 11장 부록B. 스프링 의존 라이브러리

2020-11-03

스프링 의존 라이브러리

스프링 3.0과 스프링 3.1에는 스프링 모듈 외에도 100여 개의 의존 라이브러리가 존재한다. 이 의존 라이브러리는 스프링 프레임워크를 빌드하고 테스트하는 데 필요한 라이브러리다. 스프링 애플리케이션을 개발하고 운영할 때는 이 외에도 다양한 많은 라이브러리가 추가로 필요할 수 있다.

Read More

토비의 스프링 Vol.1 - 9장 스프링 프로젝트 시작하기

2020-11-03

스프링 프로젝트 시작하기

자바 엔터프라이즈 플랫폼과 스프링 애플리케이션

스프링으로 만들 수 있는 애플리케이션의 종류에는 제한이 없다. 자바 언어를 사용하는 모든 종류의 프로젝트라면 어디든 사용할 수 있다. 웹을 이용하는 자바 엔터프라이즈 시스템 개발, 스윙이나 이클립스 RCP로 만드는 독립형 프로그램, 사용할 수 있는 기능에 제한이 있기는 하겠지만 애플릿이나 모바일 애플리케이션 개발에도 이용할 수 있다.

Read More

토비의 스프링 Vol.1 - 8장 스프링이란 무엇인가?

2020-11-03

스프링이란 무엇인가?

스프링의 정의

자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

  • 애플리케이션 프레임워크
    • 일반적으로 라이브러리나 프레임워크는 특정 업무 분야나 한 가지 기술에 특화된 목표를 가지고 만들어진다. 하지만 스프링은 이와 다르게 ‘애플리케이션 프레임워크’라는 특징을 갖고 있다.
    • 애플리케이션 프레임워크는 특정 계층이나, 기술 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말한다. 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표를 두는 프레임워크다.
    • 애플리케이션의 전 영역을 관통하는 일관된 프로그래밍 모델과 핵심 기술을 바탕으로 해서 각 분야의 특성에 맞는 필요를 채워주고 있기 때문에, 애플리케이션을 빠르고 효과적으로 개발할 수가 있다.
    • 스프링의 일차적인 존재 목적은 핵심 기술에 담긴 프로그래밍 모델을 일관되게 적용해서 엔터프라이즈 애플리케이션 전 계층과 전 영역에 전략과 기능을 제공해줌으로써 애플리케이션을 편리하게 개발하게 해주는 애플리케이션 프레임워크로 사용된다.
  • 경량급
    • 스프링이 경량급이라는 건 스프링 자체가 아주 가볍다거나 작은 규모의 코드로 이뤄졌다는 뜻은 아니다. 오히려 스프링은 20여 개의 모듈로 세분화되고 수십만 라인에 달하는 코드를 가진 매우 복잡하고 방대한 규모의 프레임워크다.
    • 그럼에도 스프링이 가볍다고 하는 이유는 불필요하게 무겁지 않다는 의미다. 스프링은 가장 단순한 서버환경인 톰캣이나 제티에서도 완벽하게 동작한다. 단순한 개발툴과 기본적인 개발환경으로도 엔터프라이즈 개발에서 필요로 하는 주요한 기능을 갖춘 애플리케이션을 개발하기에 충분하다.
    • 같은 기능을 수행하는 코드인데도 스프링 기반의 코드가 가벼운 이유는 코드에 불필요하게 등장하던, 프레임워크와 서버환경에 의존적인 부분을 제거해주기 때문이다.
  • 자바 엔터프라이즈 개발을 편하게
    • 스프링은 근본적인 부분에서 엔터프라이즈 개발의 복잡함을 제거해내고 진정으로 개발을 편하게 해주는 해결책을 제시한다. 엔터프라이즈 개발의 근본적인 문제점에 도전해서 해결책을 제시한다는 것이 기존 기술의 접근 방법과 스프링의 접근 방법의 차이점이다.
    • 애플리케이션 개발이란 개발자가 복잡하고 실수하기 쉬운 로우레벨 기술에 많은 신경을 쓰지 않으면서도 애플리케이션의 핵심인 사용자의 요구사항, 즉 비즈니스 로직을 빠르고 효과적으로 구현하는 것을 말한다.
    • 스프링은 애플리케이션 개발자들이 스프링이라는 프레임워크가 제공하는 기술이 아니라 자신이 작성하는 애플리케이션의 로직에 더 많은 관심과 시간을 쏟게 해준다. 초기에 스프링의 기본 설정과 적용 기술만 잘 선택하고 준비해두면, 이후로 애플리케이션 개발 중에는 스프링과 관련된 코드나 API에 대해 개발자가 거의 신경 쓸 일이 없다.
    • 스프링은 또한 엔터프라이즈 개발의 기술적인 복잡함과 그에 따른 수고를 제거해준다. 엔터프라이즈 개발에서 필연적으로 요구되는 기술적인 요구를 충족하면서도 개발을 복잡하게 만들지 않는다는 점이 스프링의 뛰어난 면이다.
  • 오픈소스
    • 오픈소스란 말 그대로 소스가 모두에게 공개되고, 특별한 라이선스를 취득할 필요 없이 얼마든지 가져다 자유롭게 이용해도 된다는 뜻이다.
    • 하지만 공식적인 개발은 제한된 인원의 개발자에 한정된다. 개발팀이 폐쇄적으로 운영되고 있따는 사실은 미션크리티컬한 시스템 개발에도 사용되는 엔터프라이즈 프레임워크인 스프링 입장에서는 중요한 의미가 있다.
    • 전문 개발팀이 개발함으로써 지속적이고 안정적인 개발이 계속될지가 불확실한 오픈소스의 문제점과 한계를 극복할 수 있는 것이다.

      스프링은 오픈소스의 장점을 충분히 취하면서 동시에 오픈소스 제품의 단점과 한계를 잘 극복하고 있는, 전문적이고 성공적인 오픈소스 소프트웨어라고 할 수 있다.


Read More

토비의 스프링 Vol.1 - 7장 스프링 핵심 기술의 응용

2020-11-03

스프링 핵심 기술의 응용

SQL과 DAO의 분리

SQL 변경이 필요한 상황이 발생하면 SQL을 담고 있는 DAO 코드가 수정될 수밖에 없다.

XML 설정을 이용한 분리

스프링은 설정을 이용해 빈에 값을 주입해줄 수 있다. SQL은 문자열로 되어 있으니 설정파일에 프로퍼티 값으로 정의해서 DAO에 주입해줄 수 있다. 이렇게 하면 설정파일에 있는 SQL을 코드와는 독립적으로 수정할 수가 있다.

개별 SQL 프로퍼티 방식
  • add() 메소드를 위한 SQL 필드
    public class UserDaoJdbc implements UserDao {
    private String sqlAdd;
      
    public void setSqlAdd(String sqlAdd) {
      this.sqlAdd = sqlAdd;
    }
    }
    
  • 주입받은 SQL 사용
    public void add(User user) {
    this.jdbcTemplate.update(
      this.sqlAdd, // "insert into users..."를 제거하고 외부에서 주입받은 SQL을 사용하게 한다.
      user.getId(), user.getNamq(), user.getPassword(), user.getEmail(),
      user.getLevel().intValue(), user.getLogin(), user.getRecommend());
    )
    }
    
  • 설정파일에 넣은 SQL 문장 ```
<property name="dataSource ref="dataSource" /> ... ``` > 스프링에서는 스트링 값을 외부에서 DI 해서 사용할 수 있기 때문에 손쉽게 SQL을 분리하는 데 성공했다. 하지만 이 방법은 매번 새로운 SQL이 필요할 때마다 프로퍼티를 추가하고 DI를 위한 변수와 수정자 메소드도 만들어줘야 하기 때문에 불편하다.
Read More