2020년 02월 04일

업데이트:


스프링 설정

서버구동! tomcat Start ->

  1. web.xml(배포서술자)을 읽는다 . 서버 배포에 필요한 설정 초기화해주는 파일.
    1-1. listener : web.xml에서 가장 먼저 생성되는 객체
    리스너가 생성될 때 param-value에 작성된 것들(root-context.xml, spring-security.xml 파일)을 읽어들인다.
    1-2. Dispatcher Servlet을 지정한다.(servlet-context.xml파일)
    1-3. filter(문자 인코딩 필터)


  2. root-context.xml, spring-security.xml
    2-1. root-context.xml (다른 모든 웹 구성 요소에 표시되는 공유 자원을 정의)
    프로젝트에서 공통적으로 사용하는 요소들(DB연결,AOP..)를 정의하면서 bean 등록을 한다.

    2-2. spring-security.xml : 스프링 프로젝트 보안 요소 추가 설정 파일



    • Bean이란? 스프링 컨테이너가 생명주기를 관리하는 객체,

      개발자가 아닌 스프링 컨테이너가 생성한 객체, 제어 권한이 스프링 컨테이너에게 있다. 공통적으로 사용하는 자원들을 bean으로 등록함으로써 스프링 컨테이너가 제어 권한을 가져 필요한 곳에 의존성주입(DI)가 가능해 진다.

  3. Dispatcher Servlet(servlet-context.xml파일)
    클라이언트의 요청을 최전방에서 받아들이고 요청에 맞는 컨트롤러를 찾아 연결 후 반환되는 응답을 적절한 View로 연결해 클라이언트에게 응답하는 역할을 한다.

    3-1. annotation-driven :
    @RequestMapping, @ExceptionHandler 를 사용 가능하게 하는 태그.
    component-scan : 지정된 패키지 내의 @Component,@Controller,@Service,@Repository 어노테이션이 붙은 클래스를 Bean으로 등록하는 태그. (Bean = 스프링 컨테이너가 제어, DI가 가능)

    3-2. Handler Mapping :
    요청 주소를 처리할 수 있는 컨트롤러 메소드를 찾는 기능.
    (요청이 오면 그것을 처리할 수 있는 컨트롤러가 어디 있는지 찾아주는 기능.) -> @Controller, @RequestMapping 을 통해서 요청 처리 메소드를 검색한다.

    3-3. View Resolver :
    컨트롤러에서 반환된 뷰 이름을 토대로 응답화면 view를 검색함.
    (prefix + 반환된 뷰 이름 + suffix)




마이바티스 관련 설정

  1. root-context.xml에 작성된 내용
    1-1. DataSource : DBCP(커넥션 풀) 설정 객체 (DB연결 정보, 커넥션 풀 생성 정보, 오토커밋 설정을 작성 한다.)
    커넥션 풀 : 커넥션을 필요할 때 하나 씩 만드는게 아닌 커넥션 풀에 미리 커넥션을 만들어 둠.
    —이 때 까지는 단순 JDBC에서만 사용하는 용도임.
    단순한 JDBC를 조금 더 간단하고 효율성있게 사용하기 위해서 (DB연결을 쉽게 하고, 조금 더 SQL을 쉽게 사용할 수 있게)마이바티스를 사용한다.

    1-2. SqlSessionFactoryBean : 마이바티스 사용을 위한 SqlSession 생성 객체(Bean) 생성
    해당 객체 생성 시 DataSource가 필요하다. + mybatis-config.xml 파일도 필요함.
    DB연결 정보 = DataSource, 추가적인 마이바티스 관련된 내용(별칭,매퍼) = mybatis-config.xml 가 있음.

    1-3. SqlSessionTemplate : SqlSession을 통한 DB연결 시 트랜잭션 처리를 관리할 수 있는 객체(Bean)


  2. mybatis-config.xml : 마이바티스 설정 파일
    마이바티스 관련 세팅, 별칭,mapper등록 등의 내용을 정의


  3. mapper-xml : 마이바티스 사용 시 sql 구문이 작성된 xml 파일
    <mapper namespace="aaa"> : 해당 매퍼파일의 이름을 “aaa” 라고 지정

    <resultMap> : SELECT구문에서만 사용되는, SELECT 시 조회 결과인 ResultSet의 컬럼명과 과 결과를 담을 VO의 필드명이 일치하지 않는 경우 이를 매핑 시켜주는 태그.

    (속성) parameterType : DAO -> mapper로 전달받은 자료형을 작성.

    (속성) resultType : SELECT 조회 결과의 자료형을 작성. (기본자료형, string,필드명,==컬럼명인 vo)

    (+ DML 구문은 resultType은 _int로 고정이기 때문에 생략 가능하다.
    + INSERT 성공 1, 실패 0 / UPDATE,DELETE 성공한 행의 개수, 실패 0 )
    (속성)resultMap : 선언한 태그의 id 작성.
    **resultType과 resultMap 속성은 동시에 작성할 수 없다.





