728x90

java 98

(스프링 고급편) 스프링 AOP

스프링 AOP ( Aspect Oriented Programming ) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때..

Spring 2023.03.02

객체 지향 설계(SOLID)란?

SOLID 원칙들은 결국 자기 자신 클래스 안에 응집도는 내부적으로 높이고, 타 클래스들 간 결합도는 낮추는 High Cohesion - Loose Coupling 원칙을 객체 지향의 관점에서 도입한 것이다. 왜 그랬을까? 간단하다. 좋은 소프트웨어는 응집도가 높고 결합도가 낮기 때문이다. 결국 모듈 또는 클래스 당 하나의 책임을 주어 더욱더 독립된 모듈(클래스)을 만들기 위함이다. 이렇게 설계된 소프트웨어는 재 사용이 많아지고, 수정이 최소화 되기 때문에 결국 유지 보수가 용이해진다. 자 그럼 객체 지향 설계 5대 원칙이 각각 무엇인지 아래를 보자. SRP (Single Responsibility Principle) 단일 책임 원칙 OCP (Open Closed Principle) 개방 폐쇄 원칙 LS..

(SpringSecurity) UserDetailsServices 활용

UserDetailsServices 활용 JDBC를 이용하는 방식으로도 DB를 처리해서 사용할수 있지만, 여러 정보들중 제한적인 내용만 이용 한다는 단점이 존재 이러한 문제를 해결하기위해 UserDetailsServices 인터페이스를 구현하는 방식을 이용하는것이 좋다. ( 원하는 객체를 인증과 권한 체크에 활용 할수 있기에 많이 사용된다) UserDetailsServices 인터페이스는 단 하나의 메서드만 존재한다. 가장 일반적으로 많이 사용되는 방법은 하위 클래스 중에서 org.springframework.security.core.userdetails.User 클래스 상속 하는형태이다. 커스텀 UserDetailsService를 이용하는 방식을 이용하기 위해선, MYbatis를 이용하는 MemberM..

Spring/Security 2023.02.14

쉘 스크립트란?

쉘 스크립트란 쉘 스크립트란 간단히 말하자면 Unix커맨드등을 나열해서 실행하는 것이다. 언제 어떤 조건으로 어떠한 명령을 실행시킬 것인가, 파일을 컨텐츠를 읽어 들일 것인가, 로그 파일을 작성하는 것 등을 할 수 있다. 기본 설정 예시로 다음과 같이 test.sh 파일을 작성한다. #!/bin/sh echo "Hello, World!" - 쉘 스크립트 파일은 기본적으로 .sh 확장자로 작성한다. - 실제 코드를 작성하기 전에 맨 처음의 행에는 #!/bin/sh를 쓴다. 시스템에 지금부터 셸 스크립트를 쓴다는 사실을 알려주기 위함이다(여담이지만, #는 hash, !는 bang이므로 #!를 shebang이라고 부르기도한다). 그러나 bash의 독자적인 기능을 사용하는 경우 다르게 작성한다(#!/usr/bi..

Linux 2022.12.31

생성자란?

인스턴스를 생성할 때 "클래스 객체변수 = new 클래스();" 라는 구문을 사용하고 이때 "클래스();"는 생성자를 호출하는 의미 생성자(Constructor) 생성자는 new 연산자를 통해서 인스턴스를 생성할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메소드(하지만 메소드와는 다르다.)이다. 생성자는 인스턴스 변수(필드 값 등)를 초기화 시키는 역할을 한다. 생성자 선언 방법 생성자를 선언하는 방법은 위에 내용과 같다. 클래스라는 부분은 생성자를 정의하는 클래스의 이름과 동일하게 적어줘야 한다. 빨간색으로 표시한 부분은 필수로 적어야 하는 내용은 아니다. public에 대한 내용은 나중에 다룰 예정이고 우선은 생성자를 선언할 때는 public을 적어주면 된다. 생성자 종류 및 사용 위에서 생성..

JAVA 2022.12.28

Java로 Queue 구현

