일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Union-find
- BaekJoon
- 식단
- 스마일게이트
- Smilegate
- 코테
- 삼성 #코테 #2020상반기 #c++
- 소감
- 카카오
- LIS #Algorithm #요소추적
- 1편
- 유니온파인드
- 코딩테스트
- Algorithm
- 카카오인턴
- BFS
- 중반부
- 보석쇼핑
- c++
- 백준
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 투포인터
- 서버개발캠프
- 알고리즘
- Today
- Total
목록개발 프로젝트 정리/[예제로 배우는 스프링 입문] 백기선님 강의 정리 (10)
짱아의 개발 기록장
@LogExecutionTime을 만들어주고 LogAspect.java를 만들어서 LogExecutionTime 어노테이션 주변에 어떤 동작들이 일어나는 지를 구현했다. (LogExecutionTime 어노테이션이 붙으면 stopwatch를 통해 시간을 재게 된다.) 이것이 바로 Spring에서 해주는 AOP작업이다. /owners/find 로 들어가게 되면 @LogExecutionTime이 붙었기 때문에 저절로 시간을 잰다. . . . 또한, Spring에서 AOP를 적용하는 방법은 @Around외에도 굉장히 많다. @Before, @After 등등!
기존 코드 건드리지 않고 새 기능 추가하기 (실습을 통해 진행했다.) 1. 첫 번째 실습 CashPerf가 프록시의 역할을 한다. + Store라는 클라이언트 side에서 CashPerf를 사용했기 때문에 성능 측정이 가능하다. (만약, Store에서 Store strore = new Store(Cash())를 했다면.... 성능측정은 불가능하다.) 새로운 코드인 CashPer.java를 추가하긴 했지만 기존의 코드를 건들이지 않고 새로운 기능(성능측정)을 추가했다. 이런 일들이 Spring AOP에서는 대부분 자동으로 이루어진다. 굉장히 복잡한 내부적인 로직으로 돌아간다. 따라서, Spring에서는 우리가 비즈니스 로직 개발에만 집중을 할 수 있게끔 이러한 복잡한 작업들을 대신 해준다.
Spring은 크게 IoC, AOP, PSA 3가지의 개념을 제공해준다. 이 개념은 Spring의 Triangle이라고 부른다. * AOP(Aspect Oriented Programming) = 흩어진 코드를 한 곳으로 모아 ex) class A { method a () { AAAA->AAA 오늘은 치킨을 먹는 날이에요. BBBB->BB } method b () { AAAA->AAA 오늘은 달콤한 디저트를 먹는 날이에요. BBBB->BB } } class B { method c () { AAAA->AAA 오늘은 그냥 너무 우울한 날이어서 불닭을 먹을 거에요. BBBB->BB } } 같은 클래스 다른 메소드, 다른 클래스 다른 메소드에서 똑같은 일을 반복하는 AAAA가 AAA로 바뀌어야 한다면??? AAA..
1. Field Injection(using @Autowired) 2. Method Injection(=setter Injection) 3. Constructor Injection(생성자 주입) => 스프링 측에서 최근 가장 추천하는 방법!
1 2 3 OwnerController ownerController = new OwnerController(); OwnerController bean = applicationContext.getBean(OwnerController.class); cs 위의 객체인 ownerController와 아래 객체인 bean은 전혀 다른 방향성의 객체이다. ownerController는 진짜 그냥 객체인 반면, bean은 applicationContext에서 관리하는 빈(Bean)이다! 따라서, 이렇게 Spring의 applicationContext에서 관리하는 빈(Bean)들만 서로 의존성 주입(DI)을 할 수 있다, 그럼! 어떻게 Spring 컨테이너 안에다가 Bean을 만들어주느냐? (크게 3가지 방법) 1. ..
IoC 컨테이너는 주로 BeanFactory나 ApplicationContext를 사용한다. ApplicationContext는 BeanFactory를 상속받고 더 많은 기능을 제공하고 있기 때문에 이 프로젝트에서는 주로 ApplicationContext를 사용할 예정이다. IoC컨테이너는 Bean을 만들고 Bean사이의 의존성을 엮어주고 최종적으로 Bean을 제공해준다. pet-clinic프로젝트에서는 OwnerController, OwnerRepository, PetController, PetRepository가 IoC컨테이너에 Bean으로 등록되어 있다. 모든 클래스가 Bean으로 등록된 것은 아니다!! 위 사진처럼 녹생 콩 모양이 클래스 옆에 표시된다면, Bean으로 등록된 것이다. 📌의존성 주입..
Inversion of Control은 말 그대로 제어가 역전된 것을 의미한다. 일반적인 (의존에 대한) 제어권 : "내가 사용할 의존성은 내가 만든다." 1 2 3 class OwnerController{ private OwnerRepository repository = new OnwerRepository(); } Colored by Color Scripter cs IoC(Inversion of Control) : "내가 사용할 의존성을 누군가 알아서 해주겠지.." -> 내가 사용할 의존성의 타입(또는 인터페이스)만 맞으면 어떤거든 상관없다. -> 그래야 내 코드 테스트 하기도 편하지... 1 2 3 4 5 6 7 8 class OwnerController{ private OwnerRepository ..
3강에서는 총 3개의 과제가 주어졌고 글쓴이는 3개를 모두 완료했다. -LastName이 아니라 FirstName으로 검색하기 ✅ -Owner에 age추가하기 ✅ -정확하게 일치하는게 아니라 해당 키워드가 들어있는 것을 찾을 수 있도록 하기 ✅ 1. LastName이 아닌 FirstName으로 검색하기 -> 뷰 변경 -> 코드 조금 변경 controller파일에서 /owner/find로 들어가면 owners/findOwners로 리턴되기 때문에 그 파일을 변경하는 것이 핵심이다. findOwners.html파일의 lastName관련된 것을 모두 firstName으로 변경했다. 2. Owner에 age추가하기 -> 모델 변경(도메인 모델 -> Owner.java파일 수정) -> 스키마 변경(h2, hsql..