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

Nicole Gold·2023년 9월 7일
0

K-digital training

목록 보기
32/60

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

시간이 왜 이리 빠르지🤷‍♀️



보조 스트림

  • 보조 스트림은 다른 스트림과 연결되어 추가 기능을 제공해주는 스트림이다.
  • 사용하고 싶은 추가 기능과 관련된 보조 스트림을 추가한다.
  • 보조 스트림은 계속해서 붙일 수가 있다.
  • 아래에서 주 스트림과 보조 스트림을 구분해 보자.
  • 주 스트림은 보조 스트림을 사용하기 위해 탑승해야 한다.
  • 보조 스트림 추가 구문

보조 스트림 종류 - Buffered

  • 보조 스트림에서는 성능 향상을 위한 Buffer 를 제공한다.
  • Buffering 은 매우 유용한 기능임에도 부정적인 인식이 많다.
  • buffer 는 전송 받은 내용들을 모아서 한꺼번에 전송할 수 있도록 해주는 임시 저장소다.
  • buffered 보조 스트림 생성 시 8192 byte(i/o) 또는 8192(r/w)자의 저장소가 생긴다.

Buffered code

  • BufferedInputStram 클래스에 메인 스트림인 is 를 담아 bis 로 객체화
  • BufferedOutStrem 클래에서 메인 스트림인 fos 를 담아 bos 로 객체화



보조 스트림 종류 - Data

  • 스트림은 java 의 데이터타입 int , boolean , long, 데이터를 전송할 수가 없다.
  • 하지만 DataInputStream , DataOutputStream 을 이용하면 가능하다.
  • 회원 가입 시 회원 정보 파일로 저장 순서

Data 회원가입 code

  • index
  1. login 폼 생성
  2. id가 regist인 것을 가져와 click 이벤트를 걸면 콜백 함수 실행 / joinForm.jsp 로 보냄
  3. msg 변수 선언 msg 를 EL 태그로 가져옴 / 만약 msg 가 공백이 아니면 alert 메시지를 띄움
  • join

회원가입 폼 생성

  • controller
  1. webservler 어노테이션으로 /join 경로, /login 경로로 들어오는 것들을 처리함

  2. doPost 오버라이드 / 캐릭터인코딩을 UTF-8 로 세팅해줌

  3. MemberModel 클래스 객체화 해옴

  4. URI, contextPath 객체화해서 uri 에서 ctx 만큼 뺀 나머지 글자 sub 에 저장

  5. msg 미리 선언

  6. 만약 sub 에 저장된 값이 /login 이라면 / id 의 파라메터를 변수 id 에 담고 / pw 의 파라메터를 변수 pw 에 담음 / id, pw 에 model 의 login 메서드 실행한 반환값을 msg 에 담음

  7. 만약 sub 에 저장된 값이 /join 이라면 / String 키와 String 값의 형태인 HashMap 클래스를 param 으로 객체화
    param 에 id 라는 이름으로 id 의 파라메터 넣음
    param 에 pw 라는 이름으로 pw 의 파라메터 넣음
    param 에 name 라는 이름으로 name 의 파라메터 넣음
    param 에 email 라는 이름으로 email 의 파라메터 넣음
    param 에 gender 라는 이름으로 gender 의 파라메터 넣음
    변수에 param 에 model 의 join 메서드를 실행한 값을 msg 변수에 담음

  8. "msg"라는 이름으로 msg 값을 세팅함

  9. index.jsp 로 값을 보냄

  • memberModel
  1. join 메서드는 param 매개변수로 실행
    msg 의 기본 값은 "해당 아이디가 이미 존재합니다."
  2. File 클래스에 c:/img/temp/(id).dat 파일이 존재하는지 확인해서 file 객체에 담음
  3. 만약 file 이 없으면 file 을 넣어 아웃풋스트림할 수 있도록 fos 로 준비 > fos 를 다시 Data아웃풋스트림할 수 있도록 dos 로 준비
  4. dos 에 id, pw, name, email, gender 를 입력한다.
  5. msg 에 "회원가입이 완료되었습니다." 를 넣는다.
  6. dos 를 flush 해준다 / dos 를 닫아준다.
  7. 반환값은 msg;

  1. login 메서드는 id, pw 매개변수로 실행
  2. msg 기본 문구는 "아이디 또는 비밀번호를 확인해 주세요!";
  3. file 클래스에 c:/img/temp/(id).dat 이 있는지 확인해서 file 객체에 담으
  4. 만약 file 이 있다면 아래 실행
    파일인풋스트림 클래스에 file 을 넣어 인풋스트림할 수 있도록 fis 로 준비 > fis 를 다시 data인풋스트림할 수 있게 dis 로 준비
  5. dis 에 UTF 를 읽어와서 read_id 에 담음 / dis 에 UTF 를 읽어와서 read_id 에 담음 / gender 까지 반복
  6. 만약 pw 가 read_pw 와 같다면 msg 에 "로그인에 성공했습니다!" 넣음
  7. 사용한 dis 스트림 닫음
  8. msg 반환



