스프링부트 공부노트 (2)
본문 바로가기

컴퓨터공부/Springboot

스프링부트 공부노트 (2)

by Life & study 2023. 8. 14.
반응형

스프링부트 공부노트 (2)

 

 

 

[백엔드 개발자의 스프링부트 공부노트]  AOP(Aspect Oriented Programming)

 

AOP(Aspect Oriented Programming)의 종류, 사용 및 예시 코드  

AOP(Aspect Oriented Programming)은 프로그래밍 패러다임 중 하나로, 핵심 비즈니스 로직과 관점을 나누어 프로그래밍하는 방식입니다. 
관점은 여러 부분에 영향을 미치는 교차 관심사(예: 로깅, 보안, 에러 처리)를 의미합니다. 
AOP는 이러한 관심사를 독립적으로 모듈화하고 관리함으로써 코드 유지보수성을 높이고 중복 코드를 줄일 수 있습니다.


 

@Aspect는 스프링 AOP에서 사용하는 어노테이션입니다. 

@Aspect는 클래스 레벨에서 선언하며, 해당 클래스가 Aspect로 작동하도록 합니다.

 

 Aspect는 공통적인 관심사를 모듈화한 것으로, 여러 클래스에 적용할 수 있습니다. 

Aspect는 다음과 같은 종류의 어노테이션을 사용할 수 있습니다.

@Before: 대상 메소드가 실행되기 전에 수행되는 Advice입니다.
@After: 대상 메소드가 정상적으로 종료되거나 예외가 발생하더라도 수행되는 Advice입니다.
@AfterReturning: 대상 메소드가 정상적으로 종료된 후에 수행되는 Advice입니다. 반환값을 받아서 처리할 수 있습니다.
@AfterThrowing: 대상 메소드가 예외를 발생시킨 후에 수행되는 Advice입니다. 발생한 예외를 받아서 처리할 수 있습니다.
@Around: 대상 메소드의 전후에 수행되는 Advice입니다. 

메소드의 실행을 제어하고 결과값을 변경할 수 있습니다.

 

 

[백엔드 개발자의 스프링부트 공부노트] @Aspect는 스프링 AOP에서 사용하는 어노테이션입니다.

 

@Aspect는 스프링 AOP에서 사용하는 어노테이션입니다.

@Aspect는 클래스 레벨에서 선언하며, 해당 클래스가 Aspect로 작동하도록 합니다.

Aspect는 공통적인 관심사를 모듈화한 것으로, 여러 클래스에 적용할 수 있습니다.

Aspect는 다음과 같은 종류의 어노테이션을 사용할 수 있습니다.

@Before: 대상 메소드가 실행되기 전에 수행되는 Advice입니다.

@After: 대상 메소드가 정상적으로 종료되거나 예외가 발생하더라도 수행되는 Advice입니다.

@AfterReturning: 대상 메소드가 정상적으로 종료된 후에 수행되는 Advice입니다. 반환값을 받아서 처리할 수 있습니다. @AfterThrowing: 대상 메소드가 예외를 발생시킨 후에 수행되는 Advice입니다. 발생한 예외를 받아서 처리할 수 있습니다. @Around: 대상 메소드의 전후에 수행되는 Advice입니다. 메소드의 실행을 제어하고 결과값을 변경할 수 있습니다.

 

다음은 각 종류의 @Aspect 어노테이션을 사용한 예시 코드입니다.

 

// Aspect 클래스 선언
@Aspect
@Component
public class MyAspect {

    // @Before 어노테이션 사용 예시
    // 모든 public 메소드에 적용됩니다.
    @Before("execution(public * *(..))")
    public void beforeAdvice(JoinPoint joinPoint) {
        // JoinPoint 객체를 통해 대상 메소드의 정보를 얻을 수 있습니다.
        System.out.println("Before advice: " + joinPoint.getSignature().getName());
    }

    // @After 어노테이션 사용 예시
    // com.example 패키지 내의 모든 메소드에 적용됩니다.
    @After("within(com.example.*)")
    public void afterAdvice(JoinPoint joinPoint) {
        System.out.println("After advice: " + joinPoint.getSignature().getName());
    }

    // @AfterReturning 어노테이션 사용 예시
    // com.example.service 패키지 내의 모든 메소드에 적용됩니다.
    // 반환값은 result 파라미터로 받습니다.
    @AfterReturning(pointcut = "within(com.example.service.*)", returning = "result")
    public void afterReturningAdvice(JoinPoint joinPoint, Object result) {
        System.out.println("After returning advice: " + joinPoint.getSignature().getName());
        System.out.println("Return value: " + result);
    }

