분류 전체보기 341

💛 책 대출 등록하기 💛

Controller → Service → Repository 🔖 Controller ☑️ 책의 대출 정보가 담긴 데이터 (addRentDto) 가 들어온다 ☑️ 책이 이미 대출 중인지, 대출 가능한 상태인지 확인한다 (BookStatus) ☑️ 대출이 가능하면 Rent 테이블에 등록한다 - service 메서드 호출 (createRent) @RestController @RequestMapping("/rent") @RequiredArgsConstructor public class RentController { private final RentService rentService; // 책 대출 등록 @PostMapping() public ResponseEntity createRent(@RequestBody ..

💚 책 등록하기 💚

Controller → Service → Repository 📚 Controller ☑️ Postman API 요청으로 책의 데이터 (addBookDto) 가 입력된다 ☑️ 책을 등록하는 메서드 (addBook) 가 저장된 service 가 호출된다 @RestController @RequestMapping("/book") @RequiredArgsConstructor public class BookController { private final BookService bookService; // 책 등록 @PostMapping() public void addBook(@RequestBody AddBookDto addBookDto) { bookService.addBook(addBookDto); } } 📚 Ser..

[컴포넌트 스캔] 필터 - includeFilters, excludeFilters

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard includeFilters : 컴포넌트 스캔 대상을 추가로 지정 excludeFilters : 컴포넌트 스캔 대상에서 제외할 대상 지정 TEST ☑️ 필터를 사용해 등록한 빈 확인하기 1. test/java/hello.core/scan/filter Package 생성 2. filter 패키지에 MyIncludeComponent Interface 생성 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME..

[컴포넌트 스캔] 기본 스캔 대상

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard ✨ 탐색할 패키지의 시작 위치 지정하기 · AutoAppConfig ... @Configuration @ComponentScan( // 탐색할 패키지 시작 위치 지정하기 basePackages = "hello.core.member", // 지정한 클래스의 패키지를 탐색 시작 위치로 지정하기 basePackageClasses = AutoAppConfig.class, ... ) public class AutoAppConfig { } ✅ basePackages ..

[컴포넌트 스캔] @Component, @Autowired - 의존 관계 자동 주입

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 🫧 @ComponentScan ☑️ @Component 가 붙은 모든 클래스를 스프링 빈으로 등록 (설정 정보 없이 스프링 빈 자동 등록) · 스프링 빈 이름 기본 규칙 : 클래스명 (맨 앞글자만 소문자로 변경) 》ex) MemberServiceImpl → memberServiceImpl 》빈 이름 직접 지정 : @Component("memberService2") 🫧 @Autowired ☑️ 생성자에 @Autowired 지정 시, 스프링 컨테이너가 해당 스..

[싱글톤 컨테이너] @Configuration - 싱글톤 보장

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 🫧 궁금증 · AppConfig 에서 MemoryMemberRepository 가 2 번 호출되면서 싱글톤이 깨지지는 않을까 ?? @Configuration public class AppConfig { // @Bean memberService -> new MemoryMemberRepository() // @Bean orderService -> new MemoryMemberRepository() @Bean public MemberService memberSe..

[싱글톤 컨테이너] 싱글톤 방식의 주의점 - 무상태(stateless) 설계

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard · 싱글톤 객체는 상태를 유지(stateful)하도록 설계해서는 안됨 : 여러 클라이언트가 같은 객체를 공유하기 때문 ➡️ 무상태(stateless)로 설계 !! 》 특정 클라이언트에 의존적인 필드 X 》 특정 클라이언트가 값을 변경할 수 있는 필드 X (가급적 읽기만) 》 필드 대신 자바에서 공유되지 않는 지역변수, 파라미터, ThreadLocal 등 사용 ☑️ 문제 상황 · 공유 필드의 값을 특정 클라이언트가 변경할 수 있을 때 // StatefulSe..

[싱글톤 컨테이너] 싱글톤 패턴의 문제를 해결하는 스프링 컨테이너

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 💡 스프링 없는 순수 DI 컨테이너 (싱글톤 X) TEST ☑️ 매 호출 시, 다른 객체가 생성됨을 확인하기 public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); // 1. 조회 : 호출할 때마다 객체 생성 MemberService memberService1 = appConfi..

🩵 Spring Security (2) 로그인 🩵

📺스프링 시큐리티 강의📺 https://www.youtube.com/playlist?list=PLJkjrxxiBSFCKD9TRKDYn7IE96K2u3C3U ⭐ UserDetailService & UserDetails 기능 사용하기 🫧 Web 으로 확인하기 · CustomUserDetailService @Service @RequiredArgsConstructor public class CustomUserDetailService implements UserDetailsService { private final MemberRepository memberRepository; @Override public UserDetails loadUserByUsername(String email) throws Username..

728x90