일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 2024 정보처리기사 시나공 필기
- 코드로 시작하는 자바 첫걸음
- 자바의 정석 기초편 ch11
- 스프링 고급 - 스프링 aop
- 스프링 db2 - 데이터 접근 기술
- 자바의 정석 기초편 ch12
- 자바의 정석 기초편 ch6
- 스프링 mvc2 - 로그인 처리
- 자바의 정석 기초편 ch4
- 2024 정보처리기사 수제비 실기
- @Aspect
- 스프링 mvc2 - 검증
- 자바 중급1편 - 예외 처리
- 스프링 mvc1 - 스프링 mvc
- 스프링 입문(무료)
- 자바 기본편 - 다형성
- 스프링 mvc2 - 타임리프
- 자바의 정석 기초편 ch7
- 스프링 mvc1 - 서블릿
- 자바의 정석 기초편 ch2
- 자바의 정석 기초편 ch13
- 게시글 목록 api
- 스프링 db1 - 스프링과 문제 해결
- jpa - 객체지향 쿼리 언어
- 자바의 정석 기초편 ch1
- jpa 활용2 - api 개발 고급
- 자바 중급1편 - 날짜와 시간
- 자바의 정석 기초편 ch14
- 자바의 정석 기초편 ch5
- 자바의 정석 기초편 ch9
- Today
- Total
목록2024/11 (21)
나구리의 개발공부기록
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 프록시 팩토리 - 소개1) 기존 동적 프록시의 문제점을 해결(1) 인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용스프링은 유사한 구체적인 기술들이 있을 때 그것들을 통합해서 일관성 있게 접근할 수 있고 더욱 편리하게 사용할 수 있는 추상화된 기술을 제공하는데, 동적 프록시도 통합해서 편리하게 만들어주는 프록시 팩토리(ProxyFactory)라는 기능을 제공함이전에는 상황에 따라서 개발자가 직접 JDK 동적 프록시를 사용하거나 CGLIB를 사용해야 했다면 프록시 팩토리 하나로 편리하게 동적 프록시를 생성할 수 있음프록시 팩토리는..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 리플렉션1) 리플렉션 이해(1) 리플렉션과 동적프록시지금까지 프록시를 사용하여 기존 코드를 변경하지 않고 로그 추적기라는 부가 기능을 적용할 수 있었으나 대상 클래스 수 만큼 로그 추적을 위한 프록시 클래스를 만들어야 한다는 점의 문제가 있음자바가 기본으로 제공하는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어낼 수 있어 프록시 클래스를 지금처럼 계속 만들지 않아도 됨프록시를 적용할 코드를 하나만 만들어두고 동적 프록시 기술을 사용해서 프록시 객체를 찍어내면 됨JDK 동적 프록시를 이해하기 위해서는 먼저 자바의..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 인터페이스 기반 프록시 - 적용1) V1 App에 LogTrace 적용(1) 프록시 사용프록시를 사용하면 기존 코드를 전혀 수정하지 않고 로그 추적 기능을 도입할 수 있음 (데코레이터 패턴 사용)V1예제의 클래스 의존관계를 살펴보면 인터페이스와 구현체를 생성하여 각 인터페이스의 구현체들은 각 계층의 인터페이스를 의존하고 있으며 클라이언트도 컨트롤러 인터페이스를 주입받고 있음런타임 객체에 의존관계도를 보면 클라이언트는 각 구현체들을 의존관계 주입을 받게 됨프록시를 도입하게 되면 각 계층의 인터페이스에 실제 구현체외에 프록시 클래스를 생성하여 동시에 구현하고, 런타임 시에는 클라..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 프로젝트 생성 및 예제 프로젝트 만들기1) 프로젝트 생성(1) 프로젝트 생성 및 설정 변경강의에서 제공된 프로젝트를 복사해서 사용자바 : 17스프링 부트 : 3.3.5dependency-management : 1.1.6gradle : 8.10.22) 예제 프로젝트 v1여기에서의 v1, v2, v3는 버전업이 되는 것은 아니고 실무에서 마주하게 되는 3가지 상황에 대한 예제라고 보면 되며 v1, v2, v3의 패키지를 각각 만들어서 코드들을 작성v1 - 인터페이스와 구현 클래스가 있고 스프링 빈으로 수동으로 직접 등록하는 상황(1) OrderRepositoryV1, OrderR..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 전략 패턴 - 시작1) 예제 만들기(1) ContextV1Test 생성템플릿 메서드 패턴에서 만들었던 완전히 동일한 테스트 코드로 클래스 이름과 패키지만 변경해서 사용패키지는 test하위 경로에 strategy 패키지를 생성하고 테스트 코드의 메서드명을 strategyV0로 변경package hello.advanced.trace.strategy;@Slf4jpublic class ContextV1Test { @Test void strategyV0() { logic1(); logic2(); } // 나머지 코드는 동일 ..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 템플릿 메서드 패턴 - 시작1) 템플릿 메서드 패턴의 필요성(1) 로그 추적기 도입 시도지금까지 요구사항도 만족하고 쓰레드로컬을 도입하여 동시성문제도 제거한 로그추적기를 프로젝트에 도입하려고하는데, 개발자들의 반대에 부딪힘그 이유를 로그 추적기 도입전과 도입 후의 코드를 보고 분석해보기(2) 로그 추적기 도입 전 코드 - V0V0 버전인 Controller와 Service의 코드만 보면 매우 간단하게 비즈니스 로직을 수행하는 코드만 있음@RestController@RequiredArgsConstructorpublic class OrderControllerV0 { priv..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 필드 동기화 - 개발1) 정식버전 개발(1) 프로토타입 버전의 문제점앞서 개발한 프로토타입의 로그 추적기는 다음 로그를 출력할 때 트랜잭션ID와 level을 동기화를 하는 방법으로 해당 정보를 가지고 있는 TraceId를 파라미터로 넘기도록 구현하였음동기화는 성공했지만 로그를 출력하는 모든 메서드에 TraceId를 파라미터에 추가해야하는 문제가 있었는데 이를 해결하는 정식 버전을 개발(2) LogTrace 인터페이스향후 다양한 구현체로 변경할 수 있도록 LogTrace 인터페이스를 생성로그 추적기를 위한 최소한의 기능을하는 메서드들을 선언public interface LogT..
출처 : 인프런 - 스프링 핵심 원리 - 고급편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 프로젝트 생성 및 프로젝트 만들기1) 프로젝트 생성 (1) ProjectGradleJava 17Spring Boot 3.3.5(2) MetadataGroup - helloArtifact - advancedPackaging - Jar(3) DependenciesSpring WebLombok2) 프로젝트 만들기V0학습을 위한 간단한 예제로 상품을 주문하는 프로세스로 가정하고 일반적인 웹 애플리케이션에서 Controller -> service -> Repository로 이어지는 흐름을 최대한 단순하게 작성(1) 리포지토리V0상품 저장 시 1초정도의 소요시간이 걸리고, 상품 id가 ..
출처 : 인프런 - 자바 입문 - 코드로시작하는 자바 첫걸음 (무료) / 김영한님 1. 배열1) 배열이 필요한 이유같은 타입의 변수를 반복해서 선언하고 사용할 때 편리하게 사용할 수 있도록 제공하는 기능만약 int타입의 여러가지 변수에 숫자를 저장해야한다고 하면 int타입의 변수를 이름을 각각 다르게 계속 반복적으로 선언하고 숫자의 값을 초기화해야하는 번거로움이 있는데, 이것을 하나의 변수명으로 동일한 타입의 값을 입력받을 수 있음뭔가 반복문을 활용해서 변수명을 바꿔가면서 값을 입력하겠다고 시도해봐도 그런 기능은 자바에서 지원하지않음(필자도 과거 .. 처음 개발을 시작할 때 이런 생각을 해봤음..)즉, 배열은 같은 타입의 변수를 사용하기 편하게 하나로 묶어둔 것임2) 배열의 선언과 생성int[] stud..
출처 : 인프런 - 자바 입문 - 코드로시작하는 자바 첫걸음 (무료) / 김영한님 1. 스코프 및 형변환1) 지역 변수와 스코프(1) 지역 변수변수는 선언한 위치에 따라 지역 변수, 멤버 변수(클래스 변수, 인스턴스 변수)와 같이 분류됨지금까지 학습한 변수들은 모두 영어로 로컬 변수(Local Variable), 한글로 지역 변수라 하며 나머지 변수들은 뒤에서 학습함지역 변수는 말그대로 특정 지역에서만 사용할 수 있는 변수를 뜻이며 특정 지역을 벗어나면 사용할 수 없음여기서 말하는 지역은 변수가 선언된 코드 블록{ } 이며 지역변수는 자신이 선언된 코드 블록 안에서만 생존하고 자신이 선언된 코드 블록을 벗어나면 제거되며 이후에는 접근할 수 없음(2) 예제변수 m은 main의 코드 블록 안에서 선언된 지역..