- 스프링 프레임워크를 사용하는 프로젝트를 아주 간편하게 설정할 수 있는 스프링 프레임워크의 서브 프로젝트라고 할 수 있다.
- Spring Boot makes it easy to create stand-alone 단독 실행 가능한 스프링 애플리케이션을 생성한다.
- 웹 컨테이너를 내장하고 있어 최소한의 설정으로 쉽게 웹 어플리케이션을 만들 수 있다.
스프링 부트를 왜 사용해야 하나? 장점?
- 스프링 프레임 워크를 사용하면 많은 xml 설정파일 등을 작성 하는 등 설정하는 방법이 어려운 편이기 때문에 보통 기본 설정 파일을 구성하는데 몇 날 몇 일이 걸렸다. 하지만 스프링 부트는 반복되는 개발환경 구축을 위한 코드작성등의 노력을 줄여주고 쉽고 빠르게 프로젝트를 설정할 수 있도록 도와준다.
- 프로젝트 환경 구축 시 비기능적인 기능도 기본적으로 제공한다.(내장형 서버, 시큐리티, 측정, 상태 점검 등)
스프링 부트 스타터(https://start.spring.io/) 란?
설정 화면
설명
지속적으로 버전 업을 진행하고 있다.
- GroupId : GrouId는 자신의 프로젝트를 식별해주는 고유 아이디 com.cjy.web'과 같이 인터넷 주소를 뒤집어 놓은 형태이다.
- ArtifactId : ArtifactId는 버전 정보를 생략한 이름(jar) 보통 프로젝트 id와 동일하게 작성한다.
//데이터소스(데이터정보저장) 만들기
private DriverManegerDataSource datasource;
//처음에 초기 설정 한 번만 해준다.
public MemberDao(){
datasource = new DriverManegerDataSource();
datasource.setDriver(driver);
datasource.setJdbcUrl(url);
datasource.setUser(userId);
datasource.setPassword(userpw);
template = new JdbcTemplate();
template.setDataSource(datasource);
}
//1. 주입 insert
@Override
public int memberInsert(Member member){
...
int result = template.update(sql,member.getMemId(),member.getMempw(),member.getMail());
...
return result;
}
//2. 주입 Select
@Override
public Member memberSelect(final Member member) {
List<Member> members = null;
//final로 해주면 다른 곳에서 사용 못함
final String sql = "SELECT * FROM member WHERE memId = ? AND memPw = ?";
members = template.query(sql, new Object[]{member.getMemId(), member.getMemPw()}, new RowMapper<Member>() {
@Override
public Member mapRow(ResultSet rs, int rowNum) throws SQLException {
Member mem = new Member();
mem.setMemId(rs.getString("memId"));
mem.setMemPw(rs.getString("memPw"));
mem.setMemMail(rs.getString("memMail"));
mem.setMemPurcNum(rs.getInt("memPurcNum"));
return mem;
}
});
if(members.isEmpty())
return null;
return members.get(0);
}
Connectionless Protocol - 웹 서비스는 HTTP 프로토콜을 기반으로 하는데, HTTP 프로토콜은 클라이언트와 서버의 관계를 유지 하지 않는 특징이 있다. - Http 통신은 한 번 연결하고 나서 끝나면 끊어버린다. 그 이유는 클라이언트의 요청이 너무 많아 서버의 부하를 줄이기 위해서이다. 불편한점 : 이러한 Connectionless Protocol의 불편함을 해결하기 위해서 세션과 쿠키를 이용한다. 세션과 쿠키는 클라이언트와 서버의 연결 상태를 유지해주는 방법으로, 세션은 서버에서 연결정보를 관리하는 반면 쿠키는 클라이언트에서 연결정보를 관리하는데 차이가 있다.
차이점
서버에서 서버연결정보 관리
클라이언트에서 연결정보 관리
20-2 HttpAervletRequest를 이용한 세션 사용
설명
서버에 세션 정보가 있다.
HttpServletRequest 이용
20-3 HttpSession을 이용한 세션 사용
방법
설명
HttpSession 이용
HttpServletRequest와 차이점은 거의 없으며, 단지 세션객체를 얻는 방법에 차이가 있을 뿐이다. 단 바로 httpSession을 바로 받았으므로 getSession을 해줄 필요가 없다. (이게 더 편한 것 같다.)
20-4 세션 삭제 (Invalidate())
설명
로그아웃 또는 회원탈퇴 시 session.invalidate();를 통해 세션을 삭제 할 수 있다.
관련 코드
20-5 세션 주요 메서드 및 플로어
자주 쓰이는 메소드
- 세션에서 자주 쓰이는 메소드 1, 2, 3번 마지막
20-6 쿠키(Cookie)
쿠키를 생성하는 방법
설명
1) mallMain()에서 쿠키를 생성하고, 파라미터로 받은 HttpServletResponse에 쿠키를 담고 있다. 2) 쿠키를 생성할 때는 생성자에 두 개의 파라미터를 넣어주는데 첫 번째는 쿠키이름을 넣어 주고 두 번째는 쿠키값을 넣어준다.
@CookieValue 에노테이션 : value속성은 쿠키이름을 나타내며 만약 value에 명시한 쿠키가 없을 경우 exception이 발생한다 그런 것을 방지하고자 required 속성이 있다. Required 속성은 기본 true인데 true인 경우 value값에 해당하는 쿠키가 없으면 exception이 발생하고 false이면 exception이 발생하지 않는다.
실제 실무에선 세션을 사용한다.(보안에 쿠키에 비교적 좋음) 쿠키는 보통 중요정보가 아닐 때 사용한다.
*좌측 : Controller 우측: html 파일 - html의 <form action>에서 액션명과 메서드를 명시한다. - method 를 각각 get or porst로 맞춰준다. - 단, get은 defalut여서 기입안해도 get이다.(생략가능) - 써주는 것이 가독성은 좋다.
value속성
메서드를 연결해준다.
method속성
get방식인지 post방식인지 구분한다.
post방식 보안에 좋다. (아이디, 비밀번호 등)
18-3 요청 파라미터
컨트롤러의 URL 맵핑과 파라미터 처리 방법에 대해서 학습
19-1 @ModelAttribute
예제
설명
컨트롤러에서 사용한 객체(Member member)를 뷰단에서 그대로 사용가능하다. 특정한 이유를 (커멘더)객체의 이름을 변경할 때 @ModelAttribute를 사용한다.
@ModelAttribute 사용 예시 객체명 바꿔주는 기능
@ModelAttribute 사용 예시 메서드명을 바꿔주는 기능
19-2 커멘드 객체 프로퍼티 데이터 타입
단일 커맨드(기존방식)
중첩 커맨드
1. List<MemPhone>
1. MemPhone이라는 객체를 하나 더 생성한다. 2. html에서 중첩관련 데이터는 음영 처럼 input 태그를 여러개 단다.
19-3 Model & ModelAndView
Model & ModelAndView 비교
설명
기존 Model 뷰 사용 방법 1. model.addAtribute를 이용하여 모델에 값을 설정한다. 2. return memModdifyOK는 memModifyOk.jsp를 호출하는 것이다. 3. memBef, memAft는 뷰단에서 사용가능하다.
ModelAndView는 기존 Model이 데이터만 전달하는 것에 대비 데이터와 뷰의 이름을 함께 전달하는 객체이다. *setViewsName("뷰이름")