뷰(View)는 데이터베이스의 중요한 개념 중 하나로 여러 테이블에서 파생된 가상 테이블을 의미합니다. 실제로 데이터를 저장하지 않으며, 미리 정의된 쿼리를 기반으로 필요할 때마다 동적으로 데이터를 생성. 뷰는 SELECT 문을 사용하여 정의되며 사용자는 마치 실제 테이블인 것처럼 뷰에 접근 가능
CREATE VIEW 뷰이름 AS
SELECT 컬럼1, 컬럼2, ...
FROM 테이블1
JOIN 테이블2 ON 조건
WHERE 조건;
뷰의 예시
예시1 : 직원 테이블과 부서 테이블이 있을 때 Sales 부서에 속한 직원 정보만을 제공하는 뷰.
CREATE VIEW SalesDepartmentEmployees AS
SELECT Employees.EmployeeID, Employees.Name, Departments.DepartmentName
FROM Employees
JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID
WHERE Departments.DepartmentName = 'Sales';
예시 2: 모든 직원의 이름과 소속 부서만을 제공하는 뷰.
CREATE VIEW EmployeeNamesAndDepartments AS
SELECT Name, DepartmentID
FROM Employees;
제한 사항
신입 및 취준생 Java Spring 백엔드 개발자의 입장에서 데이터베이스 뷰(View)를 학습하고 실습할 수 있는 방법은 다음과 같습니다. 실제로 뷰를 만들어보고 Spring 애플리케이션에서 활용해보는 실습을 통해 뷰의 개념과 사용법을 이해할 수 있습니다.
데이터베이스에서 뷰를 생성하고, Spring 애플리케이션에서 이를 조회하거나 활용하는 연습을 할 수 있습니다.
Spring Data JPA 또는 MyBatis를 활용하여 데이터베이스와 통신.CREATE TABLE Employees (
EmployeeID INT AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(100),
DepartmentID INT,
Salary DECIMAL(10, 2)
);
CREATE TABLE Departments (
DepartmentID INT AUTO_INCREMENT PRIMARY KEY,
DepartmentName VARCHAR(100)
);
-- 데이터 삽입
INSERT INTO Departments (DepartmentName) VALUES ('Sales'), ('HR'), ('Engineering');
INSERT INTO Employees (Name, DepartmentID, Salary)
VALUES
('Alice', 1, 5000.00),
('Bob', 2, 4500.00),
('Charlie', 1, 5200.00),
('Diana', 3, 6000.00);
CREATE VIEW SalesEmployees AS
SELECT e.EmployeeID, e.Name, d.DepartmentName, e.Salary
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID
WHERE d.DepartmentName = 'Sales';
Spring Data JPA, Spring Web, MySQL Driver (또는 사용하는 데이터베이스에 맞는 드라이버).spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=none
뷰를 조회하기 위한 DTO나 엔티티를 생성합니다.
@Entity
@Table(name = "SalesEmployees") // 뷰 이름
public class SalesEmployee {
@Id
private Integer employeeID;
private String name;
private String departmentName;
private BigDecimal salary;
// Getters and Setters
}
JPA를 사용하여 뷰 데이터를 조회합니다.
public interface SalesEmployeeRepository extends JpaRepository<SalesEmployee, Integer> {
// 뷰에 대한 별도 쿼리 필요 시 정의 가능
List<SalesEmployee> findBySalaryGreaterThan(BigDecimal salary);
}
Spring MVC를 통해 뷰 데이터를 클라이언트에 제공하거나 테스트합니다.
@RestController
@RequestMapping("/sales-employees")
public class SalesEmployeeController {
private final SalesEmployeeRepository repository;
public SalesEmployeeController(SalesEmployeeRepository repository) {
this.repository = repository;
}
@GetMapping
public List<SalesEmployee> getAllSalesEmployees() {
return repository.findAll();
}
@GetMapping("/high-salary")
public List<SalesEmployee> getHighSalaryEmployees(@RequestParam BigDecimal minSalary) {
return repository.findBySalaryGreaterThan(minSalary);
}
}
뷰의 장점을 실제로 체감하기 위해 다양한 상황에서 뷰를 활용해 봅니다.
CREATE VIEW PublicEmployeeInfo AS
SELECT Name, DepartmentName
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID;
CREATE VIEW DepartmentEmployeeCount AS
SELECT d.DepartmentName, COUNT(e.EmployeeID) AS EmployeeCount
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID
GROUP BY d.DepartmentName;
Spring에서 이를 호출하여 차트용 데이터를 반환하도록 구현할 수 있습니다.
MyBatis를 사용해 뷰 데이터를 조회하는 매퍼를 작성하여 실습.
<select id="getAllSalesEmployees" resultType="SalesEmployee">
SELECT * FROM SalesEmployees
</select>
이러한 실습은 Java와 Spring 백엔드 개발자로서 데이터베이스 뷰를 효율적으로 활용하는 실무 능력을 향상시키는 데 도움이 될 것입니다.