[IT국비지원] 개발자 교육 37일 차 : SPRING(2023.09.15)fit.구디아카데미,김지훈 강사님

Nicole Gold·2023년 9월 15일
0

K-digital training

목록 보기
38/60


이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함

비 오는 날 조하❤️

Data Base

Query

  • Data Base 의 데이터를 처리하는 Query 문을 실행하기.

  • Query 문을 실행하기 위해 Connection 은 두 가지 방법을 제공해 준다.

  • Prepared Statement 는 문장을 컴파일한 후 재사용한다.

  • 때문에 문장이 여러 번 반복될 때 유리하며 성능과 속도 면에서 우수하다.

  • 한번 실행 후 다시 실행되지 않는다면(예 : 최초 table 생성) Statement 가 낫다.

Statement Prepared Statement

  • Statement 를 이용하여 Table 을 생성하기.
  • Prepared Statement 를 이용하여 데이터를 입력하기
  • executeQurey() 는 반환되는 데이터가 있을 경우 사용한다.(SELECT)
  • executeUpdate() 는 DB 에 변화를 줄 경우 사용한다.(UPDATE, DELETE, INSERT)
  • executeUpdate() 사용 시 반환되는 int 는 적용에 성공한 데이터 행(row) 개수이다.

Result Set

  • executeQurey() 는 값을 조회하는 쿼리를 실행해 주는 메서드이다.
  • 때문에 결과값을 ResultSet 객체로 반환한다.
  • 그리고 ResultSet 객체에 대한 MetaData 를 뽑아낼 수 있다.

한글 깨짐 방지 코드

<!-- 한글 깨짐 방지 : 특정한 내용이 오면 걸러서 특정한 처리를 해준다. -->
<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 사용할 인코딩 -->
<init-param>
	<param-name>encoding</param-name>
	<param-value>UTF-8</param-value>
</init-param>
<!-- 강제 인코딩 -->
<init-param>
	<param-name>forceEncoding</param-name>
	<param-value>true</param-value>
</init-param>
</filter>
<!-- 언제(어떠 요청 시) 어떤 필터를 사용할 것인지?  -->
<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

home


1. DB 에 생성할 테이블 샘플 작성
2. stmt 으로 연결되는 'statement 실행' 링크 생성
3. joinForm 으로 연결되는 '회원가입 페이지' 링크 생성
4. list 로 연결되는 '회원 리스트 보기' 링크 생성
5. msg 값이 공백이 아니면 경고창으로 msg 출력

joinForm

  1. action key 값이 join 이고 method 가 post 인 form 생성
  2. 아이디의 name 속성은 id / 비밀번호의 name 속성은 pw / 이름의 name 속성은 name / 나이의 name 속성은 age / 이메일의 name 속성은 email / 성별의 name 속성은 gender, value 는 남, 여 /

HomeController

  1. 이것은 콘트롤러다(어노테이션)

  2. logger 클래스 객체화
    // System.out.println 과 같은 역할
    // 어느 클래스에서 발생했는지 알려주고 설정에 따라 파일 저장도 가능하다.

  3. RequestMapping 어노테이션으로 모든 경로로 오는 것을 다 받아주되, get 타입만 받는 것으로 설정
    // 특정 uri 로 보낸 요청을 받아주는 받아주는 역할
    ( 이전 addr(uri-ctx) 역할 + method 지정 역할(get,post방식))

  4. model을 매개변수로 갖는 home 메서드 / 실행문은 콘솔에 "connection 접근 요청이라고" 찍음
    HomeService 클래스를 service 로 객체화 해옴
    service의 Connect 메서드를 실행하여 Boolean 타입 변수 success 에 담아줌
    model 객체를 이용해 result 에 success 값을 담아줌
    결과를 home.jsp 로 보냄

  5. stmt 경로로 오는 모든 요청을 받아줌
    logger 를 이용해 콘솔에 "stmt 요청" 이라고 출력
    일을 처리할 HomeService 클래스를 객체화 해줌
    service 객체의 stmt 메서드를 실행하여 msg 변수에 담아줌
    logger 를 이용해서 msg 를 찍어줌
    값을 home.jsp 로 보냄

  6. joinForm 경로로 오는 것들은 모두 처리해줌
    joinForm 메서드는 joinFrom.jsp 로 보내줌

  7. join 경로로 오는 post 타입 method 를 처리해줌
    join 메서드는 매개변수로 model과 String 타입의 param 을 받아 실행됨 (model : 데이터를 뷰에 보내기 위해 담는 역할)
    logger 로 콘솔에 param 을 찍어줌
    HomeService 클래스를 service 로 객체화해옴
    service 객체의 join 메서드에 param 을 넣어 실행해서 변수 msg 에 담음
    model 객체를 이용해 msg 값을 "msg" 키에 넣어줌
    home.jsp 로 보냄

  8. list 경로로 오는 모든 요청을 받아줌
    list 메서드는 매개변수 model을 받고 실행됨
    logger 를 이용해 "회원 리스트 요청 : "이라고 찍어줌
    HomeService 클래스를 service 로 객체화해옴
    service 객체의 list 메서드 실행
    home.jsp 로 보냄

