본문 바로가기
Spring Data JPA 사용하기 JPA는 EntityMananger를 이용하고 crud 메서드를 클래스에서 구현하는 방법으로 사용했다. Spring Data JPA는 더 간편하게 crud가 가능하다 인터페이스를 선언해서 JpaRepository를 상속하면 바로 사용할 수 있다 우리가 다루는 자료형이 Course니 을 넣어줬다 public interface CourseSpringDataJpaRepository extends JpaRepository {} JpaRepository의 기능인 save, delete를 이용해서 데이터를 추가, 삭제할 수 있다 @Component public class CourseCommandLineRunner implements CommandLineRunner { private final CourseSpring.. 2024. 4. 3.
스프링부트 JPA 프로젝트 시작하기 강의는 h2기준으로 진행되지만 mysql이 더 편하고 범용적인것 같아서 mysql 기준으로 설정했다 gradle 의존성 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'org.springframework... 2024. 4. 1.
스프링 부트 시작하기 •일단 rest api 만들어보기 @RestController 어노테이션으로 json 형태로 반환받을 수 있다 @RestController public class CourseController { @RequestMapping("/courses") public List retrieveAllCourses(){ List list = Arrays.asList(new Course(1, "ho", "java"), new Course(1, "hoshi", "spring")); return list; } } • 개발 환경 세팅하기 • 디버그 수준 설정하기 application.properties에서 출력되는 로그의 수준이나 어떤 환경을 사용할지 적용할 수 있다 spring.profiles.active= dev 이렇게 .. 2024. 3. 30.
빈 관련 어노테이션 @component - 특정 클래스에 빈 생성하는 어노테이션, 아래 어노테이션들은 좀 더 구체적인 어노테이션이다 클래스에 용도에 맞게 사용하는 구체적인 어노테이션 @Service - 비즈니스 클래스 @Controller - 컨트롤러에 사용 @Repository - 데이터베이스와 통신하는 클래스 @Configuration은 클래스가 @Bean 메서드를 하나 이상 선언함을 나타낸다. @Configuration은 자바 설정 파일을 만드는데 사용한다 @Configuration 이 있는 클래스에 @Bean 메서드를 정의하면 메서드에서 반환되는 모든 값에 스프링이 빈을 생성한다 @ComponentScan은 컴포넌트를 스캔할 패키지를 정의하고 @Component가 붙은 클래스를 스프링 빈으로 만든다 2024. 3. 20.
PostConstruct, PreDestroy @PostConstruct - 의존성 주입이 이루어진 후 실행되는 메서드에 사용, db에서 데이터 불러올때 등에 사용 @PreDestroy - 빈이 삭제되기 전에 사용, 종료 전에 데이터 저장할 때 등에 사용 package udemy.learnspring.singleton; import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.*; import org.springframework.stereotype.Compo.. 2024. 3. 20.
싱글톤, 프로토타입 • 자바 싱글톤과 스프링 싱글톤 차이 스프링 싱글톤은 스프링 IoC 컨테이너당 객체 인스턴스가 하나 자바 싱글톤은 JVM당 인스턴스가 하나 • 싱글톤과 프로토타입 차이 기본적으로 스프링에서 생성되는 빈들은 싱글톤이다 빈을 여러번 호출해도 같은 인스턴스를 가져온다 @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) 빈 위에 이렇게 Scope 어노테이션을 붙이면 프로토타입 객체로 생성되어서 빈을 가져올때마다 다른 인스턴스를 가져온다 @Component class NormalClass{ } @Component @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) class PrototypeClass{ } @Confi.. 2024. 3. 20.
지연 초기화, 즉시 초기화 스프링의 기본 초기화는 즉시 초기화지만 어노테이션을 이용해서 초기화 시간을 조정할 수 있다 지연초기화를 쓸 일이 거의 없다고는 하지만 알아놓자 @Component class classA{ public classA(){ System.out.println("class a!"); } } @Component class classB{ private classA classA; public classB(classA classA){ System.out.println("some logic"); this.classA = classA; } } @Configuration @ComponentScan public class LazyInitializtion { public static void main(String[] args) .. 2024. 3. 20.
스프링 용어 정리 @Component 어노테이션 컴포넌트를 스캔할때 @Component가 붙은 클래스는 인스턴스가 생성되서 스프링이 관리하는 스프링 빈이 된다 컴포넌트 스캔 - @ComponentScan 어노테이션으로 특정 패키지의 컴포넌트를 가져온다 의존성 주입 - 빈을 식별하고 와이어링 하는 과정 빈의 생명 주기와 의존성을 스프링이 관리하는 IoC가 일어난다 오토와이어링 - 스프링의 특정 빈의 의존성 주입을 자동으로 해주는 과정 @Component와 @Bean 어노테이션 컴포넌트는 클래스 맨 위에 추가해주면 된다, 빈은 스프링 configurarion 클래스의 특정 메서드에 개발자가 작성해서 사용한다 일반적으로는 컴포넌트 어노테이션을 사용하지만 비즈니스 로직이 많거나, 시큐리티등 다른 라이브러리에 대한 빈이라면 빈 어.. 2024. 2. 25.
의존성 주입 의존성 주입의 유형 3가지 생성자 기반, 수정자 기반, 필드 기반이 있다 @Component class YourBusinessClass{ } @Component class Dependency1{ } @Component class Dependency2{ } @Configuration @ComponentScan public class DepInjectionLauncherApplication { public static void main(String[] args) { try (var context = new AnnotationConfigApplicationContext (DepInjectionLauncherApplication.class)) { Arrays.stream(context.getBeanDefinit.. 2024. 2. 24.
Configuration , Bean, 컨테이너, 빈 연결 우선순위 @Configuration 어노테이션이 붙으면 스프링 설정 파일로 사용 가능하다 설정 파일안에 @Bean으로 의존성 주입한 객체를 넣어두고 컨텍스트에서 꺼내서 가져올 수 있었다 // 스프링 프레임워크를 시작해서 빈을 관리하게 만들기 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfiguration.class); // 컨텍스트에서 객체 가져오기 - bean 어노테이션 System.out.println(context.getBean("name")); System.out.println(context.getBean("age")); System.out.println(context.getBe.. 2024. 2. 19.