IntelliJ Community Edition 에서 Spring Boot 샘플 프로젝트를 생성하는 가장 쉬운 방법은 Spring 공식 사이트에서 Spring Initializr 기능을 이용하는 것이다.https://start.spring.io/Project
프로그래밍 상에서의 Framework 는 기본적으로 프로그래밍을 하기 위한 어떠한 틀이나 구조를 제공한다.효율적으로 코드를 작성할 수 있다.서로 다른 애플리케이션 간의 통신이나, 데이터를 데이터 저장소에 저장하는 등의 다양한 기능들 역시 Framework이 라이브러리
Spring Framework 의 장점POJO(Plan Old Java Object)기반의 구성DI(Dependency Injection) 지원AOP(Aspect Oriented Programming, 관점지향 프로그래밍) 지원Java 언어를 사용함으로써 얻는 장점위
POJO라는 것을 IoC/DI, AOP, PSA를 통해서 달성할 수 있다는 것을 의미한다.POJO 에서 PO 는 Java로 생성하는 순수한 객체를 의미한다.POJO 프로그래밍이란 POJO를 이용해서 프로그래밍 코드를 작성하는 것을 의미한다.POJO 프로그래밍으로 작성한
애플리케이션 흐름의 주도권이 뒤바뀐 것을 IoC(Inversion of Control)라고 한다. Java 콘솔 애플리케이션을 실행하려면 main() 메서드가 있어야 한다.main() 메서드가 호출 되고 난 다음에 System 클래스를 통해서 static 멤버 변수인
MenuController 생성자로 MenuService의 객체를 전달 받고 있습니다.이처럼 생성자를 통해서 어떤 클래스의 객체를 전달 받는 것을 ‘의존성 주입’ 이라고 한다.생성자의 파라미터로 객체를 전달하는 것을 외부에서 객체를 주입한다라고 표현을 하는 것이다.그렇
AOP에서의 Aspect는 부모들이 가지고 있는 아기의 건강 같은 공통 관심사와 마찬가지로 애플리케이션에 필요한 기능 중에서 공통적으로 적용되는 공통 기능에 대한 관심과 관련이 있다.애플리케이션을 개발하다보면 애플리케이션 전반에 걸쳐 공통적으로 사용되는 기능들이 있는데
시스템 아키텍처 시스템 아키텍처는 하드웨어와 소프트웨어를 모두 포함하는 어떤 시스템의 전체적인 구성을 큰그림으로 표현한 것입니다. 시스템 아키텍처를 통해 기본적으로 해당 시스템이 어떤 하드웨어로 구성되고, 어떤 소프트웨어를 사용하는지를 대략적으로 알 수 있습니다.
Spring Boot는 Spring Framework의 편리함에도 불구하고 Spring 설정의 복잡함으로 인해 Spring 기반 애플리케이션 개발을 시작하기도 전에 어려움을 겪는 문제점을 해결하기 위해 생겨난 Spring Project 중 하나다.XML 기반의 복잡한
자바 기반 설정의 가장 중요 애너테이션 @Configuration@Bean메서드가 Spring 컨테이너에서 관리할 새 객체를 인스턴스화, 구성 및 초기화한다는 것을 나타내는 데 사용된다.애너테이션을 이용해 Config 클래스 설정하는 방법Spring 3.0에 도입된 A
스프링은 설정 정보 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다.이전에는 스프링 빈을 등록할 때 자바 코드의 @Bean or XML 등의 설정 정보에 등록할 스프링 빈들을 직접 작성했었다.이렇게 수작업으로 등록하게 되면 설정 정보가 커지고,
4가지 의존관계 주입 방법이 있다.생성자 주입수정자 주입 (setter 주입)필드 주입일반 메서드 주입생성자를 통해서 의존 관계를 주입 받는 방법이다.생성자에 @Autowired를 하면 스프링 컨테이너에 @Component로 등록된 빈에서 생성자에 필요한 빈들을 주입한
중요한 기본 개념핵심 기능(Core Concerns) : 업무 로직을 포함하는 기능부가 기능(CROSS-CUTTING CONCERNS) : 핵심 기능을 도와주는 부가적인 기능로깅, 보안, 트랜잭션 등이 있다.Aspect : 부가 기능을 정의한 코드인 어드바이스(Advi
여러 객체에 공통으로 적용되는 기능 (공통 기능)어드바이스 + 포인트컷을 모듈화하여 애플리케이션에 포함되는 횡단 기능이다.여러 어드바이스와 포인트컷이 함께 존재한다.클래스 초기화, 객체 인스턴스화, 메소드 호출, 필드 접근, 예외 발생과 같은 애플리케이션 실행 흐름에서
Aspect를 언제 핵심 코드에 적용할지를 정의한다.부가 기능에 해당한다.특정 조인 포인트에서 애스팩트에 의해 취해지는 조치다.어드바이스는 기본적으로 순서를 보장하지 않는다.순서를 지정하고 싶으면 @Aspect 적용 단위로 org.springframework.core.
Pointcut 표현식, 지시자
AOP는 메서드 실행 위치 뿐만 아니라 다음과 같은 다양한 위치에 적용할 수 있다.적용 가능 지점(조인 포인트): 생성자, 필드 값 접근, static 메서드 접근, 메서드 실행AOP 를 수행하는 메서드는 이 JoinPoint 인스턴스를 인자로 받게 된다.JoinPoi
Spring에서의 AOPAOP는 스프링 IoC를 보완하여 매우 강력한 미들웨어 솔루션을 제공한다.Spring AOP 지원@AspectJ 애너테이션 스타일스키마 기반 접근 @AspectJ는 애너테이션이 있는 일반 Java 클래스로 관점을 선언하는 스타일을 말한다.@Asp
Spring MVC Spring의 모듈 중에는 웹 계층을 담당하는 몇가지 모듈이 있습니다. 특히 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈이 있는데, 이 모듈 이름이 바로 spring-webmvc 입니다. 개발자들 사이에서는 Spri
Spring Boot 기반의 애플리케이션에서 주로 사용되는 Java 패키지 구조는 기능 기반 패키지 구조(package-by-feature)와 계층 기반 패키지 구조(package-by-layer)가 있다.기능 기반 패키지 구조란 말 그대로 애플리케이션의 패키지를 애플
(1) 클래스 레벨의 @RequestMapping 의 ‘produces’ 애트리뷰트가 사라졌다. (2) JSON 문자열을 개발자가 직접 수작업으로 작성하던 부분이 Map 객체로 대체되었다.이를 통해 클래스 레벨의 @RequestMapping 의 ‘produces’ 애트
DTO DTO는 Data Transfer Object의 약자로 마틴 파울러(Martin Fowler)가 ‘Patterns of Enterprise Application Architecture’ 라는 책에서 처음 소개한 엔터프라이즈 애플리케이션 아키텍처 패턴의 하나입니
(1) MethodArgumentNotValidException 객체에서 getBindingResult().getFieldErrors() 를 통해 발생한 에러 정보를 확인할 수 있다.(2) (1)에서 얻은 에러 정보를 ResponseEntity 를 통해 Respon
@RestControllerAdvice @RestControllerAdvice 애너테이션을 추가한 클래스를 이용하면 예외 처리를 공통화 할 수 있다. Controller 클래스의 예외를 처리할 GlobalExceptionAdvice 클래스 정의한다. @RestCon
체크 예외는 말 그대로 발생한 예외를 잡아서(catch) 체크한 후에 해당 예외를 복구 하든가 아니면 회피 하든가 등의 어떤 구체적인 처리를 해야 하는 예외다.Java에서 흔히 볼 수 있는 대표적인 체크 예외로는 ClassNotFoundException 등을 들 수 있
Spring Data JDBC 적용 순서 build.gradle에 사용할 데이터베이스를 위한 의존 라이브러리를 추가합니다. application.yml 파일에 사용할 데이터베이스에 대한 설정을 합니다. ‘schema.sql’ 파일에 필요한 테이블 스크립트를
애그리거트(Aggregate)는 비슷한 업무 도메인들의 묶음을 말한다. 즉, 위 그림에서 애그리거트(Aggregate)는 총 4개가 된다.애그리거트(Aggregate)는 한마디로 비슷한 범주의 연관된 업무들을 하나로 그룹화 해놓은 그룹이라고 말할 수 있다.정의한 네 개
페이지네이션(Pagination)이란? 예를 들어, 데이터 베이스에 회원 정보가 100건이 저장되어 있는데 클라이언트 쪽에서 100건의 데이터를 모두 요청하는 것이 아니라 한 페이지에 일정 개수 만큼만 나누어서 달라고 요청하는 것을 페이지네이션(Pagination)이
JPA(Java Persistence API)는 Java 진영에서 사용하는 ORM(Object-Relational Mapping) 기술의 표준 사양(또는 명세, Specification)이다.표준 사양(또는 명세)이라는 의미는 다시 말하면 Java의 인터페이스로 사양이
두 개의 작업들이 하나의 그룹처럼 묶여서 처리되는 중에 둘 중 하나라도 처리에 실패할 경우 애플리케이션의 신뢰성이 깨지는 상황이 발생하는 경우가 있다.트랜잭션은 여러개의 작업들을 하나의 그룹으로 묶어서 처리하는 처리 단위인데, 이처럼 애플리케이션의 신뢰성이 깨지는 상황
JPA를 이용해 데이터베이스의 테이블과 상호 작용(데이터 저장, 수정, 조회, 삭제 등) 하기 위해 제일 먼저 해야되는 작업이 데이터베이스의 테이블과 엔티티 클래스 간의 매핑 작업이다. 엔티티 매핑 작업 종류 객체와 테이블 간의 매핑 기본키 매핑 필드(멤버 변수)와
다대일 연관관계 매핑에서 다(N)에 해당하는 ORDERS 테이블에서 @ManyToOne 애너테이션을 이용하여 일(1)에 해당하는 MEMBER 테이블과 다대일 매핑을 한다. @JoinColumn 애너테이션으로는 ORDERS 테이블에서 외래키에 해당하는 컬럼명을 적어준다.
Spring Data JDBC에서 사용했던 코드에서 몇가지 내용들이 추가된다.(1)은 회원의 상태를 저장하기 위해 추가된 enum 필드다. 처음 회원이 등록될 때의 기본 값은 MemberStatus.MEMBER_ACTIVE 이고, 일정 기간이 지나서 회원의 활동이 없거
Assertion은 ‘예상하는 결과 값이 참(true)이길 바라는 논리적인 표현’ 이다. 검증한다 라는 의미로 생각해볼 수도 있겠다.@DisplayName : 테스트 케이스 실행 시, 실행 결과 창에 표시되는 이름을 지정한다.assertEquals(expected, a
Hamcrest는 JUnit 기반의 단위 테스트에서 사용할 수 있는 Assertion Framework이다.JUnit에서도 Assertion 을 위한 다양한 메서드를 지원하지만 Hamcrest는 다음과 같은 이유로 JUnit에서 지원하는 Assertion 메서드보다 더
애플리케이션은 여러 개의 계층으로 나누어져 있다. 하나의 애플리케이션은 계층별로 역할이 있고, 계층별로 서로 연동되기 때문에 각각의 계층 별로 잘 동작하는지 테스트를 진행한 후에 마지막으로 통합 테스트를 통해서 계층 간의 연동에 문제가 없는지 확인해야 비로소 개발자의
데이터 액세스 계층 테스트 시에는 아래와 같은 한가지 규칙을 지키는 것이 좋다.DB의 상태를 테스트 케이스 실행 이전으로 되돌려서 깨끗하게 만든다.DataAccessLayerTest 클래스 내의 전체 테스트 케이스를 실행했을 때, testA() 부터 실행된다면, 결과는
Mock 객체를 사용하여 슬라이스 테스트를 진행한다. Mock 객체를 이용하게 되면 다른 계층과 단절되어 불필요한 과정을 줄일 수 있다. @MockBean 애너테이션은 Application Context에 등록되어 있는 Bean에 대한 Mockito Mock 객체를 생