728x90
반응형

전체 글 185

[스프링 DB] 데이터를 저장할 때 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유?

[스프링 DB] 데이터를 저장할 때 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유? 개발을 하면 자연스럽게 데이터베이스와 연동하여 데이터를 저장, 수정, 삭제, 조회 합니다. 데이터를 저장할 때 파일에 저장해도 되는데, 데이터 베이스에 저장하는 이유가 무엇일까요? 🤔 가장 큰 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문입니다.!!!!! 트랜잭션? 트랜잭션(Transaction)을 번역하면 “거래” 라는 의미 입니다. 데이터베이스에서 트랜잭션은 하나의 “거래”를 안전하게 처리하도록 보장해주는 것을 의미합니다. 다시 말하면 작업의 완전성을 보장해주는 것 입니다. 참고 트랜잭션은 하나의 Connection을 가져와 사용하다가 닫는 사이에 발생합니다. 트랜잭션의 시작과 종료는 Conne..

[스프링 DB] 커넥션 풀과 DataSource의 개념

[스프링 DB] 커넥션 풀과 DataSource의 개념 커넥션 요청 문제 우리가 개발한 애플리케이션이 DB와 통신하기 위해서는 커넥션이 필요합니다. JDBC를 사용하면 아래와 같은 흐름으로 커넥션을 획득합니다. JDBC가 제공하는 DriverManager는 라이브러리에 등록된 DB 드라이버들을 관리하고, 커넥션을 획득합니다. 문제 그런데 이와 같은 과정은 문제가 있습니다. 바로 커넥션을 매번 새롭게 만들어야하기 때문입니다. 커넥션을 새로 생성하는 과정은 생각보다 많은 리소스를 사용합니다. 커넥션 풀 이러한 문제를 해결하기 위해 나온 방법이 바로 커넥션 풀이라는 방법 입니다. 커넥션 풀 방법은 커넥션을 미리 생성해두고 필요할 때 꺼내서 사용하고 사용을 마친후 다시 커넥션 풀에 반납하는 방법 입니다. 커넥션..

[스프링 DB] JDBC의 개념

[스프링 DB] JDBC의 개념 JDBC 등장 이전 문제 인식 애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관합니다. 왜 데이터베이스에 보관할까요? 🤔 그 이유는 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문입니다. App Server와 DB의 흐름 1. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결 2. SQL 전달: App Server는 DB가 이해할 수 있는 SQL을 커넥션을 통해 DB에 전달 3. 결과 응답: DB는 전달받은 SQL을 실행하고 그 결과에 응답 고객사의 요청으로 DB를 MySQL에서 Oracle로 변경하게 된다면 어떻게 될까요?🤔 MySQL과 Oracle는 커넥션을 연결하는 방법, SQL을 전달하는 방법, 결과를 응답 받는 방법이 모두 다릅니다. 다..

[스프링 Core] 도대체 DI(Dependency Injection) 란 무엇인가?

[스프링 Core] 도대체 DI(Dependency Injection) 란 무엇인가? 스프링의 핵심 3대 요소 AOP, IOC, DI를 들어보신 적이 있을 것 입니다. 오늘은 DI가 도대체 무엇인지 확실하게 설명해드리겠습니다…!! 그리고 스프링 컨테이너가 IoC인 이유를 알아봅시다. 문제 인식 🤔 public class Driver { private Avante avante; public Driver() { this.avante = new Avante(); } public void drive() { avante.start(); } } 위 클래스는 2가지 문제점이 있습니다. 두 클래스가 강하게 결합 객체들간의 관계가 아니라 클래스간의 관계가 맺어짐 두 클래스가 강하게 결합 Driver 클래스는 Avante..

[JUnit] 회원가입 API 컨트롤러, 서비스, 리포지토리 테스트 예제

[JUnit] 회원가입 API 컨트롤러, 서비스, 리포지토리 테스트 예제 인프런에서 박우빈님의 [Practical Testing: 실용적인 테스트 가이드] 강좌를 들으면서 강의 내용을 복습할 겸 테스팅하는 방법에 대하여 공유하고자 합니다. 좋은 강의 만들어주신 우빈님 감사합니다.^^ 들어가기에 앞서 여러분은 테스트 하면 어떤 생각이 떠오르나요? 라는 질문을 받았습니다. 저의 머리속에는 “귀찮다.” 라는 생각이 떠올랐습니다. 그런데 강의에서도 귀찮다. 라고 소개했습니다. 😲 (독심술이 있으신건가…?) 그렇습니다. 테스트는 매우 귀찮은 작업입니다. 기능 구현하는데 시간이 모자른데 테스트 코드까지 작성해야 한다? 에바지~ 라는 생각이 먼저 듭니다. 그리고 무엇보다 테스트는 귀찮습니다. (일반적으로 개발자는 귀..

테스트/0+ JUnit 2023.06.09

[스프링 Core] 스프링 빈 초기화(@PostConstruct, @PreDestroy)

[스프링 Core] 스프링 빈 초기화(@PostConstruct, @PreDestroy) 우리는 스프링 빈을 등록하고 초기화 해야하는 작업을 해야할 때가 있습니다. 객체를 생성할 때 초기화하면 되지 않나? 🤔 라고 생각할 수 있습니다. 하지만, 객체를 생성하는 생성자와 초기화 작업은 분리하는 것이 좋습니다. 그렇다면 어떻게 스프링 빈을 초기화할 수 있을까요? 참고 생성자 안에서 상대적으로 무거운 초기화 작업을 함께 하는 것보다는 객체를 생성하는 부분과 초기화 하는 부분을 명확하게 나누어 관리하는 것이 유지보수에도 좋습니다. 스프링 빈 생명주기 🌱 먼저 스프링 빈의 생명주기에 대해서 알아야 합니다. 스프링 빈은 아래와 같은 생명주기를 갖고 있습니다. 객체 생성 -> 의존관계 주입 -> (데이터 사용 가능)..

728x90
반응형