전체 글

초보 개발자의 지식 공유의 장
해시 테이블해시 테이블(hash table)은 효율적인 탐색을 위한 자료구조로 키(key)를 값(value)에 대응시킨다. 해시 테이블을 간단히 구현하는 경우, 배열과 해시 함수(hash function)만 있으면 된다.객체와 키를 해시 테이블에 저장할 경우, 해시 함수가 키를 정수값으로 대응 시키는데, 이 정수 값이 배열의 첨자(index)로 쓰인다. 객체는 배열의 해당 첨자 위치에 저장된다.하지만.. 이것은 정상적으로 작동하지 않을 수 있다. 왜냐하면 해시 함수가 계산하는 모든 키 값이 유일(unique)해야 하기 때문이다. 해시함수 후에 나오는 결과가 동일한 결과가 나올 경우 우리는 이것을 충돌(collision)이라고 한다. 충돌(collision)을 피하려면 모든 키 값을 고려해서 배열을 극도로..
스프링 컨테이너는 초기화 과정에서 몇 가지 빈을 기본적으로 등록해준다. ApplicationContext, BeanFactory스프링에서는 컨테이너 자신을 빈으로 등록해두고 필요하면 일반 빈에서 DI 받아서 사용할 수 있다.스프링 컨테이너인 애플리케이션 컨텍스트는 ApplicationContext 인터페이스를 구현한 것이기 때문에 일반 빈에서 사용하고 싶다면 ApplicationContext 타입의 빈을 DI받도록 해주면 된다. (또한 ApplicationContext는 BeanFactory 인터페이스의 구현체)123456@AutowiredApplicationContext context; public void do(){ this.context.getBean(...); // 애플리케이션 컨텍스트를 직접 사..
스프링 프로퍼티 값 설정 방법 DI를 통해 빈에 주입되는 것은 두가지가 존재한다. (다른 빈 오브젝트의 레퍼런스, 단순 값) 단순 값은 스프링이 관리하는 빈이 아닌 모든것을 의미한다. @Value 애노테이션의 주요 용도는 자바 코드 외부의 리소스나 환경정보에 담긴 값을 사용하도록 지정해주는 데 있다. @Value("#") String username; 이 때는 database.username 속성이 정의된 database.properties파일을 XML에 지정해둬야 한다. 스프링 프로퍼티 파일을 이용한 값 설정 설정정보를 XML로 분리해두면 빈 클래스나 의존관계 정보를 소스코드 수정 없이도 간단히 조작할 수 있다. 때로는 XML에서 다시 일부 설정정보를 별도의 파일로 분리해두면 유용할 때가 있다. 서버환..
대화Where are you planning to go on a vacation?* 휴가때 어디 가실 생각이에요?I'm planning to go to New York these holidays.*이번 휴가에는 뉴욕에 갔다 오려고요. 문장I have 3 days left on my annual leave. * 연차가 사흘 남았어요.Did you have a good holiday?* 휴가는 잘 보내셨어요?I'm thinking of going there on a long weekend.*징검다리 휴일을 이용해서 다녀올 생각이에요. annual leave - 연차long weekend - 징검다리 휴일 출처 : 네이버 글로벌회화
Key 인터페이스JCA에서 지원하는 모든 키는 Java.Security.Key 인터페이스로 추상화된다.Key 인터페이스는 getAlgorithm(), getFormat(), getEncoded() 를 제공하며, 제한된 키정보에 대한 접근만 허용하고 있다.1234567KeyPair keyPair = rsaUtil.generateKeyFair();PrivateKey privateKey = keyPair.getPrivate();PublicKey publicKey = keyPair.getPublic(); log.info("algorithm : {}", privateKey.getAlgorithm());log.info("format : {}", privateKey.getFormat());log.info("encod..
JCA(Java Cryptography Architecture)JAVA에서의 보안 관련 기능 중에서 JCA(Java Cryptography Architecture)는 핵심이라고 할 수 있다.JCA는 프로바이더 구조를 사용하여 보안과 관련된 다양한 API를 제공한다.ex) 전자서명(Digital Signature), 메시지 다이제스트(Message Digest), 인증서 유효성 검사(Certificate Validation), 키생성 등등정확히 말하자면 디자인 패턴은 아니다. Factory 패턴과 유사하나 외부설정에 따라 다른 객체를 생성하는 패턴을 칭한다. (나쁜 패턴이라고 함)하지만 잘 작성된 오픈소스 프로젝트들에서 이러한 구현을 꽤 볼수있다. => 더 알아봐야할듯 설계 원칙JAVA 플랫폼을 기반으로 ..
빈 등록 메타정보 구성 전략(빈 설정방법)앞에서 대표적인 빈 등록방법을 살펴보 았다. 그렇다면 자주 사용되는 설정방법을 살펴보자. XML설정 단독 사용장점 : 컨텍스트에서 생성되는 모든 빈을 XML에서 확인할 수 있음단점 : 빈의 개수가 많아지면 XML 파일을 관리하기 번거로울 수 있음XML과 빈스캐닝(어노테이션기반)의 혼용XML과 빈 스캐너에 의한 자동인식 방법을 함께 사용할 수 있다.애플리케이션 3계층의 핵심 로직을 담고 있는 빈 클래스는 그다지 복잡한 빈 메타정보를 필요하지 않고 대부분 싱글톤이며 클래스당 하나만 만들어지므로 빈 스캐닝에 의한 자동인식 대상으로 적절하다.반면에 자동인식 방식으로 등록하기는 불편한 기술 서비스, 기반 서비스, 컨테이너 설정 등의 빈은 XML로 사용하면 된다. (자동인식..
IoC/DI를 위한 빈 설정 메타정보 작성IoC컨테이너의 기본적인 역할은 코드를 대신해서 애플리케이션을 구성하는 오브젝트를 생성하고 관리하는 것이다.(POJO로 만들어진 애플리케이션 클래스와 서비스 오브젝트들이 그 대상) 빈을 만들기 위한 설정 메타정보는 파일이나 애노테이션 같은 리소스로부터 전용 리더를 통해 BeanDefinition 타입의 오브젝트로 변환된다. 이 BeanDefinition정보를 IoC컨테이너가 활용하게 된다.빈 등록은 빈 메타정보를 작성해서 컨테이너에게 건네주면 된다. => XML 문서, 프로퍼티 파일, 소스코드 애노테이션과 같은 외부 리소스로 빈 메타정보를 작성하고 이를 적절한 리더나 변환기를 통해 애플리케이션 컨텍스트가 사용할 수 있는 정보로 변환해주는 방법을 사용 빈 메타정보 ..
웹 애플리케이션의 컨텍스트 구성방법 가장 많이 사용하는 방법 => 서블릿 컨텍스트(dispatcher-context.xml)와 루트 애플리케이션 컨텍스트(root-context.xml) 계층구조 스프링 웹 기술을 사용하는 경우 웹 관련 빈들은 서블릿 컨텍스트에 두고, 나머지는 루트 애플리케이션 컨텍스트에 등록한다. 루트 컨텍스트는 모든 서블릿 레벨 컨텍스트의 부모 컨텍스트가 된다. 루트 애플리케이션 컨텍스트 등록 => 가장 간단한 방법은 서블릿의 이벤트 리스너를 이용하는 것이다. => 웹 애플리케이션의 시작과 종료시 발생하는 이벤트를 처리하는 리스너 ServlerContextListener를 이용 (ServletContextListener 인터페이스를 구현한 리스너는 웹 애플리케이션 전체에 적용 가능한 ..
split은 문자열을 나누는 메서드 이다. public static void main(String[] args){ String str = "가,나,다,라"; String[] splitedStr = str.split(","); // splitedStr {"가", "나", "다", "라" } 위와 같이 동작을 하는데, 특정 문자를 넣으면 정상작동하지 않는 것을 볼 수 있다. public static void main(String[] args){ String str = "가.나.다.라"; String[] splitedStr = str.split("."); // 혹은 str = "가|나|다|라"; splitedStr = str.split("|"); } 위와 같이 정상동작하지 않는 것은, split인자로 들어가는..
깡냉쓰
평범한 개발자 노트