JPA 연관관계 매핑이 글에서 Spring Data JPA에서 두 개의 테이블을 조인하는 방법을 기술하겠으며, 먼저 연관관계의 주체에 대해 간략히 설명을 진행하고 예제를 통해 JPA를 통한 연관관계 매핑하는 방법을 설명해보겠다.예제에서는 먼저 조인할 데이터베이스의 테이블의 구조를 확인 후 1:N 관계를 설정하는 @OneToMany 과 N:1 관계를 설정하는 @ManyToOne 어노테이션을 사용하여 두 개의 테이블을 조인하여 데이터를 읽어 보겠다.참고로 @OneToMany, @ManyToOne 어노테이션 외에 1:1 연관관계를 설정하는 @OneToOne, N:M 연관관계를 설정하는 @ManyToMany도 있지만 이번에는 이 두 개의 연관관계를 제외한 1:N, N:1 연관관계에 있는 테이블만 조인하는 방법..
Entity와 DTO 역할 분리현재 실무에서도 Entity와 DTO 분리 없이 Entity 하나로만 운영하는 사람들도 많다고 한다.하지만 Entity 하나로만 운영하게되면 큰 문제점들이 존재한다.나 역시도 이전 글에서 Entity를 view에 그대로 반환하는 방법으로 계층간의 데이터 전송의 역할로 직접 활용했었다.그래서 나는 이 글에서 Entity와 DTO의 개념, 역할 분리의 필요성을 기술하고Entity를 DTO 변환하는 방법, 반대로 DTO를 Entity로 변환하는 방법을 기록해볼 것이다. EntityEntity는 실제 데이터베이스의 테이블에 매핑되며 테이블에 존재하는 컬럼들을 필드로 가지는 객체이다.데이터베이스의 테이블과 1:1로 매핑되며, 테이블이 가지지 않는 컬럼을 필드로 가져서는 안된다.즉, ..
JPA(Java Persistence API)ORM(Object-relational mapping) 자바 기술 표준으로, ORM 프레임워크를 쉽게 사용하기 위한 자바 인터페이스의 모음이다.데이터베이스 연동에 사용되는 기술들은 JDBC를 비롯하여 MyBatis, Hibernate 등 다양하다. 이 중에서 Hibernate와 같은 ORM 프레임워크는 SQL까지 프레임워크에서 제공하여 개발자들의 업무가 상당히 감소하였다.과거 DB 연동을 위해 SQL문을 직접 작성하여 영속 데이터를 가져오는 경우 문제점으로 데이터베이스의 테이블이 변경되더라도 SQL 쿼리는 String 형식으로 되어있어서 컴파일 에러가 나오지 않는다. 또한 쿼리문을 잘못 작성하더라도 컴파일 시 확인할 수 없어 런타임에서 에러를 발생시켜 개발 시..
MyBatis 란?MyBatis는 Java와 SQL 사이에 자동 매핑 기능을 지원하여 개발자의 관계형 데이터베이스 작업을 더 쉽게 할 수 있도록 도와주는 ORM(Object-Relational Mapping) 프레임워크이다.Java에서는 JDBC API를 제공해주지만 해당 JDBC를 이용하면 1개 클래스에 반복된 코드가 존재할 수 있고, 한 파일에 java 언어와 SQL 언어가 함께 존재하여 재사용성이 떨어지는 단점이 있다.MyBatis는 JDBC 모든 기능을 제공하면서도 단점들을 개선했다. MyBatis 사용 시 SQL을 직접 작성하면서도 객체 지향 방식으로 데이터베이스에 접근할 수 있게 해준다.💡 MyBatis란?"MyBatis는 개발자의 관계형 데이터베이스 작업을 더 쉽게 도와주는 ORM(Obje..
관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)우선 AOP는 기존의 OOP(Object-Oriented Programming, 객체 지향 프로그래밍)를 보완하는 개념으로, OOP에서는 해결하기 어려운 문제들을 보다 쉽게 해결할 수 있게 도와주는 개념이다.AOP는 관점을 기준으로 묶어 개발하는 방식을 의미하며, 여기서 관점(aspect)이란 어떤 기능을 구현할 때 ‘핵심 기능’과 ‘부가 기능’으로 구분해 각각을 하나의 관점으로 보는 것을 의미한다.’핵심 기능’은 우리가 적용하고자 하는 핵심 비즈니스 로직이다.‘부가 기능’은 횡단적 관심사항 (Cross-Cutting Concerns)이라고도 하며 핵심 기능을 수행하기 위해서 행해지는 로깅, 트랜잭션 관리, 보안, DB연결..
생성자 주입(Constructor Injection)클래스의 생성자 (생성자의 파라미터)를 통해 의존성을 주입받는 방법이다.생성자가 1개인 경우 @Autowired를 생략할 수 있다.생성자를 호출할 때 단 한번만 호출되기 때문에 필드 변수를 final로 관리할 수 있다.만일 개발자의 실수로, 외부에서 의존성을 주입하는 코드가 누락되었다면 final로 선언된 필드의 경우 컴파일 타임에 해당 오류를 잡아낼 수 있다. 생성자 주입의 장점불변성 유지 : 우선 대부분의 의존 관계는 애플리케이션 종료까지 변할 일이 거의 없다. 객체 생성 시 의존성을 주입받기 때문에, 생성 이후에는 해당 의존성을 변경할 수 없어 객체의 상태를 일정하게 유지하고 불변성을 보장한다.명확한 의존성 정의 : 생성자에서 모든 의존성을 명시적..
스프링 프레임워크(Spring Framework)스프링은 자바(Java) 기반의 애플리케이션 프레임워크이며 현재 가장 많이 사용되고 있다. 현재 우리나라의 ‘전자정부 표준 프레임워크’의 기반 기술로 채택되어 공공기관 웹 서비스를 개발할 때도 사용된다. 자바 언어로 엔터프라이즈급 애플리케이션을 개발하기 위한 필요한 기능들을 다양하게 제공하여 개발을 좀 더 쉽게 하도록 사용하는 도구이다. 💡 스프링의 핵심 가치“애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 하는 것”제어 역전(IoC : Inversion of Control)일반적인 자바 개발의 경우 사용하려는 객체를 선언하고 해당 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용한다. 즉, 객체를 생..