AOP
종단관심 : 객체란 관련된 정보를 가지고 있다.
횡단관심 : 모든 메소드의 시작 전,후에 로그 처리를 하고싶다.
AOP는 종단관심만으로 처리 할 수 없는 부분을 처리해준다.
용어
joinPoint : 적용할 위치(횡단관심) -> 메소드 시작,끝 / Exception / 메소드를 감싸서(위빙)
advice : joinPoint에서 실행 할 코드
pointcut : 어떤 Advice를 어떤 joinPoint에 적용할지 설정
Aspect : joinPoint + advice + pointcut(위빙)
target
Argumentresolver
interceptor 다음에 실행된다.
메소드 안에 있는 파라미터의 타입을 지원해주는지 확인하여 값을 알아서 넣어주는 기능을 한다.
Handlermethodargumentresolver를...
2018년 6월 12일 화요일
Spring Boot에서 정적, 동적 파일 실시간 반영
설정을 통해 파일에 변경이 있을때 자동 Realod
1. POM.xml 에서 spring-boot-devtools를 추가한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>true</scope>
</dependency>
2. livereload enable 및 cache...
2018년 6월 11일 월요일
패스트 캠퍼스 JAVA 웹 프로그래밍 마스터 41일차(APM, 운영)
CommandLineRunner
스프링이 구동되는 시점에 실행하고 싶은 코드가 있는 있으면 CommandLineRunner을 구현한다.
스프링 컨테이너에 관리하는 객체들을 관리하기 위해서 CommandLineRunner 의 run()메소드를 오버라이딩 하여 구현한다. CommandLineRunner를 구현하면 빈들이 메모리에 모두 올라간 후에 run()메소드를 호출한다. 기존 main()메소드를 사용안하는 이유는 기본 Main 메소드는 JVM이 실행하고 static하기 때문에 빈을 사용할수 없다.
APM
SCOUTER(어플리케이션 모니터링 서비스)
JAVA agent 와 HostAgent를 통해 JAVA와 OS에 대한정보를 수집한다.
오류내용와 요청횟수를 확인할 수 있다.
운영
운영을 하려면 배포도구(젠킨스등)와...
2018년 6월 9일 토요일
Spring Security 프로젝트 생성 및 로그인
1. SPRING INITIALIZR를 통해 아래와 같이 설정하고 프로젝트를 생성한다.
Maven에서 시큐리티 설정을 추가하고 싶으면 아래 goal을 추가한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2. 서버를 실행하고 브라우저에서 http://localhost:8080...
2018년 6월 8일 금요일
패스트 캠퍼스 JAVA 웹 프로그래밍 마스터 40일차(기타)
다 잘할수는 없지만 1가지라도 잘하자
사용자가 많아질 경우 WAS가 추가 될수 있는데 nginx 웹서버를 이용하면 구성하기 쉽다.
언어의 철학에 대해 이해하자. 어떤 이유에 대해 만들어 졌는지
개발자는 요구사항을 개발한다.
개발전에 Architecture를 구현한다.
Architecture를 재사용 하여 다른 요구사항을 개발한다.
구성되어 있는 Architecture는 최적의 Architecture다.
Framework
스프링 시큐리티는 웹 어플리케이션에서 제일 앞에서 막는다.
서블릿필터와 디스패처서블릿은 스프링 3.0전까지는 빈으로 등록되지 않았다.(설정부분에서 등록하기 때문)
스프링 3.0 이후에는 빈으로 가지고 올 수 있게 변경되었다.
프레임워크란 내가 개발한 것이 무언가에 의해서...
2018년 6월 5일 화요일
[ERROR] null value was assigned to a property of primitive type setter of
필드에 @Column(nullable = true) 옵셥을 주고 값을 가지고 올때 해당 필드에 null인 값이 있는 데이터가 있으면 에러가 발생한다. 기본 유형에 null값을 할당 할 수 없어서 wrapper class를 변경해서 사용하여야한다.
stackoverflow 참고
https://stackoverflow.com/questions/3154582/why-do-i-get-a-null-value-was-assigned-to-a-property-of-primitive-type-setter-o/3154585#3154...
2018년 6월 4일 월요일
패스트 캠퍼스 JAVA 웹 프로그래밍 마스터 39일차(JPA)
Spring Boot JPA
Spring DATA JPA를 사용한다.
Spring DATA JPA ----> JPA ---> Entity Manager가 포함되어있어서 Entity Manager 객체를 만들어서 사용하지 않아도 된다.
엔티티 매니저도 객체이다. Heap메모리에 올라가 있다.
persist하거나 JQPL,Find(),을 사용하면 1차캐시에 저장된다.
요청을 할때 DB에서 읽어온 데이터는 1차캐시에 저장되어 있다. 같은 요청을 하면 1차 캐시에 데이터가 있는 데이터를 반환한다. 그래서 상황에 따라 LAZY로딩이 더 빠를수도 있다.
엔티티 작업은 트랜잭선 안에서 일어나야 한다.
스프링 부트에서는 @Transactional을 통해 트랜잭션을 관리한다.
엔티티는 SQL을...