전체 글
-
problems occurred when invoking code from plugin org.eclipse.e4.ui.workbench 잘 동작하던 이클립스가 가끔 알수없는 오류를 내면서 속썩이는 날이 있다. 오늘이 바로 그날이다. 위 상황에서 Error Log 탭을 살펴보면 좀 더 자세한 내용이 나온다. workbench관련 오류인것 같다는 막연한 느낌같은 느낌으로 구글링 해보니 workbench가 정상적으로 저장되지 않아서 발생하는 오류인듯하다. workspace -> .metadata -> .plugins -> org.eclipse.e4.workbench에 workbench.xmi 파일이 있는데 이녀석이 문제다. 어디가 문제인지 파악해보려고 파일을 열었지만 너무 항목이 많아서 포기. 과감히 삭제하..
[eclipse] problems occurred when invoking code from plugin org.eclipse.e4.ui.workbenchproblems occurred when invoking code from plugin org.eclipse.e4.ui.workbench 잘 동작하던 이클립스가 가끔 알수없는 오류를 내면서 속썩이는 날이 있다. 오늘이 바로 그날이다. 위 상황에서 Error Log 탭을 살펴보면 좀 더 자세한 내용이 나온다. workbench관련 오류인것 같다는 막연한 느낌같은 느낌으로 구글링 해보니 workbench가 정상적으로 저장되지 않아서 발생하는 오류인듯하다. workspace -> .metadata -> .plugins -> org.eclipse.e4.workbench에 workbench.xmi 파일이 있는데 이녀석이 문제다. 어디가 문제인지 파악해보려고 파일을 열었지만 너무 항목이 많아서 포기. 과감히 삭제하..
2020.06.18 -
AOP스프링의 특징을 딱 두 가지만 들어보라면 앞서 배운 DI와 지금 소개할 AOP이다. 사실 AOP는 프로젝트 과정에서 적극적으로 사용하지 않을 수도 있지만 스프링 내부적으로 어마어마하게 많이 사용되고 있는 기술이다. 무언가 스프링이 처리하는 마법 같은 일들은 대부분 AOP의 결과인 것들이 많다.과연 AOP란 무엇일까? AOP(Aspect Oriented Programming: 관점 지향 프로그래밍)란?AOP는 사실 용어조차 추측하기 힘들다. 어떤 "관점을 기반으로 프로그래밍 한다"는 이야기인데 찬찬히 살펴보자.일상생활에서의 관점과 관점 지향적 삶먼저 일상 생활에서 "관점"이라는 것을 생각해 보자. 우리는 사무실, 식당, 헬스장 등 다양한 공간에서 다양한 일을 한다. 사무실에서는 업무를 처리하고, ..
01. AOP 기본 컨셉AOP스프링의 특징을 딱 두 가지만 들어보라면 앞서 배운 DI와 지금 소개할 AOP이다. 사실 AOP는 프로젝트 과정에서 적극적으로 사용하지 않을 수도 있지만 스프링 내부적으로 어마어마하게 많이 사용되고 있는 기술이다. 무언가 스프링이 처리하는 마법 같은 일들은 대부분 AOP의 결과인 것들이 많다.과연 AOP란 무엇일까? AOP(Aspect Oriented Programming: 관점 지향 프로그래밍)란?AOP는 사실 용어조차 추측하기 힘들다. 어떤 "관점을 기반으로 프로그래밍 한다"는 이야기인데 찬찬히 살펴보자.일상생활에서의 관점과 관점 지향적 삶먼저 일상 생활에서 "관점"이라는 것을 생각해 보자. 우리는 사무실, 식당, 헬스장 등 다양한 공간에서 다양한 일을 한다. 사무실에서는 업무를 처리하고, ..
2020.06.18 -
이번 포스트에서는 Profile에 대해 살펴보자. 환경의 분리와 프로파일프로젝트를 진행하다 보면 상황에 따라 다양한 개발 환경을 적용하는 것은 비일비재한 일이다. 예를 들어 DB를 이용해서 개발할 때 개발자들은 자신의 로컬 컴퓨터에 DB를 설치하고 비지니스 로직을 개발한다. 이후 테스트 서버에서 기능을 검증하고 최종적으로 운영 환경에서 애플리케이션을 서비스한다. 이 과정에서 비지니스 로직 자체는 거의 변하지 않는다. 하지만 DB 서버의 주소, 사용자 계정등 인프라 관련 설정은 각 단계(환경)마다 크게 달라질 수 있다. 이런 상황에서 각 환경에 맞춰 설정 파일을 수시로 수정하는 작업은 상당히 번거롭고 주의가 필요하다. 이런 문제를 조금이나마 해결하기 위해 환경에 따른 설정을 미리 준비해두고, 필요에 따라..
05. Profile이번 포스트에서는 Profile에 대해 살펴보자. 환경의 분리와 프로파일프로젝트를 진행하다 보면 상황에 따라 다양한 개발 환경을 적용하는 것은 비일비재한 일이다. 예를 들어 DB를 이용해서 개발할 때 개발자들은 자신의 로컬 컴퓨터에 DB를 설치하고 비지니스 로직을 개발한다. 이후 테스트 서버에서 기능을 검증하고 최종적으로 운영 환경에서 애플리케이션을 서비스한다. 이 과정에서 비지니스 로직 자체는 거의 변하지 않는다. 하지만 DB 서버의 주소, 사용자 계정등 인프라 관련 설정은 각 단계(환경)마다 크게 달라질 수 있다. 이런 상황에서 각 환경에 맞춰 설정 파일을 수시로 수정하는 작업은 상당히 번거롭고 주의가 필요하다. 이런 문제를 조금이나마 해결하기 위해 환경에 따른 설정을 미리 준비해두고, 필요에 따라..
2020.06.17 -
묵시적 DI앞선 포스트에서 @Configuration과 @Bean을 이용해서 명시적으로 빈을 선언하는 방법에 대해 알아보았다. 이 방식은 빈 설정이 빈 클래스 외부 즉 @Configuration 클래스에 존재하는 형태로 비지니스 로직과 빈 관리 로직이 잘 분리되어 관심사의 분리라는 주제에 아주 이상적이다. 단 이 방식은 빈을 만들 때 마다 설정 파일에 명시적으로 빈을 선언해주어야 한다. 묵시적 빈 설정묵시적인 빈 설정 방식은 빈으로 사용할 클래스에 @Component 라고 선언한다. 즉 빈에 대한 설정이 빈 클래스 내부에 존재하기 때문에 관심 사항의 분리라는 부분에서는 일보 후퇴하는 복합적인 관심사를 다루게 된다. @Component라고 선언된 클래스는 바로 빈이 되는것은 아니고 뒤에서 언급할 @C..
04. DI 처리 - 묵시적 DI묵시적 DI앞선 포스트에서 @Configuration과 @Bean을 이용해서 명시적으로 빈을 선언하는 방법에 대해 알아보았다. 이 방식은 빈 설정이 빈 클래스 외부 즉 @Configuration 클래스에 존재하는 형태로 비지니스 로직과 빈 관리 로직이 잘 분리되어 관심사의 분리라는 주제에 아주 이상적이다. 단 이 방식은 빈을 만들 때 마다 설정 파일에 명시적으로 빈을 선언해주어야 한다. 묵시적 빈 설정묵시적인 빈 설정 방식은 빈으로 사용할 클래스에 @Component 라고 선언한다. 즉 빈에 대한 설정이 빈 클래스 내부에 존재하기 때문에 관심 사항의 분리라는 부분에서는 일보 후퇴하는 복합적인 관심사를 다루게 된다. @Component라고 선언된 클래스는 바로 빈이 되는것은 아니고 뒤에서 언급할 @C..
2020.06.17 -
스프링은 DI를 어떻게 처리할까? 다음의 그림을 살펴보자.개발자는 비즈니스 로직을 담은 빈(Bean)들을 POJO 형태로 작성한다. 개발자는 각 빈들을 어떻게 생성하고 has-a 관계를 맺어줄지에 대한 설명서인 메타정보를 작성해서 스프링 컨테이너에게 전달한다.스프링 컨테이너는 메타정보에 근거해 빈 객체를 만들고 setter/생성자를 호출해서 의존성을 주입한다.클라이언트 코드에서 컨테이너에게 빈을 요청하면컨테이너는 관리하고 있던 빈 객체를 반환해 준다.이런 DI를 처리하는 방식은 메타정보를 만드는 방식에 따라 명시적 DI와 묵시적 DI로 나뉜다. Java Config를 활용한 명시적 DI 명시적 DI명시적 DI란 빈을 생성하고 의존성을 주입하는 코드를 별도의 파일에 "이것은 빈입니다." 라고 작성해주는 것..
03. DI 처리 - 명시적 DI스프링은 DI를 어떻게 처리할까? 다음의 그림을 살펴보자.개발자는 비즈니스 로직을 담은 빈(Bean)들을 POJO 형태로 작성한다. 개발자는 각 빈들을 어떻게 생성하고 has-a 관계를 맺어줄지에 대한 설명서인 메타정보를 작성해서 스프링 컨테이너에게 전달한다.스프링 컨테이너는 메타정보에 근거해 빈 객체를 만들고 setter/생성자를 호출해서 의존성을 주입한다.클라이언트 코드에서 컨테이너에게 빈을 요청하면컨테이너는 관리하고 있던 빈 객체를 반환해 준다.이런 DI를 처리하는 방식은 메타정보를 만드는 방식에 따라 명시적 DI와 묵시적 DI로 나뉜다. Java Config를 활용한 명시적 DI 명시적 DI명시적 DI란 빈을 생성하고 의존성을 주입하는 코드를 별도의 파일에 "이것은 빈입니다." 라고 작성해주는 것..
2020.06.16 -
이번 포스트에서는 IoC 컨테이너로써 스프링의 주요 특징 중 하나인 DI(Dependency Injection)의 개념과 필요성에 대해 알아보자.참고로 pom.xml에 설정했던 와는 무관하다. 생활에서의 의존성과 의존성 주입 그리고 Ioc Container 의존성우리는 멀리 떨어져있는 사람들과 통화(business logic)를 하려고 한다. 통화를 위해서는 당연히 전화기를 가져야(has a) 한다. 이처럼 통화를 위해 반드시 전화기를 사용하는 것을 '전화기에 의존하고 있다'라고 하고 이때 '전화기는 우리의 의존성'이 된다.의존성인 전화기를 갖기 위해서 전통적으로는 직접 구매를 했지만 요즘은 렌탈이나 구독 서비스가 등장하고 있다. "아이폰13, 매달 4만원에 쓴다"…윤곽 드러난 애플의 구독서비스"아이폰..
02. Dependency와 Dependency Injection이번 포스트에서는 IoC 컨테이너로써 스프링의 주요 특징 중 하나인 DI(Dependency Injection)의 개념과 필요성에 대해 알아보자.참고로 pom.xml에 설정했던 와는 무관하다. 생활에서의 의존성과 의존성 주입 그리고 Ioc Container 의존성우리는 멀리 떨어져있는 사람들과 통화(business logic)를 하려고 한다. 통화를 위해서는 당연히 전화기를 가져야(has a) 한다. 이처럼 통화를 위해 반드시 전화기를 사용하는 것을 '전화기에 의존하고 있다'라고 하고 이때 '전화기는 우리의 의존성'이 된다.의존성인 전화기를 갖기 위해서 전통적으로는 직접 구매를 했지만 요즘은 렌탈이나 구독 서비스가 등장하고 있다. "아이폰13, 매달 4만원에 쓴다"…윤곽 드러난 애플의 구독서비스"아이폰..
2020.06.15 -
이번 포스트에서는 스프링 애플리케이션의 구성 요소에 대해서 살펴보자. Spring Application의 구성 요소 기본적인 구조Spring 애플리케이션은 POJO + 메타 정보 + 스프링 프레임워크(IoC Container) 3 가지로 구성된다. 비즈니스 로직을 가지고 있는 POJO와 애플리케이션 구성 정보를 가지는 메타정보를 IoC Container인 스프링 프레임워크가 조합해서 스프링 애플리케이션을 구성하게 된다.이 요소들에 대해서 좀 더 상세하게 알아보자. POJOPOJO란 Plain Old Java Object의 약자로 말 그대로 이전부터 사용하던 평범한 자바 객체를 의미하는데 객체를 만들 때 특별히 무언가를 상속받아서 확장 할 필요가 없다는 것을 강조하기 위한 말이다.스프링 이전의 프레임워크..
01. Spring Application의 구성 요소이번 포스트에서는 스프링 애플리케이션의 구성 요소에 대해서 살펴보자. Spring Application의 구성 요소 기본적인 구조Spring 애플리케이션은 POJO + 메타 정보 + 스프링 프레임워크(IoC Container) 3 가지로 구성된다. 비즈니스 로직을 가지고 있는 POJO와 애플리케이션 구성 정보를 가지는 메타정보를 IoC Container인 스프링 프레임워크가 조합해서 스프링 애플리케이션을 구성하게 된다.이 요소들에 대해서 좀 더 상세하게 알아보자. POJOPOJO란 Plain Old Java Object의 약자로 말 그대로 이전부터 사용하던 평범한 자바 객체를 의미하는데 객체를 만들 때 특별히 무언가를 상속받아서 확장 할 필요가 없다는 것을 강조하기 위한 말이다.스프링 이전의 프레임워크..
2020.06.15 -
이번에는 Spring Boot 개발을 위해 필요한 환경구축과 Quick Start 애플리케이션을 작성해보자. 개발 환경 설정 Spring.ioSpring과 관련된 내용은 https://spring.io/에 잘 정리되어있다. 아래 내용은 Quick Start(https://spring.io/quickstart/)의 내용을 활용한 내용 들이다. Spring | QuickstartSpring Quickstart Guide What you'll build You will build a classic “Hello World!” endpoint which any browser can connect to. You can even tell it your name, and it will respond in a mor..
02. 환경설정 및 Quick Start이번에는 Spring Boot 개발을 위해 필요한 환경구축과 Quick Start 애플리케이션을 작성해보자. 개발 환경 설정 Spring.ioSpring과 관련된 내용은 https://spring.io/에 잘 정리되어있다. 아래 내용은 Quick Start(https://spring.io/quickstart/)의 내용을 활용한 내용 들이다. Spring | QuickstartSpring Quickstart Guide What you'll build You will build a classic “Hello World!” endpoint which any browser can connect to. You can even tell it your name, and it will respond in a mor..
2020.06.15