Skip to content

avaska/Spring_ITWILL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring_ITWILL

스프링 수업

git 연동

STS에서는 git commit 따로, push 따로

https://m.blog.naver.com/sim4858/220924984480 이거 보고 하기


스프링 웹 프로젝트

  1. Spring Boot 별도의 설정이 필요없음. WAS가 필요없음. 로딩시간이 짧아서 테스트하기 편함. / 기존의 설정과 다른방식(독립적 방식) jsp 페이지 설정이 조금 복잡함.

  2. Spring Legacy Project => STS4에서는 기본 제공X(마켓플레이스에서 sts 검색추가) 가장 일반적으로 사용되는 형태 다양한 정보 제공 이전의 프로젝트 구조를 이해하기 쉬움. 모든 버전의 스프링을 사용할수 있음. / 초반 설정이 매우 어려움(반복숙달) WAS를 사용할경우 많은 리소스가 필요함. 최신 트렌드에는 조금 느릴수 있음.

  • 빌드도구 Maven : 필요한 라이브러리를 쉽게 추가할수있게 함

    C:\Users\ITWILL.m2\repository => 로컬에 저장됨

    1. 프로젝트 우클릭 > MAVEN > update project 사용 재시작
    2. 필요에따라서 폴더 안에 파일을 직접 삭제후 재시작(STS 종료)
  • 프로젝트 처음 만들때 사용한 패키지명이 프로젝트 실행시 주소로 표기 패키지 : com.itwillbs.test 시작주소 : http://localhost:8080/test/~

    • 프레임워크 : 뼈대, 틀처럼 프로젝트를 구성하는 코드의 묶음 => 일반적인 프로젝트 진행보다 평균적인 결과를 제공하는 형태를 만들기위해서 => 경량 프레임워크 (서버 중심 개발-> 클라이언트 중심 개발) => 프로젝트 전체 설계가 쉽다. => 다양한 프레임워크 지원, 개발도구 지원

    • POJO기반의 구성(Plain Old Java Object) => 자바코드 그대로 스프링에 적용가능(관계 구성시 별도의 API를 사용하지 않아도된다)

    • 제어의 역행(IoC-Inversion Of Control) -> 메서드,객체 호출을 개발자가 직접하는게 아니라 외부(스프링)에서 결정 => 대부분의 프레임워크에서 사용 => 끼워넣기식 개발

    • 의존성 주입(DI-Dependency Injection) => 제어의 역행이 발생할때 스프링 내부에 있는 객체(Bean)가 전달되는 형태를 관리 => A는 B를 필요로 한다.( A-B는 의존 관계에 있다 )

    • set메서드 / 생성자 사용 => java 프로젝트 참고

    • AOP 지원(Aspect Oriented Programming) => 보안처리,로그출력,트랜잭션등과 같은 작업은 반드시 필요하지만 내가 구현하기엔 부담되기 때문에 스프링에서 처리함(횡단 관심사-cross concern) => 횡단 관심사를 처리할수있도록 모듈로 분리해서 제공해주는 프로그래밍 방법

    • 스프링 + MyBatis + MySQL

    MyBatis -> SQL 쿼리를 효율적으로 처리하는 방법( SQL Mapper Library) // 코드량을 줄여줘서 익숙해지면 더 효율이 좋음 (구버전 : IBatis)

    • SQL 구문을 분리해서 처리( XML코드, 어노테이션 )

    • 스프링과의 연동이 매우 우수해서 데이터 처리가 편리함

    • 동적 SQL 구문 // https://mybatis.org/mybatis-3/ko/dynamic-sql.html

    • MyBatis 다운로드 & pom.xml에 dependency 추가하기

    1. MyBatis : https://mvnrepository.com/artifact/org.mybatis/mybatis/3.4.1
    2. MyBatis Spring : https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/1.3.0
    3. Spring JDBC : https://mvnrepository.com/artifact/org.springframework/spring-jdbc/5.2.8.RELEASE
    4. Spring Test : https://mvnrepository.com/artifact/org.springframework/spring-test/5.2.8.RELEASE
    • Spring JDBC,Spring Test는 dependency 추가할 때 프레임워크에 맞는 버전 다운받도록 설정하기
    • ${org.springframework-version}
    • 스프링 웹 프로젝트(MVC)

    Presentation Layer : UI 영역을 처리하는 계층(view) + Controller

    Business Layer : 서비스 계층(model) 처리 작업

    Data Access Layer : 데이터 처리 계층(Persistence Layer) -> DB 관련

    View - Controller - Service - DAO - MyBatis - DB 여러 단계를 거치는 이유 : DB와의 결합을 약화시켜서 대상과 종속적이지 않게 하기 위함

    • pom.xml 설정
    1. properties
    • 자바 버전 1.8으로 : 1.8
    • 프레임워크 버전 : <org.springframework-version>4.3.8.RELEASE</org.springframework-version>
    1. dependencies
    • JUnit
    • mysql-connector-java
    • MyBatis
    • MyBatis Spring
    • Spring JDBC
    • Spring Test
    1. Maven - Update Project 후 jdk 버전 1.8으로 재설정
    • Java compiler
    • Project Facets
    • root-context.xml : 웹과 관련된 설정을 제외한 모든 설정을 처리하는 파일(전체 프로젝트에 영향을 준다)
    • servlet-context.xml : 웹과 관련된 설정을 지정하는 파일

