1번

public class TestController {

	@Autowired
	private Repository repository;
    
}

 

-------------------------------

2번 - lombok 라이브러리

@RequiredArgsConstructor
public class TestController {

	private final Repository repository;
    
}

 

 

--------------------------------

3번 - 컨트롤러 생성자에 DI할 것 넣기

public class TestController{
	
	private final Repository repository;

	public class TestController(Repository repository){
    
		this.repository = repository;
        
    }
}

 

 

어노테이션은 주석인데 컴파일러가 읽는 주석이다 - 힌트라고도 한다

 

 

 

@Retention - 어노테이션 작동시점

runtime - 런타임시 작동

 

 

 

어노테이션을 걸어두면 해당 매개변수에 값이 들어간다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

쿼리문 가져오기

 

 

junit으로 테스트

 

 

 

 

 

 

 

숙제

전체 크롤링

 

 

 

해당 프로젝트

https://github.com/jaybon1/springwork/tree/master/livere

 

jaybon1/springwork

Contribute to jaybon1/springwork development by creating an account on GitHub.

github.com

 

 

라이브리 회원 가입

https://livere.com/

 

라이브리

간편한 사진/동영상 첨부

livere.com

--

 

 

무료버전 설치

--

 

 

localhost가 안먹히니 참고

--

 

 

--

 

 

--

 

 

--

 

 

--

 

 

--

 

 

테스트

--

 

 

 

 

 

참고

blog.naver.com/getinthere/221799123006

 

springboot 23강 - AOP + logger(logback-spring.xml), AOP+BindingResult

https://github.com/codingspecialist/Springboot-MyBatis-Blog-V31. 의존성2. AOP 파일 생성(1) c...

blog.naver.com

 

참고

https://blog.naver.com/getinthere/221799123006

 

springboot 23강 - AOP + logger(logback-spring.xml), AOP+BindingResult

https://github.com/codingspecialist/Springboot-MyBatis-Blog-V31. 의존성2. AOP 파일 생성(1) c...

blog.naver.com

 

현재 프로젝트

https://github.com/jaybon1/springwork/tree/master/logTest

 

jaybon1/springwork

Contribute to jaybon1/springwork development by creating an account on GitHub.

github.com

 

 

--

 

 

밸리데이션 이용

--

 

 

--

 

 

밸리데이션 어노테이션 확인

https://gmlwjd9405.github.io/2018/12/02/spring-annotation-types.html

 

[Spring] Spring Annotation의 종류와 그 역할 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

javax 것을 사용

 

어노테이션으로 밸리데이션 체크

--

 

 

컨트롤러에 테스트 매핑추가

--

 

 

포스트맨 테스트

--

 

 

컨트롤러에서 에러처리

--

 

 

포스트맨에서 확인

--

 

 

AOP 의존성추가

--

 

 

pom.xml에 추가

--

 

 

컨트롤러에서 에러처리 코드를 잘래내기

--

 

 

aop로 바인딩 어드바이스를 하기 위해 패키지와 파일 생성

--

 

 

Around로 처리

--

 

 

로그를 확인하기 위한 로거 생성

--

 

메시지를 띄우기 위해 적어주기

1. 에러가 난 클래스 이름과 메서드이름을 변수에 입력
2. 콘솔에 로그를 남긴다 

--

 

 

--

 

 

이제 AOP로 warn이 뜨는 것만 파일로 낚아채보자

 

 

logback 설정파일 생성

--

 

 

--

 

 

예시코드 - 자신에 맞게 수정하여 사용하자

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOGS_ABSOLUTE_PATH" value="./logs" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{36} - %msg%n</Pattern>
        </layout>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS_ABSOLUTE_PATH}/logback.log</file>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOGS_ABSOLUTE_PATH}/logback.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

	<root level="INFO">
    	<appender-ref ref="STDOUT" />
    </root>
    
<!--     warn 설정시 warn info debug가 저장된다 -->
    <logger name="com.jaybon.config.aop.warn" level="WARN">
        <appender-ref ref="FILE" />
    </logger>

</configuration>
[출처] springboot 23강 - AOP + logger(logback-spring.xml), AOP+BindingResult|작성자 getinthere

--

 

 

로그 주소

 

콘솔에 뜨는 방식

 

파일명이 바뀌며 폴더를 날짜별로 정리 - RollingFileAppender
LOGS_ABSOLUTE_PATH - 위에서 설정한 로그 주소
maxFileSize - 파일 용량
maxHistory - 로그 개수

 

에러레벨을 설정한다
DEBUG / INFO / WARN / ERROR 순서의 위험도
자신의 위험도 이상의 내용만 뜬다

--

 

aspect파일에서 예외를 발생시키면 

--

콘솔에 로그가 찍히고

--

 

로그파일에 로그데이터가 저장되어 있다

--

 

 

 

 

 

'Server > Spring Boot' 카테고리의 다른 글

