소프트웨어의 특정 문제를 해결하기 위해 상호 협력하는 클래스와 인터페이스의 집합뼈대, 골조프로그래밍을 하기 위한 어떠한 틀이나 구조를 제공하는 역할을 한다. 객체 지향 개발의 통합성, 일관성의 부족 문제 해결하는 방법 중 하나재사용할 수 있는 수많은 워크를 통합시킨
Spring은 POJO 프로그래밍을 지향하는 프레임워크이다. 다른 환경이나 기술에 종속적이지 않도록 하기 위해 Spring에서는 IOC/DI, AOP, PSA 세가지 기술을 지원한다. "오래된 방식의 순수한 자바 오브젝트"자바 언어 사양 외에 어떠한 제한에도 묶이지 않
제어의 반전, 의존 관계 주입애플리케이션 흐름(코드의 흐름)을 제어하는 주도권이 뒤바뀐 것 -> 주도권은 Ioc 컨테이너가 가진다오브젝트 생성, 오브젝트 생명 주기 관리, 메서드 수행 등의 행위를 제어일반적인 프로그램은 이러한 행위를 프로그램 스스로 수행하지만 IoC를
의존성 주입A클래스의 프로그래밍 로직 완성을 위해 B클래스의 도움을 요청하는 것을 A클래스 는 B클래스 에게 의존한다라고 한다.클래스끼리 사용하고자 하는 클래스의 객체를 생성해서 참조하게 되면 의존 관계가 성립된다.A클래스에서 B클래스의 객체를 생성하고 생성된 객체로
객체 지향 프로그래밍은 책임과 관심사에 따라 클래스를 분리함으로서 각 클래스가 단일 책임을 가지게 된다. 이렇게 분리된 클래스들의 응집도는 높아지고 결합도는 낮아져, 애플리케이션 한 부분에 변경이 발생했을 때 시스템 전체의 문제로 퍼지지 않게 한다.그러나 각 클래스가
의존관계 주입을 대신해 객체를 생성하고 관리하며 의존관계를 연결해주는 것내부에 존재하는 애플리케이션 빈의 생명주기(빈의 생성, 관리, 제거 등의 역할)를 관리한다.객체 간의 의존성을 낮추기 위해 사용된다.💡빈(Bean) : 스프링 컨테이너에 등록된 객체new 연산자,
Scope : 사전적 의미로 범위를 뜻한다.빈 스코프 : 빈이 존재할 수 있는 범위스프링 프레임워크에서는 6개의 스코프를 지원하며, 그 중 4개는 ApplicationContext를 사용하는 경우에만 사용할 수 있다.스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이
: 의존성 주입, IoC의 원칙(역제어)을 구현하기 위해 사용되는 방법 중 하나📝 DI와 DIP 에 추가적으로 학습한 내용DI를 학습하기 전이라면 이러한 문제를 마주했을 때 하는 방법은 A클래스 내부에서 B와 C의 객체를 직접 생성 하여 사용하였을 것이다.직접 객체를
📝 스프링 컨테이너와 빈 에 추가적으로 학습한 내용: 빈(bean)들의 생명주기(생성, 관리, 소멸)를 관리하는 것IoC 컨테이너, DI 컨테이너, 외의 컨테이너들은 넓은 개념에서 다 같은 것을 의미한다.스프링 컨테이너를 통해 빈을 관리하기 위해 IoC(역제어)개념,
📝AOP와 PSA 에 추가 학습한 내용: 관점 지향 프로그래밍다양한 기능들을 핵심과 부가기능으로 분리하는 것을 의미한다. ☝️ OOP의 궁극적인 목표는 공통된 목적을 가진 데이터와 메서드를 하나의 객체로 묶어 사용함으로써 코드의 재사용성을 높이고 중복코드를 제거하는
: Spring의 모듈 중에 웹 계층을 담당하는 모듈 중의 하나, 웹 프레임워크의 한 종류 웹 계층을 담당하는 모듈은 몇가지 종류가 있지만 그 중 서블릿(Servlet) API를 기반으로 요청을 처리하는 모듈을 Spring-webmvc라고 하며 줄여서 Spring MV
: Controller에 해당하며, 클라이언트의 요청을 직접적으로 전달 받는 계층Spring Boot 기반의 애플리케이션이 정상적으로 실행되지 위해서는 main() 메서드가 포함된 애플리케이션의 시작점인 엔트리포인트 클래스를 작성해야 한다.Spring Initializ
서비스 계층은 API계층에서 구현한 Controller 클래스가 서비스 계층의 Service 클래스와 메서드 호출을 통해 API계층과 상호작용한다. Service 클래스는 비즈니스 로직을 처리하는 구간이다. API계층의 Controller 클래스의 핸들러 메서드와 Se
유효성 검증에 실패한 경우, 이 실패를 하나의 예외로 간주하고 예외를 던져(Throw) 예외 처리를 유도한다. 예외 처리 후, Response Body는 Json형식의 배열이 담기게 된다.배열인 이유? 유효성 검증에 실패하는 멤버 변수가 하나 이상일 수 있기 때문 :
: Java Database ConnectivityJava 기반 애플리케이션의 코드 레벨에서 사용하는 데이터를 데이터베이스에 저장 및 업데이트하거나 반대로 데이터베이스에 저장된 데이터를 Java코드 레벨에서 사용할 수 있도록 해주는 Java에서 제공하는 표준 APIJD
: Java Persistence API, Java 진영에서 사용하는 ORM 기술의 표준 사양☝️ 표준 사양이라는 것은 Java의 인터페이스로 사양이 정의되어 있어 이것의 구현체를 따로 생성하거나 이미 존재하고 있다는 의미: JPA를 구현한 여러 구현체 중의 하나데이터
SQL 위 링크에 포함되어 있는 트랙잭션 개념에 추가학습한 내용: 여러개의 작업들을 하나의 그룹으로 묶어 처리하는 하나의 단위로 애플리케이션에서 사용하는 데이터의 무결성을 보장하는 핵심적인 역할을 한다.데이터의 무결성을 보장하기 위해 하나의 트랜젝션 안에 모든 작업이
예외처리위 내용에 복습하며 추가학습한 내용을 정리했다.잘못된 코드나 서버의 문제로 인해 발생한 예외가 아닌 (언체크 예외), 외부의 영향이나 클라이언트의 잘못된 요청으로 인한 예외는 반드시 특정한 처리를 해주어야 할 필요가 있다. 이를 예외를 던져 처리(throw) 한
PageNation은 문서를 개별 페이지로 나누는 프로세스를 말한다.어떠한 데이터의 목록을 불러올 때, 무한 스크롤을 사용해 목록을 꾸리면 가독성이 떨어지고 한 페이지가 담는 정보의 양도 수없이 많아질 것이다. 이런 경우를 방지하고자, 적절한 순서를 매겨 적당량의 데이
메일 전송📨 회원 가입과 동시에 가입한 회원의 메일에 회원 가입 완료 메일을 보내는 것은 동시에 이루어져야 한다. 여기서 '동시에'란 메일 전송에 실패할 경우, 회원 가입도 실패로 돌린다는 것을 말한다. 회원 가입의 정보를 DB에 저장하는 로직과 메일을 전송하는 로
메일 전송 1편 에 이어서다시 한번 기억하기!회원 등록이라는 이벤트가 발생하면 EventListener가 메일 전송 로직을 실행한다. 만약 메일 전송에 실패한다면 이미 데이터베이스에 저장된 회원 정보를 삭제하고, 회원 등록에 실패했다고 클라이언트에게 알려야 한다!Eve
테스트란, 테스트의 대상을 검증하는 것을 말한다. 그렇다면 테스팅 코드는 왜 작성해야 할까? 그냥 포스트맨으로 테스트해도 되지 않나?매번 포스트맨을 이용하여 요청과 응답을 보내다보면 세상 귀찮아진다...또한, 애플리케이션의 코드들은 API-Business-Data Ac
슬라이스 테스트(Slice Test) > Solo Project로 진행했던 TODO applicatin 기반으로 진행 깃허브 링크 단위 테스트의 경우에는 테스트를 진행하는 테스트 케이스(메서드)에 @Test 애너테이션을 추가한 것만으로도 원활한 진행이 가능했다. 그
AOP 개념AOP의 대해 학습을 하긴 했지만 프로젝트에서 어떻게 활용해야 하는지 전혀 모르겠어서 그냥 이런게 있다~ 하고 넘어갔다. 그러지 말았어야..해당 클래스를 Spring Bean으로 등록하기 위해 @Component를 추가해주었다.@Aspect애너테이션은 해당