랄라

3 Layer Architecture 본문

내일배움캠프/공부정리

3 Layer Architecture

devdaeun 2025. 2. 4. 08:45

서버에서의 처리과정을 크케 Controller, Service, Repository로 분류한 것을 3 Layer Architecture 라고 한다.

 

1. Controller

- Client로부터 받은 데이터를 Service에게 전달, 처리된 데이터를 다시 Client에게 전달.

@Controller("loginController") //클래스에 약칭을 정할수도 있다.
public class LoginController {

	private final LoginService loginService;
    
    // 의존성 주입 (Constructor Injection)
    public LoginController(LoginService loginService) {
        this.loginService = loginService;
    }
	
    @GetMapping("/login") //get 요청방식
    public String showLoginPage() {
        return "login"; // 로그인 페이지 뷰로 리턴
    }
    
    @PostMapping("/login") //Post 요청방식
    public String loginUser(@RequestParam String username, @RequestParam String password){
    	boolean isAuthenticated = loginService.loginUser(username,password); //로그인 처리 진행
        
        if (isAuthenticated) {
            return "redirect:/home"; // 로그인 성공 후 홈으로 리다이렉트
        } else {
            return "login"; // 로그인 실패 시 다시 로그인 페이지로 이동
        }
    }
    
    @PutMapping("/updateLogin") // PUT 요청 처리 (로그인 정보 업데이트)
    public String updateLoginInfo(@RequestParam String username, @RequestParam String password) {
        loginService.updateLoginInfo(username, password);
        return "redirect:/profile"; // 로그인 정보 업데이트 후 프로필 페이지로 리다이렉트
    }

    
    @DeleteMapping("/logoutUser") // DELETE 요청 처리 (로그아웃)
    public String logoutUser() {
        loginService.logoutUser();
        return "redirect:/login"; // 로그아웃 후 로그인 페이지로 리다이렉트
    }
    
    @RequestMapping() //크게 request요청으로 들어오는 mapping들을 전부 받는다.
    

}

 

2. Service

- 비즈니스 로직 처리 

- Repository와의 연결(DB 관련 처리요청)

@Service
public class LoginService {

    private final UserRepository userRepository;

    // 의존성 주입
    public LoginService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // 로그인 인증 처리
    public boolean loginUser(String username, String password) {
        // 데이터베이스에서 사용자 조회
        Optional<User> userOptional = userRepository.findByUsername(username);

        if (userOptional.isPresent()) {
            User user = userOptional.get();
            // 비밀번호 확인 (실제 환경에서는 비밀번호 암호화를 사용해야 함)
            return user.getPassword().equals(password);
        }

        return false; // 사용자가 없으면 로그인 실패
    }

    // 로그인 정보 업데이트 처리
    public void updateLoginInfo(String username, String password) {
        // 데이터베이스에서 사용자 조회
        Optional<User> userOptional = userRepository.findByUsername(username);

        if (userOptional.isPresent()) {
            User user = userOptional.get();
            user.setPassword(password); // 비밀번호 업데이트
            userRepository.save(user);  // 데이터베이스에 저장
        }
    }

    // 로그아웃 처리 (세션 종료 등)
    public void logoutUser() {
        // 세션 종료 또는 인증 토큰 제거 등의 처리
        System.out.println("User logged out.");
    }
}

 

3. Repository

- 데이터베이스와의 연결(DB관리)

- 데이터베이스의 CRUD 작업을 처리

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    // username으로 사용자 조회
    Optional<User> findByUsername(String username);
}

'내일배움캠프 > 공부정리' 카테고리의 다른 글

JDBC (+JdbcTemplate)  (0) 2025.02.04
SQL (MYSQL 기준)  (2) 2025.02.04
Servlet 과 Dispacher Servlet  (0) 2025.02.04
MVC 구조  (0) 2025.02.04
WebServer 와 WAS(+Apache Tomcat)  (1) 2025.02.03