[3] Spring - 개인과제 (1차)

2024. 10. 3. 19:49Spring/JDBC 개인과제

728x90

※ 일정관리 게시판 만들기

ㄴ 레벨 1,2,3,4,5로 구성

 

※ 계층분리가 다 되었기 때문에 apj전송 부분과 repository부분만 캡쳐본 첨부할 예정

ㄴ 추후 새로운 테스트와 새로운 기능 등 추가 예정이고, 블로그 글도 함께 수정할 예정이다.

 

[ Lv.1 api설계서,  ERD, 테이블 생성 쿼리문 제작 ]

ㄴ 개인적으로 제작

 

[ Lv.2 , Lv.4 일정 전제 조회, 일정 등록, 작성자 연동 ]

요구사항)

1. 일정 등록시 작성자,내용,비밀번호 입력받아야함.

2. 등록시 일정 ID는 자동으로 생성 / 작성일과 수정일은 등록할때 동시에 등록

3. 일정 목록은 수정일 기준으로 내림차순 정렬

4. 작성자, 내용, 날짜 관련된 검색요청

5. 선택일정조회 (일정ID로 상세보기)

 

 

[코드설명]

1) 일정등록을 ajax로 api전송 하는 코드이다.

2) input의 각 항목에 대하여 value값을 구해서 등록해주고 있다.

3) 내용, 비밀번호 항목에 대한 예외처리를 다 진행한다.

4) 일정 ID는 기본키에 autoincrement로 자동생성 중

5) 작성일 수정일은 현재시간으로 등록되도록

 

 

[코드설명]

1) ajax로 전송한 값들로 INSERT문을 실행시켜서 DB에 저장한다.

ㄴ ?와 1대1 매칭하여 값을 넣어준다.
ㄴ Spring에서 제공하는 prepareStatement를 통해 정보를 노출시키지 않고 정보를 전송한다.

ㄴ prepareStatement는 SQL인젝션 공격을 방어하고 보안성이 좋다.

ㄴ 백엔드 언어의 여러 프레임워크들에서 대부분 제공이된다

ex) spring jpa - 쿼리메소드, PHP Laravel - 쿼리빌더

 

 

[코드설명]

1) 일정목록을 구하기 위해 ajax로 api전송 하는 코드이다.

2) api로 정보를 받아와서 html을 append 해주는 형태이다.

 

 

 

[코드설명]

1) 추가되는 쿼리문이 많은데 레벨2에 해당되는 코드는아니고 레벨5의 코드이다.

2) 작성자 ID를 작성자 테이블컬럼의 작성자ID와 매칭해서 LEFT JOIN으로 데이터를 조회한다.

3) 아래에는 ResponseDto에서 세팅해둔 값을 기준으로 값을 보낸다.

4) 수정일 기준 내림차순 기본으로 정렬

 

[코드설명]

1) 날짜, 작성자 ID, 일정내용 3가지 항목으로 검색을 진행한다.

2) ajax로 api를 전송한다.

 

[코드설명]

1) 아래는 일정전체조회와 동일하며, 3가지 항목이 검색조건으로 있는 것을 확인할 수 있다.

2) 나머지는 레벨5 페이징과 관련된 코드들이다.

 

[코드설명]

1) 함수에 매개변수 ID - 일정 ID

2) 일정 ID를 기준을 일정 전체조회  api를 실행해서 조건으로 1개의 데이터만 가져온다.

 

[ Lv.2 실행영상 ]

 

 

[ Lv.3 일정 수정, 일정 삭제 ]

 

요구사항)

1. 일정 수정 삭제시 비밀번호 입력받아야함

2. 수정할때 수정일도 수정시점으로 수정도록

3. 내용과 작성자만 수정가능

 

[코드설명]

1) 수정할 항목들을 구하고, id를 기준으로 수정한다.

2) 비밀번호관련된 예외처리들을 진행하고, 인풋 활성화여부에따라도 예외처리를 진행한다.

3) 삭제도 동일한 형태의 보내는 값만 다른형태이다.

[코드설명]

1) UPDATE, DELETE 쿼리를 처리하고 있다.

2) 일정 ID기준으로 진행하고 있다.

 

 

[ Lv.3 실행영상 ]

 

 

 

 

 

 

 

[ 중간 회고 ]

ㄴ 등록, 수정, 삭제는 딱히 문제 생길만한 부분이 없어서 매끄럽게 잘 진행이 되었다. 그러나 검색부분에서 어려운 점이 살짝 있었다. 총 3가지항목중 각각 또는 2개 3개 등 여러가지 경우의 수가 모두 다 검색이 되어야했고, 아예 값이 없을 경우도 체크를 해야했기에 연동하는 부분에서 조금의 어려움은 있었다. 하지만 이 어려움은 새발의 피였고, 페이징에서 머리아픈 경험을 하게된다.

 

 

728x90