HomeService

  1. logger 를 객체화해옴
  2. boolean 타입 Connect 메서드 실행
    logger 로 "DAO 에 DB 접속 요청" 를 찍어줌
    HomeDAO 클래스를 객체화해옴
    dao의 Connect 메서드를 반환함
  3. stmt 메서드를 실행하면
    변수 msg 에는 "테이블 생성에 실패했습니다."가 기본으로 담겨 있음
    HomeDAO 클래스를 dao로 객체화 해옴
    dao객체의 stmt 메서드를 실행해서 success 에 담음
    만약 success 가 true 면 msg 에 "테이블 생성에 성공했습니다." 를 담음
    msg 를 반환함
  4. join 메서드는 param 을 매개변수로 하여 실행됨
    msg 에는 "회원가입에 실패했습니다."가 담김
    HomeDAO 클래스를 dao 로 객체화해옴
    success 의 기본 값을 false 로 설정함
    dao 객체의 join 메서드에 param 을 넣은 값을 변수 success에 넣음
    success 가 true 면 msg 변수에는 "회원가입에 성공했습니다."가 담김
    반환값은 msg
  5. list 메서드 실행하면
    HomeDAO 클래스를 객체화해옴
    dao 객체의 list 메서드를 실행해줌

HomeDAO


1. Logger 를 사용할 수 있게 가져옴
2. 멤버변수로 Connection 타입의 conn 변수 선언
3. 생성자에 HomeDAO 메서드 실행
4. InitialContext 를 변수 ctx 로 객체화
5. ctx 의 lookup 메서드를 통해 "java:comp/env/jdbc/MariaDB" 라는 경로를 찾고, 6. DataSource 타입의 변수 ds 에 넣어 datasource 를 담는다.
6. ds 에 getConnection 메서드를 실행해서 변수 conn 에 담는다.
// getConnection : SQLServerDataSource 개체가 나타내는 데이터 원본과의 연결을 설정한다.(연결 설정)

1. Boolean 값을 뱉는 Connect 메서드 실행
2. logger 로 "dao 접근" 콘솔에 출력
3. 변수 success 에 기본적으로 false 를 담음
4. 만약 conn 이 null 이 아니면(sql 과 제대로 연결했다면) sql 변수에 쿼리문을 넣어 준비한다.
5. conn 객체의 createStatement 메서드를 실행해서 변수 stmt 에 담는다.
// 데이터베이스로 SQL 문을 보내기 위한 SQLServerStatement 개체를 만든다.(발송 준비)
// Statement는 실제 sql 을 실행하여 결과값을 준다.
6. stmt 에 executeUpdate를 sql 을 넣어서 실행하고 업데이트 결과값을 int 타입의 변수 row 를 담는다. row 는 변경된 값의 수를 담게 된다.
//executeUpdate : INSERT, UPDATE, MERGE 또는 DELETE 문과 같은 지정된 SQL 문이나 SQL DDL 문같이 아무것도 반환하지 않는 SQL 문을 실행한다.

  1. logger 을 이용해서 "영향받은 데이터 개수 : "+row 를 콘솔에 출력한다.
  2. 그리고 최종적으로 success 에는 true 가 담기게 된다.
  3. 실행되든 말든 conn 자원은 닫아줌
  4. 반환값은 success(근데 이제 true 가 담긴)
  5. join 메서드는 매개변수 param 을 담고 작동한다.
  6. 변수 success 는 기본적으로 false 를 담고 있음.
  7. 변수 sql 에는 쿼리문의 실행 결과를 담는다. 이때 값은 무엇이 들어올지 알 수 없으므로 물음표로 설정한다.
  8. sql 문을 db 에 전달하는 prepareStantement 변수 ps 를 미리 선언해 놓는다
  9. 선언해 둔 ps 에 sql 값을 담아서 준비한다.
  10. ps 에 문자열 타입을 세팅한다. 첫 번째 물음표의 값은 키가 "id"인 것의 파라메터 값을 넣는다. 두 번째는 pw 를 넣는다. 세 번째는 name 을 넣는다. 4 번째는 age 의 파라메터 값을 int 타입으로 세팅한다. 이하 5, 6 문자열 타입으로/
  11. ps 를 업데이트해서 변수 row 에 담는다. 이때 row 에는 excuteUpdate를 통해 변화된 데이터 행의 개수가 담기게 된다.
  12. 행이 1일 때는 success 가 true 담긴다.
  13. 마지막으로는 커넥션과 ps 를 자원 반납 해준다.
  14. 반환값은 success 다.

  1. 변수 spl 에 member 테이블 전부 담음
  2. sql 을 db 에 전달하기 위해 ps 변수에 담는다.
  3. ps 쿼리문을 실행하여 rs 에 담는다.
  4. while 문을 통해 rs 에 값이 있으면 해당 데이터를 출력한다.

빡세구만

profile
JAVA 개발자로 가는 길

0개의 댓글

관련 채용 정보