본문 바로가기

Back-End

(91)
Spring IoC(제어의역전),DI(의존성주입)란? Spring IoC(제어의역전),DI(의존성주입)란?Spring으로 코딩하면서 IoC와 DI에 대한 용어를 자주 접하게 된다. @Autowired, @Bean 어노테이션 덕분에 객체 생성과 설정에 대한 걱정없이 우리는 편하게 작업을 해왔다. 하지만, 내부적으로 Spring Framework가 어떻게 돌아가는지 @Autowired,@Bean 어노테이션을 통해 얻는 장점이 무엇인지 제대로 공부하지 않았다. 이번 포스팅을 통해 Spring IoC,DI에 대해 제대로 알아보려 한다. 1. @Bean,@Component,@Service,@Controller,@Repository 도대체 뭐임?@Bean, @Component에 대해 알아보자.두가지 어노테이션은 스프링에 빈을 등록하기 위해 사용되는 어노테이션이다. @..
POJO(plain old java object)란? POJO(Plain old java object)란 무엇인가?스프링 개발을 하면서 POJO 프로그래밍이라는 용어를 자주 접한다. 이제까지 느낌적으로 특정 규약에 종속되지 않는 자바 객체 정도로 이해해왔다. 이 포스팅에서 POJO의 조건과 POJO 프로그래밍의 장점에 대해 예시를 통해 알아볼 것이다. POJO 개념을 사용하지 않은 예시 ( 특정 환경에 결합도가 높은 코드 ) JMS로부터 메시지를 받는 경우JMS를 사용하기 위해 MessageListener 인터페이스를 상속받아야 한다. 하지만, 다음과 같이 구현하면 JMS라는 특정 환경에 종속되게 되고 다른 메시징 솔루션을 적용하기 어려워 진다. 단순한 예제와 달리 Listener가 많은 경우, AMQP나 다른 솔루션으로 교체할 경우 더더욱 어려울 것이다...
스프링 공부방법 스프링 공부방법스프링을 사용할 때 우리는 원리에 대한 이해보다 단순 예제를 보고 바로 구현에 들어갔을 것이다. 하지만 스프링의 가치를 제대로 느끼며 사용하려면 스프링을 제대로 공부해야 한다. 그렇다면 제대로 공부하는게 무엇일까? 1. 스프링을 왜 사용하고 어떠한 원리인지 이해하기스프링이 주는 3가지 핵심 기술에 대한 이해와 스프링이 강조하는 프로그래밍 모델에 대한 이해가 우선이 되어야 한다. 2. 스프링 기술에 대한 지식과 선택 기준 정립스프링의 기본원리를 확실하게 이해하고 나면 스프링이 이를 어떻게 다양한 방법으로 확장하고 적용했는지 살펴보아야 한다. 스프링은 매우 폭넓은 접근 방법을 제공하기에 개발자가 어떤 것을 선택할지 정해야 한다. 3. 스프링의 적용과 확장스프링은 특정 아키텍처에 제한되는 프레임..
Spring Boot와 Docker를 이용한 개발환경 구축하기 Spring Boot와 Docker를 이용한 개발환경 구축하기내가 겪은 문제점 - Development 환경과 Staging,Prod 환경의 차이로 인한 문제 발생Spring Boot 개발을 하다보면, Development 환경과 Prod 환경이 달라서 문제가 발생하는 경우가 있다. Service Discovery 역할을 하는 Eureka Server를 구축하면서 이 문제를 겪었다. Prod 환경에서의 Eureka 설정은 AWS config이고, Dev 환경에서의 Eureka 설정은 Local이기 때문에 개발 시점에서는 테스트를 해볼 수가 없었다. Twelve-Factor 방법론 중 Development/Production 환경을 최대한 비슷하게 하라는 얘기가 있다. 내가 겪은 문제점 2 - Remote..
JPA 3장. 영속성 관리 ( persistence ) JPA에서 제공해주는 기능은 크게 2가지이다.@Entity와 Table을 매핑하는 설계 부분매핑한 @Entity를 실제로 사용하는 부분 ( CRUD ) Spring Boot 프로젝트를 할 때 @Entity 어노테이션을 명시만 해봤는데, 이번 포스팅에서 EntityManager가 매핑한 Entity를 어떻게 사용하는지 살펴보자. Entity Manager와 Entity Manager FactoryEntity Manager Factory데이터베이스를 하나만 사용하는 애플리케이션에서는 하나의 Entity Manager Factory를 생성한다. 설정 정보는 META-INF/persistence.xml에서 읽어 온다.EntityManagerFactory emf = Persistence.createEntityMa..
Spring Boot 2.0 - 스프링 부트 기본 로깅 LoggingSpring boot의 소스는 기본으로 Commons Logging을 사용한다. 그리고 우리가 개발한 스프링 프로젝트는 기본으로 Logback을 사용한다. 다른 로깅툴을 사용해도 slf4j api로 라우팅 해주는 것이 포함되어 있어 다른 로킹 툴을 사용할 수 있다. 즉, logging dependency를 신경쓰지 않아도 된다. Log Format2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52 2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a...
서버 아키텍처 대부분의 프레임워크는 클라이언트에서 어떤 작업을 요청하면 각각 받은 요청을 별도의 Thread에서 처리하도록 구성되어 있다. (Worker-Thread Model) 한 번에 많은 요청을 하여도 처리가 가능하지만, 만약 동시에 처리할 수 있는 MAX개가 모두 돌고 있다면 아무런 작업이 불가능해진다. 대부분의 요청은 '단순 조회나 단순계산'인 경우가 많다. 즉 서비스 처리 시간모다 Thread Block상태인 것이다. 그래서 새로운 아키텍쳐가 나왔는데 Node에서 사용하고 있는 Event-driven Architecture이다. 일단 요청이 들어오면 single-thread에서 요청을 처리를 하고, DB I/O등 Synchronous한 작업은 Worker-Thread Model을 이용하여 처리한다. 이 때 ..
#6. AOP 6단원 공부하기 전에 AOP는 스프링을 공부하면서 IoC/DI, 서비스 추상화와 함께 나오는 스프링 3대 기술 중의 하나다. 항상 뒤에 나오고 가장 어려운 내용이라 제대로 공부를 하지 못했다. AOP를 제대로 사용하려면 스프링이 도입한 이유와 장점이 무엇인지 이해해야 한다. AOP의 적용 대상은 선언적 트랜잭션 기능(???)이다. AOP를 통해서 5단원에서 공부했던 코드를 더욱 더 깔끔한 방식으로 바꿀수 있다고 하네..... 6.1 트랜잭션 코드의 분리 5단원에서 서비스 추상화 기법을 통해 트랜잭션 기술에 독립적으로 만들어줬지만, 아직 서비스 코드에 쓸데없이 긴 트랜잭션 코드가 보인다. 그렇다고 이를 제거하기에는 트랜잭션 경계가 비즈니스 로직의 전후에 설정돼야 하는 것이 분명하다. 1) 트랜잭션 경계 설..
#5. 서비스 추상화 요약 비즈니르 로직을 담은 UserService 클래스를 만들고, 트랜잭션을 적용하면서 스프링의 서비스 추상화에 대해 알아보았다. 비즈니스 로직을 담은 코드는 데이터 엑세스 코드와 깔끔하게 분리되는 것이 좋다. DAO 기술 변화에 서비스 코드가 영향을 받지 않도록 인터페이스와 DI를 잘 활용해서 결합도를 낮춰야 한다.먼저 프레임워크에 대해 생각해보면, MVC나 DB 등 특정 기술을 도와주는 역할로 알고 있다. 하지만 스프링은 JavaEE 전반을 도와주는 것이기 때문에 에플리케이션 프레임워크라고 불린다. 1. 비즈니로직과 데이터 엑세스 코드의 분리 비즈니르 로직을 담은 UserService 클래스를 만들고, 트랜잭션을 적용하면서 스프링의 서비스 추상화에 대해 알아보았다. 5.1.2 까지 작업을 통해 Use..
#8. 스프링이란 무엇인가? 스프링의 정의 자바 엔터프라이즈 개발을 도와주는 오픈소스 경량급 애플리케이션 프레임워크 ( 1 ) 애플리케이션 프래임워크먼저 프레임워크에 대해 생각해보면, MVC나 DB 등 특정 기술을 도와주는 역할로 알고 있다. 하지만 스프링은 JavaEE 전반을 도와주는 것이기 때문에 에플리케이션 프레임워크라고 불린다. Spring의 개발 배경을 살펴보면, JavaEE 개발을 하던 로드 존슨이 불편함을 느끼고 스스로 개선방법을 고안하다 나온 것이다. 로드 존슨은 항상 "프레임워크 기반으로 접근하라"의 전략을 가지고 코딩을 하였다 한다. ( 2 ) 경량급라이브러리처럼 특정 기술만 포함하고 있어 무게가 가볍다는 뜻이 아니다. Spring 전 EJB에서 개발환경을 구성하려면 EJB 컨테이너를 가진 WAS를 준비해야 했다...