728x90

ExceptionHandler는 프로그램 실행 중 예외가 발생했을 때, 이를 적절하게 처리할 수 있도록 도와주는 클래스입니다.

예외가 발생하면, 해당 예외를 처리할 수 있는 가장 가까운 예외 처리기를 찾아 실행시키며, 처리기가 없을 경우 프로그램은 종료됩니다.

ExceptionHandler의 장점은 다음과 같습니다.

  • 예외 처리를 위한 일관된 방법을 제공합니다.
  • 예외가 발생할 경우 처리하기 위한 구조를 제공하므로 코드의 가독성을 높일 수 있습니다.
  • 예외 처리를 통해 프로그램의 안정성과 신뢰성을 높일 수 있습니다.

그러나 ExceptionHandler의 단점도 있습니다.

  • 모든 예외를 처리할 수 없으며, 예외 처리에 대한 일부 책임은 개발자에게 남아 있습니다.
  • 처리되지 않은 예외는 예기치 않은 동작을 일으킬 수 있습니다.

아래는 Java에서 ExceptionHandler 사용하는 간단한 예제입니다.

 

public class Example {
  public static void main(String[] args) {
    try {
      int a = 5 / 0;
    } catch (ArithmeticException e) {
      System.out.println("Cannot divide by zero");
    }
  }
}

 

Controller는 클라이언트의 요청을 받아 해당 요청을 처리합니다.

이 때, 예외가 발생하면 ExceptionHandler를 사용하여 예외 처리를 담당합니다. ExceptionHandler는 예외 처리와 관련된 로직을 담당하므로, Controller에서 처리하는 것이 적절합니다.

 

따라서, 예외 처리를 담당하는 ExceptionHandler 클래스는 일반적으로 Controller 패키지 내부에 위치합니다.

그러나 프로젝트 규모나 구조에 따라 위치가 달라질 있으며, 다른 패키지에 위치해도 상관 없습니다.

중요한 것은 예외 처리 로직을 담당하는 클래스가 Controller에서 처리되는 것입니다.

728x90

 초보자들을 위한 주식 기본 용어를 간단하게 소개하겠습니다.

  1. 주식: 회사에서 발행한 증서를 말하며, 주식을 소유하면 회사의 소유주가 됩니다.
  2. 거래소: 주식을 매도하고 매입할 수 있는 시장을 말합니다. 국내에는 대한민국 거래소(KRX)가 있습니다.
  3. 주식 가격: 주식의 가격은 수요와 공급에 따라 결정됩니다. 수요가 많을수록 주식 가격이 상승하고, 공급이 많을수록 주식 가격이 하락합니다.
  4. 주식 지수: 여러 개의 주식 가격을 평균한 가격으로, 대표적인 주식 지수로는 KOSPI, KOSDAQ, 산업평균가, 다우존스 등이 있습니다.
  5. 배당금: 주식을 소유한 사람들에게 기업이 발행한 이익에 대한 일부를 지급하는 것을 말합니다.
  6. 주가 수익률(PER): 기업의 주가와 주당 순이익(당기순이익/발행 주식 수)을 나눈 비율로, 주식이 고평가된 것인지 저평가된 것인지 판단하는데 도움이 됩니다.
  7. 시가총액: 회사의 총 발행 주식 수와 주식 가격을 곱한 값으로, 해당 회사의 크기를 나타냅니다.
  8. 주식 분할: 회사가 발행한 주식 수를 늘리는 것으로, 주식 분할 이후에는 주식 가격이 하락합니다.
  9. 거래 수수료: 주식 거래를 위해 중개 업체에 지불하는 수수료입니다.
  10. 주식 매도: 소유하고 있는 주식을 판매하는 것을 말합니다.

이상으로 초보자들이 주식 투자를 하면서 자주 마주치는 기본적인 용어들을 간단하게 소개해 보았습니다. 

'주식' 카테고리의 다른 글

[주식용어] 2.입문자를 위한 주식 기초용어 정리  (0) 2023.04.10
728x90

앞서 이야기한 것처럼 자바 스트림(Stream)은 컬렉션 데이터를 함수형 프로그래밍 방식으로 처리할 수 있는 장점을 가지고 있습니다. 이번에는 스트림의 특징과 종류, 그리고 사용 방법 등에 대해 좀 더 자세히 살펴보겠습니다.

 

스트림의 특징

