트랜잭션(Transaction)이란? 트랜잭션은 하나의 데이터 교환 또는 변경을 안전하게 처리하도록 보장해 주는 것을 의미한다. 한 번의 애플리케이션 로직으로 인해 두 개 이상의 데이터가 영향을 받는 경우, 각각의 데이터에 대한 변경이 완전하게 끝난 후 데이터베이스에 정상적으로 반영하는 것이다. 만약 데이터 처리 중 문제가 발생 시 로직 실행 전으로 되돌리는 기능을 지원한다. 데이터베이스에 정상적으로 반영하는 것을 커밋(Commit) , 되돌리는 것을 롤백(Rollback)이라고 한다. 트랜잭션 ACID 속성 ACID는 트랜잭션을 정의하는 4가지 중대한 속성을 가리키는 약어입니다. 즉 원자성, 일관성, 신뢰성, 격리 그리고 영속성을 의미합니다. 원자성(Atomicity) 트랜잭션 내에서 실행한 작업들은 ..
프로그래밍 패러다임 (programming paradigm) 프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론이다. 객체지향 프로그램이과 함수형 프로그래밍을 예로 들어보자. 객체지향 프로그래밍 : 상호작용하는 객체들의 집합 함수형 프로그래밍 : 상태 값을 지니지 않는 함숫값들의 연속 Java의 프로그래밍 패러다임 jdk 1.8 이전의 자바는 객체지향 프로그래밍을 지원했었지만, 이후로는 함수형 프로그래밍 패러다임을 지원하기 위해 람다식, 생성자 레퍼런스, 메서드 레퍼런스를 도입했다. 추가로 선언형 프로그래밍을 위해 스트림(stream) 표준 API도 추가했다. 선언형 프로그래밍과 함수형 프로그래밍 선언형 프로그래밍(declarative programming)은 '..
SOLID 객체지향의 4대 특성에 기반하기 때문에 5가지 모두 유사한 모양을 가지고 있다. 1. SRP(Single Resoponsibility Principle) : 단일 책임 원칙 클래스는 하나의 기능만 가지며, 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 한 가지뿐이어야 한다. 변경에 의한 연쇄작용 감소 가독성 향상 유지보수 용이 서로 밀접한 관계가 있는 기능끼리 클래스로 묶고, 서로 다른 기능을 하는 클래스를 최대한 떨어뜨려놓는 것이 좋다. 이렇게 하면 문제가 발생하더라도 문제가 발생한 부분과 관련 없는 동작에는 영향을 미치지 않거나, 그 영향이 작아질 수 있다. 즉, 객체지향 설계의 이점을 살려서 유지보수를 용이하게 만들어 줘야 한다. 2. OCP(Open Closed Principle..
객체지향의 4대 특성 : 캡슐화, 상속, 다형성, 추상화 1. 캡슐화 ( Encapsulation ) 객체의 속성(Variable)을 보호하기 위해 사용한다. 객체와 객체 간의 의사소통을 위해 필요한 정보만을 노출한다. 실제 내부 구현 정보는 숨긴다. [ Method 설계 ] 자신이 가지고있는 속성에 대해서는 해당 상태를 변경하는 기능을 제공해야 한다. 실물 객체가 가진 기능을 모두 제공해야 한다. 각각의 Method는 서로 관련성이 있어야 한다. ( getter - setter ) (add - delete ) 등 Getter / Setter : 외부에서 내부 속성에 직접 접근하지 못하도록 사용 CRUD Method : 데이터 처리를 위한 기본적인 CRUD Method 제공 Business Logic M..
전략 패턴(strategy pattern) 전략 패턴은 정책 패턴(policy pattern)이라고도 하며, 객체의 행위를 바꾸고 싶은 경우에 직접 수정하지 않고 "전략"이라고 부르는 "캡슐화된 알고리즘"을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다. 비즈니스 로직을 인터페이스로 만들고, 해당 인터페이스를 구현한 클래스를 사용하도록 만드는 것이라고 생각하면 된다. 우선 Java 코드를 이용한 기본 예제로 알아보고, 추가로 Spring에서 어떻게 전략 패턴을 사용하는지 알아보자. Java 기본 예제 예제로 알아보자. interface : Payment public interface Payment { void pay(int amount); } 구현체 1 : KakaoCardPayment..
스프링 부트의 동작 구조 스프링 부트의 기본 의존성 중 하나인 spring-boot-starter-web 모듈을 사용하면, 기본적으로 내장 톰캣(Tomcat)을 사용하는 스프링 MVC 구조를 기반으로 동작한다. 클라이언트의 요청이 들어오면 서블릿이 이를 처리해야 하는데, 서블릿은 서블릿 컨테이너에서 관리하고, 톰캣이 서블릿 컨테이너의 역할과 WAS(Web Application Server)의 역할을 담당한다. 서블릿(Servlet)은 클라이언트의 요청을 처리하고, 결과를 반환하는 자바의 웹 프로그래밍 기술이다. 서블릿 컨테이너의 특징 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다. 서블릿 객체는 싱글톤 패턴으로 관리된다. 멀티 스레딩을 지원한다. Dispatcher Servlet 이란..
각 디자인 패턴들에 대해 공부하고 정리할 때마다 정리한 글의 링크를 첨부할 예정이다. 디자인 패턴이란? 디자인 패턴은 소프트웨어를 설계할 때 자주 발생하는 문제들을 해결하기 위한 해결책들이다. 상황에 맞는 최적의 디자인 패턴을 결정해서 사용하는 것이 좋다. [ GoF 디자인 패턴 ] 대표적인 디자인 패턴 분류 방식이다. (GoF는 디자인 패턴을 구체화하고 체계화해서 분류한 4명의 인물을 의미한다.) GoF 디자인패턴 분류 방식에 따르면 크게 3가지로 구분된다. 생성 패턴 객체 생성에 사용되는 패턴으로, 객체를 수정해도 호출부가 영향을 받지 않게 한다. 구조 패턴 객체를 조합해서 더 큰 구조를 만드는 패턴이다. 행위 패턴 객체 간의 알고리즘이나 책임 분배에 관한 패턴이다. 객체 하나로는 수행할 수 없는 작..
브리지 패턴(Bridge Pattern) 브리지 패턴은 기능 계층과 구현 계층을 분리하여 시스템의 확장성과 유지보수성을 높이는 패턴 기능 계층은 새로운 기능을 위해 메서드를 추가할 수 있는 클래스들을 말한다. 구현 계층은 이미 존재하는 인터페이스에 대한 구현 클래스들을 말한다. 기능은 인터페이스를 통해 정의 및 이용되고 해당 인터페이스를 따르는 클래스를 통해 구현된다. 사용자는 추상부와 구현부를 독립적으로 수정 및 확장할 수 있다. 객체지향 설계의 SOLID 원칙 중 단일 책임 원칙(SRP)과 개방 폐쇄 원칙(OCP)에 부합한 패턴이다. 기능 계층을 Book 클래스로, 구현계층의 인터페이스를 Display로 설정한 예제를 통해 알아보자. 예제 브리지 패턴은 기능 계층과 구현 계층을 분리하여 시스템의 확장..