웹 애플리케이션의 컨트롤러, 서비스, DAO, DTO 등을 포함한 구조
▶ MvcController
이 컨트롤러 클래스는 웹 애플리케이션의 첫 화면인 "index"를 보여주는 역할을 합니다.
@Controller 어노테이션을 통해 스프링 컨트롤러임을 표시하고,
@RequestMapping 어노테이션을 통해 "/" 경로로 들어오는 GET 요청에 대해 index( ) 메서드를 실행하여
"index"라는 뷰(페이지)를 반환합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.gdu.app05.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class MvcController {
@RequestMapping(value="/", method=RequestMethod.GET)
public String index() {
return "index";
}
}
|
cs |
▶ BoardController
이 컨트롤러 클래스는 게시판과 관련된 웹 요청을 처리합니다.
@Controller 어노테이션을 사용하여 스프링 컨트롤러임을 표시하고,
생성자 주입을 통해 BoardService 타입의 boardService 객체를 주입받습니다.
주입된 boardService를 통해 게시판 정보를 가져와 모델에 추가한 후 "board/list"라는 뷰를 반환합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package com.gdu.app05.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.gdu.app05.service.BoardService;
@Controller
public class BoardController {
// 주입된 boardService 객체의 변경 방지를 위한 final 처리
private final BoardService boardService;
// boardService에 final 처리를 하면 생성자 주입만 가능하다.
// 생성자 주입의 @Autowired는 생략할 수 있으므로 @RequiredArgsConstructor와 같은 Annotation으로 대체할 수 있다.
@Autowired
public BoardController(BoardService boardService) {
super();
this.boardService = boardService;
}
@RequestMapping(value="/board/list.do", method=RequestMethod.GET)
public String list(Model model) {
model.addAttribute("boardList", boardService.getBoardList());
return "board/list";
}
}
|
cs |
▶ BoardService
이 인터페이스는 게시판과 관련된 비즈니스 로직을 정의합니다.
여기에서는 게시판 목록을 가져오는 메서드 getBoardList( )만 정의되어 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package com.gdu.app05.service;
import java.util.List;
import com.gdu.app05.dto.BoardDto;
public interface BoardService {
public List<BoardDto> getBoardList();
}
|
cs |
▶ BoardServiceImpl
이 클래스는 BoardService 인터페이스를 구현한 구체적인 서비스 클래스입니다.
@Service 어노테이션을 통해 스프링 빈임을 표시하며,
생성자 주입을 통해 BoardDao 타입의 boardDao 객체를 주입받습니다.
getBoardList( ) 메서드를 구현하여 게시판 목록을 데이터베이스 또는 다른 소스로부터 가져옵니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package com.gdu.app05.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.gdu.app05.dao.BoardDao;
import com.gdu.app05.dto.BoardDto;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor // final field 전용 생성자
// @Autowired를 이용한 생성자 주입을 위해서 추가한다.
@Service // 서비스 계층 (Business Layer) 전용 @Component, Spring Container에 BoardService boardServiceImpl 객체를 생성해 둔다.
public class BoardServiceImpl implements BoardService {
private final BoardDao boardDao;
@Override
public List<BoardDto> getBoardList() {
return boardDao.getBoardList();
}
}
|
cs |
▶ BoardDto
이 클래스는 게시판의 데이터를 전달하기 위한 데이터 전송 객체(DTO)입니다.
@Data 어노테이션을 통해 Lombok을 사용하여 게터, 세터 등의 메서드를 자동으로 생성하고, 필드를 정의합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package com.gdu.app05.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class BoardDto {
private String title;
private String editor;
}
|
cs |
▶ BoardDao
이 클래스는 데이터베이스와 상호 작용하여 게시판 정보를 가져오는 역할을 합니다.
@Repository 어노테이션을 통해 스프링 빈임을 표시하며,
getBoardList( ) 메서드에서 가짜 데이터를 반환하도록 구현되어 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package com.gdu.app05.dao;
import java.util.Arrays;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import com.gdu.app05.dto.BoardDto;
@Repository // DAO 전용 @Component BoardDao boardDao 객체를 Spring Container에 생성해 둔다.
public class BoardDao {
public List<BoardDto> getBoardList() {
return Arrays.asList(
new BoardDto("제목1", "작성자1"),
new BoardDto("제목2", "작성자2"),
new BoardDto("제목3", "작성자3")
);
}
}
|
cs |
ex02 ================================================================================
▶ BoardConfig
이 클래스는 스프링 컨테이너에 빈(Bean)으로 등록될 여러 개의 객체를 생성하고 구성합니다.
여기에서 @Configuration 어노테이션이 사용되었는데, 이것은 이 클래스가 스프링 설정 클래스임을 나타냅니다. 스프링 컨테이너가 이 설정 클래스를 스캔하고 빈을 관리합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package com.gdu.app06.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.gdu.app06.dao.BoardDao;
import com.gdu.app06.dto.BoardDto;
import com.gdu.app06.service.BoardServiceImpl;
import com.gdu.app06.service.IBoardService;
@Configuration
public class BoardConfig {
@Bean
public BoardDto boardDto1() { // <bean class="BoardDto" id="boardDto1" />
return new BoardDto(1, "제목1", "작성자1");
}
@Bean
public BoardDto boardDto2() { // <bean class="BoardDto" id="boardDto2" />
return new BoardDto(2, "제목2", "작성자2");
}
@Bean
public BoardDto boardDto3() { // <bean class="BoardDto" id="boardDto3" />
return new BoardDto(3, "제목3", "작성자3");
}
@Bean
public BoardDao boardDao() {
return new BoardDao();
}
@Bean
public IBoardService iBoardService() {
return new BoardServiceImpl();
}
}
|
cs |
▶ BoardDao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package com.gdu.app06.dao;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.gdu.app06.dto.BoardDto;
public class BoardDao {
private BoardDto boardDto1;
private BoardDto boardDto2;
private BoardDto boardDto3;
@Autowired
public void setBean(BoardDto boardDto1, BoardDto boardDto2, BoardDto boardDto3) {
this.boardDto1 = boardDto1;
this.boardDto2 = boardDto2;
this.boardDto3 = boardDto3;
}
public List<BoardDto> getBoardList() {
return Arrays.asList(boardDto1, boardDto2, boardDto3);
}
public BoardDto getBoardByNo(int boardNo) {
BoardDto boardDto = null;
if(boardDto1.getBoardNo() == boardNo) {
boardDto = boardDto1;
} else if(boardDto2.getBoardNo() == boardNo) {
boardDto = boardDto2;
} else if(boardDto3.getBoardNo() == boardNo) {
boardDto = boardDto3;
}
return boardDto;
}
}
|
cs |
▶ BoardDto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package com.gdu.app06.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class BoardDto {
private int boardNo;
private String title;
private String editor;
}
|
cs |
▶ BoardService
1
2
3
4
5
6
7
8
9
10
|
package com.gdu.app06.service;
import java.util.List;
import com.gdu.app06.dto.BoardDto;
public interface IBoardService {
public List<BoardDto> getBoardList();
public BoardDto getBoardByNo(int boardNo);
}
|
cs |
▶ BoardServiceImpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package com.gdu.app06.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.gdu.app06.dao.BoardDao;
import com.gdu.app06.dto.BoardDto;
public class BoardServiceImpl implements IBoardService {
private BoardDao boardDao;
@Autowired
public void setBoardDao(BoardDao boardDao) {
this.boardDao = boardDao;
}
@Override
public BoardDto getBoardByNo(int boardNo) {
return boardDao.getBoardByNo(boardNo);
}
@Override
public List<BoardDto> getBoardList() {
return boardDao.getBoardList();
}
}
|
cs |
▶ BoardController
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package com.gdu.app06.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.gdu.app06.service.IBoardService;
@Controller
public class BoardController {
private IBoardService iBoardService;
@Autowired
public void setiBoardService(IBoardService iBoardService) {
this.iBoardService = iBoardService;
}
@RequestMapping(value="/board/list.do", method=RequestMethod.GET)
public String list(Model model) {
model.addAttribute("boardList", iBoardService.getBoardList());
return "board/list"; // /WEB-INF/views/board/list.jsp
}
@RequestMapping(value="/board/detail.do", method=RequestMethod.GET)
public String detail(@RequestParam(value="boardNo", required=false, defaultValue="0") int boardNo
, Model model) {
model.addAttribute("board", iBoardService.getBoardByNo(boardNo));
return "board/detail"; // /WEB-INF/views/board/detail.jsp
}
}
|
cs |
'코딩기록 저장소 🐕 > spring(JPA)🌱' 카테고리의 다른 글
Spring ajax2 (0) | 2023.10.06 |
---|---|
Spring DI ajax (0) | 2023.10.05 |
Spring DI (0) | 2023.10.04 |
Spring Mvc 복습, Mvc Redirect (0) | 2023.10.04 |
Spring core 의존관계주입 자동 주입 (김영한의 스프링) (0) | 2023.10.01 |