[java] JavaFX 로그인 및 사용자 인증 구현

JavaFX는 자바 기반의 GUI 프레임워크로, 풍부한 사용자 인터페이스를 만들 수 있습니다. 이 글에서는 JavaFX를 사용하여 로그인 및 사용자 인증 기능을 구현하는 방법에 대해 알아보겠습니다.

사용 도구

회원 정보 저장하기

사용자 인증을 위해 회원 정보를 저장하는 방법에는 다양한 방법이 있습니다. 예를 들면 데이터베이스 (예: MySQL, PostgreSQL)를 사용하거나 파일에 정보를 저장할 수 있습니다. 이 글에서는 간단한 예제를 위해 파일에 정보를 저장하는 방법을 사용하겠습니다.

import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.List;

public class UserDatabase {
    private static final Path DATABASE_PATH = Path.of("users.txt");

    public static void addUser(String username, String password) throws IOException {
        String userLine = username + "," + password + System.lineSeparator();
        Files.write(DATABASE_PATH, userLine.getBytes(), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
    }

    public static boolean authenticateUser(String username, String password) throws IOException {
        List<String> users = Files.readAllLines(DATABASE_PATH);
        for (String user : users) {
            String[] userFields = user.split(",");
            if (userFields[0].equals(username) && userFields[1].equals(password)) {
                return true;
            }
        }
        return false;
    }
}

위의 예제는 UserDatabase라는 클래스를 사용하여 회원 정보를 파일에 저장하고 인증을 수행합니다.

로그인 기능을 구현하기 위해 위의 코드를 사용할 수 있습니다.

JavaFX 로그인 창 구현

이제 JavaFX를 사용하여 로그인 창을 구현해보겠습니다. 아래는 간단한 예제 코드입니다.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class LoginApp extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("로그인");

        Label usernameLabel = new Label("사용자 이름");
        TextField usernameTextField = new TextField();

        Label passwordLabel = new Label("비밀번호");
        PasswordField passwordField = new PasswordField();

        Button loginButton = new Button("로그인");
        loginButton.setOnAction(e -> {
            String username = usernameTextField.getText();
            String password = passwordField.getText();

            try {
                if (UserDatabase.authenticateUser(username, password)) {
                    // 인증 성공
                    Alert alert = new Alert(Alert.AlertType.INFORMATION);
                    alert.setTitle("로그인");
                    alert.setHeaderText(null);
                    alert.setContentText("인증되었습니다.");
                    alert.showAndWait();
                } else {
                    // 인증 실패
                    Alert alert = new Alert(Alert.AlertType.ERROR);
                    alert.setTitle("로그인");
                    alert.setHeaderText(null);
                    alert.setContentText("아이디 또는 비밀번호가 일치하지 않습니다.");
                    alert.showAndWait();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        });

        VBox layout = new VBox(10);
        layout.getChildren().addAll(usernameLabel, usernameTextField, passwordLabel, passwordField, loginButton);
        layout.setSpacing(10);
        layout.setPadding(new javafx.geometry.Insets(10));

        Scene scene = new Scene(layout, 300, 200);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

위의 예제 코드에서는 LoginApp 클래스를 정의하여 JavaFX 애플리케이션을 시작합니다. start 메소드에서는 로그인 창을 구성하는 UI 요소를 생성하고, loginButton이 클릭되었을 때 사용자 인증을 진행합니다.

UserDatabase 클래스를 사용하여 로그인 인증을 수행하며, 인증 결과에 따라 알림창을 표시합니다.

결론

JavaFX를 사용하여 로그인 및 사용자 인증 기능을 구현하는 방법을 알아보았습니다. 회원 정보를 저장하고, JavaFX를 사용하여 로그인 창을 만들고 인증을 수행하는 방법을 살펴보았습니다. 이를 기반으로 더 복잡한 애플리케이션에 인증 기능을 추가할 수 있습니다.

참고 자료: Oracle JavaFX 공식 문서