    // @AfterThrowing 어노테이션 사용 예시
    // com.example.dao 패키지 내의 모든 메소드에 적용됩니다.
    // 발생한 예외는 ex 파라미터로 받습니다.
    @AfterThrowing(pointcut = "within(com.example.dao.*)", throwing = "ex")
    public void afterThrowingAdvice(JoinPoint joinPoint, Exception ex) {
        System.out.println("After throwing advice: " + joinPoint.getSignature().getName());
        System.out.println("Exception: " + ex.getMessage());
    }

    // @Around 어노테이션 사용 예시
    // com.example.controller 패키지 내의 모든 메소드에 적용됩니다.
    @Around("within(com.example.controller.*)")
    public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
        // ProceedingJoinPoint 객체를 통해 대상 메소드를 실행할 수 있습니다.
        System.out.println("Around advice before: " + pjp.getSignature().getName());
        Object result = pjp.proceed(); // 대상 메소드 실행
        System.out.println("Around advice after: " + pjp.getSignature().getName());
        return result; // 결과값 반환
    }
}

 

 

 

 

[백엔드 개발자의 스프링부트 공부노트] 힙과 스택

 

힙과 스택은 메모리 영역의 일부입니다. 

힙은 동적으로 할당된 객체들이 저장되는 곳이고, 스택은 지역 변수들이 저장되는 곳입니다. 힙과 스택의 차이점은 다음과 같습니다.

힙은 프로그램이 실행되는 동안에 크기가 변할 수 있고, 스택은 컴파일 시에 크기가 정해집니다.
힙은 메모리 관리를 위해 가비지 컬렉터가 필요하고, 스택은 메모리 관리가 자동으로 이루어집니다.
힙은 메모리 할당과 해제에 시간이 걸리고, 스택은 메모리 할당과 해제가 빠릅니다.
힙은 메모리 단편화가 발생할 수 있고, 스택은 메모리 단편화가 발생하지 않습니다.
힙은 전역적으로 접근할 수 있고, 스택은 지역적으로 접근할 수 있습니다.
다음은 힙과 스택을 사용하는 예시 코드입니다.

 

public class HeapAndStackExample {

    public static void main(String[] args) {
        // 스택에 저장되는 지역 변수
        int x = 10; // 기본형 변수
        String y = "Hello"; // 참조형 변수

        // 힙에 저장되는 객체
        Integer z = new Integer(20); // 기본형을 참조형으로 변환한 객체
        String w = new String("World"); // 문자열 객체

        System.out.println("x: " + x); // x의 값 출력
        System.out.println("y: " + y); // y가 참조하는 문자열 출력
        System.out.println("z: " + z); // z가 참조하는 정수 출력
        System.out.println("w: " + w); // w가 참조하는 문자열 출력
    }
}

 

출력값

x: 10
y: Hello
z: 20
w: World

 

[백엔드 개발자의 스프링부트 공부노트] 콜백Q 란 무엇인가?

 

콜백Q는 비동기적으로 실행되는 작업들의 순서를 관리하기 위한 자바스크립트 라이브러리입니다. 

콜백Q는 작업들을 큐에 넣고, 각 작업이 완료되면 다음 작업을 실행하는 방식으로 동작합니다. 

콜백Q는 콜백함수를 사용하여 작업들의 완료를 알립니다.

콜백함수는 다른 함수의 인자로 전달되어, 특정 조건이나 시점에 호출되는 함수입니다. 콜백함수는 비동기적인 작업의 결과를 처리하거나, 이벤트에 반응하거나, 고차 함수를 구현하는 등의 용도로 사용됩니다.

 

// 콜백Q 라이브러리 로드
var callbackQ = require('callbackq');

// 새로운 큐 생성
var queue = new callbackQ();

// 큐에 작업 추가
// 첫 번째 인자는 작업의 이름, 두 번째 인자는 작업을 수행하는 함수, 세 번째 인자는 콜백함수입니다.
queue.add('first', function(callback) {
    // 1초 후에 'first'라고 출력하고, 콜백함수 호출
    setTimeout(function() {
        console.log('first');
        callback();
    }, 1000);
});

queue.add('second', function(callback) {
    // 2초 후에 'second'라고 출력하고, 콜백함수 호출
    setTimeout(function() {
        console.log('second');
        callback();
    }, 2000);
});

queue.add('third', function(callback) {
    // 3초 후에 'third'라고 출력하고, 콜백함수 호출
    setTimeout(function() {
        console.log('third');
        callback();
    }, 3000);
});