Java로 Queue 구현 서론 백준 5430번 AC문제를 풀다가 Array로 구현을 하려고 했는데, 생각보다 막히는 부분이 많았다. 여러가지 방안을 찾아보면서 꾸역꾸역 구현을 하면 만들기는 했겠지만, 그렇게 구현하는 것 보다 제대로 구현하는게 더 낫겠다 싶어서 풀이를 찾아보게 되었다. 백준 5430 풀이 Queue구현 글 풀이를 보니 Queue를 직접 구현해보고 아는 것이 중요하다고 해서 직접 따라해보고, 이해하기로 했다. 물론 Queue의 자료구조를 모르는 것도 아니고 구현을 안해본 것도 아니지만, 이전에 Queue를 구현했던 것은 C언어를 통해서 구현한 것이 전부였기 때문에 java를 통해서 구현을 해보기로 했다. 본론 Queue는 FIFO(first in fisrt out)이다 일반적으로 우리가 ..

알고리즘 2022.12.23

StringUtils.equals() 와 String.equals()의 비교

//null값이 들어가 있는 경우 String str1 = null; String str2 = "Hello World~!"; //String 자체 equals() 사용 시 NullPointerException 발생 str1.equals(str2); //StringUtils.equals() 사용 시 정상 처리 StringUtils.equals(str1, str2); 위에 결과 처럼 String.equals() 일 경우, 매개변수에 null이 입력되면 NullPointerException이 발생됩니다. 따라서 StringUtils.equals()로 문자열을 비교하는 것이 더 안전한 방법이 될 것 같습니다. 참고: https://blog.naver.com/seek316/222347033258 [Java] Ap..

JAVA 2022.12.23

LocalDateTime 으로 시간관련 변환 정리

Java8 LocalDateTime을 비롯해 여러가지 시간을 처리하는 클래스 예제 정리 1.년월일 시분초 지정해서 LocalDateTime생성하기 LocalDateTime now = LocalDateTime.now(); LocalDateTime ldt = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), now.getHour(), 0, 0); LocalDateTime.of()를 쓰면 년월일 시분초를 직접 지정 할 수 있습니다. 위 코드는 분, 초는 0으로 설정하는 코드입니다. 결과 2022-04-03T12:00 2.yyyy-mm-dd hh:mm:ss형식의 String을 LocalDateTime으로 바꾸기 String으로 되어 있는 ..

JAVA 2022.12.19

SimpleDataFormat 함수 사용법(feat. 날짜 관련)

Date클래스를 이용하여 현재 날짜를 출력하면 영문으로 된 날짜를 리턴한다. 특정 문자열 포맷으로 얻고 싶으면 java.text.SimpleDateFormat 클래스를 이용하면 된다. 다음은 오늘 날짜를 yyyy 년 MM월 dd일로 출력하는 예제이다. package testProject; import java.text.SimpleDateFormat; import java.util.Date; public class simpleDateFormatEx { public static void main(String[] args) { Date nowDate = new Date(); System.out.println("포맷 지정 전 : " + nowDate); SimpleDateFormat simpleDateForma..

JAVA 2022.12.16

[MSSQL]저장 프로시저 장단점, 사용 예제 정리

저장 프로시저 장단점 저장 프로시저의 장점 1) 프로시저만 수정이 필요할 경우 애플리케이션을 배포하지 않고 프로시저만 배포하면 됩니다. → 즉 어플리케이션 코드 내에 SQL 로직이 포함되었을 경우 애플리케이션도 재배포 해야하지만 프로시저 내에 포함될 경우 프로시저만 수정하여 배포하면 됩니다. 2) 자연스럽게 프로시저에 인자를 추가하여 바인드 변수를 사용하게 되므로 SQL 하드 파싱을 걱정할 일이 없습니다. → 어플리케이션 코드에 SQL 작성을 아래와 같이 하는 코드들이 종종 보입니다. [어플리케이션 레벨에서 작성된 Dynamic SQL 예] //strCOL1 : 입력마다 바뀌는 String 변수 String strSQL = "SELECT * FROM T1 WHERE COL1 = '" + strCOL1 +..

MS-SQL 2022.12.04
728x90