Spring MVC - Spring MVC의 구조 - 1. Dispatcher Servlet
2023. 6. 7. 22:31
Spring & JPA/SpringMVC
들어가며 이전까지 우리가 프론트 컨트롤러 및 여러 개선점을 적용한 프레임워크를 만들고 그 구조를 알아보았다. 이번 파트부터는 실제 스프링 MVC의 전체적인 구조를 알아본다. Spring MVC 구조 우선 우리가 만들었던 프레임워크 구조를 보면 다음과 같다. 다음은 실제 스프링 MVC에서 사용하고 있는 구조이다. 매우 유사하지 않은가? 이는 스프링 MVC 프레임워크의 구조가 갑자기 어디선가 등장한 것이 아닌, 이전에 있던 수 많은 문제점과 편의성을 제공하기 위해 개선이 적용된 결과임을 의미한다. 직접 만든 프레임워크와 스프링 MVC 구조를 한번 비교해보자. Front Controller -> Dispatcher Servlet HandlerMappingStore -> HandlerMapping MyHandl..
JDBC - JDBC 커넥션 풀 - DataSource 적용
2023. 6. 5. 17:53
Spring & JPA/JDBC
들어가며 저번 포스트에서 DataSource 인터페이스를 사용하여 커넥션을 얻는 것에 대해 알아보았다. 이번 포스트에서는 배운 방식을 레포지토리에 적용하여 어떻게 변경되는지 알아보자. RepositoryV1 구현 커넥션을 얻는 부분에서 많은 변경이 발생된다. public class MemberRepositoryV1{ private final DataSource dataSource; public MemberRepositoryV1(DataSource dataSource){ this.dataSource = dataSource; } public Member save(Member member) throws SQLException{ ... } public Member findById(String memberId) ..
JDBC - JDBC 커넥션 풀 - DataSource
2023. 6. 5. 17:12
Spring & JPA/JDBC
들어가며 저번 포스트에서 커넥션 풀에 대해 알아보았다. 이번 포스트에는 해당 커넥션 풀을 사용하는데 있어 사용하는 추상화된 인터페이스인 DataSource 인터페이스에 대해 알아본다. DataSource 지금까지 우리가 구현한 예제에서 커넥션을 얻을 때는 DriverManager.getConnection()을 사용하였다. 그런데 이제 DriverManager를 통해 계속 커넥션을 새로 생성하는게 아니라 커넥션 풀을 사용하여 커넥션을 얻으려고 한다. 문제는 각 커넥션 풀을 사용하는 방법들이 모두 다를 수 있단 것이다. 즉 구체적인 방법에 애플리케이션이 의존할 수 있다. 만약 커넥션 풀 1을 사용하는데 커넥션을 가져오는 코드가 getConnection()이라고 하자. 그런데 커넥션 풀 2로 바꾸어야 하는 상..
JDBC - JDBC 커넥션 풀 - 커넥션 풀의 개념
2023. 6. 5. 16:08
Spring & JPA/JDBC
들어가며 저번 포스트에서 JDBC를 사용한 데이터 저장, 조회, 수정, 삭제를 구현하였다. 이번 포스트에서는 트랜젝션이라는 개념을 배우기 이전에 커넥션 풀이라는 개념에 대해 먼저 알아보고 간다. 커넥션 획득 과정 어떤 요청이 들어왔을 때 DB 커넥션이 필요한 경우 다음과 같은 방식을 통해 커넥션을 연결한다. 먼저 DB 드라이버에 현재 사용 가능한 커넥션이 존재하는지 조회한다. 이 단계에서 만약 사용 가능한 커넥션이 존재한다면 해당 커넥션을 반환하고 과정이 종료된다. 이후 사용 가능한 커넥션이 없다면 DB 드라이버는 DB에 TCP/IP 연결을 수행한다. TCP/IP 연결이 성립되면 ID, PW를 전송한다. DB는 받은 ID와 PW를 사용하여 사용자 인증을 수행하고, 해당 연결에 대한 DB 세션을 생성한다...
JDBC - JDBC 사용 - 3. 데이터 수정과 삭제
2023. 6. 3. 23:12
Spring & JPA/JDBC
들어가며 저번 포스트에서 JDBC를 사용하여 데이터를 조회하는 과정을 구현하였다. 이번 포스트에서는 JDBC를 사용하여 데이터를 수정하는 과정을 구현할 것이다. 데이터의 수정 데이터를 수정하는 SQL은 다음과 같다. UPDATE MEMBER SET MONEY=? WHERE MEMBER_ID=? 당연하게도 해당 SQL을 DB에 전송하기 위해서는 커넥션과 전송시킬 객체가 필요하다. 이전과 비슷한 코드이기 때문에 별다른 설명 없이 구현한다. public void update(String memberId, int money) throws SQLExceptions{ String sql = "update member set money=? where member_id=?"; Connection conn = null;..
JDBC - JDBC 사용 - 2. 데이터 조회
2023. 6. 3. 21:34
Spring & JPA/JDBC
들어가며 저번 포스트에서는 데이터를 저장하는 기능을 JDBC를 사용하여 구현하였다. 이번 포스트에서는 저장된 데이터를 조회하는 기능을 JDBC를 사용하여 구현해본다. 데이터의 조회 구현 데이터를 조회하는 SQL 구문은 다음과 같다. SELECT * FROM MEMBER WHERE MEMBER_ID=? JDBC를 사용하여 데이터를 조회하기 위해서는 해당 SQL 구문을 DB에 전송할 커넥션이 필요하다. 또한 해당 SQL을 전송시킬 Statement도 필요하다. 그리고 조회한 데이터를 가져올 객체인 ResultSet이라는 객체 역시 필요하다. public Member findById(String memberId) throws SQLException{ String sql = "select * from membe..
JDBC - JDBC사용 - 1. 데이터 저장
2023. 6. 3. 19:58
Spring & JPA/JDBC
들어가며 이전 포스트에서 JDBC의 개념, 기술들의 설명에 대해 알아보았다. 이번 포스트에서는 코드를 통해 어떻게 사용하는지에 대해 알아본다. JDBC를 사용한 회원 정보 등록 회원 정보를 등록하는 예제를 만들어보자. 여기서는 H2 데이터베이스를 사용하고, 이미 연결이 완료되었다고 가정한다. 가장 먼저 회원에 대한 정보를 구현해야 한다. 구현할 회원은 매우 간단한 상태만을 가지고 있다. 먼저 회원의 id이다. 이것으로 회원을 유일하게 식별할 수 있다. 그 다음이 회원이 가지고 있는 돈 액수이다. 이를 클래스로 나타내면 다음과 같다. @Data @NoArgsConstructor @AllArgsConstructor public class Member{ private String memberId; privat..
JDBC - JDBC의 이해 - 데이터 접근 기술
2023. 6. 3. 18:21
Spring & JPA/JDBC
들어가며 저번 포스트에서 JDBC가 등장하게 된 계기와 효율성, 그리고 그 한계점에 대해 알아보았다. 이번 포스트에서는 JDBC를 활용하여 DB에 접근하는 기술들, 특히 SQL Mapper와 ORM에 대해 알아보도록 한다. JDBC 직접 사용과 SQL Mapper JDBC가 나온지 얼마 안된 초창기에는 대부분 JDBC에 다이랙트로 접근하여 SQL을 전송하는 방식을 사용하였다. 하지만 이는 너무 오래 전의 기술로 현재는 대부분 사용하지 않는 방식이다. 현재 사용하는 기술은 SQL Mapper가 있다. SQL Mapper 기존에 JDBC를 다이랙트로 사용하던 때에는 DB에서 데이터를 가져올 때 일일히 객체에 매핑했었어야 했다. @AllArgsConstructor public class Member{ priv..
JDBC - JDBC의 이해 - JDBC의 등장 배경
2023. 6. 3. 17:59
Spring & JPA/JDBC
들어가며 이번 포스트에서는 Java에서 DB를 연결할 때 사용했던 JDBC(Java Data Base Connectivity)기술에 대한 전반적 배경에 대해 알아본다. DB를 사용한 데이터의 저장 애플리케이션 개발에서 중요한 데이터들(게시판의 경우 게시글과 그 댓글, 회원 관리의 경우 회원의 정보)을 DB에 저장한다. 그리고 해당 데이터가 필요할 시 DB에서 해당 데이터를 탐색한 뒤 그 데이터를 가져온다. 클라이언트에서 요청이 들어오는 부분은 지금 우리의 관심사는 아니다. 우리의 관심사는 애플리케이션 서버에서 DB로 어떻게 요청과 그 응답이 들어오는가에 대한 것이다. 애플리케이션 서버는 어떻게 DB와 통신을 수행하는걸까? 서버는 먼저 DB로 커넥션을 연결한다. 해당 작업은 서버와 DB가 TCP/IP를 통..
Spring MVC - MVC 구조 - 9. 프레임워크 구조 정리
2023. 6. 2. 02:26
Spring & JPA/SpringMVC
들어가며 약 8개 포스트에 걸쳐서 기존의 각 서블릿이 공통 로직을 각각 구현했어야 했고, View 이름이 중복되었으며 모델이 서블릿의 request에 의존하던 코드들을 깔끔하게 구조화시켰다. 이번 포스트는 전체적인 구조를 정리하고 요청에 대해 어떻게 처리가 이루어지는지를 정리해본다. MVC 프레임워크 전체 구조 프론트 컨트롤러를 도입만 했던 버전 1부터 시작해 확장성을 적용시킨 버전 5까지 코드의 개선을 보아왔다. 확장성을 적용시킨 프레임워크의 전체적인 구조는 다음과 같다. 꽤 많이 복잡해졌다. 각 컴포넌트들에 대해 간략하게 정리하고 넘어가자. Handler Mapping Store는 모든 핸들러(컨트롤러)에 대한 매핑 정보를 가지고 있다. 핸들러가 처리 가능한 URL을 key로 가지고 핸들러 객체를 v..