Java-Spring

자바 / 스프링 / 스프링부트 스터디 정리
Java-Spring/토비의 스프링 3.1

[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링이란 무엇인가? (1)

8.1) 스프링의 정의 스프링의 중요한 특징 스프링이란 이런 것이라고 한마디로 정의하기는 쉽지 않으며 여러 가지 정의를 본다고 해서 스프링이 무엇인지 간단히 이해되는 것도 아니다. 그렇다고 스프링을 그때그때 필요한 API 사용 방법 위주로만 공부하면 스프링을 오해하거나 그 가치를 충분히 누리지 못할 수 있다. 그러므로 스프링의 정의를 통해 스프링이 어떤 것인지 큰 그림으로 이해해보려고 노력할 필요가 있다. 정의를 이해하려는 노력은 스프링을 깊이 이해하고 그 가치를 파악하는 데 도움이 될 것이다. 스프링에서 대해 가장 잘 알려진 정의는 이렇다. '자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크' 이 정의를 통해 담겨진 스프링의 중요한 특징을 하나씩 살펴보자. 애플리케이션 프레..

Java-Spring/토비의 스프링 3.1

[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링이란 무엇인가? (0)

8.0) 스프링이란 무엇인가? 스프링은 기본적으로 IoC와 DI를 위한 컨테이너로서 동작하지만, 그렇다고 스프링은 단지 IoC/DI 프레임워크라고는 말 할 수 없다. 스프링은 단순히 IoC/DI를 편하게 적용하도록 돕는 단계를 넘어서 엔터프라이즈 애플리케이션 개발의 전 영역에 걸쳐 다양한 종류의 기술에 관여한다. 그렇다면 과연 스프링은 무엇이고 어떻게 설명할 수 있을까? 스프링 프레임워크가 만들어진 이유와 존재 목적, 추구하는 가치는 무엇일까?

Java-Spring/토비의 스프링 3.1

[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 핵심 기술의 응용 (6)

7.6) 스프링 3.1의 DI 자바 코드를 이용한 빈 설정 스프링이 제공하는 모든 기술의 기초가 되는 DI의 원리는 변하지 않았지만 DI가 적용된 코드를 작성할 때 사용하는 핵심 도구인 자바 언어는 그간 적지 않은 변화가 있었다. 이런 변화들이 DI 프레임워크로서 스프링의 사용 방식에도 여러 가지 영향을 줬다. 언제부턴가 리플렉션 API 등을 이용해 본래 목적보다는 자바 코드의 메타정보를 데이터로 활용하는 스타일의 프로그래밍 방식에 더 많이 활용되고 있다.} 이런 프로그래밍 방식의 절정은 자바5에서 등장한 애노테이션일 것이다. 애노테이션의 활용이 늘어난 이유는 애플리케이션의 핵심 코드를 담은 자바 코드와 이를 지원하는 IoC 방식의 프레임워크, 그리고 프레임워크가 참조하는 메타정보라는 세 가지로 구성하는..

Java-Spring/토비의 스프링 3.1

[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 핵심 기술의 응용 (5)

7.5) DI를 이용해 다양한 구현 방법 적용하기 ConcurrentHashMap을 이용한 수정 가능 운영 중인 시스템에서 사용하는 정보를 실시간으로 변경하는 작업을 만들 때 가장 먼저 고려해야 할 사항은 동시성 문제다. 한 번 초기화하고 그 뒤에는 읽기전용으로 동작하는 기존의 SqlRegistry의 방식에서는 여러 스레드가 함께 접근할 때 발생하는 동시성 문제가 발생할 일이 없다. 하지만 동시 접속자가 많은 대형 시스템의 DAO라면 수시로 접근하는 SQL 레지스트리 정보를 잘못 수정하다가 어느 순간 깨진 SQL이 나타날 수도 있다. 동기화된 해시 데이터 조작에 최적화되도록 만들어진 ConcurrentHashMap을 사용해보자. 지금까지 디폴트로 써왔던 HashMapRegistry는 JDK의 HashMa..

Java-Spring/토비의 스프링 3.1