// 큐 실행
queue.run();

 

출력값

first
second
third

 

 

 

[백엔드 개발자의 스프링부트 공부노트] 콜백함수, 콜백Q는 무엇인가?

 

콜백함수는 함수의 인자로 전달되어, 특정 조건이나 시점에 호출되는 함수입니다. 콜백함수는 비동기적인 작업의 결과를 처리하거나, 이벤트에 반응하거나, 고차 함수를 구현하는 등의 용도로 사용됩니다.

 

콜백Q는 비동기적으로 실행되는 작업들의 순서를 관리하기 위한 자바스크립트 라이브러리입니다. 

콜백Q는 작업들을 큐에 넣고, 각 작업이 완료되면 다음 작업을 실행하는 방식으로 동작합니다. 

콜백Q는 콜백함수를 사용하여 작업들의 완료를 알립니다.

 

콜백함수설명 예시.

// 비동기적인 작업을 수행하는 함수
function asyncTask(callback) {
    // 1초 후에 'done'이라고 출력하고, 콜백함수 호출
    setTimeout(function() {
        console.log('done');
        callback();
    }, 1000);
}

// 콜백함수를 정의하는 함수
function makeCallback(message) {
    // message를 출력하는 함수를 반환
    return function() {
        console.log(message);
    };
}

// 비동기적인 작업을 실행하고, 콜백함수로 'hello'를 출력하는 함수를 전달
asyncTask(makeCallback('hello'));

출력값

done
hello

 

 

 

 

[백엔드 개발자의 스프링부트 공부노트] 브라우저 API, 웹 API는 무엇인가?

 

 

브라우저 API는 웹 브라우저가 제공하는 인터페이스로, 웹 브라우저의 기능을 사용할 수 있게 해줍니다. 

예를 들어, 브라우저 API를 통해 웹 페이지의 문서 객체 모델(DOM)에 접근하거나, 웹 스토리지에 데이터를 저장하거나, 웹 캠이나 마이크에 접근하거나, 알림이나 팝업을 표시하거나, 웹 소켓을 통해 서버와 통신하거나, 등의 작업을 할 수 있습니다.

웹 API는 웹 서버가 제공하는 인터페이스로, 웹 서버의 데이터나 기능을 사용할 수 있게 해줍니다. 


예를 들어, 웹 API를 통해 날씨 정보나 지도 정보나 영화 정보 등의 데이터를 요청하거나, 회원 가입이나 로그인이나 결제 등의 기능을 수행하거나, 등의 작업을 할 수 있습니다.

 

 

// 브라우저 API 예시: Geolocation API를 사용하여 현재 위치 정보를 얻고 지도에 표시하기

// Geolocation 객체를 얻기
var geolocation = navigator.geolocation;

// 현재 위치 정보를 요청하기
geolocation.getCurrentPosition(function(position) {
    // 위치 정보에서 위도와 경도 값을 얻기
    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;

    // Google Maps API를 사용하여 지도 객체 생성하기
    var map = new google.maps.Map(document.getElementById('map'), {
        center: {lat: latitude, lng: longitude},
        zoom: 15
    });

    // 지도에 마커 표시하기
    var marker = new google.maps.Marker({
        position: {lat: latitude, lng: longitude},
        map: map,
        title: 'You are here'
    });
});

// 웹 API 예시: OpenWeatherMap API를 사용하여 현재 날씨 정보를 얻고 화면에 표시하기

// 현재 위치의 날씨 정보를 요청하기
// API 키는 본인의 것으로 바꾸기
var apiKey = 'your_api_key';
var url = 'https://api.openweathermap.org/data/2.5/weather?lat=' + latitude + '&lon=' + longitude + '&appid=' + apiKey;

// XMLHttpRequest 객체 생성하기
var xhr = new XMLHttpRequest();

// 요청을 열기
xhr.open('GET', url);

// 요청을 보내기
xhr.send();

// 요청이 완료되면 응답 처리하기
xhr.onload = function() {
    // 응답을 JSON 형식으로 파싱하기
    var response = JSON.parse(xhr.responseText);

    // 응답에서 날씨 정보 얻기
    var weather = response.weather[0].main; // 날씨 상태
    var temp = response.main.temp - 273.15; // 온도 (켈빈에서 섭씨로 변환)

    // 화면에 날씨 정보 표시하기
    var weatherElement = document.getElementById('weather');
    weatherElement.innerHTML = 'The weather is ' + weather + ' and the temperature is ' + temp.toFixed(1) + '°C.';
};

 

 

반응형

댓글