백엔드/프레임워크 10

[토비의 스프링] 9장: 스프링 프로젝트 시작하기

토비의 스프링: Vol. 1: 스프링의 이해와 원리 스프링은 주로 자바 엔터프라이즈 환경에서 동작하는 애플리케이션을 개발하는 목적으로 사용됨 아키텍처: 어떤 경계 안에 있는 내부 구성요소들이 어떤 책임을 갖고 있고, 어떤 방식으로 서로 관계를 맺고 동작하는지를 규정하는 것 시스템 레벨 아키텍처 결정하기 스프링 엔터프라이즈 애플리케이션의 서비스와 협력 구조 애플리케이션 서버 스프링으로 만든 애플리케이션을 자바 서버환경에 배포하려면 JavaEE(.J2EE) 서버가 필요함 JavaEE 서버 종류 WAS(Web Application Server): 완전한 웹 애플리케이션 서버 경량급 WAS / 서블릿 컨테이너: 톰캣(Tomcat) 등의 가벼운 서블릿 컨테이너 실제 개발환경과 운영환경에서 가장 많이 사용되는 자바..

[토비의 스프링] 8장: 스프링이란 무엇인가?

토비의 스프링: Vol. 1: 스프링의 이해와 원리 스프링의 정의 스프링의 정의: 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크 애플리케이션 프레임워크: 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크 스프링의 일차적인 존재 목적: 핵심 기술에 담긴 프로그래밍 모델을 일관되게 적용해서 엔터프라이즈 애플리케이션 전 계층과 전 영역에 전략과 기능을 제공해줌으로써 애플리케이션을 편리하게 개발하게 해주는 애플리케이션 프레임워크 경량급: 군더더기 없이 깔끔한 기술을 가진 프레임워크 자바 엔터프라이즈 개발을 편하게: 개발자가 복잡하고 실수하기 쉬운 로우레벨 기술에 많은 신경을 쓰지 않으면서도 애플리케이션의 핵심인 사용자의 요구사..

[토비의 스프링] 7장: 스프링 핵심 기술의 응용

토비의 스프링: Vol. 1: 스프링의 이해와 원리 스프링의 3대 핵심 기술 IoC/DI 서비스 추상화 AOP 스프링이 가장 가치를 두고 적극적으로 활용하려고 하는 것은 결국 자바 언어가 기반을 두고 있는 객체지향 기술 리소스 변환 DI JAXB(Java Architecture for XML Binding): XML를 동일한 구조의 오브젝트로 매핑해줌 언마샬링(unmarshalling): XML 문서를 읽어서 자바의 오브젝트로 변환 마샬링(marshalling): 바인딩 오브젝트를 XML 문서로 변환 스프링에서는 자신을 참조하는 자기참조 빈을 만들 수 있음 디폴트 의존관계: 외부에서 DI 받지 않는 경우 기본적으로 자동 적용되는 의존관계 서비스 추상화 OXM(Object-XML Mapping): XML과..

[토비의 스프링] 6장: AOP

토비의 스프링: Vol. 1: 스프링의 이해와 원리 스프링의 3대 기반기술 IoC/DI 서비스 추상화 AOP 단위 테스트 고립된 단위 테스트: 고립된 테스트를 하면 테스트가 다른 의존 대상에 영향을 받을 경우를 대비해 복잡하게 준비할 필요가 없을 뿐만 아니라, 테스트 수행 성능도 크게 향상된다 단위 테스트와 통합 테스트 단위 테스트: 목 오브젝트 등의 테스트 대역을 이용해 의존 오브젝트나 외부의 리소스를 사용하지 않도록 고립시켜서 수행하는 테스트 통합 테스트: 두 개 이상의, 성격이나 계층이 다른 오브젝트가 연동하도록 만들어 테스트하거나, 외부의 DB나 파일, 서비스 등의 리소스가 참여하는 테스트 테스트 작성 툴 목 프레임워크: Mockito와 같은 목 오브젝트 지원 프레임워크 등을 이용하여 목 오브젝트..

[토비의 스프링] 5장: 서비스 추상화

토비의 스프링: Vol. 1: 스프링의 이해와 원리 객체지향 객체지향적인 코드는 다른 오브젝트의 데이터를 가져와서 작업하는 대신 데이터를 갖고 있는 다른 오브젝트에게 작업을 해달라고 요청함 오브젝트에게 데이터를 요구하지 말고 작업을 요청하는 것 → 객체지향 프로그래밍의 가장 기본이 되는 원리 서비스 추상화 서비스 추상화: 로우레벨의 기술과 API의 변화에 상관없이 일관된 API를 가진 추상화 계층을 도입하는 추상화 개념 트랜잭션 서비스 트랜잭션 롤백(transaction rollback): 트랜잭션 안에서 문제가 발생해서 트랜잭션 안에서 이미 진행한 SQL 작업들을 모두 취소(무효화)하는 작업 트랜잭션 커밋(transaction commit): 트랜잭션 안의 모든 SQL 작업이 성공적으로 수행된 경우 D..

