Spring IoC 기반 직원 관리 시스템

JavaBeginner
지금 연습하기

소개

이 프로젝트에서는 Spring IoC (Inversion of Control, 제어의 역전) 컨테이너를 사용하여 직원 관리 시스템을 구축하는 방법을 배우게 됩니다. 목표는 Spring IoC 컨테이너를 사용하여 구성 파일에서 직원 정보를 추출하여 목록 컬렉션에 저장하고, 여기서 직원 정보를 검색하고 출력하는 것입니다.

👀 미리보기

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.labex.TestEmployeeSystem
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2028:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl getAllEmployees
INFO: Entering getAllEmployees() method
Employees [employeeId=000001, employeeName=John Doe, employeeSex=Male, employeeBirthday=1993-11-06, employeeHiredate=2018-10-11, userId=1]
Employees [employeeId=000021, employeeName=Jane Smith, employeeSex=Female, employeeBirthday=1990-07-16, employeeHiredate=2019-10-21, userId=4]
Employees [employeeId=000022, employeeName=Alice Johnson, employeeSex=Female, employeeBirthday=1993-02-11, employeeHiredate=2019-12-27, userId=12]
Employees [employeeId=000035, employeeName=Bob Brown, employeeSex=Male, employeeBirthday=1991-06-23, employeeHiredate=2020-05-06, userId=19]
Employees [employeeId=000066, employeeName=Mary Taylor, employeeSex=Female, employeeBirthday=1997-12-21, employeeHiredate=2021-01-03, userId=20]
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.499 sec

🎯 작업

이 프로젝트에서는 다음을 배우게 됩니다.

  • 직원 관련 작업을 처리하기 위해 IEmployeeService 인터페이스를 구현하는 방법
  • IEmployeeService 인터페이스의 구현을 제공하기 위해 EmployeeServiceImpl 클래스를 생성하는 방법
  • 주석 기반 패키지 스캔을 활성화하기 위해 Spring IoC 컨테이너를 구성하는 방법
  • Spring IoC 컨테이너에서 직원 정보를 검색하고 출력하기 위해 test() 메서드를 구현하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다.

  • Spring IoC 컨테이너를 사용하여 직원 데이터를 관리합니다.
  • 주석을 사용하여 서비스 인터페이스와 해당 구현을 구현합니다.
  • XML 구성 파일을 사용하여 Spring IoC 컨테이너를 구성합니다.
  • Spring IoC 컨테이너에서 직원 정보를 검색하고 출력합니다.

IEmployeeService 인터페이스 구현

이 단계에서는 IEmployeeService 인터페이스를 구현하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요.

  1. EmployeeSystemIoC/src/main/java/org/labex/service 디렉토리에 있는 IEmployeeService.java 파일을 엽니다.

  2. IEmployeeService 인터페이스에서 두 개의 메서드를 선언합니다.

    • addEmployee: 이 메서드는 Employee 객체를 매개변수로 받아 boolean 값을 반환합니다. 이 메서드는 직원 객체를 목록에 추가하는 데 사용됩니다.
    • getAllEmployees: 이 메서드는 매개변수가 없으며 List를 반환합니다. 이 메서드는 모든 직원 정보를 검색하는 데 사용됩니다.

IEmployeeService.java 파일은 다음과 같아야 합니다.

package org.labex.service;

import org.labex.pojo.Employee;

import java.util.List;

public interface IEmployeeService {
    boolean addEmployee(Employee employee);

    List<Employee> getAllEmployees();
}
✨ 솔루션 확인 및 연습

EmployeeServiceImpl 클래스 구현

이 단계에서는 IEmployeeService 인터페이스의 구현체인 EmployeeServiceImpl 클래스를 구현하는 방법을 배우게 됩니다.

  1. EmployeeSystemIoC/src/main/java/org/labex/service 디렉토리에 EmployeeServiceImpl.java라는 새 파일을 생성합니다.

  2. EmployeeServiceImpl 클래스를 구현하고 IEmployeeService 인터페이스를 구현하도록 합니다.

  3. @Service 어노테이션으로 EmployeeServiceImpl 클래스에 주석을 답니다.

  4. 정적 List 컬렉션을 전역적으로 선언하고 매개변수 없는 생성자에서 컬렉션 객체를 할당합니다.

  5. addEmployee()getAllEmployees() 메서드를 구현합니다.

    • addEmployee() 메서드에서 logger.info() 메서드를 사용하여 실행 프로세스를 로깅합니다.
    • getAllEmployees() 메서드에서 logger.info() 메서드를 사용하여 실행 프로세스를 로깅합니다.