[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 핵심 기술의 응용 (4)

7.4) 인터페이스 상속을 통한 안전한 기능확장 DI와 기능의 확장 지금까지 만든 SqlService 구현 클래스들은 초기에 리소스로부터 SQL 정보를 읽어오면 이를 메모리에 두고 그대로 사용한다. 중간에 SQL 매핑정보 파일을 변경했다고 해서 메모리상의 SQL 정보가 갱신되진 않는다. 굳이 방법이 있다면 서버를 재시작하거나 웹 애플리케이션을 리로딩해서 다시 SqlService 구현 빈을 초기화하는 것이다. 하지만 애플리케이션을 다시 시작하지 않고 특정 SQL의 내용만을 변경하고 싶다면 어떻게 해야 할지 생각해보자. 또한 기존에 설계하고 개발했던 기능이 발전돼야 할 경우에 스프링답게 접근하는 방법이 무엇인지 살펴보자. DI의 가치를 제대로 얻으려면 먼저 DI에 적합한 오브젝트 설계가 필요하다. 단지 스프..

Java-Spring/토비의 스프링 3.1

[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 핵심 기술의 응용 (3)

7.3) 서비스 추상화 적용 OXM 서비스 추상화 JaxbSqlService는 좀 더 개선하고 발전시킬 부분이 있다. 자바에는 JAXB 외에도 다양한 XML과 자바오브젝트를 매핑하는 기술이 있다. 필요에 따라 다른 기술로 손쉽게 바꿔서 사용할 수 있게 해야 한다. XML 파일을 좀 더 다양한 소스에서 가져올 수 있게 만든다. 임의의 클래스패스나 파일 시스템 상의 절대위치 또는 HTTP 프로토콜을 통해 원격에서 가져오도록 확장해본다. JAXB 외에도 실전에서 자주 사용되는 XML과 자바오브젝트 매핑 기술이 있다. Castor XML : 설정파일이 필요 없는 인트로스펙션 모드를 지원하기도 하는 매우 간결하고 가벼운 바인딩 프레임워크 JiBX : 뛰어난 퍼포먼스를 자랑하는 XML 바인딩 기술 XmlBeans ..

Java-Spring/토비의 스프링 3.1

[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 핵심 기술의 응용 (2)

7.2) 인터페이스의 분리와 자기참조 빈 XML 파일 매핑 이제 SqlService 인터페이스의 구현 방법을 고민해보자. 인터페이스가 하나 있으니 기계적으로 구현 클래스 하나만 만들면 될 거라고 생각하면 오산이다. 인터페이스로 대표되는 기능을 구현 방법과 확장 가능성에 따라 유연한 방법으로 재구성할 수 있도록 설계할 필요가 있다. 스프링의 XML 설정파일에서 태그 안에 SQL 정보를 넣어놓고 활용하는 건 좋은 방법이 아니다. 그보다는 SQL을 저장해두는 전용 포맷을 가진 독립적인 파일을 이용하는 편이 바람직하다. 독립적이라고 해도 가장 편리한 포맷은 역시 XML이다. 검색용 키와 SQL 문장 두 가지를 담을 수 있는 간단한 XML 문서를 설계해보고, 이 XML 파일에서 SQL을 읽어뒀다가 DAO에게 제공..

Java-Spring/토비의 스프링 3.1

[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 핵심 기술의 응용 (1)

7.1) SQL과 DAO의 분리 XML 설정을 이용한 분리 UserDao에서 한 가지 더 욕심을 내서 개선하고 싶은 부분이 있다. 현재까지 반복적인 JDBC 작업 흐름은 템플릿을 이용해 DAO에서 완벽하게 제거했다. 트랜잭션과 예외처리 작업도 서비스 추상화와 AOP 등을 이용해 처리했기 때문에 DAO 안에서 모두 제거할 수 있었다. 하지만 DB 테이블과 필드정보를 고스란히 담고 있는 SQL 문장을 더 분리해내고 싶다. 데이터 액세스 로직은 바뀌지 않더라도 DB의 테이블, 필드 이름과 SQL 문장이 바뀔 수 있다. 어떤 이유든지 SQL 변경이 필요한 상황이 발생하면 SQL을 담고 있는 DAO 코드가 수정될 수 밖에 없다. 따라서 SQL을 적절히 분리해 DAO 코드와 다른 파일이나 위치에 두고 관리할 수 있..