[Java] MVC패턴을 이용한 오라클 DB CRUD

신효경·2025년 8월 19일
0

MVC의 전형적인 패턴을 이용해서 생성한 프로젝트를 기반으로 코드 한줄 한줄씩 꼼꼼하게 복습하고 정리해보려고 한다.


🫧MVC패턴이란?

  • Model–View–Controller
    • Model : 데이터와 비즈니스 로직을 담당
    • View : 사용자 UI담당
    • Controller : 사용자 입력 처리 및 model과 view를 연결
  • 애플리케이션을 역할별로 분리해서 구조화하는 디자인 패턴
  • 코드의 유지보수성, 재사용성, 확장성을 높임

🫧프로젝트 구조


🫧View

  • View는 MainView와 SubView(CRUD), ResultView로 나누었다

MainView

  • MainView에 CRUD가 전부 다 들어가 있으면 코드가 너무 길고 복잡해지기 때문에 MainView에서 BookDeleteView나 BookInsertView를 호출하는 방식으로 구현한다

CRUD View

  • 입력을 받아거나 출력을 담당하는 View는
    • 내부에서 변수를 생성하여 사용자의 입력을 DTO로 생성하거나
    • controller로부터 전달받은 ArrayList를 출력한다


🫧Controller

초기화

  • 컨트롤러의 기본 구성은 이렇다
    • View별로 컨트롤러를 생성하면 DAO 접근 통로가 많아지고 이는 DB 사용 제어가 불가능하게 한다
    • 따라서 단 하나의 객체만 사용 가능하도록 싱글톤으로 구성하여 객체간 공유해서 사용하도록 구현한다

      private static Controller instance = new Controller();
    • private static으로 구성해서 본인 객체 인스턴스를 본인 객체가 제공하도록 한다

      private Controller(){}
    • new 연산자로 기본 생성자를 호출할 수 없도록 private으로 막는다

      public static Controller getInstance(){...}
    • 인스턴스를 외부에서 호출하여 사용할 수 있도록 getter를 생성한다

DAO 사용

  • dao는 다형성을 이용하지 않고 직접 생성해서 사용할 수도 있지만 그렇게되면 dao내에 추가적으로 구현된 모든 메서드를 사용할 수 있어 DB접근 통로가 많이 생기게된다
  • 따라서 인터페이스 타입을 참조하는게 더 좋다
    나는 프로젝트가 간단하고 구현체에 있는 기능을 전부 사용하려고 구현체를 직접 가져다가 썼다

구현

  • 대표적인 예시로 create에 해당하는 insert를 보면
  • controller 내부에서는 dto를 생성하고 출력을 위한 view, dao만 사용하는 것을 볼 수 있다
  • dao에서 정의한 기능을 이용해서 사용자가 입력한 값을 가공해서 view로 보내주는 것이다

🫧DAO

  • DB에 접근하여 sql문을 실행한다.
    • util 패키지에 미리 구성해 놓은 DBConnect에서 connection을 받아와서 preparedStatement를 구성한다
    • preparedStatement를 실행하여 ResultSet을 반환하면 이를 가져다가 개수에 따라 DTO에 넣거나 ArrayList에 넣어서 데이터를 구성한다
    • 그리고 항상 사용한 DB 리소스는 반환을 해야한다 -> finally에 정의해준다

🔖전체적인 흐름

View (사용자 입력)
→ Controller에서 데이터 처리
→ Controller 내부에서 DAO 호출 (필요에 따라 View호출)
→ DAO에서 DB에 접근하여 데이터 입출력
→ Controller로 돌아와 결과 값을 View로 전달하여 사용자에게 보여줌

이렇게 정리해볼 수 있다.


🔹오늘 배운 것
mvc패턴을 사용하는 이유와 이를 구현하는 방법에 대해 배웠다.

🔹오늘 내가 잘 한 것
예전에는 떠밀리다시피 과제, 발표도 했지만 졸업 후 살짝 망각해버린 mvc패턴을 다시 기억해서 꼼꼼하게 재정비했다.

🔹오늘 겪을 문제와 해결 방법
mvc 과제를 하면서 잘 만들어보겠다는 생각에 온갖 기능을 한 번에 때려 넣어서 Exception, Print처리 등을 한 번에 구현하려다 보니까 하나의 기능을 완성하기도 전에 처리해줘야 할 것이 너무 많았고 에러도 많이 발생했다.
부수적인 기능을 전부 덜어내고 mvc패턴으로만 프로젝트를 한 번 더 만들어본 후 좀 더 명확하게 정리할 수 있었다.

🔹나만의 복습 방법
main부터 시작해서 코드의 흐름을 따라가면서 데이터가 어떻게 이동하고 가공되는지 머리로 그려보는 것을 반복하다보면 큰 틀이 잡힌다.
큰 틀이 잡히면 세부적인 경우의 수도 흐름을 따라가면서 머리에 그려본다.
그 다음 각 기능을 빈 페이지에 새롭게 다시 구현해보면 도움이 많이 된다.

0개의 댓글