eajni IT 초보사전 💦💦

[Spring] MVC 패턴

2022-12-02

SpringMVC로 웹사이트 만들기

MVC(Model, View, Controller) 패턴

소프트웨어 디자인 패턴의 일종으로, 사용자 인터페이스 - 비즈니스 로직을 분리하여 시각적 요소와 서버 작업을 서로 영향 없이 운영되어 유지보수가 편리한 어플리케이션을 만들 수 있다.

  • MVC Model 1: 하나의 JSP 파일에 View, Model, Controller가 포함
  • MVC Model 2: View(.jsp), Model(.java), Controller(.java)가 분리된 환경 «MVC개발»

MVC2

  • VIEW - 브라우저에서 클라이언트에게 화면을 제공 (Client side)
    • HTML, CSS, JavaScript
  • Model - 비즈니스 로직, CRUD 처리 (Server Side)
  • Controller - 사용자의 요청을 받아 제어하하는 역할 (Server Side)
    • 서블릿(Java→HTML)→JSP→Spring→SpringBoot으로 진화하고 있음(고도화)
    • node.js(JavaScript),Django(python), ASP.net, PHP…

3 Tier 구성

  • Web Server (정적 페이지)
  • WebApplication Server (동적 컨텐츠 제공) tomcat
  • Database

JSP 문법

| 구분 | JSP 태그 | 용도 | 참고 | | —– | ———- | ———– | —————————————————————– | | 지시자 | <%@    %> | 페이지 속성 지정 | - page : JSP 페이지의 전체적인 속성을 지정
- include : 다른 페이지를 현재 페이지에 삽입 | | 주석 | <%–  –%> | 주석 처리 | | | 선언 | <%!     %> | 변수, 메소드의 선언 | 표현식 <% %>는 메소드 작성 불가 | | 표현식 | <%=    %> | 결과값 출력 | 세미콜론 사용하지 않음 | | 스크립트릿 | <%     %> | JAVA 코드 삽입 | |

  • JSP 내장객체
    • response 객체
      • 서버에서 클라이언트에게 정보 전달
    • request 객체
      • 클라이언트에서 넘겨주는 정보를 서버에서 받아서 처리
메서드 역할
request.getParameter(“name”) 웹에서 전송받은 request값을 읽어옴(String 리턴)
getAttribute() (Object 리턴, 기본값 null)
createStatement() 데이터베이스로 SQL 문을 보내기 위한 SQLServerStatement 개체를 만듦

Ex. 회원 관리

  • 회원 등록
    • 회원 등록 컨트롤러 작성 → 회원 등록 메서드(return 폼 작성화면)
    • 폼 작성(데이터 post로 보내는 폼)
    • 컨트롤러에 데이터 전달 받을 폼 객체 생성 (@PostsMapping /set변수→save / return “redirect:/”)
  • 회원 조회
    • 컨트롤러에 list(Model model) 메서드 생성 model.addAttribute(”members”, members) ⇒ DB에서 해당 데이터 찾아와 출력해주기
    • 회원리스트.html

DB 접근 기술 변화

순수 JDBC

  1. JDBC Driver load
  2. Connect (메소드 사용) DriverManager.getConnection(url, id, pwd):connection
  3. Statement/PreparedStatement
  4. executeUpdate(), executeQuery()
    • executeUpdate() : insert, delete, update int 반환
    • executeQuery() : select ResultSet 반환
      • next() : 1개열 가져옴
      • getString(), getInt() : 1개행의 특정 칼럼 값 가져옴
  5. close(Connection, Statement, ResultSet)

DI (Dependencies Injection)를 사용하면 기존 코드를 손대지 않고, 설정만으로구현 클래스를 변경할 수 있음

스프링 JDBC Template 사용

  • DB를 사용하기 위해 만들었었던 DataSource Bean을 생성
  • 생성한 DataSource를 파라미터로 하는 jdbcTemplate을 생성하는 생성자를 호출
@Autowired  //생성자 하나일 때 생략 가능
public class JdbcTemplateMemberRepository implements MemberRepository {
	private final JdbcTemplate jdbcTemplate;
	public JdbcTemplateMemberRepository(DataSource dataSource) { 
	        jdbcTemplate = new JdbcTemplate(dataSource);
	}
}

JPA

ORM의 기술 표준으로 사용하는 인터페이스의 모음 자바 프로그램에서 데이터베이스에 데이터를 저장하거나 조회하는 목적으로 사용

  • JPA 엔티티매핑 - @Entity @id @column 등 손쉽게 선언
  • JPA 회원 리포지토리 - DB와 통신하는 엔티티 매니저 주입
public class JpaMemberRepository implements MemberRepository {
	private final EntityManager em;
	public JpaMemberRepository(EntityManager em) {
	this.em = em; 
	}
}


Comments

Content