모델2(MVC 패턴) => 화면과 데이터를 분리해서 처리(코드의 재활용) => 위임(FC-Front Controller)받은 컨트롤러가 동작 제어(view 이동 처리)

FC  -  Controller  - Service - DAO - MyBatis(Mapper) - MySql
 |
View

* 스프링 MVC가 처리하는 작업
 - URI(맵핑할 주소) 분석해서 적절한 컨트롤러 이동
 - 컨트롤러에 필요한 메서드 호출
 - 컨트롤러에 결과를 데이터로 저장해서 view로 전달
 - 적절한 view 페이지 이동    

* 개발자가 처리해야하는 작업
 - 특정 URI에 동작하는 컨트롤러 설계
 - 서비스 객체 생성 
 - DAO 객체 생성
 - 컨트롤러에서 필요한 사용자 정의 기능 구현
 - view에서 전달 받은 결과 출력/사용

* 스프링 MVC 컨트롤러
 - 파라미터값 수집 ( DTO/VO(Value Object) 자동으로 처리) 
    -> request의 parameter,attribute 바인딩 값
 - @Controller 어노테이션 사용 -> 쉽게 설정 가능 : request, response 처리 가능
 - 각각의 메서드마다 특정 주소를 매핑해서 처리가능(처리 로직에 집중)
 - 스프링 사용 테스트가 쉽다.
 => servlet-context.xml 파일에 설정값들이 지정됨
 
 
 * 스프링  + MyBatis
 1) XML파일을 사용해서 SQL 구문 작성, DAO에서 xml을 읽어서 사용하게 하는 방식
 - SQL 구문(xml 파일)을 수정, 유지보수 처리가 쉽다. (별도로 만들어진 파일이므로)     
 - 개발 시 코드의 양 증가, 복잡도 증가(파일의 양이 많아지므로)
 - 관리자 입장에서 가장 좋은 방식.(코드의 양이 증가하는 것은 개발자의 몫이고 관리자와 상관 없기 때문)
 
 2) 어노테이션, 인터페이스 객체를 사용해서 SQL 구문을 사용하는 방법
 - 별도의 DAO 없이 개발이 가능 => 생산성 증가
 - 어노테이션으로 SQL구문 작성, 수정 시 매번 컴파일이 필요함.
 
 3) 인터페이스와 XML파일을 사용해서 SQL 구문을 사용하는 방법
 - 간단한 쿼리는 인터페이스(어노테이션), 복잡한 구문은 XML 처리 가능 => 유연한 대처
 - 개발자의 능력에 따른 차이가 발생하기 때문에, 팀플에 부적합.
  • MyBatis -> XML(SQL) -> DAO처리
  • 테이블 생성 및 디비 생성
  • 도메인 객체를 생성(자바빈)
  • DAO 인터페이스를 구현
  • 실제로 처리할 동작을 추상 메서드로 구현
  • XML 파일을 사용해서 Mapper생성, SQL 구문작성
  • MyBatis에서 XML파일을 인식
  • DAO 인터페이스를 구현한 객체 생성
  • 스프링 테스트를 통해서 실제 동작을 구현

Java Resources : domain(VO) - persistence(DAO) - web(Controller) 3가지로 구분할 것

