Skip to content

Latest commit

 

History

History
91 lines (70 loc) · 5.07 KB

README.md

File metadata and controls

91 lines (70 loc) · 5.07 KB

java-was-2022

Java Web Application Server 2022

프로젝트 정보

이 프로젝트는 우아한 테크코스 박재성님의 허가를 받아 https://github.com/woowacourse/jwp-was 를 참고하여 작성되었습니다.


프로젝트 진행 전 학습한 내용

입출력 스트림

입출력 스트림은 자바에서 입출력을 수행하기 위해, 두 대상을 연결하고 데이터를 전송하는데 사용되는 연결통로이다.

바이트 기반 스트림 - InputStream, OutputStream

  • 스트림은 Byte 단위로 데이터를 전송한다.
  • 모든 바이트 기반 스트림은 InputStream, OutputStream 을 상속한다.

보조 스트림

  • 보조 스트림은 입력 성능을 향상시키기거나 새로운 기능을 추가하기 위해 사용한다.
  • 보조 스트림은 실제 데이터를를 주고받는 스트림은 아니기 때문에 데이터를 입출력할 수 있는 기능은 없다. 그래서 스트림을 먼저 생성한 다음 보조스트림을 생성해야 한다.
  • BufferedInputStream, BufferedOutputStream : 버퍼를 이용하여 입출력 성능을 향상시킨다.
  • DataInputStream, DataOutputStream : int, float과 같은 기본형 단위로 데이터를 처리할 수 있다.

문자 기반 스트림 - Reader, Writer

  • 문자 데이터를 다루는 데 사용되는 스트림이다.
  • 모든 문자 기반 스트림은 Reader, Writer를 상속한다.

InputStreamReader, OutputStreamReader

  • 바이트 기반 스트림을 문자 기반 스트림으로 연결시켜주는 역할을 한다.

BufferedReader, BufferedWriter

  • 버퍼를 이용해서 입출력의 효율을 높인다.
  • BufferedReaaderreadLine()을 사용하면 데이터를 라인단위로 읽을 수 있다.

프로젝트 진행 상황

  • step1 구현 - index.html 응답
  • step2 구현 - GET으로 회원가입
  • step3 구현 - stylesheet 지원
  • step4 구현 - POST로 회원 가입
  • step5 구현 - 쿠키를 이용한 로그인
  • step6 구현 - 동적인 HTML
  • step7 구현 - 한 줄 게시판 구현

Step7 요구사항 구현 완료

한 줄 게시판 구현

1. 로그인한 사용자만 글을 쓸 수 있다.

  • index.html 화면에서 "질문하기" 버튼 삭제 후 주석 추가
  • LoginView에서 주석을 버튼으로 치환

2. 로그인 여부와 상관없이 모든 사용자는 게시글을 볼 수 있다.

  • Memo 클래스 생성
  • MemoDatabase 클래스 생성
    • 메모 생성과 조회에 필요한 메서드 구현
  • MemoService 클래스 생성
    • 메모 생성과 조회에 필요한 메서드 구현
  • MemoController 클래스 생성
    • 메모 생성과 조회에 필요한 메서드 구현
  • ControllerMapper 클래스의 controllerMapMemoController 객체를 추가
    • MemoService는 서버에서 하나의 객체만 필요하므로 싱글톤 패턴 적용
    • MemoControllerprefix"/memo"로 설정
  • memo/form.html에서 메모의 내용을 작성하는 폼 태그의 아이디를 contents에서 content로 변경
  • index.html을 동적으로 생성해야 하므로 DynamicResourceControllerprocess() 메서드 내부 로직 변경
    • 로그인한 상태가 아니고 요청 URL이 "/index.html"이 아니면, 정적 파일 요청이므로 StaticResourceController를 호출
    • 홈 화면(index.html)을 보여줄 때 HomeView.render()를 호출하여 홈 화면을 동적으로 생성
      • 홈 화면에 메모 목록을 출력
    • 사용자가 로그인한 상태라면 LoginView.render()를 호출하여 화면을 동적으로 생성

3. MySQL 데이터베이스와 연동

  • MySQL 연동을 위해 build.gradle 파일에 의존성 추가
  • 데이터베이스와 커넥션을 생성하는 DbConnectionManager 클래스 생성
  • UserDatabaseMemoDatabaseDbConnectionManager를 통해 얻은 Connection을 통해 데이터베이스에 접근, 객체를 DB에 저장하고 관리하는 기능 구현
  • 외부 데이터베이스 연결 정보는 DbConnection 클래스에서 따로 보관하도록 함
    • DbConnection 클래스는 git을 통해 관리하지 않음
  • sql/ddl.sql 파일: user, memo 테이블 생성 쿼리문 저장하여 관리

리팩토링

  • 기존의 Database 클래스를 UserDatabase로 이름 변경
  • 사용자 아이디로 사용자를 조회하는 기능을 UserService에 추가하고, UserService에 싱글톤 패턴 적용
    • UserService 객체는 UserController, DynamicResourceController 클래스 모두에 필요하고, 서버에서 UserService 객체는 하나만 필요하므로 UserService 클래스를 싱글톤 패턴 적용
  • resources/templates 디렉토리 내의 qna 디렉토리를 memo로 이름 변경
  • HomeLoginView 클래스를 LoginView 클래스로 이름 변경