Java Swing 도서 관리 시스템 완전 정복: 사용자 관리 모듈 만들기 가이드
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 차별화 등으로 확장해 보세요.
행동 유도
위 코드를 복사해
src/디렉터리에 붙여넣고 실행해 보세요.첫 실행 시
users.txt가 자동 생성됩니다. 관리자 계정(admin / admin)을 직접 추가해 로그인해 보세요.GitHub에 프로젝트를 올리고, README에 “Java Swing 도서 관리 시스템 – 사용자 관리 모듈” 키워드를 삽입하면 SEO 효과도 챙길 수 있습니다.
당신의 첫 Swing 프로젝트, 지금 바로 시작해 보세요! 🚀
Comments
Join the discussionNo comments yet. Be the first to comment.