src/main/resources에서 application.properteis에 다음의 내용을 추가# tomcat port setting
server.port=8081
# JSP
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
# Datasource setting
spring.datasource.hikari.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.hikari.jdbc-url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.hikari.username=scott
spring.datasource.hikari.password=tiger
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# 클라이언트가 pool에 connection을 요청하는 데 기다리는 최대 시간을 30초로 설정
spring.datasource.hikari.connection-timeout=30000
# 유휴 및 사용 중인 connection을 포함하여 pool에 보관하는 최대 커넥션 개수를 설정
spring.datasource.hikari.maximum-pool-size=20
# 메시지 파일 지정
spring.messages.basename=messages.validation
# JSP reload
spring.devtools.livereload.enabled=true
# MyBatis setting
mybatis.mapper-locations=classpath:mybatis/mapper/**/*.xml
mybatis.type-aliases-package=kr.spring.**.vo
src/main/java에 새 패키지 kr.spring.config 생성하고 새 클래스 AppConfig 생성package kr.spring.config;
import javax.sql.DataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration
public class AppConfig {
	@Bean
	/*
	 * *.properties, *.yml 파일에 있는 property를 자바 클래스에 값을 가져와서 사용할 수 있도록 처리
	 */
	@ConfigurationProperties(prefix="spring.datasource.hikari")
	public HikariConfig hikariConfig() {
		return new HikariConfig();
	}
	
	@Bean
	public DataSource dataSource() {
		DataSource dataSource = new HikariDataSource(hikariConfig());
		return dataSource;
	}
}
src/main 폴더 오른쪽 클릭하고 하위 폴더로 webapp 생성 후 하위 폴더로 WEB-INF 생성C:\javaWork\workspace_spring\ch07MybatisAnnot\src\main\webapp\WEB-INF에서 views 폴더를 복사하여 현재 프로젝트에 붙여넣기src/main/resources 폴더 오른쪽 클릭하고 새 폴더 messages 생성 후 새 파일 validation.properties 생성NotEmpty.name=이름은 필수 항목
NotEmpty.title=제목은 필수 항목
NotEmpty.passwd=비밀번호는 필수 항목
NotEmpty.content=내용은 필수 항목
invalidPassword=비밀번호 불일치
src/main/resources/static 폴더 오른쪽 클릭하고 새 폴더 css 생성C:\javaWork\workspace_spring\ch07MybatisAnnot\src\main\webapp\resources\css에서 style.css 파일을 복사하여 현재 프로젝트에 붙여넣기views 폴더 내 모든 JSP 파일에서 <link> 태그의 경로를 다음처럼 수정<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css">
kr.spring.util 생성C:\javaWork\workspace_spring\ch07MybatisAnnot\src\main\java\kr\spring\util에서 PagingUtil.java 파일을 복사하여 붙여넣기application.properties 파일의 확장자에 _를 붙여 설정 파일로 인식되지 않도록 처리
.properties와 .yml이 모두 있는 경우 둘 다 인식하지만, 같은 항목에 값이 다른 경우 문제가 발생할 수 있음src/main/resources 폴더 오른쪽 클릭하고 application.yml 생성spring:
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      driver-class-name: oracle.jdbc.OracleDriver
      jdbc-url: jdbc:oracle:thin:@localhost:1521:xe
      username: scott
      password: tiger
      connection-timeout: 30000
      maximum-pool-size: 20
  messages:
    basename: messages.validation
    encoding: UTF-8
  devtools:
    livereload:
      enabled: true
mybatis:
  type-aliases-package: kr.spring.**.vo
  mapper-locations: mybatis/mapper/**/*.xml
server:
  port: 8081