[토비의 스프링] 4장: 예외

토비의 스프링: Vol. 1: 스프링의 이해와 원리 예외를 처리할 때 반드시 지켜야 할 핵심 원칙: 모든 예외는 적절하게 복구되든지 아니면 작업을 중단시키고 운영자 또는 개발자에게 분명하게 통보되어야 함 예외의 종류와 특징 java.lang.Error (JVM 에러) java.lang.Exception (애플리케이션 에러) 예외처리 방법 예외 복구 예외상황을 파악하고 문제를 해결해서 정상 상태로 돌려놓는 방법 예외처리 코드를 강제하는 체크 예외들이 예외를 복구할 가능성이 있는 경우에 사용함 예외처리 회피 예외처리를 자신이 담당하지 않고 자신을 호출한 쪽으로 던지는 방법 → throws ... 예외 전환(exception translation) 발생한 예외를 그대로 넘기지 않고, 적절한 예외로 전환해서 던..

[토비의 스프링] 3장: 템플릿

토비의 스프링: Vol. 1: 스프링의 이해와 원리 템플릿 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가지는 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법 전략 패턴의 적용 오브젝트를 둘로 분리하고 클래스 레벨에서는 인터페이스를 통해서만 의존하도록 만들기 전략 패턴의 실제적인 사용 방법: Client가 구체적인 전략의 하나를 선택하고 오브젝트로 만들어서 Context에 전달, Context는 전달받은 그 Strategy 구현 클래스의 오브젝트 사용 DI는 이러한 전략 패턴의 장점을 일반적으로 활용할 수 있도록 만든 구조 밀접한 관계를 가지는 클래스를 DI 하는 2가지 방법 스프링의 DI를 이용하기 위해 빈으로 등록 코드를 이용해 수동..

[데이터 중심 애플리케이션 설계] 05장. 복제

Part 2. 분산 데이터 복제란 네트워크로 연결된 여러 장비에 동일한 데이터의 복사본을 유지한다는 의미다. 데이터 복제가 필요한 여러 이유가 있다. 지리적으로 사용자와 가깝게 데이터를 유지해 지연 시간을 줄인다. 시스템의 일부에 장애가 발생해도 지속적으로 동작할 수 있게 해 가용성을 높인다. 읽기 질의를 제공하는 장비의 수를 확장해 읽기 처리량을 늘린다. 복제 중인 데이터가 변경되지 않는다면 복제는 쉽다. 복제에서 모든 어려움은 복제된 데이터의 변경 처리에 있다. 노드 간 변경을 복제하기 위한 세 가지 인기 있는 알고리즘인 single-leader(단일 리더), multi-leader(다중 리더), leaderless(리더 없는) 복제를 살펴본다. 거의 모든 분산 데이터베이스는 이 세 가지 방법 중 하..

[토비의 스프링] 2장: 테스트

토비의 스프링: Vol. 1: 스프링의 이해와 원리 스프링이 개발자에게 제공하는 가장 중요한 가치: 객체지향과 테스트 테스트, 단위 테스트 단위 테스트: 작은 단위의 코드에 대해 테스트를 수행하는 테스트 어노테이션 @Test : Junit에게 테스트용 메소드임을 알려줌 단위 테스트는 항상 일관성 있는 결과가 보장되어야 함 (외부 환경에 영향을 받지 않고, 테스트를 실행하는 순서를 바뀌도 동일한 결과가 보장되어야 함) 테스트 주도 개발(TDD, Test Driven Development): 만들고자 하는 기능의 내용을 담고 있으면서 만들어진 코드를 검증도 해줄 수 있도록 테스트 코드를 먼저 만들고, 테스트를 성공하게 해주는 코드를 작성하는 방식의 개발 방법 JUnit에서는 각 테스트 메소드를 실행할 때마다..

[토비의 스프링] 1장: 오브젝트와 의존관계

토비의 스프링: Vol. 1: 스프링의 이해와 원리 스프링의 핵심 철학 자바 엔터프라이즈 기술의 혼란 속에서 잃어버렸던 객체지향 기술의 진정한 가치를 회복시키고, 그로부터 객체지향 프로그래밍(Object Oriented Programming)이 제공하는 폭넓은 혜택을 누릴 수 있도록 기본으로 돌아가자는 것이 스프링의 핵심 철학 스프링의 관심사 오브젝트(Object) → 객체지향 설계, 디자인 패턴, 리팩토링, 단위 테스트와 같은 오브젝트 설계와 구현에 관한 기술과 지식이 요구됨 자바빈(JavaBean): 디폴드 생성자 (파라미터가 없는 생성자)와 프로퍼티 (set, get을 가진 오브젝트가 노출하는 속성)를 가진 오브젝트 리팩토링(Refactoring): 기존의 코드를 외부의 동작방식에는 변화 없이 내부..