프로젝트를 생성하면 패키지에 자동으로 생성됨.원격프로그램으로 등록 방법Reflection API를 통해 접근제어자가 private이라도 원격으로 접근 가능Reflection API 사용법
요청 : HttpServletRequest request응답 : HttpServletResponse response자주 쓰이는 request메서드
TwoDice.java 추가
역할에 따라 구분클라이언트(Client) : 서비스를 요청하는 애플리케이션서버(Server) : 서비스를 제공하는 애플리케이션어떤 서비스를 제공하느냐에 따라 구분Email Server : Email Service 제공File Server : File 제공Web Serv
톰캣설치경로/conf/server.xml: Tomcat 서버 설정 파일톰캣설치경로/conf/web.xml: Tomcat의 모든 web app의 공통 설정톰캣설치경로/WEB-INF/web.xml: web app의 개별 설정(context(프로젝트)마다 하나씩 있음)원격
서로 간의 통신을 위한 약속, 규칙.주고 받을 데이터에 대한 형식을 정의한 것.단순하고 읽기 쉽다. - 텍스트(HTML) 기반의 프로토콜.상태를 유지하지 않는다.(stateless) - 클라이언트 정보를 저장X\-> 보완하기 위해 쿠키 & 세션을 사용확장 가능하다. -
바이너리 파일 문자와 숫자가 저장되어 있는 파일데이터를 있는 그대로 읽고 쓴다텍스트 파일 문자만 저장되어 있는 파일숫자를 문자로 변환 후에 쓴다.텍스트 기반 프로토콜에 바이너리 데이터를 전송하기 위해 고안.HTTP의 Content-Type헤더에 사용. 데이터의 타입을
입력, 작업, 출력 3개의 관심사(해야 할 작업)를 분리SRP - 단일 책임의 원칙"하나의 메서드는 하나의 책임"관심사 분리 변하는 것, 자주 변하지 않는 것 분리공통 코드 분리(중복 제거)1.입력 --> 2.처리, 출력, 2.처리, 출력, 2.처리, 출력(입력, 처리
content타입, charset지정을 해야 한글이 안깨짐EL로 Model에서 받은 값을 넣을 자리를 만듬유효성검사를 통과하지 못할 때Controller에서 반환하는 뷰의 이름에 접두사, 접미사 붙여주는 부분Controller처리와 입력, 출력을 분리.입력은 Dispa
자바 버전 변경.pom.xml파일 변경 후 Maven - Update Project 클릭 해야 함.메서드 정보를 얻어서 출력하는 예제매개변수 이름은 (Reflection API, Class file)로 얻을 수 있음.Class 객체를 만들어서 메서드 정보를 배열에 저장
Reflection API를 사용해서 Spring이 viewName, model을 구하는 과정매개변수를 동적으로 받아옴.
요청이 들어오면 서블릿 인스턴스가 존재하는지 확인.서블릿 인스턴스가 없으면, 서블릿 클래스를 로딩하고, 인스턴스를 생성 후 init()메서드로 초기화하고 service()메서드를 실행해서 응답함.따라서 첫 실행시에는 속도가 느림.그다음부터는 서블릿 인스턴스가 존재하므로
HTTP특징 - 상태 정보 저장 X(Stateless)따라서 저장소가 필요(저장소(Stateful) - 상태 정보 저장 O)저장소는 Map 형태(Key:속성, Value:속성값).Map에 읽기, 쓰기 가능.읽기 : getAttribute()쓰기 : setAttribut
@WebServlet으로 서블릿의 URL에 맵핑할 때 사용.2개의 Map(저장소) children(서블릿), servletMappings가 존재.요청 --> servletMappings --> children --> ServletServletMapping의 defaul
공통적인 요청 전처리와 응답 후처리에 사용. 로깅, 인코딩(변환) 등.중복코드 분리.DispatcherServlet, AOP와 비슷.필터 1개로 처리필터 2개로 처리실행 시간을 구하는 예제
@RequestParam(required=false)는 생략 가능. 필수입력X@RequestParam(required=true)는 생략 불가. 필수입력.매개변수가 String일 때매개변수가 int일 때각 프로젝트의 web.xml에 저장trace : 에러 출력 로그 레벨
적용 대상을 Model의 속성으로 자동 추가해주는 애너테이션반환 타입 또는 컨트롤러 메서드의 매개변수에 적용 가능key값을 생략하면, 타입의 첫글자를 소문자로해서 key로 함.컨트롤러 매개변수기본형, String일 때는 @RequestParam이 생략 된 것.참조형일
servlet-context.xml : web관련 설정파일root-context.xml : non-web관련 설정파일HTML URL에서 resources를 빼려면 아래처럼 mapping을 수정.URL에 한글이 있을 때 복사 하고 싶다면 앞에 한글자 빼고 복사하면 된다.
자바버전, 스프링버전 변경 가능.수정 후 Maven - Update ProjectController에서 메서드가 단순히 GET방식으로 view로 URL 연결만 하고, 다른 하는 일이 없을 때setvlet-context.xml에 view-controller로 등록해서 사
이렇게 URL을 나눌 수도 있다.우선순위(1 -> 2 -> 3)(Servlet과 비슷)1.exact mapping : 정확히 일치2.path mapping : 경로 맵핑3.extension mapping : 확장자 맵핑?는 한 글자, \*는 여러 글자, \*\*는 하위
클라이언트에서 수동으로 write.jsp로 요청(request).서버에서 300번대 응답헤더(Redirect)로 응답.클라이언트에서 자동으로 login.jsp로 GET요청.(처음 수동으로 GET/POST요청과 상관없이, Redirect는 무조건 GET요청으로 보냄)(요
이름과 값의 쌍으로 구성된 작은 정보. 아스키 문자만 가능.서버에서 생성 후 전송, 브라우저에 저장. 유효기간 이후 자동 삭제.서버에 요청시 domain, path가 일치하는 경우에만 자동 전송.클라이언트에서 서버로 요청이 가면EL을 사용해서 쿠키에 id값이 있으면 v
서로 관련된 요청들을 하나로 묶은 것 - 쿠키를 이용browser마다 개별 저장소(session객체)를 서버에서 제공(1:1)(쿠키: 브라우저에 저장, 세션: 서버에 저장)브라우저가 요청을 하면 서버가 무조건 세션 객체(저장소)를 만듬세션 id가 담긴 쿠키를 생성해서
loginOutLink, loginOut 추가
index.jsp에서 Board를 누르면 BoardController에서 로그인 유무 확인.로그인 되어 있으면 boardList.jsp로 이동.로그인 안되어있으면 loginForm.jsp로 리다이렉트.loginForm.jsp에서 입력한 id, pw를 LoginContr
메서드 앞에 @ExceptionHandler를 붙여서 try-catch의 catch처럼 사용 가능. 단, 같은 클래스 내에서 사용.@ExceptionHandler(Exception.class)@ExceptionHandler({NullPointerException.cla
예외 처리를 위한 메서드를 작성하고 @ExceptionHandler를 붙인다.@ControllerAdvice로 전역 예외 처리 클래스 작성 가능(패키지 지정 가능)예외 처리 메서드가 중복인 경우, 컨트롤러 내의 예외 처리 메서드가 우선.응답 메세지의 상태 코드를 변경할
HandlerMapping은 Map의 형태로(key=URL, value=메서드) 저장해 놓고 있다가,요청이("/ch2/register/add) 오면 DispatcherServlet이 받아서HandlerMapping에게서 URL에 맞는 메서드를 찾고, 메서드 정보를 받아
데이터의 변환과 검증@DateTimeFormat로 CustomDateEditor를 대신 할 수 있다.
객체를 검증하기 위한 인터페이스. 객체 검증기(validator)구현에 사용컨트롤러 메서드 -> 검증이란 관심사로 분리@Valid하나의 Validator로 여러 객체를 검증할 때, 글로벌 Validator로 등록글로벌 Validator로 등록하는 방법servlet-co
변경에 유리한 코드(1) - 다형성, factory method변경에 유리한 코드(2) - Map과 외부 파일
객체 저장소@Component1\. 패키지 내의 모든 클래스를 읽어서 Set에 저장.2\. 패키지 내에 @Component붙은 클래스 찾기.3\. 객체 생성해서 map에 저장.
@Autowired맵을 뒤져서 각 타입에 맞는 객체주소를 찾아서 참조변수에 대입.by Type, Key값을 찾음by Name, instanceof로 Value값을 찾음.타입의 첫글자를 소문자로 바꿔서 찾음.@Resource(name="engine2")을 써서 찾을 수도
config1.xml config.xml SpringDiTest.java
ApplicationContext 메서드 예제
제어의 역전 IoC(Inversion of Control)제어의 흐름을 전통적인 방식과 다르게 뒤바꾸는 것.전통적인 방식 사용자 코드가 Framework 코드를 호출Ioc Framework 코드가 사용자 코드를 호출의존성 주입 DI(Dependency Injection
Spring container에서 "이름(by Name)"으로 빈을 검색해서 참조변수에 자동 주입(DI).일치하는 이름의 빈이 없으면, 예외 발생.로 @Component가 클래스를 자동 검색해서 빈으로 등록@Controller, @Service, @Repository,
Spring container에서 "이름(by Name)"으로 빈을 검색해서 참조변수에 자동 주입(DI).일치하는 이름의 빈이 없으면, 예외 발생.<component-scan>로 @Component가 클래스를 자동 검색해서 빈으로 등록@Controller, @Se
JUnit 버전 변경Spring TestContext FrameworkSpring JDBCMySql ConnectorMySql id/pw 입력
User.java DBConnectionTest2Test.java
데이터(data)에 접근(access)하기 위한 객체(object)Database에 저장된 데이터를 읽기, 쓰기, 삭제, 변경을 수행(CRUD)DB테이블당 하나의 DAO를 작성(1:1)
LoginController.java RegisterController.java
1. Transaction이란? AOP와 비슷. 더이상 나눌 수 없는 작업의 단위(Tx). insert, update, select가 각 하나의 Tx. 계좌 이체의 경우, 출금(update)과 입금(update)이 하나의 Tx로 묶여야 됨. (출금 --> 돈 --> 입
여러 메서드에 공통 코드를 추가해야 한다면?맨 앞, 맨 끝.중간에는 추가 할 수 없다.Before AdviceAfter AdviceAround Advice(Before + After)관점 지향 프로그래밍.부가 기능(advice)을 동적으로 추가해주는 기술.(동적 추가
1. 서비스 계층(Layer)의 분리 - 비지니스 로직의 분리 @Controller - 컨트롤러, Presentation영역 @Repository - Dao, Persistence영역, Data Access Layer(영속 계층) (중복코드 제거, 관심사의 분리를 위
DAO의 각 메서드는 개별 Connection을 사용.같은 Tx내에서 같은 Connection을 사용할 수 있게 관리.DAO에서 Connection을 얻거나 반환할 때 DataSourceUtils를 사용해야빈으로 등록하는 방법==> 핵심 기능 분리클래에 붙이면 클래스
자바코드 <--> SQL(별도의 xml로 분리)SQL Mapping Framework - Easy & Simple자바 코드로부터 SQL문을 분리해서 관리.매개변수 설정과 쿼리 결과를 읽어오는 코드를 제거.(getInt()-X, getString()-X)작성할 코드
DB테이블 생성Mapper XML & DTO 작성DAO인터페이스 작성(구현한걸 Extract Interface하면 됨)DAO인터페이스 구현 & 테스트계층간의 데이터를 주고 받기 위해 사용되는 객체@Controller요청과 응답을 처리데이터 유효성 검증실행 흐름을 제어(
페이지 내비게이션바테스트 코드
UserDaoImple만들고 refacter -> extract inerface로 만듬TDD
읽기 : /board/read?bno=번호 , GET, 지정된 번호의 게시물을 보여준다.삭제 : /board/remove , POST, 게시물을 삭제한다.쓰기 /board/write , GET, 게시물을 작성하기 위한 화면을 보여준다.쓰기 /board/write , P
update에 writer 추가script추가
1) 동적 쿼리2) 페이지 이동공통 부분을 로 정의하고 로 포함시켜 재사용와일드카드 Oracle : %(여러글자, 0개 이상), ?(한글자)MySql : %(여러글자, 0개 이상), (한글자)ex) 'title%' ==> title2(O), title(O)ex) 'ti
자바스크립트 객체 표기법XML --> 복잡, data보다 Tag가 더 많음.JSON --> 간단JS객체를 서버로 전송하려면, 직렬화(data를 문자열로 변환)가 필요.서버가 보낸 데이터(JSON문자열)를 JS객체로 변환할 때, 역직렬화가 필요.비동기 통신으로 데이터를
HTTP, 요청과 응답, Client & Server, server.xml & web.xml, 텍스트와 바이너리 원격 프로그램의 실행방법은? 외부에서 서버에 있는 프로그램을 실행하려면 클라이언트인 브라우져와 서버인 WAS가 있어야 한다. 스프링에서 클래스를 원격프로그
webapp/WEB-INF/web.xml - web app의 개별 설정 파일
(톰캣 폴더의 파일을 스프링이 복사해서 사용)
아래는 3개는 기본으로 설정되어있다.root-context.xml은 기본적으로 비워져있다.
SOLID1\. SRP - 단일 책임의 원칙"하나의 메서드는 하나의 책임만 진다"관심사(해야할 작업)의 분리변하는 것, 자주 변하지않는 것 분리공통(중복) 코드 분리입력, 처리, 출력을 분리. + Model.요청이 들어오면 DispatcherServlet이 Model을
Servlet과 JSP가 변환 및 실행되는 순서와 과정JSP의 저장소 4개 - pageContext, request, session, applicationJSP의 EL, JSTL 사용 방법Filter - 요청의 전처리, 후처리스프링은 서블릿을 사용.@WebServlet
src/main/resources/log4j.xml
요청의 파라미터를 연결할 기본형 매개변수에 붙인다.기본형 매개변수 앞에 생략하면 required=false이고,@RequestParam을 붙이면 required=true이다.특히 매개변수 타입이 int일 때 required=true로 하고 예외처리를 하던지,아니면 re
@GetMapping, @PostMappingredirect, forwardInternalResourceViewResolver InternalResourceViewRedirectViewJstlView@GetMapping, @PostMapping은 스프링 4.3 이상부터
LoginController.java - 로그인 id, pwd 유효성 검사, 쿠키 적용loginForm.jsp - id input태그와 checkbox에 쿠키 적용@GetMapping으로 로그인 페이지를 불러오고@PostMapping으로 id, pwd의 유효성 검사를
서로 관련된 요청과 응답들을 하나로 묶은 것 - 쿠키를 이용(요청은 원래 서로 독립적(서로 관계없음))브라우저마다 개별 저장소(session 객체)를 서버에서 제공.(쿠키를 이용하므로 브라우저와 서버는 1:1 관계)브라우저에서 서버로 요청을 보내면, 서버에서 무조건 세
@ExceptionHandler, @ControllerAdvice@ResponseStatusisErrorPage="true", pageContext.exceptionweb.xml - <error-page>servlet-context.xml - SimpleMappi
요청이 들어오면, DispatcherServlet이 다 받아서, HandlerMapping에게 요청의 URL에 맵핑된 메서드가 뭔지 물어본다.HandlerMapping에게 URL에 맵핑된 메서드에 대한 정보를 받고 Model객체를 만들어서, HandlerAdapter(
타입 변환, 데이터 검증, BindingResultBindingResult타입 객체를 컨트롤러 메서드의 매개변수로 선언하면,예외가 발생했을 때 에러페이지로 가지 않고, 컨트롤러에 Binding 결과를 주고, 컨트롤러가 처리하도록 한다.컨트롤러 메서드에 BindingRe
Spring DI(의존성 주입) 흉내내기 1 ~ 3, 실습@Component - component-scan으로 bean으로 등록 @Autowired, @Resource - bean으로 등록한 것을 주입config.xml - bean 등록, bean으로 초기화(sette
Spring DI 활용하기 - 1 ~ 4bean - Spring containerAppicationContext(AC) - Root AC, Servlet AC(부모-자식 관계)Root AC - root-context.xml, Servlet AC - servlet-con
MySQL 연결JDBCSpring JDBCJUnitIntelliJ, MySQL 연동pom.xml - mysql-connector-java추가(mysql검색)pom.xml - spring-jdbc추가(spring jdbc검색) - EL로 srping 버전 변경root-c
CRUD 작성 및 테스트
DAO란?UserDaoImpl, 테스트 코드 작성데이터(data)에 접근(access)하기 위한 객체(object)DB에 저장된 데이터에 CRUD를 수행 - CRUD메서드를 모아놓음DB테이블당 하나의 DAO를 작성.DAO - 영속계층(Persistence Layer,
더이상 나눌 수 없는 작업의 단위.계좌 이체의 경우, 출금(update)과 입금(update)이 하나의 Tx로 묶여야 됨.==> 둘 다 성공하지 않으면 원래 상태로 Rollback.==> 둘 다 성공하던지, 아니면 하나만 실패해도 취소.원자성(Atomicity) - 나
AOP 개념 - 부가기능을 동적으로 추가해주는 기술AOP 용어 - target, advice, proxy, weaving, join point, pointcutAdvice 애너테이션의 종류 - @Around, @Before, @After, @AfterReturning,
계층 분리 - @Controller, @Service, @Repository, DBTransactionManager - 서비스 계층에서 수동 생성, bean으로 등록 후 @Transactional 사용비지니스 로직의 분리, @Service => 관심사의 분리@Contr
MyBatis 소개SqlSessionFactoryBean - SqlSession을 생성하기 위해 bean으로 등록SqlSessionTemplate - bean등록 후, SQL 메서드를 Dao에서 사용SqlSessionTemplate의 메서드 - insert, updat
DAO 작성 순서 - DB테이블, mapper.xml, Dto, DaoImpl, extract interface, 테스트DTO - 계층간에 데이터를 주고 받기 위한 객체XML의 특수문자 처리 - &lt;, &gt;, <!CDATA\[]]>DB테이블
게시판 페이지 만들기 iv 선언 생성자 PageHandler.java
읽기 - '/board/read?bno=번호' GET, 지정된 번호의 게시물을 보여준다.삭제 - '/board/remove'POST, 게시물을 삭제한다.쓰기 - '/board/write'GET, 게시물을 작성하기 위한 화면을 보여준다.쓰기 - '/board/write'
키워드, option을 action의 URL과 맵핑된 컨트롤러의 메서드에서 받아야 한다.공통 부분을 <sql>로 정의하고 <include>로 포함시켜 재사용.MySql : '%' - 여러글자(0개 가능), '\_' - 무조건 한글자Oracle : '%' -
DB테이블 생성Mapper.XML 작성 - SQL문으로 CRUD 작성DAO 작성 & 테스트Service 작성 & 테스트컨트롤러 작성 & 테스트뷰(UI)작성 & 테스트 - HTML, CSS, JS, jQuery
스프링의 정석 이론 요약Client와 Server에 대해 아는대로 적어라역할에 따라 클라이언트와 서버를 구분한다.클라이언트는 서비스를 서버에 요청하고, 응답을 받는 애플리케이션이고, 서버는 서비스를 클라이언트에 제공하는 애플리케이션이다.서버의 종류는 제공하는 서비스에
[스프링의 정석 이론 요약] [Client와 Server에 대해 아는대로 적어라] 역할에 따라 클라이언트와 서버를 구분한다. 클라이언트는 서비스를 서버에 요청하고, 응답을 받는 애플리케이션이고, 서버는 서비스를 클라이언트에 제공하는 애플리케이션이다. 서버의 종류는 제