Transaction의 성질 - ACID 트랜잭션이란? 하나의 논리적 작업 단위를 구성하는 일련의 연산들의 집합 예를 들어 계좌이체를 했을 경우 A 계좌에서 10만원을 인출하고 B 계좌에서 10만원을 입금되었을 경우 A 계좌 인출 시 문제가 생겼을 경우 원래 상태(B 계좌에 입금이 되면 안된다.)로 돌아가야 하고 B 계좌 입금시 문제가 생겼을 경우 원래 상태(A 계좌로 인출이 되면 안된다.)로 돌아가야 한다. 이러한 트랜잭션은 다양한 데이터 항목들을 접근하고 갱신하는 프로그램의 수행 단위가 된다. 트랜잭션은 아래의 ACID 성질이라고 하는 것으로 설명된다. 트랜잭션의 성질 트랜잭션이 안전하게 수행되는 것을 보장하기 위한 성질 A - Atomicity(원자성) All or Notihng 모든 트랜잭션 연산..
Backend
객체지향 설계를 위한 SOLID 원칙 참고자료 객체지향 개발 5대 원리: SOLID 객체지향 설계의 5가지 원칙 S.O.L.I.D SRP(Single Responsibility Principle - 단일 책임 원칙) 객체는 오직 하나의 책임을 가져야 한다. 객체는 오직 하나의 변경의 이유만을 가져야 한다. 여러 원인에 의한 변경(Divergent Change) 여분의 클래스를 통해 혼재되어 있는 각 책임을 각각의 개별 클래스로 분할하여 클래스 당 하나의 책임만을 맡도록 하는 것이 중요하다. 중요한 점은 책임만 분리하는 것이 아니라, 두 클래스간의 관계의 복잡도를 줄이도록 설계하는 것도 중요하다. 만약 클래스들이 유사하고 비슷한 책임을 중복해서 갖고 있다면 부모 클래스를 만들어 상속받을 수 있도록 하는것이..
엔티티 생명주기(Entity LifeCycle) @DisplayName("엔티티 생명주기 테스트") @Test void entityLifeCycleTest() { final EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); final EntityManager em = emf.createEntityManager(); final EntityTransaction transaction = em.getTransaction(); transaction.begin(); try { System.out.println("===== 영속 상태 테스트===="); final Team team = new Team(1L, "Team A"); //..
JPA 페치(Fetch) 전략 - 즉시 로딩(EAGER)과 지연 로딩(LAZY) 예제코드 세팅 import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; @Entity public class Member { @Id private Long id; @ManyToOne @JoinColumn(name = "team_id") private Team team; private String name; public Member() { } public Member(final Lo..
JPA DDL Auto With Hibernate 서론 DDL(Data Definition Language, 데이터 정의 언어)를 자동으로 생성해주는 속성입니다. CREATE - 새로운 데이터베이스 테이블, view 등을 생성 DROP - 이미 존재하는 데이터 베이스 테이블, view 등을 제거 ALTER - 이미 존재하는 데이터베이스 개체에 대한 변경 이번 글은 Hibernate를 이용해 생성해보도록 하겠습니다. 속성명은 hibernate.hbm2ddl.auto 입니다. 환경 세팅 plugins { id 'java' } group 'org.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } depe..
javax.persistence.Entity Vs org.hibernate.annotations.Entity 서론 JPA를 사용해 Entity를 매핑하려고 하면 해당 어노테이션이 두개가 나오는걸 확인할 수 있습니다. javax.persistence와 org.hibernate에 있는 어노테이션 두개입니다. 현재는 hibernate에 있는 애는 deprecated 되었기 떄문에 굳이 볼 필요는 없다고 생각하지만, 단순한 궁금증이 생겨 두개의 차이를 비교해보려고 합니다. 그러나 해당 속성들은 모두 다 다른 어노테이션으로 대처되어 사용되기 때문에 해당 속성들에 대한 내용들은 알아둬야 할것 같습니다. 해당 속성들에 대한 정보들이 많이 나오지 않아서 정확하지 않을 수도 있습니다. 틀린 부분이 있다면 가감히 지적해주..
MVC 패턴 MVC 패턴이란? Model & View & Controller 디자인 패턴으로써 애플리케이션을 위의 3가지 역할로 구분해놓은 개발방법론입니다. 웹 애플리케이션의 아키텍처 - 모델 1 JSP + JavaBean(Model) 가장 큰 특징은 뷰 + 로직이라고 생각하면 될거 같습니다. 따라서 장점으로는 구조가 간단해지지만, 단점으로 출력과 비즈니스 로직이 섞여서 코드가 복잡해지고 프론트와 백엔드의 분업이 용이하지 않다는 점이 있습니다. 웹 어플리케이션 아키텍처 - 모델 2 == MVC 출력과 비즈니스 로직이 섞여 코드가 복잡해지는 모델1의 단점을 보안하고자 모델2가 나오게되었습니다. JavaBean(Service) + JSP(View) + 서블릿(Controller) 장점으로는 뷰와 비즈니스 로..
DTO vs VO DTO == VO (?) 많은 글들이 DTO와 VO는 같은 것으로 적어놓은 글들이 많습니다. 그러나 명확하게 DTO와 VO는 다른 것입니다. 아래 DTO와 VO에 대해 정리하면서 둘의 차이점을 명확하게 알아보도록 하겠습니다. DTO(Data Transfer Obejct) DTO란? 레이어 간 데이터를 전달하는 객체입니다. 예를 들면 시험을 볼때 ORM 카드를 이용해 정답을 입력하여 제출하게 되는데 즉, 시험지와 채점도구 사이의 정답(데이터)를 전달하기 위해 ORM 카드를 사용한다고 생각했을때 ORM 카드를 DTO라고 할 수 있습니다. 특징 데이터 접근 메서드를 가지게 됩니다. 직렬화 등 데이터 표현을 위한 기능을 가질수는 있습니다. 또한 클라이언트에서의 값에 대한 Validation 체..
OCP와 전략패턴 if-else문의 문제점 변경 또는 확장이 될 수록 코드가 복잡해진다. 리팩토링 시 리팩토링 부분을 찾는데 점점 오래 걸리게 된다. 실수로 추가하지 않고 누락하는 부분이 생길 가능성이 있다. 위의 총 3가지 문제점을 한마디로 표현하지만 유지보수가 점점 어려워진다 라고 정의할 수 있겠습니다. 계속되는 기능 추가로 복잡도는 증가하면서 추가 수정이 힘들어 지는데, If-else를 사용하게 된다면 점점 커져서 한 메서드에 수백 줄 이상으로 빠르게 증가할 가능성이 있게 되면서 코드는 복잡하게 됩니다. OCP란? Open-Closed Principle 개방 폐쇄 원칙 소프트웨어 구성 요소(컴포넌트, 클래스, 모듈, 함수 등)는 확장에 대해서는 개방되어 있어야 하며 변경에 대해서는 폐쇄되어야 한다...
[프로그래머스] 상위 n개 레코드 문제 설명 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다. NAME TYPE NULLABLE ANIMAL_ID VARCHAR(N) FALSE ANIMAL_TYPE VARCHAR(N) FALSE DATETIME DATETIME FALSE INTAKE_CONDITION VARCHAR(N) FALSE NAME VARCHAR(N) TRUE SEX_UPO..