- 01 Spring JDBC
- 01 Entity, DTO , DAO, Repository
- DTO
- DAO
- Repository
- Spring 서비스에서의 사용
- 이 이미지는 전형적인 서버 측 응용 프로그램의 구성 요소를 보여주는 고수준 아키텍처 다이어그램입니다. 아래는 구성 요소와 그들 간의 흐름에 대한 설명입니다:
- 왼쪽에는 "Client"로 레이블이 지정된 녹색 사각형이 있습니다. 이는 서버 측 응용 프로그램과 상호 작용하는 사용자 인터페이스 또는 외부 시스템을 나타냅니다.
- "Client"에서 "Controller"로 향하는 파란색 화살표가 있습니다. 이 화살표는 "DTO"로 레이블이 지정되어 있습니다. DTO는 데이터 전송 객체를 나타내며, 소프트웨어 응용 프로그램 하위 시스템 간에 데이터를 전송하는 데 사용되는 패턴입니다. "Controller"는 일반적으로 HTTP 요청을 처리하고 클라이언트에 응답하는 응용 프로그램의 일부입니다.
- "Controller"에서 "Service"로 향하는 또 다른 파란색 화살표가 있습니다. 이는 "Controller"에서 "Service" 계층으로 데이터를 전송하는 데 DTO가 사용되고 있다는 것을 시사합니다. "Service" 계층에는 일반적으로 비즈니스 로직이 포함되어 있으며 데이터가 처리되거나 비즈니스 규칙이 적용되는 방식을 조정합니다.
- "Service" 계층에서 "DAO (Repository)"로 향하는 파란색 화살표가 있습니다. "Entity"로 레이블이 지정된 화살표가 "DAO (Repository)"에서 오른쪽에 있는 "DB"로 향합니다. "Entity"는 아마도 비즈니스 용어로 데이터를 나타내는 도메인 모델일 것입니다. "DAO"는 데이터 액세스 객체를 나타내며, "Repository"는 데이터 소스에 액세스하는 데 필요한 로직을 캡슐화하는 디자인 패턴을 나타냅니다.
- 마지막으로, "DAO (Repository)"에서 오른쪽에 있는 "DB"로 향하는 "Entity"로 레이블이 지정된 화살표가 있습니다. 이는 엔터티가 데이터베이스에서 데이터를 전송하고 아마도 조작하는 데 사용된다는 것을 나타냅니다.
- 이 다이어그램은 서버 측 응용 프로그램의 다른 계층 간의 데이터 흐름을 보여주며, 클라이언트에서 중간 계층 컨트롤러 및 서비스를 통해 데이터 액세스 계층 및 마지막으로 데이터베이스로의 흐름을 보여줍니다. 이는 데이터 전송을 위해 DTO를 사용하고 데이터베이스와 상호 작용을 위해 엔터티를 사용하는 것을 보여줍니다.
- [ 퀴즈 ] 용어 퀴즈
DTO는 데이터 전송을 위해 사용되는 객체로, 뷰에서 컨트롤러로 데이터를 전달하거나, 컨트를러와
서비스 간에 데이터를 주고 받을 때 사용됩니다. DTO는 데이터의 효율적인 전송을 위해 필요한
데이터만을 포함하고, 필요한 데이터를 묶어서 전달하는 역할을 수행합니다.
- JDBC란
- DB 교체가 발생한다면 ?
- JDBC
- JDBC 표준 인터페이스
( Oracle DB 에 접근할 수 있는 라이브러리 = Oracle JDBC Driver )
- JDBC 퀴즈
JDBC Driver를 사용하여 해당 데이터베이스에 연결할 수 있습니다. JDBC Driver는 데이터베이스
제공업체에 의해 개발되며, 특정 데이터베이스 시스템과 통신하는 데 필요한 로직을 구현합니다.
따라서, 한 종류의 JDBC Driver를 사용하여 여러 종류의 데이터베이스에 연결할 수 있습니다. 예를
들어, MySQL, oracle, PostgreSQL 등 다양한 데이터베이스 시스템에 대한 JDBC Driver를
사용하여 해당 데이터베이스에 접속할 수 있습니다. 이는 애플리케이션의 이식성을 향상시키고,
데이터베이스 변경 시에도 코드 수정이 최소화되는 장점을 가지고 있습니다.
- JDBC를 이용하여 데이터 다루기
implementation .org/springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'mysql:mysql-connector-java
- resources/application.properties 파일에 데이터베이스 접속 정보 추가
spring.datasource.url=jdbc:mysql://IocaIhost:33o6/board
spring.datasource.driver-class-name.com/mysql℃j.Jdbc.Driver
spring.datasource.username=username
spring.datasource.password=password
- 테스트를 진행할 테이블
id | bigint | 기본키 |
title | varchar(255) | 제목 |
content | varchar(255) | 본문 |
- Entity 생성
@Table(name = "post") public class Post ( @ld @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id, private String title; private String content; } |
- @Table 은 매핑할 테이블을 지정
- @Id는 기본키(PK) 지정을 의미하고 @GeneratedValue 는 기본키 값에 대한 생성 전략을 지정
- JDBC API로 게시글 저장 구현
public Post save(Post post) { // SQL 쿼리를 생성하여 포스트의 제목과 내용을 'post' 테이블에 삽입합니다. String sql = "insert into post(title, content) values(?, ?)"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // DataSourceUtils를 사용하여 데이터베이스에 연결합니다. conn = DataSourceUtils.getConnection(dataSource); // SQL 쿼리문을 준비합니다. // Statement.RETURN_GENERATED_KEYS를 사용하여 생성된 키를 반환하도록 설정합니다. pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); // 포스트의 제목과 내용을 매개 변수로 설정합니다. pstmt.setString(1, post.getTitle()); pstmt.setString(2, post.getContent()); // 문을 실행하여 포스트를 데이터베이스에 삽입합니다. pstmt.executeUpdate(); // 데이터베이스에서 생성된 키(포스트의 ID)를 검색합니다. rs = pstmt.getGeneratedKeys(); if (rs.next()) { // 생성된 키를 사용하여 포스트의 ID를 설정합니다. post.setId(rs.getLong(1)); } else { // 생성된 키를 검색하는 동안 오류가 발생하면 SQLException이 throw됩니다. throw new SQLException("get data id is fail"); } // ID가 설정된 포스트 객체를 반환합니다. return post; } catch (Exception e) { // 프로세스 중에 예외가 발생하면 IllegalStateException이 throw됩니다. throw new IllegalStateException(e); } finally { // 데이터베이스 연결, 문 및 결과 집합이 닫힙니다. close(conn, pstmt, rs); } } |
- 01. Connection 획득
- 02 Statement 준비 / 실행
- 03 ResultSet 생성
- 04 예외 처리
- 05 자원반납
-
- JDBC를 이용하여 GET API에 적용하기
@TabIe(name = "user") public class User { @ld @GeneratedVaIue(strategy = GenerationType.IDENTITY) private Long id; private String name; } |
- @Table 의 name은 해당 엔티티를 매핑할 테이블의 이름을 지정합니다. 즉, ="user") 는 "user"라는 이름의 테이블과 User 엔티티를 매핑함을 나타냅니다.
- [실습] JDBC를 이용하여 GET API에 적용하기
- 실습 코드 페이지에서 /posts/{id} 로 접속하면 해당하는 id 의 게시글 페이지를 확인 가능하다.
- [실습 ] JDBC를 이용하여 POST API에 적용하기
- 실습 코드 페이지에서 화이트 라벨 페이지를 실행한뒤 포스트맨에서 POST /posts/new 를 호출하면 확인가능하다.
추천인 코드 : o6i4B3y95 : 앨리스트랙 참여 링크
#엘리스트랙 #엘리스트랙후기 #온라인코딩부트캠프 #온라인코딩학원 #백엔드학원 #개발자국비지원 #개발자부트캠프 #국비지원부트캠프 #DOCKER #백엔드 #자바스프링 #스프링강의 #백엔드인강 #RESTAPI #스프링개발자
'Elice --Cloud--Track > 10~12 주차' 카테고리의 다른 글
12주차 블로그 챌린지 (0) | 2024.02.11 |
---|---|
12주차 블로그 챌린지 (0) | 2024.02.11 |