Mabatis mapper를 만드는 방법 https://mybatis.org/mybatis-3/ko/getting-started.html -> 매핑된 SQL 구문 살펴보기

root-context.xml : 스프링에서 웹에관련된 설정을 제외한 모든 설정을 하는 파일

CREATE TABLE springdb.tbl_member ( userid VARCHAR(50) NOT NULL, userpw VARCHAR(45) NOT NULL, username VARCHAR(45) NOT NULL, email VARCHAR(200) NULL, regdate TIMESTAMP NULL DEFAULT now(), updatedate TIMESTAMP NULL DEFAULT now(), PRIMARY KEY (userid));

  • 도메인 : 개발프로젝트에서 가장 중요한 용어(단어)를 도메인(명사) 물리적인 기준으로 분리 가능한 단위(DB 테이블로 나누어지는 상태) ex) 쇼핑몰 1차 도메인- 회원, 결제, 주문, 상품, 리뷰, 게시판,.... 2차 도메인- 회원 -> 회원 가입, 수정,삭제 ....

  • 비즈니스 계층 (Service) -> 사용자의 요구사항을 구현한 계층 (인터페이스 -> 클래스) -> DAO 와 Controller의 연결 -> 코드의 분량이 증가 (결합도 감소,응집도 감소)
    -> 요구사항 마다 구현할수있도록 준비되어 있기 때문에 완충작용 (디비에 처리되는 동작을 완충시키는 작업) -> 컨트롤러와 같은 외부 호출에서 영속계층(DAO) 호출을 막아서 종속적인 상황을 제거함

  • 컨트롤러가 DAO에 직접 접근할 경우 : 컨트롤러에 모든 동작의 구현이 집중됨 (컨트롤러에서 DAO 객체 직접 생성해서 사용)
  • 서버 동기화 도중에 페이지 요청 -> 동기화되는 시점에 문법이 완벽하지 않으면 exception 메시지가 발생 -> 동기화 끝나고 요청하거나, 서버 꺼놓고 작업하면 문제X

*Server - Path 지정 -> "/" : 프로젝트가 1개만 있을 때 편하게 쓰기 위해 root를 기본 경로로 지정 -> "/test" : 프로젝트가 여러개 있을 때 패키지명을 붙여서 path를 구분

  • 404 에러
  • HTTP Status 404 - : 맵핑된 정보가 없다
  • HTTP Status 404 - ~~~.jsp : 맵핑은 되어있으나 연결되는 view페이지가 없다 ex) HTTP Status 404 - /WEB-INF/views/member/deleteForm.jsp
  • 페이지 실행 순서

    • java(jsp) -> JSTL,EL -> html -> [ javascript -> jquery ] -> JS와 jquery는 상황에 따라 실행되는 우선순위가 바뀔 수 있음 -> 자바소스 컴파일이 가장 우선적으로 실행!!

    • 자바스크립트보다 JSTL(EL)이 우선적으로 실행되기 때문에 내장객체를 자바스크립트로 받아올 수 있다.

    • 컨트롤러로부터 데이터가 넘어온 것이므로 자바->자바스크립트로 데이터가 전달되는 것과 같다.

    • 자바 코드가 먼저 실행되기 때문에 view 페이지에서 sendRedirect를 하면 자바코드 아래의 html태그가 실행되기 전에 페이지 이동이 되어버린다. (main.jsp 화면이 뜨기도 전에 다른 페이지로 바뀜)


  • 실무에서 시스템콜(sysout 등) 사용하지 말 것 -> 속도 저하 원인 -> 대신 logger 사용

**팀프로젝트 소스 DB 오류 발생할 때 HTTP Status 500 - org.apache.commons.dbcp.SQLNestedException :Cannot create PoolableConnectionFactory (Access denied for user 'itwillbs8'@'localhost' (using password: YES))

  • 발표 시 사용했던 웹서버 계정과 로컬 서버와의 차이 때문일 수 있다고 함
  • MySQL에 해당 계정을 만들어주거나
  • META-INF/context.xml, DAO 설정 바꿔보라고 함

**팀프로젝트

  1. 버전 통일
  2. 테이블 짜기(각자 구현하고자 하는)
  3. 소스 관리(git,카톡 등)
  4. 저작권 주의(폰트,이미지)
  5. 파트 나눠서 2명씩 분담

About

스프링 수업

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors