Giter Site home page Giter Site logo

javaspring's Introduction

Java/Spring

Part 1. 나만의 MVC 프래임워크 만들기

Ch01. 강의 소개

...

Ch02. 개발환경 구성하기

00. 웹 프로젝트 환경 구성

빌드 설정 셋팅
  1. 'IntelliJ IDEA > Preferences > Build, Execution, Deployment > Build Tools > Gradle > Build And Run Using: IntelliJ IDEA 적용'
  2. Project Structure('커맨드 + 세미콜론' 단축키) > Output Path 를 '프로젝트경로/webapps/WEB-INF/classes' 로 설정

01. 도커 및 도커 컴포즈 소개

...

02. 도커를 이용한 환경 구성하기

도커 설치

...

MySQL 도커 이미지 다운로드

docker pull mysql:{version}
MySQL 도커 컨테이너 생성 및 실행
docker run --name mysql-sample-container -e MYSQL_ROOT_PASSWORD=<password> -d -p 3306:3306 mysql: {version}
현재 실행중인 도커 컨테이너 목록 출력
docker ps -a
MySQL 도커 컨테이너 접속
docker exec -it {도커 커테이너 이름} bash
My SQL 접속
mysql -u root - p

Ch03. 객체지향 패러다임

01. 테스트코드 실습

02. 객체지향 개념 다지기

  • Package: password

03. 객체지향 프로그래밍 실슴 - 사칙연산 계산기

  • Package: calculate

04. 객체지향 프로그래밍 실슴 - 학점 계산기

  • Package: grade

05. 객체지향 프로그램 실슴 - 음식점에서 음식 주문하는 과정

  • Package: order

Ch04. 웹 애플리케이션의 이해

01. 개념다지기

...

02~04. 계산기 웹 프로그램 구현하기 -Step 1, 2, 3

05. CGI 프로그램과 서블릿

06. 계산기 서블릿 만들기

Ch05. JDBC 프로그래밍

01. JDBC 개념 소개

02. DB 커넥션 풀 개념 소개

03. JDBC 프로그래밍 실슴

04. 실습한 JDBC 코드 리팩토링 및 DB 커넥션 풀 적용

Ch06. MVC 프레임워크 만들기

01.리플랙션 API 개념 소개 및 실습

02. 프런트 컨트롤러 패턴 개념 소개

03. 프런트 컨트롤러 패턴 실습

04. MVC 프레임워크 만들기 개념 소개

05. MVC 프레임워크 만들기 실습

CH07. DI 프레임워크 만들기

CH08. Spring Boot 코드 분석

Part 2. 게시판 서비스

javaspring's People

Contributors

nastillmatic avatar

Watchers

James Cloos avatar  avatar

javaspring's Issues

데이터베이스 접근 로직 구현

#10에서 DB접근 방법을 세팅하고 테스트 만든 내용을 토대로, 남은 구현이 있는지 확인하고 마무리 한다.

  • 구현 마무리

게시판 정렬 구현

게시판 정렬 기능을 구현한다.
정렬 기능은 게시판 페이지에서 각 컬럼(제목, 해시태그, 작성자, 작성일)의 제목을 누르면
해당 값으로 오른차순, 내림차순 정렬이 되게끔 동작하게 만드는데 쓴다.

  • 정렬 기능 구현
  • 뷰에 적용
  • 테스트

도메인 수정 - 회원 계정과 게시글, 댓글 관계 연결

게시글과 댓글은 모두 회원이 작성하는데, 그 연관관계가 ERD 와 같이 자바 코드에 표현되지 않은 것 같다.
createdBy를 작성자로 생각하고 다룰 수도 있지만, 해당 필드는 작성자와 직접적인 연관이 맺어져있지 않기 때문에
보다 이상적인 방향으로 도메인 설계를 할 필요가 있다.
문제를 확인하고 수정하기.

게시판 서비스 뷰에 기능 구현하기

게시판 서비스 뷰가 실제로 동작하게 만들기 위해 해야 할 일을 정리하고, 실행한다.

  • 뷰 기능 정의

    • 게시판 페이지 기능 테스트 정의
    • 게시글 페이지 기능 테스트 정의
    • 로그인 페이지 기능 테스트 정의
  • 뷰 기능 구현

    • 게시판 페이지 기능 구현
    • 게시글 페이지 기능 구현
    • 로그인 페이지 기능 구현
  • 테스트