보조 스트림 종류 - Object

  • Data 로는 모든 type 을 보내긴 무리가 있다.
  • 그래서 java 에서 최상위 객체인 Object 를 다룰 수 있는 보조 스트림이 있다.
  • 객체 , 배열 , 컬렉션 등 다양한 데이터 형태가 들어갈 수 있다.
  • Class 객체의 경우는 직렬화 (serialize) 를 하지 않으면 전달되지 않는다.
  • Object 보조 스트림을 이용하면 Java 의 자료구조를 영구적으로 저장시킬 수 있다.
  • 그럼으로써 서버가 종료되어도 Java 객체의 내용을 보존할 수 있게 된다.
  • ArrayList 로 만들었던 게시판을 Object Stream 을 이용해 저장할 수 있도록 변경

게시판 code

BoardBean

  • Object 를 쪼개 보내고자 직렬화/역직렬화를 수행하는 규격(interface) 로 Serializable 받아옴

list


1. 글을 작성할 수 있는 폼 작성

2. list 의 사이즈가 0이면 "아직 작성된 글이 없습니다." 출력
3. list 의 사이즈가 0보다 크면 forEach 문을 이용해 list를 items 에 넣고 board 라고 호출명을 부여함. 값은 stat라고 부름
4. 첫 번째 열에는 stat 의 index 를 출력
5. 두 번째 열에는 stat 의 index 로 가는 링크를 board(가져온 리스트를 호출하는 이름) 의 subject 로 출력
6. 세 번째 열에는 board 의 user_name(작성자) 를 출력
7. 네 번째 열에는 stat.index 로 가는 링크를 삭제로 출력
8. 테이블 아래에 list 의 size를 출력
9. 그 아래 list 값 출력

writeForm


1. 글을 작성하는 폼 출력
2. action 속성은 write, 메서드는 post, 작성자, 제목, 내용의 각 name 속성은 user_name,subject,content

BoardController


1. webservlet 어노테이션을 사용해 / , write, detail, remove 라는 url 패턴으로 오는 것들을 처리함
2. doGet 과 doPost 메서드를 오버라이드 해옴 / dual 이라는 메서드를 실행
3. dual 메서드를 실행
4. 캐릭터를 UTF-8 로 인코딩해줌 / uri 를 요청해 와서 uri 변수에 담음 / contextpath 를 요청해서 ctx 에 담음 / sub 변수에 uri 에서 ctx 의 길이를 자른 값을 담음
5. 작업을 처리할 BoardModel 을 객체화해옴 / RequestDispatcher 타입의 dis 변수를 먼저 선언해 놓음(데이터를 페이지로 전송하기 위한)
6. 만약 sub 의 값이 "/" 라면 > model 객체의 getList 메서드를 실행해서 ArrayList<BoardBean> 타입의 list 변수에 담음
7. list.jsp 로 보내도록 dis 에 담고 forword 로 값 전송
8. 만약 sub 가 /write 라면
"user_name" 의 파라메터 값을 변수 user_name에 담음 "subject","content"도 담아줌
subject,content,user_name를 넣어 model 객체의 write 메서드를 실행
ctx 를 sendRedirect 를 이용해서 보냄(list 로 돌아간다)

