Skip to main content

Java Swing 도서 관리 시스템 완전 정복: 사용자 관리 모듈 만들기 가이드

Published 4 min readMarkdown

SEO 키워드: Java Swing, 도서 관리 시스템, 사용자 관리 모듈


# 📌 서론 – 왜 “사용자 관리 모듈”이 필요할까?

도서 관리 시스템(Library Management System)은 도서 대출·반납, 재고 관리 등 다양한 기능을 제공하지만, 누가 시스템에 접근하고 무엇을 할 수 있는지를 제어하지 않으면 보안과 데이터 무결성이 위협받습니다.

특히 초보 개발자라면 사용자 인증·권한 부여 로직을 구현하는 것이 처음엔 막막할 수 있습니다. 이번 포스트에서는 Java Swing 기반 GUI와 간단한 파일 기반 저장소를 활용해, 초보자도 따라 할 수 있는 사용자 관리 모듈을 단계별로 구현하는 방법을 알려드립니다.


# 🛠️ 본론

# 1️⃣ 프로젝트 구조와 기본 설정

| 폴더 | 설명 |

|------|------|

| src/ | Java 소스 코드 |

| src/model/ | 데이터 모델 (User, Role) |

| src/view/ | Swing UI (LoginFrame, UserPanel) |

| src/controller/ | 이벤트 처리 로직 |

| data/ | 사용자 정보를 저장할 users.txt 파일 |

Tip: IDE는 IntelliJ IDEA 혹은 Eclipse를 사용하고, JDK 17 이상을 설치하세요.

java

// src/model/User.java

public class User implements Serializable {

    private String username;

    private String password; // 간단히 평문 저장 (실제 서비스에서는 해시 사용)

    private String role;     // ADMIN, USER

    // getter / setter 생략

}

# 2️⃣ 사용자 데이터 저장·로드 로직

파일 기반 저장소는 ObjectOutputStream / ObjectInputStream 로 직렬화합니다.

java

// src/controller/UserDAO.java

public class UserDAO {

    private static final String FILE = 'data/users.txt';

