[상태 유지와 공통 처리] 2. JDBC란?
·
Web/Web Basics
자바가 DB와 통신하는 표준 방식DB 연동을 한다는 말은 결국 이 뜻이다.자바 프로그램이 네트워크로 DB 서버에 연결한다SQL을 전송한다DB가 실행한 결과를 다시 받아서 처리한다이 흐름을 자바 표준 API로 정리한 게 JDBC이다.즉 JDBC는 “DB 연결과 SQL 실행을 위한 자바 표준 규격”이다. JDBC로 DB 작업을 할 때 항상 나오는 3가지 객체JDBC는 결국 아래 세 가지 객체를 중심으로 돌아간다.ConnectionPreparedStatementResultSet이 세 개만 이해하면 JDBC의 큰 흐름은 끝난다. // ================================// [JDBC 기본 흐름] (조회: SELECT)// 1) Connection 얻기// 2) PreparedStatem..
[데이터 처리와 DB연동] 1. DTO / VO(Entity) / DAO / Service는 왜 나누는가?
·
Web/Web Basics
웹 애플리케이션을 만들면 결국 데이터가 필요하다.게시글, 회원, 주문, 할 일 목록처럼 “저장하고 꺼내야 하는 정보”가 생긴다.이때 중요한 건 단순히 “DB에 넣고 꺼내는 코드”가 아니라,그 코드를 어떤 구조로 나눠서 유지보수 가능하게 만들 것인가이다.그래서 보통 아래 네 가지 역할을 분리해서 생각한다.DTOVO(Entity)DAOService 1) DTO: 계층 사이를 오가는 “전달용 데이터 묶음”DTO(Data Transfer Object)는 이름 그대로 “전달용 객체”이다.컨트롤러 ↔ 서비스서비스 ↔ DAO서버 ↔ 화면(JSP/API)처럼 계층 사이에서 값을 주고받을 때 쓰는 택배 상자이다.DTO의 특징은 보통 이렇다.여러 값을 한 번에 묶어서 전달한다필요하면 입력값 검증(스프링에서는 더 강하게)에..
[상태 유지와 공통 처리] 5. 리스너(Listener)란?
·
Web/Web Basics
특정 이벤트 시점에 자동 실행되는 훅(hook)필터는 요청이 들어올 때마다 실행되는 공통 처리 장치였다.즉 “요청 흐름 중간”에 끼어드는 방식이다.반면 어떤 작업은 “요청이 올 때마다”가 아니라특정 시점에 한 번만 실행되는 게 더 자연스럽다.예를 들어 이런 것들이다.애플리케이션이 시작될 때 초기화 작업을 하고 싶다애플리케이션이 종료될 때 자원 정리를 하고 싶다세션이 생성/종료될 때 로그를 남기고 싶다이런 “이벤트 기반 실행”을 위해 서블릿 API는 리스너(Listener)를 제공한다. 리스너는 “옵저버 패턴” 형태이다리스너는 감시 대상(이벤트)이 있고,이벤트가 발생하면 리스너가 자동으로 호출되는 구조이다.즉 개발자는“언제 실행될지”를 직접 호출로 제어하는 게 아니라“이 이벤트가 발생하면 이 코드를 실행해..
[상태 유지와 공통 처리] 4. 필터(Filter)란?
·
Web/Web Basics
“컨트롤러 앞에서 공통 로직을 한 번에 적용한다”“로그인 체크를 어디에 넣어야 하지?” 보호해야 하는 URL이 많아지면컨트롤러마다 똑같은 코드를 반복하게 된다.HttpSession session = req.getSession(false);if (session == null || session.getAttribute("loginUser") == null) { resp.sendRedirect("/login-form"); return;}이걸 모든 서블릿에 복붙하면코드가 중복되고빠뜨리기 쉽고유지보수도 힘들어진다그래서 “요청이 컨트롤러에 들어가기 전에” 공통 로직을 적용하는 장치가 필요하다.그게 필터(Filter)이다. 필터는 “서블릿 앞단에서 실행되는 가로채기(Interceptor)”이다필터는 서블..
[상태 유지와 공통 처리] 3. SESSIONID이란?
·
Web/Web Basics
"세션 저장소의 키”로 쓰이는 쿠키 값앞 글에서 세션은 이렇게 동작한다고 정리했다.실제 데이터는 서버(톰캣)의 세션 저장소에 보관한다브라우저는 쿠키로 “세션ID”만 들고 다닌다서버는 그 세션ID로 세션 저장소에서 사용자 세션을 찾는다여기서 그 “세션ID”가 바로 JSESSIONID의 값이다.즉 JSESSIONID는 로그인 정보가 아니다.서버가 로그인 정보를 찾기 위한 키(열쇠 번호) 이다. JSESSIONID의 정체: 쿠키 이름이다 (값이 세션ID)먼저 용어를 정확히 분리해야 한다.JSESSIONID : 쿠키의 이름(name) 이다JSESSIONID=abc123... : 여기서 abc123...이 세션ID(value) 이다즉 브라우저는 쿠키로 이런 형태를 들고 다닌다.Cookie: JSESSIONID=..
[상태 유지와 공통처리] 2-1. req.getSession()과 JSESSIONID, HttpSession
·
Web/Web Basics
“세션은 어디에 생기고, 쿠키는 언제 내려가고, HttpSession은 정확히 무엇인가”세션을 공부하다 아래와 같은 궁금증이 들었다.session.setAttribute("loginUser", id)를 하면 Set-Cookie: JSESSIONID=...가 내려가는 건가?req.getSession()은 “세션 저장소”를 만드는 건가, “JSESSIONID 값”을 만드는 건가?새 세션 공간이 HttpSession 자체인가, 아니면 저장소 안의 한 칸이 따로 있는 건가? 쿠키(JSESSIONID)와 세션(HttpSession)은 같은 게 아니다세션 기반 로그인에서 항상 같이 등장하는 두 개념은 역할이 다르다.JSESSIONID(쿠키의 값): 브라우저가 들고 다니는 “열쇠(식별자)”이다세션 저장소(서버): ..