BoardModel

업로드중..

  1. ArrayList 클래스를 가져와서 list 변수 선언
  2. ArrayList 타입의 getlist 함수는 list 를 반환한다.
  3. write 함수는 subject/content/user_name 을 매개변수로 하여 실행
    BoardBean 클래스를 bean으로 객체화해옴
    bean에 setSubject 라는 메서드를 subject 를 넣어서 실행 / content 와 user_name 도 동일 실행
    그 후 list 에 bean 들을 추가함

내일 이어서...


  1. java i/O 기능의 종류 2가지를 설명하고 각 기능의 역할은?
  • 자바 i/o에는 Input Stream, Output Stream 이 있고
    Input Stream 파일을 읽어올 때 통로 역할을 하고 Output Stream 은 파일을 내보낼 때 통로 역할을 한다.
  1. 파일 ,디렉토리 등을 다룰떄 사용하는 객체와 디렉토리 존재여부를 확인하는 메서드는? - File 객체 / exists??
  1. 읽어올때 필요한 Stream 과 내보낼때 필요한 Stream은?
  • 인풋 스트림 / 아웃풋 스트림
  1. 모든 Stream 은 사용후 반드시 이것을 해줘야한다. 이것은?
  • close
  1. form 태그의 enctype 속성에서 multipart/form-data가 의미하는 것은?
  • form 이 보낼 데이터 타입이 여러 타입이다.
  1. @MultipartConfig의 maxRequestSize가 설정할 수 있는 값은?
  • 파일을 포함한 요청의 최대 허용 크기
  1. InputStream과는 다르게 OutPutStream을 사용할 때 필수로 해줘야 하는것은?
  • flush
  1. read()를 사용해 데이터를 읽는 루프를 생성할 떄 조건에 != -1이 들어간다. 이 조건이 들어가는 이유는?
  • read 가 숫자를 반환하기 때문에 더 읽을 내용이 없으면 -1을 반환하고,
    이를 근거로 data 가 모두 읽혔음을 알 수 있다.
  1. Object 타입을 한번에 보내기엔 무리가있는데 데이터를 나눠서 보낼때 사용하는 보조 스트림은?
  • Object Stream
  1. 직렬화와 역직렬화의 역할에 대해 설명하고, 그 사이에 필요한 기능은?
  • 오브젝트를 serialize 해서 스트림을 통해 보내는 것을 직렬화라고 하고
    쪼개져서 전달된 오브젝트를 다시 구성하는 것을 역직렬화라고 한다.
  1. public static ArratsList<>에서 static을 붙여주는 이유는?
  • 배열이기 때문에 값이 덮어쓰이는 것을 방지하기 위해 변수에 귀속시키지 않고 클래스에 귀속시킨다(모든 곳에서 하나의 값으로 사용하기 위해)
  1. 데이터를 변환해주어서 파일을 읽고 쓸수있는 보조스트림 2가지는?
    buffered 보조스트림: 전송받은 내용들을 모아서 한꺼번에 전송할 수 있도록 해주는 임시저장소
    data 보조스트림: 데이터타입 데이터를 전송하게 하기 위해 변환해 주는 보조 스트림

  2. OutputStream은 byte 기반 최 상위 class이다. OutputStream의 하위 클래스 3가지는?
    File InputStream / Buffered InputStream / Data InputStream

  1. buffer를 사용하면 입출력작용에 좋은점은?
  • 한꺼번에 전송하니 속도가 빨라진다.


일단 내일 다 완성하고 모르는 부분을 짚어보자

profile
JAVA 개발자로 가는 길

0개의 댓글

관련 채용 정보