반응형

SPRING에서 AOP란 

 

대부분의 시스템이 공통으로 가지는 보안이나, 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사(Cross-Concern)'라고 하며, 스프링은 이러한 횡단 관심사를 분리해서 제작하는 것이 가능합니다.

AOP(Aspect Oriented Programming)는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임입니다.

또한 이러한 횡단 관심사의 가장 흔한 예는 보안이나 성능 모니터링과 같은 작업을 들 수 있습니다.

 

- 코드로 배우는 스프링 웹 프로젝트 출처 -

 

이론적으로는 이런 설명인데 이게 과연 소스상에서는 어떤 부분을 어떻게 구성했다 라고 말 할 수 있는 걸까 ?

 

실제 프로젝트를 진행하면서 스프링시큐리티를 이용하여 보안을 설정하였고, logger를 이용하여 로그를 남기는 등의 작업을 하였고, 이것을 나는 AOP를 구현하였다고 생각하고 있었지만......

일단 책에서는 

spring-aop 관련 라이브러리를 pom.xml에 추가하고 @Aspect 어노테이션을 선언한 컴포넌트를 구현한 것을 aop를 사용 하는 것이라 설명하고 있다.

@Before, @After @Around 등을 통해 설정을 한 비즈니스 로직 외 의 부분을 실행 하도록 설정하는 것이다.

 

 

그런데 작성하면서 느낀 점이 AOP에서 하는 기능은 Spring의 인터셉터(Interceptor)와 거의 같은 기능을 수행한다!!!

 

둘의 차이점은 파라미터의 차이!!! 

 

AOP는 JoinPoint 나 ProceedingJoinPoint 등을 활용하여 대상이 되는 메소드의 파라미터를 처리

Interceptor는 HttpServletRequest나  HttpServletResponse를 활용하여 파라미터를 처리

 

 

고로.... AOP의 개념을 알고... AOP를 직접 사용하진 않았지만 그에 걸맞는 기능인 인터셉터를 사용하여 구현한 적인 있다!!!!

 

 

반응형
반응형
@Entity
@Table(name = "board")
public class Board {
    @Id
    @Column(name = "keyword_news_id")
    private int id;

    @Id
    @Column(name = "board_no")
    private int boardNo;

 

이와 같이 엔티티를 설정하게 되면 

 

Composite-id class must implement Serializable

 

이와 같은 에러가 발생하게 된다.

 

에러의 원인은 아래와 같다.

The session object needs to be serializable hence all objects referenced by it must be serializable as well. The id is used as a key to index loaded objects in the session. In case of CompositeId s the class itself is used as the id.

세션에서 객체가 로드 될때 키의 index를 id로 사용하기 위해서는 각 객체가 Serializable 된 상태어야 된다.

라고 해석 된다.

//TODO Serializable 이 된다는게 정확히 어떤의미 인지 다시 한번 찾아보자.

 

아래와 같이 Serializable 을 상속 받으면 해결 된다.

@Entity
@Table(name = "board")
public class Board implements Serializable {
    @Id
    @Column(name = "keyword_news_id")
    private int id;

    @Id
    @Column(name = "board_no")
    private int boardNo;
반응형

'IT > JAVA' 카테고리의 다른 글

모바일 체크 로직 예제  (0) 2019.04.28
[JAVA] String To Date , Date To String  (0) 2018.11.29
반응형

https://app.codility.com/demo/results/trainingWSHSQ7-TFQ/

 

Test results - Codility

A non-empty array A consisting of N integers is given. A permutation is a sequence containing each element from 1 to N once, and only once. For example, array A such that: A[0] = 4 A[1] = 1 A[2] = 3 A[3] = 2 is a permutation, but array A such that: A[0] =

app.codility.com

 

배열 내에서 값이 순열인지 확인 하는 문제이다.

 

내가 푼 방법은 요소들의 합을 가지고 판단하는 로직으로 알고리즘을 짰지만....

 

퍼포먼스 쪽 부분의 점수가 높지 않다.... 뭔가 효율을 낼 수 있는 코드를 짤 수 있도록 더 생각해야겠다.

 

다음에 이걸 100% 올릴 수 있도록

반응형
반응형

https://app.codility.com/demo/results/trainingT2AFR4-G8F/

 

Test results - Codility

A string S consisting of N characters is called properly nested if: S is empty; S has the form "(U)" where U is a properly nested string; S has the form "VW" where V and W are properly nested strings. For example, string "(()(())())" is properly nested but

app.codility.com

에러가 나는 부분의 경우의 수를 어떤 걸 해야되는지 모르겠다.

추후에 다시 봐보자 

로직은 이상이 없는 것 같다.

반응형
반응형
int arrASize = A.length;
        int maxResult =0;
        int tempResult;

