[2023.12.27] 개발자 교육 67일 차 : 강의-Spring Boot 실습 [구디 아카데미]

DaramGee·2023년 12월 27일
0

복습

Demo 프로젝트 복습

  • 개발 flow chart

    	- jsp(noticeList) - action(select) - jsp(noticedetail)
  • POJO 1~3 & Demo


[!tip] 설계의 변화
리턴타입(ActionForward->String->Object->String), 클래스 구성
결합도의 변화 & 상속 여부(서블릿 상속 -> 스프링 빈), 관심사의 분리 등 흐름에 따른 변화 확인


XXX.xml

  • SQL문 작성

  • myBatis 동적 쿼리를 지원 -> 조건에 따라 다르게 sql문 동작이 가능
  • 전체 조회, 1건 조회를 할 때에는 xml, Dao, Logic은 같은 메소드로 처리 가능
  • 화면처리만 다르다면 controller에서만 메소드를 분리하여 작업하고 그 뒤 메소드는 동일한 것 사용이 가능
  • 왜? 트랜잭션을 처리하면 되니까! 단, select, update 다 필요한 상황이라면 별도의 메소드로 구성 필요!
  • 트랜잭션 처리 필요한 순간 : 한 개 메소드 안에서 XXXDao 여러 메소드 호출이 필요할 때!(업무적 복잡도 높을 때)
  • commit, rollback 대상 : insert, update, delete

어노테이션![[@어노테이션#파라미터 처리]]


강의 내용

공지사항 상세보기

http://localhost:8000/notice/noticeDetail?n_no=24

  • 순서

  • noticeDetail.jsp 구성
  • Controller에서 고민
    - noticeList() 전체 조회가 있는데 1건 조회를 하는건 메소드를 따로 구성해야할까?
    - 결과창(응답이 나가는 페이지 이름)이 다르게 나오기 떄문에 메소드를 분리하여 설계하는 것이 좋음.
    - 왜? 개발만 하는 것이 아니라 유지보수 비용까지 생각하자! (화면 처리 솔루션에 따른 클래스 설계 분리)
  • 메소드 설계 시
    - 기존 noticeList()와 거의 동일
    - 단, 게시판에 조회수가 포함되어있어서 1건 조회 발생 & 조회수 1 증가를 해야할 경우!
    - 한 번은 select로 가져오고, 한 번은 조회된 값이 1이 된다면, 조회수를 Updete를 하도록 설계해야 함.
    - Update notice set n_hit = n_hit +1 where n_no=3
  • DB 설계 시
    - 화면에 보이지 않는 컬럼이 제대로 추가되었는지 꼭 확인 필요
    - 화면에 보이지 않는 컬럼이지만 개발자에겐 필요한 컬럼,파라미터 값 변경
    - (`)
    - 변경시, VO, xml 수정 필요
    - 관계형태(1:1, 1:N, n:n)를 잘못 그린 게 아니면 리스크는 적은 편
    - 시퀀스?![[시퀀스]]
    ✅ 유일한 순차적인 숫자를 생성하는 데이터베이스 객체

  • 주로 식별자(Primary Key) 값 생성에 사용
  • 시퀀스는 특정 테이블의 하나 이상의 열에 대해 자동으로 값을 생성하며, 보통 테이블의 기본 키 값으로 사용
  • 자동으로 값이 생성되기 때문에, 다수의 사용자가 동시에 데이터를 추가하는 경우에도 중복되지 않는 고유한 값이 보장
  • 안전한 채번이 가능(Exception 있어도 처리->예매, 연번 등)

[!quote] 대규모 데이터베이스 시스템에서 성능을 향상시키고 식별자의 고유성을 유지하는 데 도움

공지사항 수정하기

  • 쿼리스트링 방식

    ✅ url 뒤 ? 붙여서 넘기는 방식

  • 단점 : 제한적인 방법
  • get 방식에서 256 byte까지만 가능
  • 따라서 내용이 긴 경우에는 body로 보내는 것이 맞음
  • jsp에서 Form 전송으로 넘어오는 경우
  • UI/UX 솔루션 사용 시 js의 객체로 넘어오는 경우 있음.(fetch, axios)

프로젝트 구상

  • 화면 UI 솔루션

  • html(jsp)

  • jstl과 el 섞어쓰기

  • ReactJS(데이터셋-JSON포맷)

  • 부분적 React & 다른 솔루션

  • [[디자인패턴]]

  • MVVM 선호 : 장치에 따라 뷰를 선택, 다양한 환경에서 쉽게 조립하여 사용 가능, 뷰를 위한 뷰 어댑터를 설계


쿠키(317p)

  • 쿠키를 이용한다?

  • 페이지끼리(싱글페이지) 정보를 공유할 때(forward방식) 이용하는 방법 중 하나

  • 예 : 로그인 후 화면을 전환할 때, 로그인된 정보가 PC(로컬)에 저장되어 공유될 수 있도록 한다.

  • 쿠키 사용하기

  1. SetCookie.java
  • 쿠키 생성 : 쿠키(쿠키이름, 쿠키값(문자열 형태)
  • 유효시간 : 상대시간(setMaxAge()) / 절대시간
  • 쿠키 브라우저로 전송 : response.addCookie(c) 쿠키는 클라이언트 pc에 저장되는 값이기 때문에 사용하기 위해서는 반드시 브라우저로 전송하는 작업이 필요함!
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<%  
    Cookie c_name = new Cookie("ename", "smith");  
    c_name.setMaxAge(1200);  
    Cookie c_name2 = new Cookie("ename2", "scott");  
    c_name.setMaxAge(1200);  
    response.addCookie(c_name);  
    response.addCookie(c_name2);  
%>
  1. GetCookie.java
  • 서버에서 브라우저에 쿠키 요청 : Cookie[] cookies = req.getCookie() & 배열의 형태로 쿠키 저장
  • 이메일 정보 기록하기
  1. 쿠키 삭제하기
  • 유효기간을 0으로 주면 쿠키는 삭제가 됨.
  • 단, 쿠키는 클라이언트에 기록되기 떄문에 삭제할 때 생성한 쿠키를 클라이언트로 addCookie하지 않으면 적용 x
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>  
<%  
    Cookie c_name = new Cookie("ename", "");  
    c_name.setMaxAge(0);  
    Cookie c_name2 = new Cookie("ename2", "");  
    c_name.setMaxAge(0);  
    response.addCookie(c_name);  
    response.addCookie(c_name2);  
%>
  1. 쿠키 테스트
  • 브라우저 테스트

  • 포스트맨 테스트

[!tip] 쿠키는?
여러개를 생성할 수 있으며, 그 값은 문자열만 올 수 있고, 유효시간을 설정하여 로컬에 저장이 된다.
로컬에 저장된 것을 반드시 클라이언트에 전송해야 함. addCookie()
다른 경로에 있는 쿠키를 가져오기 위해서는 setPath()로 경로를 설정하는 것이 필요하다.


사이드 미션 - 쿠키활용(비밀번호, 아이디 기억하기)

  • 체크박스(기억하기)

  • 기억하기 체크 시 비밀번호 혹은 아이디를 기억하도록 설정 가능

  • 기본이 체크박스의 경우, On이 기본임.

  • 요소 확인하기

  • 요소 왼쪽의 화살표 모양 클릭하여 확인 가능

0개의 댓글