    public static List<User> loadUsers() {

        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE))) {

            return (List<User>) ois.readObject();

        } catch (Exception e) {

            return new ArrayList<>(); // 파일이 없으면 빈 리스트 반환

        }

    }

    public static void saveUsers(List<User> users) {

        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE))) {

            oos.writeObject(users);

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

핵심 포인트

  • 파일이 없을 경우 자동 생성 → 첫 실행 시 관리자 계정을 직접 추가합니다.

  • Serializable 인터페이스를 구현해 객체를 파일에 바로 저장할 수 있습니다.

# 3️⃣ 로그인 화면 구현 (Swing UI)

java

// src/view/LoginFrame.java

public class LoginFrame extends JFrame {

    private JTextField tfId = new JTextField(15);

    private JPasswordField pfPwd = new JPasswordField(15);

    private JButton btnLogin = new JButton('로그인');

    public LoginFrame() {

        setTitle('도서 관리 시스템 - 로그인');

        setLayout(new GridBagLayout());

        GridBagConstraints c = new GridBagConstraints();

        c.insets = new Insets(5,5,5,5);

        c.gridx = 0; c.gridy = 0; add(new JLabel('아이디'), c);

        c.gridx = 1; add(tfId, c);

        c.gridx = 0; c.gridy = 1; add(new JLabel('비밀번호'), c);

        c.gridx = 1; add(pfPwd, c);

        c.gridx = 1; c.gridy = 2; add(btnLogin, c);

        btnLogin.addActionListener(e -> authenticate());

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        pack();

        setLocationRelativeTo(null);

        setVisible(true);

    }

    private void authenticate() {

        String id = tfId.getText();

        String pwd = new String(pfPwd.getPassword());

        List<User> users = UserDAO.loadUsers();

        for (User u : users) {

            if (u.getUsername().equals(id) && u.getPassword().equals(pwd)) {

                JOptionPane.showMessageDialog(this, '환영합니다, ' + u.getUsername() + '님!');

                new MainFrame(u); // 로그인 성공 시 메인 화면 호출

                dispose();

                return;

            }

        }

        JOptionPane.showMessageDialog(this, '아이디 또는 비밀번호가 틀렸습니다.');

    }

}

초보자 팁

  • GridBagLayout 은 복잡해 보이지만, c.insets 로 간격을 조절하면 깔끔한 배치를 쉽게 만들 수 있습니다.

  • new String(pfPwd.getPassword()) 로 char[] 를 문자열로 변환해 비교합니다. (실제 서비스에서는 보안 강화 필요)

# 4️⃣ 관리자용 사용자 관리 패널

관리자는 새 사용자 추가, 비밀번호 변경, 삭제 기능을 사용할 수 있어야 합니다.

java

// src/view/UserPanel.java

public class UserPanel extends JPanel {

    private JTable tblUsers;

    private DefaultTableModel model;

    private JButton btnAdd = new JButton('추가');

    private JButton btnEdit = new JButton('수정');

    private JButton btnDelete = new JButton('삭제');

    public UserPanel() {

        setLayout(new BorderLayout());

        model = new DefaultTableModel(new String[]{'아이디', '역할'}, 0);

        tblUsers = new JTable(model);

        add(new JScrollPane(tblUsers), BorderLayout.CENTER);

        JPanel pBtn = new JPanel();

        pBtn.add(btnAdd); pBtn.add(btnEdit); pBtn.add(btnDelete);

        add(pBtn, BorderLayout.SOUTH);

        loadTable();

        btnAdd.addActionListener(e -> addUser());

        btnEdit.addActionListener(e -> editUser());

        btnDelete.addActionListener(e -> deleteUser());

    }

    private void loadTable() {

        model.setRowCount(0);

        for (User u : UserDAO.loadUsers()) {

            model.addRow(new Object[]{u.getUsername(), u.getRole()});

        }

    }

    private void addUser() {

        UserForm f = new UserForm(null);

        f.setVisible(true);

        if (f.isSaved()) {

            loadTable();

        }

    }

    // editUser, deleteUser 구현은 유사하게 진행

}

UserForm 은 모달 다이얼로그 형태로, 아이디·비밀번호·역할을 입력받아 UserDAO.saveUsers 로 저장합니다.

# 5️⃣ 전체 흐름 연결 – 메인 프레임

java

// src/view/MainFrame.java

public class MainFrame extends JFrame {

    public MainFrame(User loggedIn) {

        setTitle('도서 관리 시스템 - 메인');

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setSize(800,600);

        setLocationRelativeTo(null);

        if ('ADMIN'.equals(loggedIn.getRole())) {

            add(new UserPanel()); // 관리자라면 사용자 관리 화면 보여줌

        } else {

            add(new JLabel('일반 사용자는 여기서 도서 검색·대출 기능을 구현합니다.'));

        }

        setVisible(true);

    }

}

# ✅ 결론 – 지금 바로 구현해 보세요!

  • Java Swing 윈도우 기반 UI와 파일 직렬화 로 간단하지만 실전 감각을 잡을 수 있는 사용자 관리 모듈을 완성했습니다.

  • 구현된 코드를 바탕으로 데이터베이스 연동, 비밀번호 해시, 역할 기반 UI 차별화 등으로 확장해 보세요.

행동 유도

  1. 위 코드를 복사해 src/ 디렉터리에 붙여넣고 실행해 보세요.

  2. 첫 실행 시 users.txt 가 자동 생성됩니다. 관리자 계정(admin / admin)을 직접 추가해 로그인해 보세요.

  3. GitHub에 프로젝트를 올리고, README에 “Java Swing 도서 관리 시스템 – 사용자 관리 모듈” 키워드를 삽입하면 SEO 효과도 챙길 수 있습니다.

당신의 첫 Swing 프로젝트, 지금 바로 시작해 보세요! 🚀

No comments yet. Be the first to comment.

More from this blog