본문 바로가기

brew install npm 시 설치는 되었으나 link가되지 않을때 brew를 통해 node를 설치하기위해 아래와같은 명령어를 하였으나 brew install node하지만 설치는 성공적으로 되지않았고 에러가 발생. Error: The brew link step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink share/doc/node/gdbinit /usr/local/share/doc/node is not writable. You can try again using: brew link node아래와 같이 링크를 하라고 하였으나 여지없이 에러를 뱉어냄 권한으로 인해 발생한 문제이니 권한을 바꿔주고 실행하면 된다. (sudo chown ..
스프링 AOP AOP란? Aspect Oriented Programming을 줄여서 aop 라고 하며 문제를 바라보는 관점을 기준으로 프로그래밍 하는 기법으로 핵심적인 관심사항과 공통적인 관심사항(cross-cutting concern)을 기준으로 모듈화 하는 프로그래밍 기법이다. AOP 용어 정리 Aspect: 여러 객체에 공통으로 적용하는 기능 Target: Aspect를 적용하는 대상 Advice: 언제 공통 핵심기능을 핵심 로직에 적용할지를 정의 ex)메서드 호출 전 Joinpoint: Advice를 적용가능한 지점. 메서드 호출, 생성자 호출시점, 필드 값 변경 등 Pointcut: Joinpoint의 부분집합으로 실제로 Advice가 적용되는 Joinpoint Weaving: 공통 코드를 핵심로직 코드에 삽..
빈의 스코프 빈의 스코프 스프링 빈의 범위에는 싱글톤(Singleton)과 프로토타입(Prototype)가 있다. 싱글톤 스코프는 스프링에서 별도의 설정을 하지 않은 경우 기본적으로 동작하는 방식으로 애플리케이션이 구동될 떄 하나의 인스턴스만 생성하고 여러번 호출 할때 매번 동일한 객체를 리턴한다. 반대로 프로토타입 스코프는 매번 새로운 인스턴스를 생성하여 매번 다른 객체를 리턴한다. 아래에 간단한 예시로 확인해보자. @Component public class Singleton { } @Component @Scope("prototype") public class Prototype { } 이렇게 두 개의 클래스를 빈으로 등록을하는데 Protytype 클래스의 범위는 prototype으로 하였다. 이후 Applicati..
애노테이션(Annotation을 이용한 의존객체 주입 의존객체 자동 주입 스프링에서는 개발자가 일일히 의존정보를 설정하지않아도 스프링 컨테이너가 자동으로 스프링 빈 객체간의 의존을 설정해주는 기능을 제공한다. 의존객체를 자동을 주입하기 위해서 사용하는 방법이 몇가지 있는데, @Autowired, @Resource, @Inject 애노테이션을 이용하여 설정할 수 있다. 애노테이션 기반의 의존객체 자동주입을 사용하기위해선 xml 파일에 태그를 추가해야 한다. http://www.springframework.org/schema/context/spring-context.xsd"> @Autowired @Autowired 애노테이션은 의존 관계를 자동으로 설정할 때 사용되며 생성자, 필드, 메서드에 적용 가능하다. 1. 프로퍼티 필수 여부 지정(required) 스프..
제어 역전(IoC)와 의존성주입(DI) 제어의 역전(Inversion of Control) IoC는 간단히 말해 프로그램의 제어 흐름을 개발자가 아닌 프레임워크가 주도하는 것이다. 객체의 생성, 생명주기의 관리를 컨테이너가 맡아서 하게되어 제어권이 컨테이너로 넘어갔다고 하여 IoC(Inversion of Control)이라고 한다. 제어권이 컨테이너로 넘어감으로써 DI(의존성주입), AOP(관점지향 프로그래밍)등이 가능하게 되었다. 의존성 주입(Dependency Injection) 스프링은 기본적으로 DI기반으로 동작하기 때문에 DI에 대한 이해가 필수적이다. DI는 객체 사이의 의존성을 자신이 아닌 외부로부터 전달받는 구현방식으로 생성자 또는 세터(Setter)를 통해 전달받는 것을 말한다. 객체를 주입받지 않고 직접 생성하는 방법의 단점..
java8 - time java.time 등장배경 기존에 JDK 1.0 부터 날짜에 대한 처리를 할 수 있는 Date클래스와 Calendar가 가지고 있는 문제점(불변객체가 아니라 수정될 수 있고 윤초를 고려하지 않은점, 1월 ~12월을 0 ~11로 표현)을 해소하기 위해 java 8 부터는 java.time 패키지가 추가되었다. java.time 패키지는 아래와 같은 4개의 하위 패키지를 가지고 있다. 패키지 - java.time.chrono 표준(ISO-8601)이 아닌 달력 시스템을 사용할떄 필요한 클래스 제공 java.time.format 날짜와 시간을 파싱하고 형식화하는데 사용되는 클래스 제공 java.time.temporal 날짜와 시간에 대한 연산에 사용되는 클래스 제공 java.time.zone 타임존과 관련된 ..
java8 - Optional Optional Optional는 T타입의 객체를 감싸는 래퍼 클래스(Wrapper class)여서 optional타입의 객체는 모든 타입의 참조변수를 담을 수 있다. 최종 연산의 결과를 그냥 반환하지 않고 Optional객체에 담아 반환하여 반환된 결과가 null인지 체크하는 조건문 없이 null값으로 인해 발생하는 예외를 처리할 수 있다. Optional 객체 생성 of()나 ofNullable()메서드를 사용하여 Optional객체를 생성할 수 있다. 참조 변수의 값이 null일 가능ㄴ성이 있으면, of()대신 ofNullable()을 사용하여 생성하는것이 좋습니다. ( of()메서드는 매개변수의 값이 null이면 NPE를 발생하기 때문) Optional val = Optional.of("abc")..
java8 변경사항 - 스트림API 최종연산 스트림의 최종연산 스트림 API에서 중간 연산으로 변환된 스트림은 아래의 최종연산을 통해 요소를 소모하여 결과를 표시합니다. 지연(lazy) 되어있던 모든 중개 연산들이 최종 연산싯에 모두 수행됩니다. 최종연산 이후 모든 요소를 소모하고 난 후에는 해당 스트림을 사용할 수 없게 됩니다. 1. 요소 출력 forEach(): 스트림의 각 요소를 소모하여 명시된 동작을 수행한다. 반환타입은 void여서 보통 출력하는 용도로 사용한다. Stream stream = Stream.of("A", "B", "C", "D"); stream.forEach(System.out::println); //ABCD 2. 요소 소모 reduce(): 첫번째와 두번째 요소로 연산을 수행 후 그결과와 세번째 요소로 연산을 수행하는식으로..