EmployeeServiceImpl.java 파일은 다음과 같아야 합니다.

package org.labex.service;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.labex.pojo.Employee;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class EmployeeServiceImpl implements IEmployeeService {

    private static List<Employee> employees;

    private static final Log logger  = LogFactory.getLog(EmployeeServiceImpl.class);

    public EmployeeServiceImpl() {
        employees = new ArrayList<>();
    }

    @Override
    public boolean addEmployee(Employee employee) {
        logger.info("Entering addEmployee() method");
        return employees.add(employee);
    }

    @Override
    public List<Employee> getAllEmployees() {
        logger.info("Entering getAllEmployees() method");
        return employees;
    }
}
✨ 솔루션 확인 및 연습

Spring IoC 컨테이너 설정

이 단계에서는 어노테이션 기반 패키지 스캔을 활성화하기 위해 Spring IoC 컨테이너를 구성하는 방법을 배우게 됩니다.

  1. EmployeeSystemIoC/src/main/resources 디렉토리에 있는 applicationContext.xml 파일을 엽니다.

  2. <beans> 요소에 다음 XML 네임스페이스 선언을 추가합니다.

    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context.xsd"
  3. org.labex 패키지에 대한 어노테이션 기반 패키지 스캔을 활성화하기 위해 <context:component-scan> 요소를 추가합니다.

applicationContext.xml 파일은 다음과 같아야 합니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:c="http://www.springframework.org/schema/c"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- Enable component scanning for annotations -->
    <context:component-scan base-package="org.labex"/>

    <!-- Employee Information -->
    <bean id="emp1" class="org.labex.pojo.Employee"
          c:employeeId="000001" c:employeeName="John Doe" c:employeeSex="Male"
          c:employeeBirthday="1993-11-06" c:employeeHiredate="2018-10-11" c:userId="1"/>

    <bean id="emp2" class="org.labex.pojo.Employee"
          c:employeeId="000021" c:employeeName="Jane Smith" c:employeeSex="Female"
          c:employeeBirthday="1990-07-16" c:employeeHiredate="2019-10-21" c:userId="4"/>

    <!-- Add more employee beans here -->

</beans>
✨ 솔루션 확인 및 연습

테스트 메서드 구현

이 단계에서는 TestEmployeeSystem.java 파일에서 test() 메서드를 구현하는 방법을 배우게 됩니다.

  1. EmployeeSystemIoC/src/test/java/org/labex 디렉토리에 있는 TestEmployeeSystem.java 파일을 엽니다.

  2. test() 메서드를 구현합니다.

    • ClassPathXmlApplicationContext 객체를 생성하고 applicationContext.xml 파일을 로드합니다.
    • Spring IoC 컨테이너에서 EmployeeServiceImpl 빈을 검색합니다.
    • Spring IoC 컨테이너에서 employee 빈을 검색하고 addEmployee() 메서드를 사용하여 EmployeeServiceImpl에 추가합니다.
    • EmployeeServiceImpl 빈의 getAllEmployees() 메서드를 호출하여 모든 employee 정보를 출력합니다.

TestEmployeeSystem.java 파일은 다음과 같아야 합니다.

package org.labex;

import org.junit.Test;
import org.labex.pojo.Employee;
import org.labex.service.EmployeeServiceImpl;
import org.labex.service.IEmployeeService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestEmployeeSystem {

    @Test
    public void test(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        IEmployeeService employeeService = context.getBean(EmployeeServiceImpl.class);

        // Retrieve Employee beans from the context
        Employee emp1 = (Employee) context.getBean("emp1");
        employeeService.addEmployee(emp1);
        Employee emp2 = (Employee) context.getBean("emp2");
        employeeService.addEmployee(emp2);
        // Add more employee beans here

        // Print out employee information
        for (Employee e : employeeService.getAllEmployees()) {
            System.out.println(e.toString());
        }
    }
}

이제 Spring IoC Employee Management System 의 구현을 완료했습니다. test() 메서드를 실행하여 애플리케이션의 기능을 확인할 수 있습니다.

  1. 테스트 실행:
cd ~/project/EmployeeSystemIoC/
mvn test

출력은 다음과 유사해야 합니다.

y 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.