반응형

전자정부프레임워크의 공통 컴포넌트 활용

전자정부프레임워크에서 제공하는 **공통 컴포넌트(Common Component)**를 이해하고 활용하는 방법을 배웁니다. 공통 컴포넌트는 전자정부프레임워크의 주요 장점 중 하나로, 인증, 권한 관리, 메일 발송 등 자주 사용되는 기능을 손쉽게 구현할 수 있습니다.

이번 글에서는 로그인 기능을 공통 컴포넌트를 활용하여 구현하는 과정을 설명하겠습니다.


1. 공통 컴포넌트 개요

1-1. 공통 컴포넌트란?

공통 컴포넌트는 전자정부프레임워크에서 제공하는 재사용 가능한 모듈로, 다양한 애플리케이션에서 필요한 기본 기능들을 제공합니다. 주요 컴포넌트는 다음과 같습니다:

  • 사용자 인증 및 권한 관리
  • 게시판 관리
  • 공지사항
  • 메일 발송
  • 로그 관리

1-2. 공통 컴포넌트 설치

  1. 전자정부프레임워크 개발 환경 패키지에 포함된 공통 컴포넌트 ZIP 파일을 다운로드하여 프로젝트에 추가합니다.
  2. 필요한 SQL 파일을 실행하여 데이터베이스에 테이블을 생성합니다.

2. 공통 컴포넌트를 활용한 로그인 기능 구현

2-1. 사용자 테이블 생성

로그인 기능에 필요한 USER 테이블을 생성합니다.
src/main/resources/sql/user.sql:

CREATE TABLE USERS (
    USER_ID VARCHAR(50) PRIMARY KEY,
    PASSWORD VARCHAR(100) NOT NULL,
    USER_NAME VARCHAR(100) NOT NULL,
    ROLE VARCHAR(20) NOT NULL
);

INSERT INTO USERS (USER_ID, PASSWORD, USER_NAME, ROLE)
VALUES ('admin', 'password123', 'Administrator', 'ADMIN');

2-2. 로그인 Mapper 작성

SampleMapper.xml에 로그인 관련 SQL을 추가합니다.

<select id="selectUser" parameterType="map" resultType="map">
    SELECT USER_ID, PASSWORD, USER_NAME, ROLE
    FROM USERS
    WHERE USER_ID = #{userId} AND PASSWORD = #{password}
</select>

3. 로그인 Service 및 DAO 작성

3-1. DAO 작성

LoginDAO.java:

@Repository("loginDAO")
public class LoginDAO {
    @Autowired
    private SqlSession sqlSession;

    public Map<String, Object> selectUser(Map<String, Object> params) throws Exception {
        return sqlSession.selectOne("egovframework.example.sample.service.impl.SampleMapper.selectUser", params);
    }
}

3-2. Service 작성

LoginService.java:

public interface LoginService {
    Map<String, Object> login(Map<String, Object> params) throws Exception;
}

LoginServiceImpl.java:

@Service("loginService")
public class LoginServiceImpl implements LoginService {
    @Resource(name = "loginDAO")
    private LoginDAO loginDAO;

    @Override
    public Map<String, Object> login(Map<String, Object> params) throws Exception {
        return loginDAO.selectUser(params);
    }
}

4. 로그인 Controller 작성

LoginController.java:

@Controller
public class LoginController {

    @Resource(name = "loginService")
    private LoginService loginService;

    @RequestMapping(value = "/login.do", method = RequestMethod.GET)
    public String loginPage() {
        return "login/login";
    }

    @RequestMapping(value = "/login.do", method = RequestMethod.POST)
    public String loginProcess(@RequestParam Map<String, Object> params, Model model, HttpSession session) throws Exception {
        Map<String, Object> user = loginService.login(params);
        if (user != null) {
            session.setAttribute("USER", user);
            return "redirect:/main.do";
        } else {
            model.addAttribute("errorMessage", "Invalid username or password.");
            return "login/login";
        }
    }

    @RequestMapping("/logout.do")
    public String logout(HttpSession session) {
        session.invalidate();
        return "redirect:/login.do";
    }
}

5. 로그인 JSP 작성

5-1. 로그인 페이지

/webapp/WEB-INF/views/login/login.jsp:

<form action="login.do" method="post">
    <div>
        <label for="userId">User ID:</label>
        <input type="text" name="userId" id="userId" required />
    </div>
    <div>
        <label for="password">Password:</label>
        <input type="password" name="password" id="password" required />
    </div>
    <div>
        <button type="submit">Login</button>
    </div>
    <c:if test="${not empty errorMessage}">
        <div style="color: red;">${errorMessage}</div>
    </c:if>
</form>

5-2. 메인 페이지

/webapp/WEB-INF/views/main.jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="true" %>

Welcome, ${sessionScope.USER.USER_NAME}!

Logout

6. 테스트 및 실행

  1. 서버를 시작하고 웹 브라우저에서 로그인 페이지(http://localhost:8080/login.do)에 접속합니다.
  2. 다음 계정 정보를 입력합니다:
    • User ID: admin
    • Password: password123
  3. 로그인 성공 시 메인 페이지로 이동하고 사용자 이름이 표시됩니다.
  4. 로그아웃 버튼을 클릭하면 세션이 종료되고 로그인 페이지로 돌아옵니다.

마무리

전자정부프레임워크의 공통 컴포넌트를 활용하여 로그인 기능을 구현했습니다. 이러한 공통 컴포넌트를 사용하면 반복적인 기능을 효율적으로 개발할 수 있습니다.

다음 글에서는 전자정부프레임워크에서 게시판 관리 구현에 대해 다룰 예정입니다.

반응형

+ Recent posts