※ 스프링부트
· 스프링 프레임 워크를 사용하면 많은 XML 설정 파일등을 작성하는 등 설정하는 방법이 어려운 편이다.
=> spring boot 는 간편하게 설정할 수 있는 스프링 프레임웍의 서브프로젝트로,
쉽고 빠르게 프로젝트를 설정할 수 있도록 도와준다
· Spring Boot는 최소한의 초기 스프링 구성으로 가능한 한 빨리 시작하고 실행할 수 있도록 설계되었다
· 내장 Tomcat
ㄴ 웹 어플리케이션서버를 통합한 경량의 웹개발 프레임워크
▶ 스프링부트에서 기본생성되는 폴더 & 파일
▷ templates 폴더 - src/main/resources/ [templates] 폴더
- 스프링 부트는 타임리프(Thymeleaf) 템플릿 엔진의 사용을 권장
- Thymeleaf (.html), Velocity(.vm)등과 관련된 파일만 동작하고 jsp 파일은 추가하여도 작동하지 않는다
- Thymeleaf : JSP와 마찬가지로 HTML 내에서 데이터를 처리하는 데 사용됨 (뷰) / 서버에서 받아오는게 있음
▷ static 폴더 - src/main/resources/[static]
- 서버에서 받아오는게 없는 정적인페이지
- css, fonts, images, plugin, scripts 등의 정적 리소스 파일이 위치함
▷ application 파일 , properties 파일
- 톰캣(Tomcat)과 같은 WAS(포트 번호, 콘텍스트 패스 등 )의 설정이나,
데이터베이스 관련 정보 등 각각으로 분리되어 있는 XML 또는
자바 기반의 설정을 해당 파일에 Key-Value 형식으로 지정해서 처리할 수 있다
▶ API
▷ @ResponseBody 문자 반환
- HTTP의 BODY에 문자 내용을 직접 반환
결과 : hello hong
▷ @ResponseBody 객체 반환
- @ResponseBody 를 사용하고, 객체를 반환하면 객체가 JSON으로 변환 됨
결과 : {"name":"hong"}
▶ jsp를 사용하는 방법
[1] pom.xml
- jasper, jstl을 의존성에 추가해야 JSP파일의 구동이 가능
[2] JSP 경로 설정(디렉토리 생성)
- WEB-INF/views/ ( /src/main/webapp/WEB-INF/views/ )
[3] application.properties
- Spring 애플리케이션 시작시 application.properties 파일에 정의된 내용을 로드한다
▷ server.port : 별다른 설정을 하지 않으면 default 포트는 8080
▷ prefix/suffix : jsp 페이지를 처리하기 위한 prefix와 suffix를 application.properties에 추가
[4] Controller 작성
[5] jsp파일 서버 재시작 없이 바로 적용하기
- 스프링 부트는 스프링 프로젝트와 다르게,
동적 파일들의 파일 변경을 자동으로 반영하지 않기때문에 설정추가해야함
[6] Application 실행
▶ @Mapper
기존의 스프링은 DAO 클래스에 @Repository 를 선언해서 해당 클래스가
데이터베이스와 통신하는 클래스임을 나타냈다.
Mybatis 는 인터페이스에 @Mapper 만 지정해주면 XML Mapper 에서 메서드의 이름과 일치하는 SQL문을 찾아 실행한다
Mapper 영역은 데이터베이스와의 통신, 즉 SQL 쿼리를 호출하는 것이 전부이며, 다른 로직은 전혀 필요하지 않다
▷ package com.it.herb.board.model;
@Mapper
public interface BoardDAO {
public int insertBoard(BoardVO vo);
public List<BoardVO> selectAll(SearchVO searchVo);
public int selectTotalRecord(SearchVO searchVo);
public int updateReadCount(int no);
public BoardVO selectByNo(int no);
public int updateBoard(BoardVO vo);
public int deleteBoard(BoardVO vo);
public List<BoardVO> selectMainNotice();
}
▷ board.xml
<mapper namespace="com.it.herb.board.model.BoardDAO">
<insert id="insertBoard" parameterType="boardVO">
<selectKey keyProperty="no" resultType="int" order="BEFORE">
select board_seq.nextval from dual
</selectKey>
insert into board(no,name, pwd, title, email, content)
values(#{no} ,#{name}, #{pwd}, #{title}, #{email},
#{content})
</insert>
▶ DBConfiguration
▷ @Configuration
- 스프링은 @Configuration이 지정된 클래스를 자바 기반의 설정 파일로 인식.
▷ @PropertySource
- 스프링은 @Configuration이 지정된 클래스를 자바 기반의 설정 파일로 인식.
▷ @Autowired
- 빈(Bean)으로 등록된 인스턴스(이하 객체)를 클래스에 주입하는데 사용
- @Autowired 이외에도 @Resource, @Inject 등이 존재
▷ ApplicationContext
▷ @ConfigurationProperties
- 인자에 prefix 속성을 지정할 수 있고, (prefix는 접두사) prefix에 spring.datasource.hikari를 지정
- @PropertySource에 지정된 파일(application.properties)에서
prefix에 해당하는 spring.datasource.hikari로 시작하는 설정을 모두 읽어 들여 해당 메서드에 매핑(바인딩)함
Hikari : Connection pool의 일종
- Hikari는 Database와의 Connection Pool을 관리해준다
▷ DataSource
- 데이터 소스는 커넥션 풀을 지원하기 위한 인터페이스
▷ sqlSessionFactory
- SqlSessionFactory는 데이터베이스의 커넥션과 SQL 실행에 대한 모든 것 을 갖는 중요한 역할을 함
▷ sqlSession
- SqlSessionTemplate은 SqlSessionFactory를 통해 생성되고,
데이터베이스의 커밋, 롤백 등 SQL의 실행에 필요한 모든 메서드를 갖는 객체
▶ 트랜잭션 처리
▷ tx:annotation-driven : @Transactional를 선언하여 트랜잭션 처리를 할 수 있다
▶ @RestController
@Controller 대신에 @RestController 애노테이션을 사용하면,
해당 컨트롤러에 모두 @ResponseBody 가 적용되는 효과가 있다
@ResponseBody : 뷰 템플릿을 사용하는 것이 아니라, HTTP 메시지 바디에 직접 데이터를 입력한다.
이름 그대로 Rest API(HTTP API)를 만들 때 사용하는 컨트롤러이다
@GetMapping, @PostMapping
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping(value = "/members/new")
public String createForm() {
return "members/createMemberForm";
}
@PostMapping(value = "/members/new")
public String create(MemberForm form) {
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
}
@GetMapping(value = "/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
}
▶ Lombok(롬복)
- 자동으로 기본적인 상용구를 생성 해줌으로써 코드량을 줄이는데 도움을 주는 Java 어노테이션 라이브러리
▷ 롬복설치하기
https://projectlombok.org/download
Download
projectlombok.org
lombok.jar가 있는 디렉토리 - C:\Users\EZEN\.m2\repository\org\projectlombok\lombok\1.18.24
@Controller
@RequestMapping("/basic/items")
@RequiredArgsConstructor
public class BasicItemController {
private final ItemRepository itemRepository;
@GetMapping
public String items(Model model) {
List<Item> items = itemRepository.findAll();
model.addAttribute("items", items);
return "basic/items";
}
}
@RequiredArgsConstructor - final 이 붙은 멤버변수만 사용해서 생성자를 자동으로 만들어준다
public BasicItemController(ItemRepository itemRepository) {
this.itemRepository = itemRepository;
}
- 생성자가 1개만 있으면 스프링이 해당 생성자에 @Autowired 로 의존관계를 주입해준다.
따라서 final 키워드를 빼면 안된다, 그러면 ItemRepository 의존관계 주입이 안된다
'Spring' 카테고리의 다른 글
[Spring] 스프링 작업 순서 / 나를 위한 기초 다지기 (0) | 2022.06.10 |
---|---|
[Spring] 파일업로드 / 다운로드 (0) | 2022.06.02 |
[Spring] mybatis (0) | 2022.05.30 |
[Spring] 스프링 MVC를 이용한 웹 요청 처리 (0) | 2022.05.26 |
[Spring] 스프링 프레임워크 (0) | 2022.05.24 |