스트림은 크게 다음과 같은 특징을 가집니다.

  • 순차 처리(Stream)와 병렬 처리(Parallel Stream)를 모두 지원합니다.
  • 스트림은 데이터를 저장하지 않으며, 데이터를 처리하는 방식만을 정의합니다.
  • 스트림은 데이터 소스로부터 데이터를 읽기 때문에 한 번만 사용 가능합니다.
  • 중간 연산(intermediate operation)과 최종 연산(terminal operation)으로 구성됩니다.
  • 중간 연산은 스트림을 반환합니다. 즉, 중간 연산을 여러 개 연결하여 사용할 수 있습니다.
  • 최종 연산은 스트림을 종료하며, 스트림을 이용해 원하는 작업을 수행합니다.

스트림의 종류

스트림은 크게 세 가지 종류로 나눌 수 있습니다.

  • 기본형 스트림: int, long, double 등 기본형 데이터를 다루는 스트림입니다.
  • 객체 스트림: 객체를 다루는 스트림입니다.
  • 병렬 스트림: 여러 스레드를 이용해 병렬 처리를 할 수 있는 스트림입니다.

각 종류별로 제공되는 스트림의 메서드와 기능이 다르므로, 필요에 따라 적절한 스트림을 선택하여 사용해야 합니다.

스트림의 사용 방법

스트림은 컬렉션 데이터를 처리할 때 가장 많이 사용됩니다. 스트림은 다음과 같은 순서로 사용합니다.

  1. 컬렉션 데이터를 스트림으로 변환합니다.
  2. 중간 연산을 이용해 데이터를 처리합니다.
  3. 최종 연산을 이용해 최종 결과를 반환합니다.

스트림의 사용 예시를 보면 다음과 같습니다.

 

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

int sum = list.stream()
              .filter(i -> i > 2)
              .mapToInt(i -> i * 2)
              .sum();
System.out.println(sum);

코드는 List 요소 중에서 2보다 요소를 2배로 만들어 합산한 값을 출력하는 예제입니다.

'자바 JAVA' 카테고리의 다른 글

1. 자바 JAVA - 스트림(stream)  (0) 2023.01.17
자바 JAVA - 람다 표현식  (0) 2023.01.14
자바 csv 파일쓰기 (한글깨짐 처리)  (1) 2021.09.14
728x90

 

 

스프링 시큐리티(Spring Security)는 스프링 기반의 애플리케이션에서 보안 관련 처리를 담당하는 프레임워크입니다. 사용자 인증 및 권한 부여와 같은 보안 관련 기능을 간편하게 구현할 수 있습니다.

 

스프링 시큐리티는 다양한 인증 방식을 지원합니다. 폼 인증 방식, OAuth2.0, OpenID Connect 등을 지원하며, 이러한 인증 방식을 사용하여 사용자 인증을 간편하게 처리할 수 있습니다. 또한 스프링 시큐리티는 CSRF(Cross-site request forgery)와 XSS(Cross-site scripting)와 같은 웹 공격에 대한 방어 기능도 제공합니다.

 

스프링 시큐리티는 필터 체인(Filter Chain) 방식으로 동작합니다. 이는 HTTP 요청에 대한 처리를 순차적으로 처리하는 방식으로, 보안 처리도 이러한 필터 체인을 이용하여 처리됩니다. 예를 들어, 사용자 인증 처리를 담당하는 필터와 권한 부여 처리를 담당하는 필터가 존재하며, 이러한 필터들은 필요에 따라 추가하거나 제거할 수 있습니다.

 

스프링 시큐리티는 ACL(Access Control List) 기능을 지원합니다. 이는 객체에 대한 접근 권한을 부여하거나 제한하는 기능으로, 객체 단위로 권한을 관리 있습니다.

 

아래는 접근권한 샘플소스입니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Autowired
  private UserDetailsService userDetailsService;

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
        .antMatchers("/").permitAll()
        .and().formLogin()
        .and().logout().logoutUrl("/logout")
        .and().csrf().disable();
  }

  @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
  }

  @Bean
  public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
  }

}

 

위의 코드는 스프링 시큐리티를 사용하여 보안 설정을 구현한 예시입니다. 코드에서는 /admin/** 경로에 대해서는 ADMIN 권한이 있어야 접근할 있고, /user/** 경로에 대해서는 ADMIN 또는 USER권한 모두 접근할 수 있습니다

+ Recent posts