2022_02_26 - oneso123456789/2022 GitHub Wiki
๋น์ฆ๋์ค ๊ณ์ธต์ ์ธํฐํ์ด์ค์ ๊ตฌํ ํด๋์ค๊ฐ ์์ฑ๋์๋ค๋ฉด,
์ด๋ฅผ ์คํ๋ง์ ๋น์ผ๋ก ์ธ์ํ๊ธฐ ์ํด์ roo-context.xml์
@Service์ด๋
ธํ
์ด์
์ด ์๋ com.crow.service ํจํค์ง๋ฅผ ์ค์บ
ํ๋๋ก ์ถ๊ฐํด์ผํจ
ํ๋ก์ ํธ ์์ฑ ์ ๋ง๋ค์ด์ง root-context.xml์ ๋ค์์คํ์ด์ค
ํญ์์ context ํญ๋ชฉ์ ์ถ๊ฐํจ
๋ค์์คํ์ด์ค๋ฅผ ์ถ๊ฐํ๋ฉด ํด๋น ์ด๋ฆ์ผ๋ก ์์ํ๋ ํ๊ทธ๋ค์ ํ์ฉํ
์ ์์
<context:component-scan
base-package="com.crow.service" />
BoardMapper์ BoardService, BoardServiceImpl์ ๋ํ
๊ตฌ์กฐ์ค์ ์ด ์๋ฃ๋์์ผ๋ฏ๋ก 'src/test/java' ๋ฐ์
com.crow.service.BoardServiceTests ํด๋์ค๋ฅผ ์์ฑํด์ ์งํํจ
package com.crow.service;
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class BoardServiceTests {
@Setter(onMethod_ = {@Autowired})
private BoardService service;
@Test
public void testExist() {
log.info(service);
assertNotNull(service);
log.info("์ฌ๊ธฐ๊ฐ ๋ก๊ทธ ๋");
}
}
BoardServiceTests์ ์ฒซ ํ
์คํธ๋ BoardService ๊ฐ์ฒด๊ฐ ์ ๋๋ก ์ฃผ์
์ด ๊ฐ๋ฅํ์ง ํ์ธํ๋ ์์
์ผ๋ก ์์ํจ
์ ์์ ์ผ๋ก BoardService ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ BoardMapper๊ฐ ์ฃผ์
๋์๋ค๋ฉด
์๋์ ๊ฐ์ด Service ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋จ
๋ฑ๋ก ์์
์ BoardServiceImpl์์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ ๋๋ BoardVO ํ์
์ ๊ฐ์ฒด๋ฅผ
BoardMapper๋ฅผ ํตํด์ ์ฒ๋ฆฌํจ
๊ตฌํ๋๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์
@Override
public void register(BoardVO board) {
// TODO Auto-generated method stub
log.info("register......" + board);
mapper.insertSelectKey(board);
}
BoardService๋ void ํ์
์ผ๋ก ์ค๊ณ๋์์ผ๋ฏ๋ก mapper.insertSelectKey()
์ ๋ฐํ๊ฐ์ธ int๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์ง๋ง, ํ์ํ๋ค๋ฉด ์์ธ์ฒ๋ฆฌ๋ void
๋์ ์ int ํ์
์ ์ด์ฉํด์ ์ฌ์ฉํ ์๋ ์์
mapper์ insertSelectKey()๋ฅผ ์ด์ฉํด์ ๋์ค์ ์์ฑ๋ ๊ฒ์๋ฌผ์ ๋ฒํธ๋ฅผ
ํ์ธํ ์ ์๊ฒ ์์ฑํจ ์ด์ ๋ํ ํ
์คํธ๋ ์๋์ ๊ฐ์ด ์์ฑํจ
@Test
public void testRegister() {
BoardVO board = new BoardVO();
board.setTitle("์๋น์ค ํ
์คํธ ์์ฑ์ ๋ชฉ");
board.setContent("์๋น์ค ํ
์คํธ ์์ฑ๋ด์ฉ");
board.setWriter("์๋น์ค ํ
์คํธ ์์ฑ์");
service.register(board);
log.info("์์ฑ๋ ๊ฒ์๋ฌผ์ ๋ฒํธ: " + board.getBno());
}
testRegister()์ ํ
์คํธ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๋ ๊ฒ์๋ฌผ์ ๋ฒํธ๋ฅผ
ํ์ธํ ์ ์์.
BoardServiceImpl ํด๋์ค์์ ํ์ฌ ํ
์ด๋ธ์ ์ ์ฅ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋
getList()๋ ์๋์ ๊ฐ์ด ๊ตฌํ๋จ
@Override
public List<BoardVO> getList() {
// TODO Auto-generated method stub
log.info("getList......");
return mapper.getList();
}
ํ ์คํธ ์ฝ๋๋ ์๋์ ๊ฐ์ด ์์ฑํ ์์์
@Test
public void testGetList() {
service.getList().forEach(board -> log.info(board));
}
ํ
์คํธ์ ์คํ ๊ฒฐ๊ณผ๋ก ๋ฑ๋ก ์์
์ ํ
์คํธํ ๋ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก
๋์ค๋์ง ํ์ธ๋ฐ๋
์กฐํ๋ ๊ฒ์๋ฌผ์ ๋ฒํธ๊ฐ ํ๋ผ๋ฏธํฐ์ด๊ณ BoardVO์ ์ธ์คํด์ค๊ฐ ๋ฆฌํด๋จ
@Override
public BoardVO get(Long bno) {
// TODO Auto-generated method stub
log.info("get......" + bno);
return mapper.read(bno);
}
@Test
public void testGet() {
log.info(service.get(1L));
}
์ญ์ /์์ ์ ๋ฉ์๋์ ๋ฆฌํด ํ์
์ void๋ก ์ค๊ณํ ์๋ ์์ง๋ง ์๊ฒฉํ๊ฒ
์ฒ๋ฆฌํ๊ธฐ ์ํด์ Boolean ํ์
์ผ๋ก ์ฒ๋ฆฌํจ
@Override
public boolean modify(BoardVO board) {
// TODO Auto-generated method stub
log.info("modify......" + board);
return mapper.update(board) == 1;
}
@Override
public boolean remove(Long bno) {
// TODO Auto-generated method stub
log.info("remove......" + bno);
return mapper.delete(bno) == 1;
}
์ ์์ ์ผ๋ก ์์ ๊ณผ ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ฉด 1์ด๋ผ๋ ๊ฐ์ด ๋ฐํ๋๊ธฐ ๋๋ฌธ์
'==' ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ true/false๋ฅผ ์ฒ๋ฆฌํ ์ ์์
ํ ์คํธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํจ
@Test
public void testDelete() {
// ๊ฒ์๋ฌผ ๋ฒํธ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ํ
์คํธ ํ ๊ฒ
log.info("REMOVE RESULT: " + service.remove(2L));
}
@Test
public void testUpdate() {
BoardVO board = service.get(1L);
// ์
๋ ฅํ ๋ฒํธ์ ๋ด์ฉ์ด ์กด์ฌ ํ์ง ์์ผ๋ฉด ๋ฆฌํด์ ์ํด
if(board == null) {
return ;
}
board.setTitle("์๋น์ค ํ
์คํธ์ค ์ ๋ชฉ ์์ ํฉ๋๋ค");
log.info("MODIFY RESULT: " + service.modify(board));
}
testDelete()์ ๊ฒฝ์ฐ์๋ ํด๋น ๊ฒ์๋ฌผ์ด ์กด์ฌํ ๋ true๋ฅผ ๋ฐํํ๋ ๊ฒ์
ํ์ธํ ์ ์๊ณ ,
testUpdate()์ ๊ฒฝ์ฐ์๋ ํน์ ํ ๊ฒ์๋ฌผ์ ๋จผ์ ์กฐํํ๊ณ ,
title ๊ฐ์ ์์ ํ ํ ์ด๋ฅผ ์
๋ฐ์ดํธํจ
๋น์ฆ๋์ค ๊ณ์ธต์ ๊ตฌํ๊น์ง ๋ชจ๋ ํ
์คํธ๊ฐ ์งํ๋์๋ค๋ฉด ์ด์ ๋จ์ ์์
์
ํ๋ ์ ํ
์ด์
๊ณ์ธต์ธ ์น ๊ตฌํ์
์น์ ์ด์ PART 2์์ ์ค์ตํ ๋ด์ฉ์ ๊ธฐ์ค์ผ๋ก ํ์ฌ ํ๋ก์ ํธ์ ๋ฐ์ํด์ผํจ
์คํ๋ง MVC์ Controller๋ ํ๋์ ํด๋์ค ๋ด์์ ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ์์ฑํ๊ณ ,
@RequestMapping๋ฑ์ ์ด์ฉํด์ URL์ ๋ถ๊ธฐํ๋ ๊ตฌ์กฐ๋ก ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์
ํ๋์ ํด๋์ค์์ ํ์ํ ๋งํผ ๋ฉ์๋์ ๋ถ๊ธฐ๋ฅผ ์ด์ฉํ๋ ๊ตฌ์กฐ๋ก ์์ฑํจ
๊ณผ๊ฑฐ์๋ ์ด ๋จ๊ณ์์ Tomcat(WAS)์ ์คํํ๊ณ ์น ํ๋ฉด์ ๋ง๋ค์ด์ ๊ฒฐ๊ณผ๋ฅผ
ํ์ธํ๋ ๋ฐฉ์์ ์ฝ๋๋ฅผ ์์ฑํด ์์
์ด ๋ฐฉ์์ ์๊ฐ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ฑฐ๋์ ํ
์คํธ๋ฅผ ์๋ํ ํ๊ธฐ์ ์ด๋ ค์์ด ๋ง์
๋ฐ๋ผ์ ์ด ๋จ๊ณ์์๋ WAS๋ฅผ ์คํํ์ง ์๊ณ Controller๋ฅผ ํ
์คํธ ํ ์ ์๋
๋ฐฉ๋ฒ์ ํ์ตํจ
์์ฑํ๊ธฐ ์ ์๋ ๋ฐ๋์ ํ์ฌ ์ํ๋ ๊ธฐ๋ฅ์ ํธ์ถํ๋ ๋ฐฉ์์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด
ํ
์ด๋ธ๋ก ์ ๋ฆฌํ ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข์
ํ
์ด๋ธ์์ From ํญ๋ชฉ์ URL์ ํธ์ถํ๊ธฐ ์ํด์ ๋ณ๋์ ์
๋ ฅํ๋ฉด์ด ํ์ํ๋ค๋ ๊ฒ์ ์๋ฏธํจ
์ด์ ๋ํ ์ค๊ณ๋ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๋จ๊ณ์์ ์งํํ ์ ์์