spring boot // 웹크롤링 제품리뷰  (0) 2020.08.21
spring boot // livere 사용하기  (0) 2020.08.18
spring boot // 센트리 sentry.io  (0) 2020.08.17
spring boot //구글 애널리틱스  (0) 2020.08.17
spring boot // oauth2  (0) 2020.08.11

 

 

참고

https://docs.sentry.io/clients/java/usage/

 

Manual Usage

 

docs.sentry.io

 

 

해당 프로젝트

https://github.com/jaybon1/springwork/tree/master/googleapp

 

jaybon1/springwork

Contribute to jaybon1/springwork development by creating an account on GitHub.

github.com

 

 

 

 

로그 분석

DB에 로그를 저장하면 부하가 생기고
파일에 저장하면 보기가 힘들다
웹으로 보는 것이 편하다
(회사에서는 웹포트 이외에는 열지 않기 때문에 확인하기가 불편)

센트리에서 그러한 로그 기록을 관리해준다

 

--

 

 

--

 

 

--

 

 

디펜던시 추가해보자

--

 

 

--

 

 

세팅

--

 

 

--

 

 

--

 

 

키 확인 및 저장

DSN - 서버로 소켓달아서 던지는 것

--

 

 

프로젝트의 언어를 변경하려면

--

 

 

아무 언어나 선택하고 여기에서 other를 선택

--

 

 

문서를 보려면 사용

--

 

 

자바선택

--

 

 

문서에서 아래 코드를 참고하여 커스텀한다

 

아래와 같이 커스텀한다

--

 

 

컨트롤러에서 로그를 남길 부분에 logSimpleMessage사용

--

 

 

--

 

 

테스트용이라 간단히 구현하였다
추후에는 글로벌 익셉션 등에 해당 코드를 적용하여 에러관리를 할 수 있다

 

 

해당 프로젝트

https://github.com/jaybon1/springwork/tree/master/googleapp

 

jaybon1/springwork

Contribute to jaybon1/springwork development by creating an account on GitHub.

github.com

 

구글애널리틱스

1. 구글애널리틱스 가입(웹/앱)
2. 파이어베이스 프로젝트 추가
3. 애널리틱스 문서 및 콘솔 확인
4. 헤더나 푸터에 애널리틱스 코드 입력
5. 서버에 템플릿페이지 등 생성(테스트를 위해서 여러개만들기)
6. 서버를 켜서 이동해보고 애널리틱스창에서 확인해보기

 

 

구글 애널리틱스 가입(웹 / 앱)

--

 

 

파이어베이스 - 파이어스토어 문서에서 애널리틱스 들어가기

--

 

firebase.google.com/docs/analytics/get-started?authuser=0

 

Google 애널리틱스 시작하기  |  Firebase

이 빠른 시작에서는 앱에 Google 애널리틱스를 추가하고 이벤트 로깅을 시작하는 방법을 설명합니다. iOS Android 웹 Google 애널리틱스는 앱의 사용량과 행동 데이터를 수집합니다. 이 SDK는 다음 두 ��

firebase.google.com

--

 

 

--

 

 

--

 

 

--

 

 

파이어베이스 프로젝트생성 - 애널리틱스 선택

--

 

 

호스팅은 지금은 체크하지 않는다

--

 

 

코드를 템플릿(머스태치)에 입력
(모든페이지에서 쓰려면 헤더에 등록)

--

 

 

--

 

 

테스트용 페이지들을 만들고 서버를 켜서 여기저기 이동해본다

--

 

 

파이어베이스 애널리틱스로 이동

--

 

 

대시보드에 들어오면 기록이 남아있다

--

 

 

'Server > Spring Boot' 카테고리의 다른 글

spring boot // log 남기기 / 파일로 저장하기  (3) 2020.08.17
spring boot // 센트리 sentry.io  (0) 2020.08.17
spring boot // oauth2  (0) 2020.08.11
spring boot // 구글 oauth 설정  (0) 2020.08.11
spring boot // ROLE 만들기  (0) 2020.08.11

 

--------------

참고프로젝트 jpa 메서드도 참고

https://github.com/codingspecialist/Springboot-Security-OAuth2.0-V2

 

codingspecialist/Springboot-Security-OAuth2.0-V2

Contribute to codingspecialist/Springboot-Security-OAuth2.0-V2 development by creating an account on GitHub.

github.com

 

oauth 세팅 유튜브

youtu.be/WACDTFroYNI

 

현재 프로젝트

https://github.com/jaybon1/springwork/tree/master/securityOAuthEx01

 

jaybon1/springwork

Contribute to jaybon1/springwork development by creating an account on GitHub.

github.com

---------

 

프로젝트 생성 후 이클립스 내에서 의존성 추가하기

--

 

OAuth2 Client 선택 추가

---

 

구조

--

 

application.yml

네이밍전략 참고

physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

https://mycup.tistory.com/237

 

Springboot jpa & Hibernate Naming Strategy(네이밍 전략)

Springboot jpa & Hibernate Naming Strategy 전략 어느날 부터인가 컬럼명이 카멜케이스로 나오고 있다. 왜이러지? Springboot 특정 버전 이상부터 프로퍼티 설정이 변경되었다. 프로젝트에 대소문자 구별이 ��

mycup.tistory.com

 

--

 

 

WebMvcConfig.java

configureViewResolvers를 사용하면 뷰리졸버의 확장자를 원하는대로 설정 가능하다

이클립스는 .mustache를 기본 지원하지 않기 때문에 html로 바꿔서 이용하도록 하자

--

 

 

SecurityConfig.java

@EnableWebSecurity // 필터체인을 커스텀 한다는 어노테이션

@EnableGlobalMethodSecurity // 어노테이션 기반 보안을 적용 할 수 있다

public interface BankService {

@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account readAccount(Long id);

출처: https://yellowh.tistory.com/138 [노랭이의 공부공간]

WebSecurityConfigurerAdapter // 어댑터를 이용하면 원하는 보안기능만 커스텀 할 수 있다

--

 

추후에 만들 서비스인데 SecurityConfig 내부에서 사용하기 위해 @Autowired를 하였다

--

 

@Bean을 통해서 IOC 등록을 할 수 있다.

@Controller는 요청(request)가 올 때 IOC되므로 컨트롤러 이외의 IOC되는 공간에 Bean을 등록해야한다
(@Configuration 이나 @Component 등)

--

 

1. csrf 공격을 막는 기능을 비활성화 한다

2. /user 이후 모든 경로로 접속할 때 인증이 필요하다

3. /admin 이후 모든 경로로 접속할 때 ROLE_ADMIN 역할을 가지고 있어야 한다
(/admin** 이면 adminasdf 등의 경로로 접속할 때 ) 

4. 나머지 경로는 모두 허용한다

5. 폼로그인시 /login으로 리다이렉트 하고 로그인 요청시 /loginProc 주소로 이동

6. OAuth로그인시 설정
userInfoEndpoint() - OAuth2 로그인 성공 후 사용자 정보를 가져올 때의 설정들을 담당
userService(principalOauth2UserService) 소셜 로그인 성공 시 후속조치를 시행할 UserService 인터페이스의 구현체를 등록

--

 

해당 경로는 위의 시큐리티를 무시하고 접속하도록 함

 

 

UserRepository.java

JpaRepository를 상속하면 @Repository를 붙이지 않아도 IOC된다

JPA는 네이밍 전략으로 함수를 짤 수 있다는 점 참고 - 인터넷 검색

--

 

 

User.java

원래 모델에는 lombok의 @Data 를 사용하면 안된다 (연습용이기 때문에 사용)

@Id - 프라이머리키로 만들어줌(JPA)

@GeneratedValue - id 자동 증가 전략을 선택(JPA)

@CreationTimestamp - 타임스탬프 시간을 자동으로 넣어준다(JPA)

--

 

 

IndexController.java

@AuthenticationPrincipal // UserDetailsService에서 Return한 객체 를 파라메터로 직접 받아 사용할 수 있다

--

 

SecurityConfig에서 Bean으로 등록한 메서드를 DI 한다

--

 

비밀번호를 암호화하여 DB에 저장

--

 

@Secured // 컨트롤러에서 역할 체크를 하기 위해서 사용

--

 

 

PrincipalDetails.java

UserDetails는 Authentication 객체에 저장할 수 있는 유일한 타입이다 - 임플리먼트

OAuth2User는 OAuth2를 동시에 이용하기위해 임플리먼트

--

 

내부에 변수를 만들어도 되지만 User 타입 자체를 넣어도 무방하다

--

 

user에서 패스워드와 유저네임을 리턴

--

 

권한이 여러개일 수 있기 때문에 콜렉션으로 리턴한다

이것도 마찬가지로 SimpleGrantedAuthority라는 정해진 타입으로 만들어야 한다

--

 

OAuth2User를 임플리먼트 면 두개의 메서드를 오버라이딩 해야한다

getAttributes()는 google등 리소스 서버로부터 받는 회원정보를 담고 있다

 

 

PrincipalDetailsService.java

PrincipalDetailsService를 기본 UserDetailsService로 덮어 씌운다

loadUserByUsername()은 AuthenticationManager가 호출하는 메서드

--

 

 

OAuth2UserInfo.java

OAuth2 정보를 담을 인터페이스를 만든다

--

 

 

GoogleUserInfo.java

OAuth2UserInfo 타입을 임플리먼트 받아서 구글 전용으로 만든다

--

 

 

PrincipalOauth2UserService.java

스프링의 기본 DefaultOAuth2UserService를 상속 받는 커스텀 클래스를 만든다

 

토큰값으로 자원을 받아와서 세션에 등록한다

 

1. OAuth2 기능을 어떤 사이트(제공자)에서 사용했는지 확인

2. 제공자와 제공자의 ID를 받는다
Optional 타입을 이용하면 받은 객체가 null 이라도 내부에 저장되기 때문에 Optional 객체자체는 null이 아니라는 점을 이용할 수 있다

3. userOptional 내부의 객체가 null이 아니라면 내부 객체를 가져오고
null 이라면 User타입을 만들어서 DB에 저장한다

 

+ Recent posts