Spring

Entity Manager
Entity Manager CRUD 동작 중 UPDATE는 JPA에 존재하지 않는데도 JPA는 업데이트를 수행한다. 이는 JPA가 데이터의 변경을 감지하여 자동으로 update 쿼리를 실행하기 때문이다. JPA는 EntityManger와 영속성 컨텍스트(Persistence Context)를 통해 이를 수행한다. @Entity로 만들어진 엔티티는, EntityManager의 persist 메서드를 통해 영속 상태가 될 수 있다. → em.persist(entity) 엔티티를 영속성 컨텍스트에 저장하면 id를 통해 영속 상태의 엔티티를 다룬다. → em.find(key) 영속성 컨텍스트를 쓰는 이유 1차 캐시: 데이터를 조회할 때, DB에서 바로 조회하는 것이 아니라 영속성 컨텍스트에서 먼저 조회함 영속성..

웹 애플리케이션 이해
웹 서버 HTTP 기반 동작 정적 리소스 제공, 기타 기능 정적 HTML, CSS, JS, 이미지, 영상 ex) NGINX, APACHE 웹 애플리케이션 서버 (WAS) HTTP 기반 동작 웹서버 기능 포함 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML, HTTP API(JSON) 서블릿, JSP, 스프링 MVC ex) 톰캣 웹 시스템 구성 WAS는 정적 리소스, 애플리케이션 로직 모두 제공 가능하기 때문에 WAS, DB만으로 시스템 구성이 가능하다. 그러나 WAS가 너무 많은 역할을 담당하면 서버 과부하가 우려되고, 가장 비싼 애플리케이션 로직이 정적 리소스의 문제 때문에 수행이 어려울 수 있다. 또한, WAS 장애시 오류 화면(정적 파일)도 노출이 불가능할 것이다. 정적 리소스는 웹서..

빈 생명주기 콜백 / 빈 스코프 / 웹 스코프
커넥션 풀 (Connection Pool) 애플리케이션에 요청이 들어올 때마다 데이터베이스 연결을 수립하고, 해제하는 일은 굉장히 비효율적이다. 이 문제를 해결하기 위해 미리 여러개의 데이터베이스 커넥션을 생성해놓고, 필요할 때마다 꺼내쓰는 것이 커넥션 풀이다. IoC 컨테이너 Inversion of Control의 약자로, 컨테이너가 대신 객체의 생성부터 소멸까지의 인스턴스 생명주기의 관리를 해주는 것을 말한다. 객체 관리 주체가 프레임워크가 되기 때문에 개발자는 비즈니스 로직에 집중할 수 있다. 스프링 컨테이너가 관리하는 객체를 Bean이라고 하고, 이 빈들을 관리한다는 의미로 컨테이너를 BeanFactory라고 부른다. Bean LifeCycle 빈의 생명주기란 해당 객체가 언제,어떻게 생성되고..

컴포넌트 스캔과 의존관계 자동 주입
지금까지는 자바코드의 @Bean을 통해서 구성 정보에 직접 등록할 스프링 빈을 나열했다. 이렇게 등록해야 할 스프링 빈이 수백개가 되면 일일이 등록하기도 귀찮아지고, 구성 정보도 커지게 된다. 그래서 스프링은 구성 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다. 또한, 의존관계도 자동으로 주입하는 @Autowired 기능도 제공한다. @Configuration @ComponentScan(excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { } 이제 @Bean 대상이었던 클래스들이 컴포넌트 스캔의 대상이 되도록 @Compone..
객체지향 설계와 스프링
스프링 핵심 기술 IOC(Invertion of Control, 제어 역전) 인스턴스(객체)의 생성부터 소멸까지 객체의 생명주기 관리를 개발자가 아닌 스프링이 대신 해주는 것 즉, 제어권이 개발자가 아닌 IOC에 있으며, IOC가 개발자의 코드를 호출하여 그 코드로 생명주기를 제어함. DI(Dependency Injection, 의존성 주입) 프로그래밍 내 구성요소 간의 의존 관계가 코드 내부가 아닌 외부의 설정파일을 통해 정의되는 방식 스프링을 이용하여 필요할 때마다 외부 기술을 뺐다 꼈다 하면서 적절하게 기능을 수행해낼 수 있음. AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍) 로깅, 트랜젝션, 보안 등 여러 모듈에서 공통으로 사용하는 기능을 분리하여 관리함. 즉, ..