기술 스택
- Spring Framework 5.2.25
- JDK 11
- Tomcat 9.0
- MySQL 8.x
- MyBatis
- Lombok
- JUnit
- hicakryCP
- jQeury(ajax)
- RESTAPI
요구사항 수집(정의) -> 구체화 -> 문서화(회의록, 기능 정의서) -> 화면 설계(스토리보드) -> 설계(ERD, 프로그램명세서) -> 개발 -> 테스트 (문서), 통합 테스트 -> 배포
웹 보안 취약점 관련 내용
- 악성코드 삽입
- SQL Injection
- PreparedStatement 사용 시 일부분 방지 가능
- Mybatis에서는 #변수명 형태로 사용
- XSS (크로스 사이트 스크립팅)

- 글쓰기 시 스크립트 코드 작성 금지 (특수코드로 치환)
- 웹서버(apache) HTTP TRACE METHOD 비활성화
A. 홈페이지 사용자로부터 입력받은 모든 값을 서버에서 검증하여 스크립트 구문이 입력될 경우 필터링하여 실행되지 않도록 조치.
B. XSS 필터(Cross Site Scripting Filter)를 적용하여 크로스 사이트 스크립트 구문이 필터링 되어 실행되지 않도록 조치.
- 파일 업로드
- 업로드 가능 파일 제한 (서버 단에서 확인)
- 업로드 디렉토리 실행 권한 제거
- 웹 서버는 root 권한이 아닌 일반 사용자 권한으로 구동
- File Inclusion
- php 구버전 취약 함수 대상
- include 또는 downlad 경로가 파라미터로 처리되는 경우
- Directroy Listing
- apache httpd.conf 파일 내 Option indexes 구문 삭제
- apache httpd.conf ErrorDocument 부분 경로 설정
- HTTP insecure method
- apahce httpd.conf에서 get, post를 제외한 모든 메서드 차단
- Application Error
- HTTP Host Header 값 설정 오류
- apache ServerName 설정 올바른 도메인으로 설정됭어있으면 문제 x
- 파일 관리 오류
- 기타
- 관리자페이지 접속 아이피 설정
- 관리자 로그인 이력 저장
- 비밀번호 암호화 (복호화 불가)
회원 설계
DB 설계
- 회원, 회원 번호(PK), 이메일, 비밀번호, 이름, 성별, 생년월일, 휴대폰번호, 주소(우편번호, 주소1, 주소2(상세주소)), 가입일자, 상태

기능 구현 목록
- 가입 기능
- 이메일 중복체크
- 로그인
- 로그아웃
- 수정
- 아이디 찾기, 비밀번호 찾기
- 아이디 저장
- 탈퇴
(답변) 게시판 설계
DB 설계 (게시판)
- 번호, 제목, 내용, 작성자, 작성일, 조회수, 그룹, 순서, 중첩, 개수 등록

DB 설계 (답글)
- 등록, gno 수정, 수정, 삭제, 목록, 카운트, 상세, 조회수 증가

기능 구현 목록
- 그룹 번호 처리
💡 답변글은 시간 순서대로 글을 게시하는 게 아닌, 해당 게시글 아래에 위치하는 '답변'이기 때문에 따로 처리를 해줘야 한다. 어떻게 처리할 수 있을까?
❗ 3개 컬럼 처리 (그룹, 순서, 중첩정도)

그룹을 중심으로 순서와 중첩정도를 추가해 어디에 위치해야 할 지 결정한다.
- 페이징처리
- 한 페이지당 10개씩
- 하단 페이지번호 열개씩
- 총 개수, 총 페이지 수 필요
- 수정
- 삭제 : 댓글도 같이 삭제되도록 구현 필요
- 목록
- 검색 (제목, 내용, 전체)
- 페이징 처리
- 댓글 수
- 상세
- 조회수 + 1
- 댓글 목록
- 댓글 등록 (로그인)
- 댓글 삭제 (내가 쓴 댓글만)
댓글 설계
DB 설계
- 댓글, 번호, 내용, 작성자, 작성일, 부모글, 구분값

식별관계와 비식별관계
식별관계
부모 테이블의 기본키 또는 유니크 키를 자식 테이블이 자신의 기본키로 사용하는 관계
- 부모 테이블의 키가 자신의 기본키에 포함, 따라서 반드시 부모 테이블에 데이터가 존재해야 한다.
비식별관계
부모 테이블의 기본키 또는 유니크 키를 자신의 기본키로 사용하지 않고, 외래키로 사용하는 관계
- 자식 데이터는 부모 데이터가 없어도 독립적으로 생성될 수 있다.
- 부모와의 의존성이 낮아져 좀 더 자유로운 데이터 생성 및 수정이 가능하다.