게시판 검색 구현

게시판에서 게시글을 검색하는 기능을 구현하고, 검색 기능을 보다 특별하게 이용자에게 제공할 수 있는 방법을 고민해 본다.

  • 구현
    • 검색대상 필드로 기본 검색 기능 구현
    • 기본 게시판 페이지의 검색바 기능 구현
    • 제목, 본문, 이름 검색 페이지
    • 해시태그 검색 페이지
  • 테스트

[고도화] 인증 기능 고도화 - 카카오톡으로 로그인

인증 기능에 카카오 계정으로 로그인하는 방법을 추가한다.

  • Kakao Developers에서 카카오 API 사용 준비하기
    • 애플리케이션 등록하기
    • Rest API 키 확인하기
    • 사이트 도메인 등록하기
    • Redirect URI 등록하기
    • 동의항목 설정하기
    • Client Secret 키 확인하기
  • 회원 도메이인이 인증없는 상태에서 회원 정보를 저장할 수 있게 수정하기
  • 카카오 인증 응답 정보 확인, 정의하기
  • OAuth 2.0 보안 설정(+람다식 접근)
  • OAuth2UserService 구현
    • 기본 OAuth 2.0 인증 처리 구현체 사용
    • 카카오 인증 정보를 회원으로 등록하기
  • 기본 인증 서비스 로직 구현
  • 뷰 구현
    • 카카오 로그인 버튼 이미지 준비
    • 카카오 로그인 버튼 구현
    • 로그인 후 노출하는 유저 정보 변경: ID -> 닉네임

Reference

[고도화] 해시태그 검색 기능 고도화

해시태그 기능을 고도화 한다.

  • 하나의 글이 여러 개의 해시태그를 저장할 수 있도록 만들기
  • 별도 입력 공간을 주지 않고, 본문에서 해시태그를 파싱해서 기록하기
  • DB에는 # 을 뺀 문자열을 저장할 수 있게 하기
  • 해시태그에 링크 삽입 하기

헤더에 해시태그 메뉴 추가하기

#39 에서 해시태그 기능을 구현했는데, 쉽게 접근할 수 있도록 배려를 하지 않았다.
이를 헤더에 추가하여 쉽게 해시태그 검색 페이지 존재를 알고, 들어갈 수 있게 한다.

도메인 설계하기

게시판 서비스를 만들기 위한 기본 도메인을 설계해보자.

  • 도메인 ERD 다이어그램 그려보기
  • 자바 클래스로 도메인 표현해보기

게시판 페이징 구현

게시판 서비스에 필요한 페이징 기능을 구현한다.

  • 게시판 페이지 (이전, 숫자, 이후)
  • 게시글 페이지 (이전, 이후)

게시글 댓글 구현

게시글에 댓글을 다는 기능을 구현한다.

  • 게시글 페이지에서 댓글을 등록하기
  • 게시글 페이지에서 댓글을 골라 삭제하기
  • 게시글 페이지에서 댓글을 골라 편집하기
  • 테스트

인증 기능 구현

인증 기능을 구현한다.

  • 인증 설정하기
    • 인증이 필요없는 영역
      • 루트 페이지보기
      • 게시판 포기
    • 인증이 필요한 영역
      • 게시글(+댓글) 보기
      • 자기 게시글 쓰기, 수정, 삭제
      • 자기 댓글쓰기, 수정, 삭제
  • 인증 기능에 필요한 부분 구현
  • 회원 가입 페이지
  • 테스트

[고도화] 민감 정보의 환경변수 치환 후 테스트 실패 현상 수정

환경변수를 이용해 application.yaml 안에 있던 민감 정보를 치환하여 보안성을 높였으나
일부 스프링 부트 테스트가 실패한다.

@SpringBootTest 는 초기 테스트 환경을 구성하면서 프로퍼티 파일의 설정을 참고하기 때문에
환경변수가 주입되지 않는 테스트 환경에서 의도하지 않는 동작을 보이며 실패할 수 있다.
이를 수정하여 테스트가 실패하지 않도록 하자.

계정 도메인 추가 작업

지난 #8 에서 강의 흐름 상 작업하지 않았던 회원 계정 도메인을 추가로 작업한다.
이는 인증 기능 구현을 위해 필요함

  • erd 업데이트
  • 도메인 추가
  • jpa 인터페이스 추가

