본문 바로가기

Spring

240311 스프링 부트

오늘뭐했지

훔쳐보기

https://velog.io/@leaftree/20240311-Spring-19-

 

20240311 Spring 19

egoveclipse marketplace 디비버 설치맥에는 heidisql이 없어서 dbeaver 쓴다.

velog.io

 

이거보고정리해야지

기존의 menu 에서 menu.html 을 따로 만들기

==> admin 페이지에서 상단 menu 를 만들 수 있게 하기

menu 테이블 생성

cate : 카테고리 번호, catename : 메뉴명, comment : 카테고리 설명

 

menu.html 수정하기

기존의 menu 목록들을 반복문으로 전체 출력할 수 있게 함
<th:block th:each="menu : ${menu}">
  <li class="nav-item"><a class="nav-link me-lg-3" th:href="|@{/board(cate=${menu.cate})}|" th:text="${menu.catename}">catename</a></li>
</th:block>

 

페이지 로딩할 때 model 에 menu 오 add 해줘야 만 메뉴창에 값을 띄울 수 있음

@GetMapping("/board")
public String freeboard(UrlDTO urlDTO, Model model) {
  List<Map<String, Object>> menu = indexService.menu();
  model.addAttribute("menu", menu);
		
  List<BoardDTO> board = indexService.board(urlDTO);
  model.addAttribute("board", board);
  // model.addAttribute("boardName", "자유게시판");
  return "board";
}

 

※ 다른 menu 뜨는 모든 페이지에 menu 넣기

 

menu 추가하는 페이지 만들기

menu 를 직접 추가할 수 있는 페이지 만들기

 

<form action="menu" method="post">
  <div>
    <input type="number" name="cate" placeholder="게시판 번호를 입력하세요"/>			
    <input type="text" name="catename" placeholder="게시판 이름을 입력하세요"/>			
    <input type="text" name="comment" placeholder="게시판 설명을 입력하세요"/>
    <button type="submit">만들기</button>			
  </div>
</form>

 

Controller, Service, DAO 와 Mapper 까지 연결하여 Insert 해보기

// Controller
@PostMapping("/menu")
public String menu(@RequestParam Map<String, Object> map) {
  int result = adminService.insertMenu(map);
  return "redirect:/admin/menu";
}

// Service
public int insertMenu(Map<String, Object> map) {
  return adminDAO.insertMenu(map);
}

// DAO
int insertMenu(Map<String, Object> map);
<insert id="insertMenu" parameterType="Map">
  insert into menu
  values (#{cate}, #{catename}, #{comment})
</insert>

 

제대로 생성된 모습

 

AOP 사용해보기, 교제 446p

Util 패키지에 AOPConfig.class 파일 생성

@Component 
// Controller, Service, Repository 가 아닌 Class 중 Bean 등록을 위한 class 는 Component 어노테이션 추가
@Aspect
public class AOPConfig {

}

 

@PointCut 으로 어떤 파일이 실행될 때 실행할 지 체크해보기

// com.solbum.web.controller 안의 모든 메소드가 실행될 때 실행
@Pointcut("execution(* com.solbum.web.controller.*.*(..))")
public void cut() {
}

 

@Before 으로 메소드 실행 전 수행 할 명령 추가 가능

@Before("cut()")
public void before(JoinPoint joinPoint) {
  // board 메소드를 실행할 때
  System.out.println("Before cut() : " + joinPoint.getSignature());
  // Before cut() : String com.solbum.web.controller.IndexController.board(UrlDTO,Model)
  System.out.println("Before cut() : " + joinPoint.getArgs());
  // Before cut() : [Ljava.lang.Object;@3efa0e3b
  System.out.println("Before cut() : " + joinPoint.getSourceLocation());
  // Before cut() : org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint$SourceLocationImpl@303df794
}

 

MethodSignature 로 실행해보기

@Before("cut()")
public void before(JoinPoint joinPoint) {
  // 실행되는 메소드 이름을 가져오고 출력
  MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
  System.out.println("Before cut() : " + methodSignature.getName()); // board
  System.out.println("Before cut() : " + methodSignature.getMethod());
  // Before cut() : public java.lang.String com.solbum.web.controller.IndexController.board(com.solbum.web.dto.UrlDTO,org.springframework.ui.Model)
}

 

배열 확인해보기

Object[] args = joinPoint.getArgs();
  System.out.println(Arrays.toString(args));
  // [com.solbum.web.dto.UrlDTO@6bb71aa3, 
    // {urlDTO=com.solbum.web.dto.UrlDTO@6bb71aa3, 
    //  org.springframework.validation.BindingResult.urlDTO=org.springframework.validation.BeanPropertyBindingResult: 0 errors}]
for (Object object : args) {
  System.out.println("파라미터 타입 : " + object.getClass().getSimpleName());
  // 파라미터 타입 : UrlDTO
  // 파라미터 값 : com.solbum.web.dto.UrlDTO@312fa1df
  System.out.println("파라미터 값 : " + object);
  // 파라미터 타입 : BindingAwareModelMap
  // 파라미터 값 : {urlDTO=com.solbum.web.dto.UrlDTO@312fa1df, org.springframework.validation.BindingResult.urlDTO=org.springframework.validation.BeanPropertyBindingResult: 0 errors}
}

 

@After 해보기, Before 과 같음

@After("cut()")
public void after(JoinPoint joinPoint) {
  MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
  System.out.println("After cut() : " + methodSignature.getName()); // board
}

 

'Spring' 카테고리의 다른 글

240313 스프링 부트  (1) 2024.03.13
240312 스프링 부트  (0) 2024.03.12
240308 스프링 부트  (1) 2024.03.08
240307 스프링 부트  (0) 2024.03.07
240306 스프링 부트  (1) 2024.03.06