Programming 95

DB/DBMS/SQL 기본 개념+원리, DDL 사례와 오라클DBMS 의 문자형 데이터 타입 2021-06-16

우선 DBMS는 (Data Base Management System)의 약자 이다. 그렇다면 DBMS는 DB를 관리해주는 도구라는 말인데 이것이 왜 필요할까? 우선 DB가 왜 만들어졌는지 부터 알 필요가 있다. 우선 DB가 없던 시절에는 각 컴퓨터나 시스템 마다 별도의 저장소를 사용했다. 그러면, 하나의 데이터 정보가 갱신되었을때, 따로 동기화를 각 저장소 마다 주기적으로 해줘야하는 수고로움이 있었다. 이런 단점을 하나의 저장소 공간을 공유함으로써, 즉각적인 데이터 갱신효과와 중복으로 저장할 필요없는 데이터들을 없앰으로써, 저장공간의 활용도를 극대화시켰다. 이렇게, 시스템마다, 위 사진은 한 대학의 도서관 시스템, 행정실 시스템을 나타낸 것이다. 원래 등록금 납부여부와 대출 가능여부가 분리된 형태로 각 ..

Programming/SQL 2021.06.16

JDBC의 작동원리, 기본 코드. 2021-06-10

우선, JDBC는 자바에서 클라이언트로부터 받은 데이터의 요청(쿼리)를 인터페이스를 통해 표준화된 함수들로 Connection(연결), Statement(쿼리 문장실행), Resultset(결과패치) 등을 제공하는 템플릿이다. 왜 이런 JDBC가 필요하냐면, 사용자가 UI에서 어떤 정보를 클릭하면, 그 쿼리를 실질적인 DBMS(데이터 저장소)에 넘겨 줄 수 있다. 그런데 이 DBMS는 많은 종류가 있다. MySQL, ORACLE, RADIS 등... 이런 dbms의 종류에 함수의 이름이 각각 다를 것이고, 그렇다면, DBMS 를 바꿀때 마다, 그에 맞는 코드를 또 다시 짜야 할 것이다. 이런 애로사항을 방지하기위해 JDBC라는 자바에서 표준적으로 제공하는 라이브러리를 통해 쿼리를 작성하면, 각 DBMS에..

Programming/JDBC 2021.06.10

한가지 Pointcut으로 여러 Aspect를 사용하기, 프록시 적용순서. 2021-06-09

우린 앞전에 @Pointcut 설정을 하면서, excution 명시자에 대해서 쓴 적이 있다. 간단히 설명하자면, excution 명시자는 Adivce를 적용할 메서드를 지정할때 사용한다. 간단히 말해서 Pointcut은 "where" 이고, Advice는 "when"이다. 그런데 Advice를 Aspect의 실질적인 적용이라 해도 무방하다. 이유는 애초에 @Around 가 붙은 메서드에서 공통의 기능을 실행하고, 대상객체의 메서드도 호출하여서, 앞/뒤, 익셉션 유무등에 따라 코드를 짤수 있기 때문이다. 즉, Advice의 적용은 Aspect 의 적용이다. @Around 애너테이션에 공통의 기능과 "when" 그것을 실행할지 구현하기 때문이다. 그래서 Pointcut이 정하는 범위는 그냥 Advice의 ..

스프링의 프록시 생성방식과 적용 실제 main 함수 사례. 2021-06-08

