전체 글
-
9월 18일 월요일 TIL 회고록카테고리 없음 2023. 9. 19. 01:52
지난주는 예비군 다녀오느라 블로그 포스팅을 아예 못했다. 비오는날 훈련하니 다음날 감기걸려서 몸살나고.. 병원가고.. 최악이다 ㅠㅠ 이번주부터는 정신차리고 다시 열심히 김영한 선생님 강의를 들으며 공부해야겠다! 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문제점 스프링 컨테이너에 프로토타입 스코프의 빈을 요청하면 항상 새로운 객체 인스턴스를 생성해서 반환한다. 하지만 싱글톤 빈과 함께 사용할 때는 의도한 대로 잘 동작하지 않으므로 주의해야한다. 스프링 컨테이너에 프로토타입 빈을 직접 요청하는 예제를 보자. 프로토타입 빈 직접 요청 스프링 컨테이너의 프로토타입 빈 직접 요청1 클라이언트 A는 스프린 컨테이너의 프로토타입 빈을 요청한다. 스프링 컨테이너는 프로토타입 빈을 새로 생성해서 반환(x01)한다. ..
-
9월 8일 금요일 TIL 회고록카테고리 없음 2023. 9. 9. 02:07
프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문제점 빈 스코프란? 스프링 빈(Bean) : 스프링 컨테이너에서 관리하는 자바 객체 스코프(Scope) : 존재할 수 있는 범위 즉, 빈 스코프는 스프링 빈이 존재할 수 있는 범위를 뜻한다. 지금까지는 기본적으로 스프링 컨테이너에서 스프링 빈이 싱글톤 스코프로 생성되었기 때문에, 스프링 컨테이너와 생명주기를 같이 했기에 신경 쓸 필요가 없었다. 하지만, 빈 스코프를 어떻게 설정하느냐에 따라 스프링 빈의 생성과 소멸을 클라이언트에서 관리해줘야하는 경우도 생길 수 있고, 다양한 요구사항에 맞는 스코프를 지정해 사용할 수 있다. 웹 관련 스코프 Request : 웹 요청이 들어오고 나갈때까지 유지되는 스코프 Session : 웹 세션이 생성되고 종료될 때까지 유..
-
9월 7일 목요일 TIL 회고록카테고리 없음 2023. 9. 7. 20:57
빈 생명주기(Bean LifeCycle) 콜백 알아보기 빈 생명주기 콜백의 필요성 먼저 콜백에 대해 설명하면, 주로 콜백함수를 부를 때 사용되는 용어이며, 콜백함수를 등록하면 특정 이벤트가 발생했을 때 해당 메소드가 호출된다. 즉, 조건에 따라 실행될 수도 실행되지 않을 수도 있는 개념이라고 보면 된다. 보통 프로젝트를 하다보면 DB 연결, 네트워크 소켓 연결 등과 같이 시작 지점에 미리 연결한 뒤 어플리케이션 종료 시점에 연결을 종료해야 하는 경우 객체의 초기화 및 종료 작업이 필요할 것이다. (예 : 커넥션 풀의 connect & disconnect) 네트워크에 연결하는 동작을 표현하는 NetworkClient 예제 클래스를 만들어보았다. package hello.core.lifecycle; publ..
-
9월 6일 수요일 TIL 회고록카테고리 없음 2023. 9. 6. 21:50
조회 빈이 2개 이상 - 문제 @Autowired 어노테이션은 타입(Type)으로 조회한다. @Autowired private DiscountPolicy discountPolicy 타입으로 조회하기 때문에, 마치 다음 코드와 유사하게 동작한다. (실제로는 더 많은 기능을 제공한다.) ac.getBean(DiscountPolicy.class); 선택된 빈이 2개 이상일때 타입으로 조회하면 문제가 발생한다. DiscountPolicy의 하위 타입인 FixDiscountPolicy, RateDiscountPolicy 둘 다 스프링 빈으로 선언해보았다. @Component public class FixDiscountPolicy implements DiscountPolicy{ ... } @Component pub..
-
9월 5일 화요일 TIL 회고록카테고리 없음 2023. 9. 5. 21:02
의존관계 자동 주입 Spring은 @Autowired 어노테이션을 이용한 다양한 의존성 주입 (DI : Dependency Injection) 방법을 제공한다. 의존성 주입은 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 객체를 받아 사용하는 것이다. 이를 통해 객체간의 결합도를 줄이고 코드의 재활용성을 높일 수 있다. @Autowired는 Spring에게 의존성을 주입하는 지시자 역할로 쓰인다. 의존성 주입을 해야 하는 이유는 Test가 용이해진다. 코드의 재사용성을 높여준다. 객체 간의 의존성(종속성)을 줄이거나 없앨 수 있다. 객체 간의 결합도를 낮추면서 유연한 코드를 작성할 수 있다. 다양한 의존관계 주입 방법 의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입 수정자 주입 (Setter ..
-
-
8월 31일 목요일 TIL 회고록카테고리 없음 2023. 9. 1. 01:31
스프링 핵심 원리 - 기본편 컴포넌트 스캔 스프링에서는 설정 정보(AppConfig.class) 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다. 스프링 빈을 등록할 때는 의존관계를 자바 코드로 직접 등록하는 방법과 컴포넌트 스캔과 자동 의존관계를 설정해주는 @Autowired 애노테이션을 사용하는 방법이 있다. @ComponentScan은 탐색 위치에 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다. MemberServiceImpl.class @Component public class MemberServiceImpl implements MemberService { } 이떄 기본적으로 빈 이름은 맨 앞글자를 소문자로 바꿔 사용한다. @Component("beanName"..
-
8월 29일 화요일 TIL 회고록카테고리 없음 2023. 8. 30. 00:25
레디스를 사용해서 조회수 구현을 하였다. redisRepositoryConfig 클래스에 template를 사용해서 직접 조회하는 방식으로 조회수를 구현했다. 원하는 Key 값을 설정해주고 redisTemplate.opfForValue()로 redis 캐시에 올라간 값들을 조회해주었다. 만약 캐싱 처리가 안되어 있다면 set을 통해서 데이터베이스로 조회한 값을 넣어주었다. @Override public void addViewCntToRedis(Long basicBoardId) { String key = "basicBoardViewCnt::" + basicBoardId.toString(); // 캐시에 값이 없으면 Repository에서 조회한다. ValueOperations valueOperations ..