관리 메뉴

CASSIE'S BLOG

96-2강 스프링 부트 실전 적용하기 v1 (CRUD만들기) 본문

PROGRAMMING/슈퍼코딩 강의 정리

96-2강 스프링 부트 실전 적용하기 v1 (CRUD만들기)

ITSCASSIE1107 2024. 2. 29. 17:42

 
 
 
위의 코드는 Spring의 @Configuration 어노테이션을 사용하여 JdbcTemplate과 PlatformTransactionManager를 구성하는 설정 클래스입니다.
여기서 @Bean 어노테이션으로 선언된 메서드들은 Spring 컨테이너에게 해당 메서드가 반환하는 객체를 빈(Bean)으로 등록하라고 알려줍니다.

  1. dataSource1() 메서드와 dataSource2() 메서드는 각각 다른 데이터베이스 연결을 위한 DataSource를 설정하는데 사용됩니다. 두 메서드는 각각 chapter_96과 chapter_97 데이터베이스에 연결하는 DataSource를 생성합니다.
  2. jdbcTemplate1() 메서드와 jdbcTemplate2() 메서드는 각각 dataSource1()과 dataSource2()로부터 생성된 DataSource를 사용하여 JdbcTemplate 빈을 생성합니다. JdbcTemplate은 JDBC 작업을 보다 간편하게 수행할 수 있는 Spring의 JDBC 서브 프레임워크입니다.
  3. transactionManager1() 메서드와 transactionManager2() 메서드는 각각 dataSource1()과 dataSource2()로부터 생성된 DataSource를 사용하여 PlatformTransactionManager 빈을 생성합니다. PlatformTransactionManager는 Spring에서 트랜잭션을 관리하는 인터페이스로, 여러 종류의 트랜잭션 관리자를 추상화한 것입니다. 이 설정은 두 개의 데이터베이스에 대한 트랜잭션 관리를 지원하기 위해 두 개의 트랜잭션 관리자를 설정합니다.

따라서 위의 설정 클래스는 두 개의 데이터베이스에 대한 DataSource, JdbcTemplate, 그리고 트랜잭션 관리자를 생성하여 Spring 애플리케이션에서 다중 데이터베이스를 사용할 수 있도록 해줍니다.
 
 
DataSourceTransactionManager는 JDBC를 사용하여 데이터베이스 트랜잭션을 관리하기 위한 구체적인 구현체입니다. 이 클래스는 PlatformTransactionManager 인터페이스를 구현하여 JDBC를 사용하는 경우에 트랜잭션을 시작, 커밋, 롤백하는 기능을 제공합니다. 따라서 DataSourceTransactionManager는 특정한 데이터 액세스 기술인 JDBC를 위한 트랜잭션 관리자로서 역할합니다.

반면에 PlatformTransactionManager는 다양한 데이터 액세스 기술과 트랜잭션 관리자를 통합하는 인터페이스입니다. 이 인터페이스는 Spring에서 제공하는 다양한 데이터 액세스 기술에 대한 트랜잭션 처리를 추상화하고, 트랜잭션의 시작, 커밋, 롤백을 표준화된 방식으로 제공합니다. 따라서 PlatformTransactionManager는 다양한 환경에서 일관된 방식으로 트랜잭션을 관리할 수 있도록 해줍니다.
 

 
지금 ElectronicStoreItemJdbcDao  여기에 문제 있다고 하잖아. 
 
또 문제됨
 

 
오류이름: 
에러 내용:
Description:
Parameter 0 of constructor in com.github.supercoding.repository.storeSales.StoreSalesJdbcTemplateDao required a single bean, but 2 were found:
- jdbcTemplate1: defined by method 'jdbcTemplate1' in class path resource [com/github/supercoding/config/JdbcConfig.class]
- jdbcTemplate2: defined by method 'jdbcTemplate2' in class path resource [com/github/supercoding/config/JdbcConfig.class]
 
Action:
Consider marking one of the beans as @primary, updating the consumer to accept multiple beans, or using @qualifier to identify the bean that should be consumed
 
※Qualifier 쓰라고 다 알려줌 ※
 
@Qualifier 애노테이션을 사용하면 여러 개의 빈 중에서 특정한 빈을 지정하여 의존성을 주입할 수 있습니다. 이 애노테이션은 주입할 빈의 이름이나 구분자를 지정하여 의존성 주입을 명확하게 해줍니다.
 

package com.github.supercoding.web.dto.airline;

public class Ticket {

private String depart;
private String arrival;
private String departureTime;
private String returnTime;
private Integer ticketId;

public Ticket() {
}

public String getDepart() {
return depart;
}

public String getArrival() {
return arrival;
}

public String getDepartureTime() {
return departureTime;
}

public String getReturnTime() {
return returnTime;
}

public Integer getTicketId() {
return ticketId;
}
}

 
"제커슨(Jackson)"은 자바에서 JSON 데이터를 처리하기 위한 라이브러리 중 하나입니다. 이 라이브러리를 사용하면 자바 객체를 JSON으로 변환하거나 JSON을 자바 객체로 변환하는 작업을 수행할 수 있습니다.
여기서 "camel 케이스(camel case)"란 문자열을 표현할 때, 각 단어의 첫 글자를 제외한 나머지 글자들의 첫 글자를 대문자로 표기하는 방식을 의미합니다. 예를 들어, "departureTime"과 "returnTime"은 camel 케이스로 표현된 문자열입니다.
반면에 "snake 케이스(snake case)"는 각 단어 사이에 밑줄(underscore)을 사용하여 단어를 구분하는 방식을 의미합니다. 예를 들어, "departure_time"과 "return_time"은 snake 케이스로 표현된 문자열입니다.
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy)은 Jackson 라이브러리에서 제공하는 어노테이션으로, 해당 클래스의 속성명을 snake 케이스로 변환하여 JSON으로 직렬화할 때 사용됩니다. 이렇게 함으로써 JSON 데이터의 키 이름이 snake 케이스로 표현되어야 하는 경우에 맞게 속성명을 변환하여 JSON으로 출력할 수 있습니다.

UserEntity만들어줘야함

Entity는 테이블이랑 같아야함

Service에 로직 적으면서 Repository의 메소드 쓰잖아 그러면 그 Repository 인터페이스에 메소드가 하나씩 추가되는 구조다.

로직을 적다보니 AirlineTicket Entity도
필요하다.

Ticket이랑 Tickets랑 dto 구조는 똑같은데 리스트이고 아니고 차이라면 이런 식으로 List 만들 수 있잖아

List<Ticket> tickets = airlineTickets.stream().map().collect(Collectors.toList());

이거를 또 이렇게 바꾸는데

List<Ticket> tickets = airlineTickets.stream().map(Ticket:: new).collect(Collectors.toList());

Ticket::new은 메소드 레퍼런스(Method Reference)의 한 유형입니다. 여기서 new는 생성자를 호출하는 것을 의미합니다.

즉, Ticket::new는 Ticket 클래스의 생성자를 호출하는 메소드 레퍼런스입니다. 이것은 map 함수에 전달되어 각 airlineTickets 요소를 Ticket 객체로 매핑하는 데 사용됩니다. 따라서 이 코드는 airlineTickets 리스트의 각 요소를 새로운 Ticket 객체로 변환하여 tickets 리스트에 수집합니다.

아 그래서 Ticket:: new 한 다음에 Ticket가서  또 생성자 오버라이딩 하는거구나

AirlineTicket 생성자로 받는 것

 

 

 



빈 없어서 빈을 만들어줘야한다고함. 그래서 빨간줄

 

 

반응형