kr.spring.vo 생성하고 BoardVO 생성package kr.spring.board.vo;
import java.sql.Date;
import javax.validation.constraints.NotEmpty;
public class BoardVO {
	private int num;
	@NotEmpty
	private String name;
	@NotEmpty
	private String title;
	@NotEmpty
	private String passwd;
	@NotEmpty
	private String content;
	private Date reg_date;
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public Date getReg_date() {
		return reg_date;
	}
	public void setReg_date(Date reg_date) {
		this.reg_date = reg_date;
	}
}
kr.spring.board.dao 생성하고 새 인터페이스 BoardMapper 생성package kr.spring.board.dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import kr.spring.board.vo.BoardVO;
@Mapper // @Mapper 어노테이션이 있어야 구현되는 객체를 서비스에서 인식 가능
public interface BoardMapper {
	public void insertBoard(BoardVO board);
	@Select("SELECT COUNT(*) FROM tboard")
	public int getBoardCount();
	public List<BoardVO> getBoardList(Map<String, Object> map);
	@Select("SELECT * FROM tboard WHERE num=#{num}")
	public BoardVO getBoard(int num);
	@Update("UPDATE tboard SET name=#{name}, title=#{title}, content=#{content} WHERE num=#{num}")
	public void updateBoard(BoardVO board);
	@Delete("DELETE FROM tboard WHERE num=#{num}")
	public void deleteBoard(int num);
}
src/main/resources 폴더 오른쪽 클릭하고 새 폴더 mybatis 생성 후 하위 폴더로 mapper 생성C:\javaWork\workspace_spring\ch07MybatisAnnot\src\main\java\kr\spring\board\dao에서 BoardMapper.xml 파일을 복사하여 붙여넣기kr.spring.board.service 생성하고 새 인터페이스 BoardService 생성package kr.spring.board.service;
import java.util.List;
import java.util.Map;
import kr.spring.board.vo.BoardVO;
public interface BoardService {
	public void insertBoard(BoardVO board);
	public int getBoardCount();
	public List<BoardVO> getBoardList(Map<String, Object> map);
	public BoardVO getBoard(int num);
	public void updateBoard(BoardVO board);
	public void deleteBoard(int num);
}
BoardServiceImpl 생성package kr.spring.board.service;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import kr.spring.board.dao.BoardMapper;
import kr.spring.board.vo.BoardVO;
@Service
@Transactional
public class BoardServiceImpl implements BoardService {
	@Autowired
	private BoardMapper boardMapper;
	@Override
	public void insertBoard(BoardVO board) {
		boardMapper.insertBoard(board);
	}
	@Override
	public int getBoardCount() {
		return boardMapper.getBoardCount();
	}
	@Override
	public List<BoardVO> getBoardList(Map<String, Object> map) {
		return boardMapper.getBoardList(map);
	}
	@Override
	public BoardVO getBoard(int num) {
		return boardMapper.getBoard(num);
	}
	@Override
	public void updateBoard(BoardVO board) {
		boardMapper.updateBoard(board);
	}
	@Override
	public void deleteBoard(int num) {
		boardMapper.deleteBoard(num);
	}
}
kr.spring.board.controller 생성C:\javaWork\workspace_spring\ch07MybatisAnnot\src\main\java\kr\spring\board\controller에서 BoardController.java 파일을 복사하여 붙여넣기BoardController 클래스에 다음의 메서드를 추가	@RequestMapping("/")
	public String main() {
		return "redirect:/list.do";
	}
https://www.python.org/downloads
C:/javaWork에 새 폴더 workspace_python 생성C:\javaWork\workspace_python 선택python 검색 후 PyDev를 설치ch01-basic 입력 후 Finishs01_print.py 생성# 출력하기
# 주석 : #은 한 줄 주석, """와 '''는 주석
"""
여러 줄
주석
"""
'''
여러 줄
주석
'''
# 문자열 출력
print("Hello World"); # 출력 후 줄바꿈
print('오늘은 목요일') # 파이썬에서는 일반적으로 세미콜론을 생략하며, 문자와 문자열을 구별하지 않고 '와 "를 모두 사용 가능
# 정수 출력
print(35)
# 실수 출력
print(5.75)
# 논리 데이터 출력
print(True)
print(False)
s02_variable.py 생성# 변수의 사용
a = 1
b = 2
print(a,b) # 줄바꿈하지 않고 공백을 구분자로 하여 변수 2개를 한 줄에 출력
print('---')
# 연산
print(a+b)
print('---')
# 문자열 + 문자열 = 문자열
print('대한' + '민국')
print('---')
# 숫자 + 문자열은 오류 발생
# print(5 + '10')
# 숫자를 문자열로 변환
print(str(5) + '10')
print('---')
s03_variable2.py 생성# 변수명은 대소문자를 구분하고 숫자로 시작 불가
# 특수문자와 공백은 변수명에 사용할 수 없음
friend = 5
Friend = 6
print(friend,Friend)
print('---')
# 출력시 공백이 아닌 다른 문자를 구분자로 사용하고 싶은 경우 sep 인수에 원하는 문자를 지정
print(friend,Friend,sep=",")
s = '서울'
i = '인천'
j = '전주'
b = '부산'
# 출력시 끝 문자로 개행 문자 외에 다른 문자를 사용하고 싶은 경우 end 인수에 원하는 문자를 지정
# print(출력 내용 [,sep=구분자] [,end=끝 문자])
print(s,i,j,b,sep='-->',end='^^')
print('---')