728x90

Programming 281

Spring - 데이터 접근 기술 - MYBatis

- JdbcTemplate과 비교해서 MyBatis의 장은 SQL을 XML에 편리하게 작성할 수 있고 또 동적 쿼리를 편리하게 작성할 수 있다. - JdbcTemplate - SQL 여러줄 String sql = "update item " + "set item_name=:itemName, price=:price, quantity=:quantity " + "where id=:id"; - MyBatis - SQL 여러줄 update item set item_name=#{itemName}, price=#{price}, quantity=#{quantity} where id = #{id} - MyBatis 설정 - build.gradle에 의존 관계를 추가한다. implementation 'org.mybatis...

Programming/Spring 2023.07.04

Spring - 데이터 접근 기술 - 테스트

- 테스트 - 데이터베이스 연동 - main - application.properties src/main/resources/application.properties spring.profiles.active=local spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.username=sa logging.level.org.springframework.jdbc=debug - test - application.properties test - application.properties spring.profiles.active=test - 테스트 케이스의 경우 src/test에 있는 application.properties 파일이 우선순위를..

Programming/Spring 2023.07.03

Spring - 예외 처리, 반복

- 체크 예외와 인터페이스 - 서비스가 처리할 수 없는 SQLException에 대한 의존을 제거하려면 SQLException 체크 예외를 런타임 예외로 전환해서 던지면 된다. 이렇게 하면 서비스 계층이 해당 예외를 무시할 수 있기 때문에, 특정 구현 기술에 의존하는 부분을 제거하고, 서비스 계층을 순수하게 유지할 수 있다. 1. 이렇게 인터페이스를 도입하면 MemberService는 MemberRepository 인터페이스만 의존하면 된다. 2. 이제 구현 기술을 변경하고 싶으면 DI를 사용해서 MemberService 코드의 변경 없이 구현 기술을 변경할 수 있다. - MemberRepository 인터페이스 public interface MemberRepository { Member save(Mem..

Programming/Spring 2023.07.03

Spring - 자바 예외 이해

- 예외 계층 1. Object : 예외도 객체이다. 모든 객체의 최상위 부모는 Object 이므로 예외의 최상위 부모도 Object 이다. 2. Throwable : 최상위 예외이다. 하위에 Exception 과 Error가 있다. 3. Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다. 3.1. 상위 예외를 catch 로 잡으면 그 하위 예외까지 함께 잡는다. 따라서 애플리케이션 로직에서는 Throwable 예외도 잡으면 안되는데, 앞서 이야기한 Error 예외도 함께 잡을 수 있기 때문이다. 애 플리케이션 로직은 이런 이유로 Exception 부터 필요한 예외로 생각하고 잡으면 된다. 3...

Programming/Spring 2023.07.02

Spring - 스프링과 문제 해결 - 트랜잭션 (2)

- 트랜잭션 문제 해결 - 트랜잭션 템플릿 - 트랜잭션 사용 코드 //트랜잭션 시작 TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { //비즈니스 로직 bizLogic(fromId, toId, money); transactionManager.commit(status); //성공시 커밋 } catch (Exception e) { transactionManager.rollback(status); //실패시 롤백 throw new IllegalStateException(e); } 1. 트랜잭션을 시작하고, 비즈니스 로직을 실행하고, 성공하면 커밋하고, 예외가 발생해서 실패하면..

Programming/Spring 2023.06.30

Spring - 스프링과 문제 해결 - 트랜잭션 (1)

- 애플리케이션 구조 - 프레젠테이션 계층 1. UI와 관련된 처리 담당 2. 웹 요청과 응답 3. 사용자 요청을 검증 주 사용 기술: 서블릿과 HTTP 같은 웹 기술, 스프링 MVC - 서비스 계층 1. 비즈니스 로직을 담당 2. 주 사용 기술: 가급적 특정 기술에 의존하지 않고, 순수 자바 코드로 작성 - 데이터 접근 계층 1. 실제 데이터베이스에 접근하는 코드 2. 주 사용 기술: JDBC, JPA, File, Redis, Mongo ... - MemberServiceV1 @RequiredArgsConstructor public class MemberServiceV1 { private final MemberRepositoryV1 memberRepositoryV1; // 현재 MemberReposit..

Programming/Spring 2023.06.30

Spring - 트랜잭션 이해

- 트랜잭션 - 개념 이해 - 트랜잭션 ACID 1. 트랜잭션은 ACID라 하는 원자성(Atomicity), 일관성 (Consistency), 격리성(Isolation), 지속성(Durability)을 보장해야 한다. 1. 원자성: 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공 하거나 모두 실패해야 한다. 2. 일관성: 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들어 데이터베이스에서 정 한 무결성 제약 조건을 항상 만족해야 한다. 3. 격리성: 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 예를 들어 동시에 같은 데 이터를 수정하지 못하도록 해야 한다. 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준 (Isolatio..

Programming/Spring 2023.06.29

Spring - 커넥션풀과 데이터소스 이해

- 일반적인 커넥션 - 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다. 1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. 2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. 3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. 4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다. 5. DB는 커넥션 생성이 완료되었다는 응답을 보낸다. 6. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. - 커넥션 풀 - 커넥션을 미리 생성해두고 사용하는 커넥션 풀이라는 방법이 다...

Programming/Spring 2023.06.29

Spring - JDBC 이해

- 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다. 1. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다. 2. SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. - 여기에는 2가지 큰 문제가 있다. 1. 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용 코 드도 함께 변경해야 한다. 2. 개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 그리고 그 결과를 응답 받는 방법을 새로 학습 해..

Programming/Spring 2023.06.29

Database - join

- INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다. - OUTER JOIN(외부 조인)은 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다. - CROSS JOIN(상호 조인)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다. - SELF JOIN(자체 조인)은 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다. - company1 테이블 - dept 테이블 - LEFT JOIN select * from company1 left join dept on company1.deptcode = dept.deptcode; - INNER JOIN select * from company1 Inne..

728x90