우선 이전 포스트의 빈 설정 클래스를 보자. @Configuration @EnableAspectJAutoProxy public class Appctx { @Bean public ExeTimeAspect exeTimeAspect() { return new ExeTimeAspect(); } @Bean public Calculator calculator() { return new RecCalculator(); } } 이렇게 빈 객체 설정을 완료한 후, 대상객체를 calculator(), 프록시를 exeTimeAspect()로 하는 스프링 AOP를 실제로 main 메서드에 적용해서 함수의 작동시간을 알아보는 코드를 보자. public class MainAspect { public static void main(..

스프링 AOP의 기본 개념: Advice, joinpoint,Pointcut,Aspect 2021-06-07

우선 이전 포스트에서 AOP(Aspect oriented programing)이란 공통의 기능과 핵심기능의 분리를 통해 재사용성을 높여주는 프로그래밍 기법이라고 설명하였고, 스프링은 AOP를 프록시를 통해 구현한다고 설명하였다. 일반적인 AOP구현 방식은 총 3가지 방법이 있다. 1.컴파일 시점에 공통의 기능을 구현한 코드를 넣어준다. 2.클래스 로딩 시점에 바이트 코드에 공통의 기능을 구현한 코드를 넣어준다. 3.런타임 중 프록시 객체를 생성해서 공통의 기능을 삽입한다. 이 3가지 방법중 스프링에서 사용하는 방식은 3번이다. 스프링 AOP는 프록시 객체를 자동으로 만들어서 필요한 시점(PointCut)에 실행해준다. 그래서 공통기능을 구현한 클래스만 알맞게 구현하면 된다. 우선 스프링의 AOP의 용어들..

프록시와 AOP 프로그래밍 [최범균 스프링 5] 2021-06-04

우선 스프링 공식 래퍼런스에는, AOP를 설명하기 위해 '프록시'라는 단어를 사용하고 있다. 프록시란, 간단히 추상적으로 설명하자면, 핵심기능을 제외한 공동의 기능을 한데 묶어서 코드의 변경 없이 사용할수 있도록 만든 클래스이다. 이런 말로하면 이해가 잘 되지 않을테니, 코드로서 설명하겠다. 우선, 정수 num이 주어졌을때, num의 팩토리얼을 를 구하는 기능을 가진 클래스를 2개 만들어 보자. 그런데 다형성을 사용하여 프록시를 통한 공통의 기능을 구현해야 하니, Calculator라는 인터페이스를 만들어서 상속시키자. public interface Calculator { public long factorial(long num); } 다형성 사용을 위해서 인터페이스를 만들어줌. public class I..

빈 라이프사이클과 범위,[최범균 스프링5] 2021-06-03

우선 자바 빈은 AnnotationConfigApplicatonContext 클래스로 대표되는 스프링 컨테이너에 등록되고, 사라지는데 특정한 주기를 갖는다. 쉽게 설명하자면, 객체생성->의존설정->초기화->소멸 인데, 각 단계별로 설명하자면, 1. 객체생성: AnnotationConfigApplicationContext 의 생성자로, 자바 설정클래스가 들어갔을때, 설정클래스에 구현된 자바빈 들의 객체를 생성하고 컨테이너에 등록한다. 2.객체를 생성해서 컨테이너에 등록하는 과정에서 만약 @Autowired에 의한 자동의존 주입이 필요하다면, 기존에 등록된 자바빈 객체들중 해당 타입과 같은 빈을 주입한다. 여기까지는 앞서 포스트에서 설명했고, 우리도 다 알고 있는 내용이다. 그러나 다음 두 내용은 새로운 내..

빈 객체 등록의 자동화: 컴포넌트 스캔( @Autowired 과는 별개의 개념임. 혼동X) 2021-06-02

우선적으로 내가 헷갈린 부분은 컴포넌트 스캔이 마치 @Autowired의 대체재같은 느낌을 받은 것이다. 무언가 자동화...주입..스프링 이런 말을 보고 내가 오해한 것 같다. 하지만 확실하게 구별해야 한다. @Component : 자바 빈 객체를 @Configuration에서 @Bean 이렇게 설정메서드를 통한 수동 등록이 아닌, 스프링이 편하게 @ComponentScan 애너테이션을 통해 자바 빈에 등록해줄 클래스를 지정하는 애너테이션. @Autowired: 이미 등록된 자바 빈 객체를 의존주입을 위해 기존에는 세터나, 생성자 주입방식으로 DI를 했다면, 이젠 스프링에서 @Autowired가 붙여진 클래스와 같은 타입의 빈 객체를 찾아서 DI 해주기 위해 필드나, 메서드 앞에 붙이는 애너테이션. 요약..

자동의존의 대상이 되는 클래스가 자손클래스일때, @Autowired 사용시 에러 처리법. 2021-06-01

우선 만약 이전 포스트에서는 @Autowired를 붙여서 자동의존주입을 하고자 하는 클래스의 타입이 빈 객체에 등록된 타입을 스프링이 탐색했을때, 1개로 특정지어지지 않을 경우 스프링은 에러를 낸다고 배웠다. 이번엔 쫌 다른 경우인데, 만약 스프링 빈에 등록할 객체가 이미 등록되어있는 빈 객체를 상속받은 클래스타입이라면 어떻게 될까? 예를 들어보자. public class MemberSummaryPrinter extends MemberPrinter { @Override public void print(Member member) { System.out.printf( "회원 정보: 이메일=%s, 이름=%s\n", member.getEmail(), member.getName()); } } 만약 이렇게 이미 빈..

스프링 의존 자동 주입 @Autowired와 @Qualifier, 2021-05-31

이전 포스트에서 설정클래스의 의존이 필요한 필드에 @Autowired 애너테이션을 붙이면 스프링에서 @Autowired 가 붙여진 클래스와 타입이 같은 빈 객체를 찾아서 필드에 할당한다. 오늘 공부한 부분은 이 @Autowired를 위치시킬수 있는 곳이다. 1. 필드 우선 가장 기본적인 형태로 의존이 필요한 클래스에서 의존의 대상이 되는 클래스의 참조변수에다가(인스턴스변수) @Autowired를 붙이는 것이다. public class ChangePasswordService { @Autowired private MemberDao memberDao; public void changePassword(String email, String oldPwd, String newPwd) { Member member = ..