랄라
3 Layer Architecture 본문
서버에서의 처리과정을 크케 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 |