Controller에서 새롭게 사용된 어노테이션, 객체 정리

  • Annotation이란?
    컴파일러, 스프링컨테이너가 해석하는 주석.
    컴파일러,스프링컨테이너에게 무언가를 알려주기 위한 주석.


@Controller : 컨트롤러임을 알려줌 + Bean 등록

@RequestMapping : Handler Mapping 시 검색되는 주소를 작성. (매핑되는 주소)

@SessionAttributes : Model에 추가된 데이터 중 key값이 일치하는 데이터의 scope를 session으로 이동 시킴.

@ResponseBody : 메소드의 반환값이 View name이 아니라 값 자체임을 알려줌. AJAX에서 많이 사용됨.

*컨트롤러에서 반환되는 것은 view resolver나 핸들러 매핑으로 가게되는데, 뷰 네임이 아닌 값이라고 알려주는 것임.

@RequestParam : 요청 파라미터를 매개변수에 매핑시켜달라고 하는 것.
ex) RequestParam(“memberId”) String id
-> 파라미터 중에 memberId라는 것의 값을 매개변수 id에 넣어달라고 하는 것임.

@ModelAttribute : 요청 파라미터 중 지정된 객체의 필드와 name 속성 값이 일치하는 파라미터를 객체에 setting하여 커맨드 객체로 반환함을 지정한다.
ex) @ModelAttribute Member signUpMember
-> 파라미터로 전달된 값 중 name 속성값이 Member 클래스 필드와 일치하는 것을 객체에 담아 signUpMember로 반환해 줌.
(==signUpMember가 참조하는 객체를 ‘커맨드 객체’라고 부른다.)

@Autowired : Bean으로 등록된 객체 중 지정된 변수와 타입이 일치하는 Bean을 자동으로 찾아 의존성 주입을 수행한다.

@ExceptionHandler : 지정된 컨트롤러 내에서 발생하는 예외를 처리하는 메소드임을 알려줌.



Model 객체 : 데이터를 key:value 형태로 전달해주는 용도의 객체
(기본 scope는 request scope, @SessionAttributes에 작성된 값과 key값이 일치하는 경우 session scope)

RedirectAttributes 객체 : 리타이렉트 시 데이터를 request scope로 전달해주는 객체.
원래 redirect 시 요청데이터가 폐기돼서 사용을 못하는데, RedirectAttributes 를 사용하면 redirect 시 session scope로 잠시 올려둠으로 데이터를 전달할 수 있다.

SessionStatus 객체 : @SessionAttributes로 인해 등록된 session을 관리하는 객체.





Service에서 새롭게 사용된 어노테이션, 객체 정리

@Service : 서비스임을 알려줌 + Bean 등록

