본문 바로가기

[Spring] DB의 이해, 예외 추상화와 JDBC Template 앞서 봤던 Transaction의 문제점 중 1. 서비스 계층이 순수하지 않다 --> Transaction AOP or Transaction Manager로 트랜잭션 진행 2. 트랜잭션 동기화 문제 --> 트랜잭션 동기화 매니저로 커넥션 관리 3. 트랜잭션 적용 반복 --> Transaction AOP or Transaction Template 사용 으로 해결할 수 있었다. 다음으로 4. 예외 누수 의 경우 예외 추상화로 해결 가능하다. 이를 위해 먼저 체크 예외, 언체크 예외를 알아야 한다. 체크 예외 체크 예외는 쉽게 말하자면 컴파일 단계에서 확인할 수 있는 예외이다. 이에 따라 해당 예외는 catch로 잡거나, throw로 던지는 게 필수로 필요하다. 현재 문제가 되는 SQLException이 체크..
[Spring] DB의 이해, Transaction!! 트랜잭션 여러 개의 SQL 구문을 실행하는 경우, 중간 구문이 오류로 인해 반영이 안 되는 경우가 있다. 만약 계좌 송금을 진행할 때 A 계좌에서 금액이 빠지는 구문은 실행되었지만, B 계좌에 금액을 넣는 구문이 실패한다면 큰 문제이다! 트랜잭션은 이런 경우를 막기 위해 두 구문이 모두 성공하면 커밋으로 실제 DB에 반영하고, 실패하면 롤백을 통해 실행 전으로 되돌리는 기능이다. 데이터베이스 연결구조 WAS는 커넥션을 사용해 DB서버에 접근할 수 있다. 커넥션을 통해 WAS(클라이언트)와 DB가 연결되면 데이터베이스 서버는 내부에 세션이라는 것을 만든다. 또 해당 커넥션을 통해 오는 모든 요청은 세션을 통해 실행하게 된다. 이때 세션은 트랜잭션을 시작하고, 커밋 또는 롤백을 통해 트랜잭션을 종료한다. 보..
[Spring] DB의 이해, Connection Pool 과 DataSource Connection Pool : WAS에서 DB에 연결하기 위해서 DriverManager를 사용해 connection을 진행했는데, 이런 연결은 요청이 있을 때마다 connection을 생성해 비용, 시간이 많이 든다. 이를 해결하기 위해 Connection Pool을 사용한다. WAS에 커넥션 풀을 생성하고, DB와 이미 연결된 몇 개의 커넥션을 저장하고 있고, 필요할 때마다 꺼내 사용하고 사용이 끝나면 연결을 끊는 것이 아니라 다시 커넥션 풀로 반환하는 것이다. 전에 사용했던 DriverManager에서 Connection Pool로 변경하기 위해서 커넥션을 진행하는 모든 코드를 바꿔야 한다, 이를 방지하기 위해 커넥션을 획득하는 방법을 DataSource로 추상화해 사용한다! DataSource ..
[Spring] DB의 이해, JDBC란? JDBC : Java Database Cinnectivity의 약자로, 다양한 DBMS와 Connection, SQL 전달, 결과 응답을 위한 방법을 인터페이스로 통일해 Java로 코딩 시 DBMS의 구분 없이 DB에 접근하기 위한 기술 * WAS 와 DB 사이의 통신 1. Connection : JDBC의 Connection으로 구현되어 있음 2. SQL 전달 : JDBC의 Statement로 구현되어 있음 3. 결과 응답 : JDBC의 ResultSet으로 구현되어 있음 위 3개 인터페이스를 각 DBMS 마다 구현했고, 그것을 JDBC 드라이버라 부른다. H2 DB를 사용하면 H2 JDBC 드라이버. WAS는 JDBC 인터페이스를 참조하고 있으며, 이 것의 구현체인 드라이버를 사용해 DB에 접근한다...
[Spring] JSP 와 Servlet, JSP 를 활용한 MVC 구조 JSP는 HTML에서 동적인 부분을 JAVA 언어로 작성 가능하게 해 준다. 아래 코드는 username을 쿼리 파라미터로 넣어줄 때 이를 출력해 주는 JSP이다. 이때 URL 주소는 Servlet과 달리 따로 지정하진 않고, JSP파일이 있는 위치를 사용하게 된다. 따라서 JSP를 사용하기 위해선 파일을 특정 폴더에 넣어둬야 한다. webapp, WEB-INF 폴더에 넣어둬야 한다. webapp 폴더 안에 있으면 외부에서 호출이 가능하고, WEB-INF 폴더 안에 있으면 외부에서 호출이 불가능하다. 참고로 WEB-INF 폴더는 webapp 폴더 안에 있어야 한다. 나는 외부에서 호출해야 하기 때문에 webapp폴더 안에 jsp 폴더를 만들어 파일을 넣었다. 파일 이름은 new.jsp로 이 경우 url은..
[Spring] 웹애플리케이션 이해 - Servlet HTTP 메시지로 모든 것을 전송할 수 있다. ex) HTML, Text, Image, 음성, 영향, 파일, JSON, XML (API) 웹 시스템 구성 : WEB, WAS, DB WEB: 정적 리소스 처리 WAS: 애플리케이션 로직 같은 동적인 처리 서버에서는 클라이언트의 요청을 수행하기 위해 서블릿이라는 기술을 사용한다. 서블릿은 자바를 사용해 웹 서버를 만들 때 필요한 기술로, 클라이언트의 요청을 분석해 결과를 만들어 다시 전송하는 역할을 한다. 사용자의 입력을 받아 동적인 웹페이지를 만드는 것을 CGI 라 하는데, 서블릿은 JAVA 언어로 구현된 CGI다. 클라이언트에서 요청이 왔을 때 서버에선 아래와 같은 작업이 필요하다 - 서버 TCP/IP 연결 대기, 소켓 연결 -(1) - HTTP 요청 메..
네트워크 식별자 IP 주소 & Port 번호 IP 주소 : Host 에 대한 식별자 즉 Host의 고유한 번호! Host : 네트워크가 연결된 컴퓨터. - Host 중 네트워크를 이용하는 주체일 때 : End point (Server, Client, Peer) - Host 중 네트워크 자체를 구성하는 경우 : Switch (Router) IPv4 의 주소 길이 : 32 bit --> 2^32 = 약 43억 -> 컴퓨터들의 고유한 주소가 43억개 만 사용 가능? 이 세상에 컴퓨터가 43억개 밖에 없을까!? --> 훨씬 더 많다! 여러 기술 덕분에 인터넷은 잘 쓸 수 있음. IP 주소는 Network ID + Host ID IP 주소에서 Network ID 길이를 나타내는 것 : 서브넷 마스크! (넷 마스크) ex) IPv4 주소 : 192.168.8..
[HTTP] HTTP 헤더 HTTP Header : HTTP 전송에 필요한 모든 부가정보가 담겨있음 field-name: field-value 형태 ex) Host: www.google.com Content-Type: text/html;charset=UTF-8 헤더 분류 - General 헤더 : 메시지 전체에 적용되는 정보 - Request 헤더 : 요청 정보 - Response 헤더 : 응답 정보 - Entity 헤더 : 엔티티 바디(Message body) 정보 --> RFC723x 에서 Entity(엔티티)라는 단어를 Representation(표현)으로 변경! 즉 Entity 헤더 = Representation 헤더 Representation 헤더 : Representation data 를 해설할 수 있는 정보 제공 - ..