“만능 프로그래밍 언어” 자바스크립트의 이해
이클립스 최적화
[eclipse] XML 편집방식 변경
egov
eclipse marketplace 디비버 설치
맥에는 heidisql이 없어서 dbeaver 쓴다.
model에다가,, cate 다 넣어서 해도 된다
admin menu 만들었다
jar 압축해서 배포했는데 메뉴 추가 등등 변경하려면 힘들다
cate 하드코딩하지 않도록
menu에서 category 숫자만 바꿔주는 메뉴로..
db에서 menu라는 테이블 생성
화면 상단에 보여줄 메뉴
멀티보드를 활용해서 mtcate 값만 바꿔줄 것.
PK값 다 필요 없을 것으로 보이긴 한다고 하심.
pk는 있으면 좋은 것 같은데 최소한으로 설정해서 unique만 걸어줬다. cate는 절대 겹치지 않게
CREATE TABLE `menu` (
`cate` INT(11) NULL DEFAULT NULL,
`catename` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`comment` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
UNIQUE INDEX `cate` (`cate`) USING BTREE
)
COMMENT='화면 상단에 보여줄 메뉴\r\n멀티보드를 활용해서 mtcate 값만 바꿔줄겁니다.\r\n'
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
/board에 menu를 불러오자ㅏ.
cate, catename만 불러오면 된다
=> 이러면 모든 view 보여주는 메서드에 모델 다 넣어야 한다. (귀찮은데,,)
AOP가 좀 들어가면 괜찮아질 것...
List<Map<String, Object>> menu = indexService.menu();
model.addAttribute("menu", menu);
application.properties
#에러페이지
# 에러 페이지에 exception정보 포함? true/false
server.error.include-exception=true
# 에러 페이지에 stacktrace 포함? ALWAYS/NEVER/ON_PARAM
server.error.include-stacktrace=NEVER
# 에러 응답 처리할 path
server.error.path=/error
# 기본 노출 페이지
server.error.whitelabel.enabled=true
경로명이랑 등등... 안 보여주는 것도 좋고
오류는 사용자에게 보이지 않게
AOP(Aspect Oriented Programming) 관점 지향 프로그래밍
책 p445
객체 지향, 절차 지향과 다름.
어려우니까 하는 법만.
[Java] Spring Boot AOP(Aspect-Oriented Programming) 이해하고 설정하기
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-aop'
이거를 dependencies에 추가해준다.
Projects and External Dependencies에 이렇게 올라와 있으면 된다.
객체화 시켜서 쓸 것.
util 패키지에 만든다.
AOPConfig.java
@Component
애너테이션 (controller, service, repository 아니면 이거)
@Aspect
애너테이션
2개를 붙여준다.
p448 @Pointcut
애너테이션에 대하여
@Pointcut("execution(* com.apple.web.controller.*.*(..))")
에서
맨 앞 *
는 접근제한자를 뜻하고,
맨 뒤의 *
는 클래스의 이름과 메서드의 이름을 의미한다.
@Component
@Aspect
public class AOPConfig {
@Pointcut("execution(* com.apple.web.controller.*.*(..))")
public void cut() {
}
@Before("cut()")
public void before() {
System.out.println("시작할 때");
}
}
이렇게 해두면 어떤 메서드가 실행돼도 before()
의 "시작할 때"
가 출력된다.
-> 이걸로 로그인 검사나 뭐... 그런 거 하면 된다고 한다.
@Before("cut()")
public void before(JoinPoint joinPoint) {
System.out.println("시작할 때 : " + joinPoint.getSignature());
System.out.println("시작할 때 : " + joinPoint.getArgs());
System.out.println("시작할 때 : " + joinPoint.getSourceLocation());
}
결과
메소드명을 뽑아오고 싶으면
import org.aspectj.lang.reflect.MethodSignature;
@Before("cut()")
public void before(JoinPoint joinPoint) {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
System.out.println("시작할 때 : " + methodSignature.getName());
System.out.println("시작할 때 : " + methodSignature.toString());
}
결과
@Before("cut()")
public void before(JoinPoint joinPoint) {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
System.out.println("시작할 때 : " + methodSignature.getName()); //실행 메소드명
System.out.println("시작할 때 : " + methodSignature.getMethod());
}
결과
@Before("cut()")
public void before(JoinPoint joinPoint) {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
// 실행되는 함수 이름을 가져오고 출력
System.out.println("시작할 때 : " + methodSignature.getName()); //실행 메소드명
System.out.println("시작할 때 : " + methodSignature.getMethod()); //
// 파라미터
Object[] args = joinPoint.getArgs();
System.out.println(Arrays.toString(args));
}
파라미터 부분의 결과는
freeboard()
메서드의 파라미터가 이런 모양이라 그렇다. ({}
는 Model)
파라미터 배열의 종류, 값
@Before("cut()")
public void before(JoinPoint joinPoint) {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
// 실행되는 함수 이름을 가져오고 출력
System.out.println("시작할 때 : " + methodSignature.getName()); //실행 메소드명
System.out.println("시작할 때 : " + methodSignature.getMethod()); //
// 파라미터
Object[] args = joinPoint.getArgs();
System.out.println(Arrays.toString(args));
// 파라미터 배열의 종류 값
for (Object object : args) {
System.out.println("파라미터 타입 : " + object.getClass().getSimpleName());
System.out.println("파라미터 값 : " + object);
}
}
결과(/board)
글쓰기, 로그인 메서드도 해볼 수 있다.
After도 이렇게 할 수 있다.
@After("cut()")
public void after(JoinPoint joinPoint) {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
// 실행되는 함수 이름을 가져오고 출력
System.out.println(methodSignature.getName() + " 메소드가 종료되었습니다.");
}
파라미터, 예외 발생도 추적된다.
로그로 뭐 추적할 때 -> 이거 활용하면 된다.
책 part5, part7 다 읽기.
프로젝트에 안 넣어도 되긴 한대.
(로그인 체크.. 같은 거.)