깃헙 프로젝트와 이슈 정리하기

깃험 프로젝트를 세팅하고, 카드를 만들어 정리하자.

  • 프로젝트 베타 만들기
  • 카드 몰록 만들기 - 강의 커리큘럼 참고
  • 이슈로 적절히 바꾸기

게시판 서비스 뷰 만들기

게시판 서비스 뷰를 만들기 위해 해야 할 이를 정리하고, 실행한다.

  • 뷰 엔드포인트 테스트 정의
  • 뷰 구현
    • 게시판 페이지 만들기
    • 게시글 페이지 만들기
    • 로그인 페이지 만들기
    • 뷰에 디자인 붙이기
  • 테스트

게시판 서비스 뷰에 기능 구현하기

게시판 서비스 뷰가 실제로 동작하게 만들기 위해 해야 할 일을 정리하고, 실행한다.

  • 뷰 기능 정의

    • 게시판 페이지 기능 테스트 정의
    • 게시글 페이지 기능 테스트 정의
    • 로그인 페이지 기능 테스트 정의
  • 뷰 기능 구현

    • 게시판 페이지 기능 구현
    • 게시글 페이지 기능 구현
    • 로그인 페이지 기능 구현
  • 테스트

데이터베이스 접근 로직 테스트 정의

도메인 설계내용 (#8)을 바탕으로 DB와 연동하기 위한 방법을 구상하고, 세팅을 하고, 테스트를 먼저 작성해본다.

  • DB기술 선택하기
  • DB에 접근할 수 있는 상태로 환경 세팅하기
  • 테스트

[고도화] 추가 도메인 설계

새로운 기능을 구현하기 위해 필요한 데이터를 모델링하고, 기존 도메인(엔티티 클래스)에서 변경할 부분이 있는지 살핀다.

  • 기존 도메인 코드 분석
  • 대댓글 도메인 표현
  • 해시태그 도메인 표현

잘못된 도메인 정보 바로 잡기

#30 기능을 하다가 도메인 코드 설계가 일부 잘못 되어있는 것을 발견.
UserAccount 회원 계정읜 userid 는 회원 id 이므로 유니크해야 하는데,
해당 속성이 빠져있었다.
erd 문서에는 email 유니크 키가 표현되지 않음
바로 잡기로 한다.

  • user_id에 유니크 키 추가
  • email erd 업데이트

[리팩토링] AuditingFields 의 잘못 표현된 부분 개선

AuditingFields 클래스는 추상 클래스이고, 각 필드는 상속 받는 자식 엔티티에서 접근 및 수정이 가능해야 한다.
따라서 접근 제어자를 protected로 했어야 했는데, 이 접근 제어를 초기 설계에서 지나치게 폐쇄적으로 작성했다.

위 내용이 당장은 비즈니스 요구사항이 없어 문제가 되지 않았으나,
이제 #73 을 작업하면서, 회원 도메인에서 인증이 없는 상태의 회원 정보를 저장하기 위해서
작성자(createdBy), 수정자(modifiedBy)를 엔티티가 직접 작성해야 하는 요구사항이 생길 것이므로
이것이 가능하게끔 접근 제어자를 제대로 수정해주도록 한다.

게시글 뷰 기능 구현

수업시간에 보여주지 않았던 게시판 뷰, 게시글 뷰의 게시글 등록, 수정, 삭제 기능을 구현한다.
#21 의 연장선

  • 게시판 뷰 - 글쓰기
  • 기시글 뷰 - 수정, 삭제

[고도화] 댓글 기능 고도화 - 댓글 기능의 결정과 롤백

n차 대댓글 기능은 댓글 단계가 깊어질 수로 디자인이 복잡해져서
유저의 편의를 위해 설계했으나, 오히려 유저의 경험을 해칠 우려가 있다고 판단했다.
또한 런칭 후 관찰해보니, 실제로도 유저의 반응이 좋지 않아서 서비스에 내보내기 않기로 논의를 했다.

이에 기능을 롤백한다.

테스트 코드 실패 수정하기

테스트코드중 실패되는 AuthControllerTest 와 MainControllerTest 의 Import 어노테이션을 SecurityConfig -> TestSecurityConfig 클래스로 변경해준다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.