        for (int i = 0; i < arrASize - 2; i++) {
            for (int j = i + 1; j < arrASize - 1; j++) {
                for (int l = j + 1; l < arrASize; l++) {
                    tempResult = A[i] * A[j] * A[l];
                    if(i==0 && j==1 && l==2) {
                        maxResult = tempResult;
                    }

                    else if(maxResult < tempResult) {
                        maxResult = tempResult;
                    }
                }
            }

        }

        System.out.println(maxResult);
        return maxResult;

    }

위의 코드로 할 시 결과 값은 올바른 값이 나오지만... 효율이 정말 꽝인 코드이다.... 한마디로 시간 복잡도가 n의 3제곱 이 된다.

 

100%인 다른 분의 코드를 보니.........

배열의 sort 메소드를 이용하여 정렬을 한 뒤 맨 앞 3개의 값과 맨 뒤의 3개의 값을 비교하였다. 

곱셈의 성질 상 3개의 곱셈이 숫자가 크다고 언제나 높은 값이 아닌 음수, 양수 또한 따져야 하기 때문이다.....

 

배열의 순서는 상관이 없다.... 그 안에 값을 가지고 로직을 구현 하면 되는 것이었다.

소팅을 이용하면 단 2번의 곱셈으로로 최대 값을 알수 있는데.... 그걸 for 문으로 돌고 있었으니.... 효율이 꽝일 수 밖에.....

반응형
반응형

https://app.codility.com/demo/results/trainingA3P3PU-PBR/

 

Test results - Codility

An array A consisting of N integers is given. Rotation of the array means that each element is shifted right by one index, and the last element of the array is moved to the first place. For example, the rotation of array A = [3, 8, 9, 7, 6] is [6, 3, 8, 9,

app.codility.com

의견

배열을 알고 있고, 적당한 알고리즘을 사용하여 풀 수 있었다.

 

반응형
반응형

https://app.codility.com/demo/results/trainingZ55NFR-TDD/

 

Test results - Codility

A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is surrounded by ones at both ends in the binary representation of N. For example, number 9 has binary representation 1001 and contains a binary gap of length 2. The

app.codility.com

어찌 어찌 100%로 통과 하긴 했는데.....

이지난이도도 이렇게 시간 오래 걸려서 풀게 되다니....

 

정규식, 자바Utils 등 여러가지를 활용 할 수 있어야 된다.

반응형
반응형

매핑 시켜놨떤 모델을 한번 만 실행하여 모델 값이 변하더라도 그 값이 변하지 않도록 하는 법

v-once

<span v-once>{{test.name}}</span>

 

input 안에 disabled 부여

<input ~~ :disabled="조건식 or boolean 값"

 

:disabled="devCtcsm.ctcsmScore == null "

href에 바인드 시킬때

<a v-bind:href="url"> ... </a>

 

엔티티 내 다른 엔티티를 필드로 가지고 있을 경우 화면에서 엔티티 접근법

<a v-bind:href="prdct.rwmtrlCncptRealFile.path"      X

<a v-bind:href="(prdct.rwmtrlCncptRealFile).path"    O

 

위의 예시처럼 상위 엔티티를 괄호로 감싸주어야 만 접근이 가능하다.

 

 

반응형

+ Recent posts