@Transactional : 지정된 서비스 메소드에서 예외(기본값 : RuntimeException)발생 시 트랜잭션을 rollback 시키고, 예외가 발생하지 않으면 commit 시킬 것을 알려주는 어노테이션

  • rollbackFor 속성 : 발생하는 예외 기준을 변경하는 속성.


bcrypt 암호화 : (입력값 + 랜덤값(salt)) –> 암호화 진행 하는 방법

  • 비밀번호 암호화에 특화됨.
  • BCryptPasswordEncoder.encode( 비밀번호 ) : 암호화 된 비밀번호 반환
  • BCryptPasswordEncoder.matches(평문,암호화비밀번호) : 평문과 암호화 비밀번호가
    일치하면 True, 다르면 false를 반환
    사용 하려면 spring-security-core 모듈이 필요하다.






DAO에서 새롭게 사용된 어노테이션, 객체 정리

@Repository : 저장소(DB)와 연결되는 객체임을 알려줌 + Bean 등록

SqlSessionTemplate : 트랜잭션 관리가 가능한 마이바티스용 DB 연결 객체 (root-context.xml 에서 정의 함)





요청 주소 경로 (URL)

  • 최상위 요청 주소 경로(/) : contextPath
    contextPath는 기본적으로 프로젝트 명 또는 패키지 중 세번 째 레벨의 이름을 사용하는 경우가 많다.

  • ContextPath 변경방법 :
    1. web.xml의 displayName 변경
    2. pom.xml의 artifactId 변경(프로젝트 배포 이름)
    3. 프로젝트 우클릭 후 properties -> webProjectSettings 의 context root 변경
      (1,2,3 영구적 변경)

    4. Servers 탭에서 서버 더블 클릭 -> Modules 탭에서 Edit 로 Path 변경.
      (4 server가 유지되는 동안만 변경)

      ** 프로젝트 우클릭 properties로 변경하는 방법을 가장 많이 사용한다.



  • html,jsp, js, css (화면과 관련된) 에서는 최상위 요청 주소 작성하는 법 : /spring , ${contextPath}
  • Controller에서 최상위 요청 주소 작성하는 법 (/spring, request.getContextPath())
    –> 만약 Controller 에서 “/”만 작성하는 경우는 localhost:8080/ 마지막에 있는 “/”를 나타냄.
  • 단, RequestMapping과 같은 주소 매핑에서는 “/”가 최상위 주소 /spring 을 나타냄.





  • 파일 경로 (Path)

    최상위 폴더(/) == webapp 폴더를 나타냄 (배포되는 최상위 폴더)
    (/webapp, /WebContent 사용하지 않음. 최상위 폴더는 /만 작성해주면 된다.)

  • 절대 경로 : 절대 변하지 않는 한 위치를 기준으로 경로를 표시하는 방법

    보통 최상위 요청 주소(contextPath) 또는 최상위 폴더(webapp)를 기준으로 함.
    ex) login.jsp 파일의 절대 경로 : /WEB-INF/views/member/login.jsp
    ex) signUpAction 요청의 절대 경로 : ${contextPath}/member2/signUpAction

  • 상대 경로 : 현재 위치를 기준으로 다른 요청이나 파일의 위치를 표시하는 방법.

    [기호]
    / : 하위 디렉토리
    ../ : 상위 디렉토리
    (공백) : 같은 디렉토리

    ex) ${contextPath}/member2/signUp 상태에서
    ${contextPath}/member2/signUpAction 으로 상대 경로로 요청 지정하는 방법.
    ${contextPath}/member2/ 까지 같음 == 같은 디렉토리
    경로 : href=”signUpAction”

    ex) ${contextPath}/member2/signUp 상태에서
    ${contextPath}/board/insert 로 상대 경로로 요청 지정하는 방법.
    경로 : href=”../board/insert”

    ex) webapp/WEB-INF/views/member/login.jsp에서
    webapp/index.jsp 까지 상대 경로 지정 방법
    경로 : href =”../../../index.jsp”





태그: , ,

카테고리:

업데이트:

댓글남기기