일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 계층 쿼리
- java
- 제네릭
- 서블릿
- 스프링입문
- 불친절한 SQL 프로그래밍
- 불친절한SQL프로그래밍
- 시큐어코딩
- DispatcherServlet
- 자바의정석 연습문제
- 자바의정석
- Spring
- docker
- 스프링MVC
- 스프링
- 자바공부
- JPA
- 자바연습문제
- Numpy
- REGEXP_SUBSTR
- 인프런
- Java의정석
- inflearn
- 분석함수
- Python
- 김영한
- 이것이자바다
- 스프링 핵심원리
- Secure Coding
- 스프링 부트와 JPA
- Today
- Total
목록분류 전체보기 (118)
Continuous Challenge
컴포넌트 스캔과 의존관계 자동 주입 시작하기 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 그리고 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. 컴포넌트 스캔을 사용하려면 먼저 @ComponentScan 을 설정 정보에 붙여주면 된다. 컴포넌트 스캔은 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. @Configuration 소스코드를 열어보면 @Component 애노테이션이 붙어있기 때문에 @Configuration 도 컴포넌트 스캔의 대상이 된다. (참고) 1. @ComponentScan @ComponentScan 은 @Component 가 붙은 모든 클래스를 스프링 빈으로 등록한다. 이 때 스..
웹 애플리케이션과 싱글톤 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다. → 메모리 낭비가 심하다. 해결방안 : 해당 객체가 딱 1개만 생성되고, 공유하도록 설계. 싱글톤 패턴 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴. 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다. 싱글톤 패턴을 적용하면 고객의 요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 사용할 수 있다. 싱글톤 패턴 문제점 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의..
스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext 를 스프링 컨테이너라 한다. ApplicationContext 는 인터페이스이다. 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 직전에 AppConfig 를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 참고) 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory , ApplicationContext 로 구분해서 이야기한다. BeanFactory 를 직접 사용하는 경우는 거의..
새로운 할인 정책 적용과 문제점 클라이언트인 OrderServiceImpl 이 DiscountPolicy 인터페이스 뿐만 아니라 FixDiscountPolicy 인 구체 클래스도 함께 의존하고 있다. (DIP 위반) ★ 그래서 FixDiscountPolicy 를 RateDiscountPolicy 로 변경하는 순간 OrderServiceImpl 의 소스 코드도 함께 변경해야 한다! (OCP 위반) DIP 위반 → 추상에만 의존하도록 변경(인터페이스에만 의존) → 구현체 없음. NPE(Null Pointer Exception) 발생 해결방안 ➔ 누군가 클라이언트(ServiceImpl)에 구현 객체를 대신 생성하고 주입해주어야 한다. 관심사의 분리 AppConfig 클래스 생성 - 애플리케이션의 전체 동작 ..
EJB (Enterprise Java Beans) 스프링 - EJB 컨테이너 대체 - 로드 존슨, 2002년 책 출간 스프링 역사 (Release) - 2003년 스프링 1.0 프레임워크 출시 - XML - 2006년 스프링 2.0 프레임워크 출시 - XML 편의 기능 지원 - 2009년 스프링 3.0 프레임워크 출시 - 자바 코드로 설정 - 2013년 스프링 4.0 프레임워크 출시 - 자바8 - 2014년 스프링 부트 1.0 출시 - 2017년 스프링 프레임워크 5.0, 스프링 부트 2.0 출시 - 리엑티브 프로그래밍 지원(비동기 Non-Blocking) - 2022년 3월 현재 스프링 프레임워크 5.3.X, 스프링 부트 2.6.X 하이버네이트 - EJB 엔티티빈 기술을 대체 - JPA(Java Per..
1. AOP가 필요한 상황 모든 메소드의 호출 시간을 측정하고 싶다면? 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? 문제 회원가입, 회원 조회에 시간을 측정하는 기능은 핵심 관심 사항이 아니다. 시간을 측정하는 로직은 공통 관심 사항이다. 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다. 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다. 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다. 2. AOP 적용 - AOP: Aspect Oriented Programming - AOP파일에는 @Aspect 애노테이션을 사용해야 함 - @Co..
1. H2 Database 설치하기 주의! h2 데이터베이스는 꼭 다음 링크에 들어가서 1.4.200 버전 설치 최근에 나온 2.0.206 버전을 설치하면 일부 기능이 정상 동작하지 않음 https://www.h2database.com/html/download-archive.html 파일 압축 해제 후 h2/bin 폴더로 가서 h2.sh 파일 실행(파일 권한 변경 필요) 2. 순수 JDBC 개방-폐쇄 원칙(OCP, Open-Closed Principle) 확장에는 열려있고, 수정, 변경에는 닫혀있다. 스프링의 DI (Dependencies Injection)을 사용하면 기존 코드를 전혀 손대지 않고, 설정만으로 구현 클래스를 변경할 수 있다. 3. 스프링 통합 테스트 @SpringBootTest : 스프..
스프링 빈을 등록하는 방법 1. 컴포넌트 스캔과 자동 의존관계 설정 2. 자바 코드로 직접 스프링 빈 등록하기 컴포넌트 스캔 원리 - @Component 애노테이션이 있으면 스프링 빈으로 자동 등록된다. - @Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다. - @Component 를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다. . @Controller . @Service . @Repository 기본적으로는 main() 을 포함한 패키지 하위의 컴포넌트에 대해서만 스캔이 이루어진다. 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다. (..
일반적인 웹 애플리케이션 계층 구조 컨트롤러: 웹 MVC의 컨트롤러 역할 서비스: 핵심 비즈니스 로직 구현 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 인텔리제이 단축키(Mac) cmd + option + Enter : Import shift + F6 : 변수 명 일괄 변경 코드 라인 선택 & cmd + option + V : 변수 생성 코드 블럭 선택 & cmd + option + M : 함수 생성 class 이름 선택 & cmd + shift + T : 테스트 클래스 생성 코드 블럭 선택 & cmd + option + / : 주석