Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

코로나 줄서기 서비스 추가 기능 개발 #18

Open
5 of 7 tasks
bmcho opened this issue Aug 16, 2022 · 0 comments
Open
5 of 7 tasks

코로나 줄서기 서비스 추가 기능 개발 #18

bmcho opened this issue Aug 16, 2022 · 0 comments

Comments

@bmcho
Copy link
Owner

bmcho commented Aug 16, 2022

코로나 줄서기 서비스를 사용할 수 있도록 남은 기능과 필요 기능을 정리하고, 구현한다.

  • 기획 리뷰, 추가 기획 분석
  • 테스트 계획 세우기
  • 관리자 인증 구현
  • 뷰 디자인
  • 기능과 뷰의 연결
  • 헤로쿠에 배포하기
  • 깃헙 자동화
bmcho added a commit that referenced this issue Aug 16, 2022
querydsl predicate 쿼리로 검색어 "장소명" 에 해당하는
`placeName`을 받기 위해 기능 업데이트

* `EventRepository`: `placeName`에 alias 지정
* `EventResponse`: `placeName` 노출을 위한 getter
bmcho added a commit that referenced this issue Aug 16, 2022
애플리케이션 기능이 늘어남에 따라
devtools restart 가 리소스를 다 읽는 시간이 부족해지는 듯
이 옵션으로 기다려주는 시간을 늘려서
스프링 부트가 restart 시 2번 뜨지 않게 조절
bmcho added a commit that referenced this issue Aug 16, 2022
어드민 장소, 이벤트 보기 기능을 구현
그 밖에 간단한 이벤트 상세 페이지 오타 수정
bmcho added a commit that referenced this issue Aug 16, 2022
이벤트 저장 시 장소 정보를 불러오는 방법을
`findById()` -> `getReferenceById()` 로 변경
둘의 차이는:

* `findById()`: 엔티티 값을 가져옴
* `getReferenceById()`: 엔티티 참조를 가져옴

때문에 `save()` 목적일 때는, `getById()`를 쓰면
불필요한 select 쿼리 발생을 없애고
insert 문에 `place_id`를 전달 가능

더불어 수정하면서 발견한,
남아있는 `DTO` 대문자도 `Dto` 로 추가 수정
bmcho added a commit that referenced this issue Aug 16, 2022
삽입, 수정, 삭제 등의 테스트를 할 때는
한 페이지에 데이터가 적은 것이 보기 편함
이에 더미 데이터 주석 처리
bmcho added a commit that referenced this issue Aug 18, 2022
어드민 페이지에서 장소, 이벤트 저장 기능 구현
from 저장은 PRG 패턴을 사용

* 폼 입력 페이지에서 현재 상태를 나타내기 위해 `AdminOperationStatus` 추가
* PRG 패턴을 고려한 컨트롤러 핸들러 메소드 추가
* `ApiEventController`: 스펙 변경에 대응, 중요하진 않음
  * api controller 는 추후 필요성이 없어서 삭제 예정
* 각종 dto 에 부족했던 부분 완성
* `confirm.html`: PRG 패턴의 중간 페이지
  * javascript 를 타임리프로 주입하여 자동으로 다음 페이지로 넘어가도록 작성
* 기타 뷰 페이지, 테스트 대응

### TODO

* 이벤트는 어드민 장소 상세 페이지에서 생성 가능하게 구현
* 장소 상세 페이지에 이벤트 리스트가 보이면 좋을 것 같음
* 우선 아이디어를 TODO 처리

ps) test 작성을 하지 않음 다음 커밋에서 테스트작성
bmcho added a commit that referenced this issue Aug 18, 2022
이전 커밋에서 작성하지 못한 테스트 작성
bmcho added a commit that referenced this issue Aug 18, 2022
수정과 생성을 한 url 로 원활하게 하기 위해
upsert 패턴을 도입
데이터가 생성인지 수정인지를 알아내는 방법으로는
request dto에 `id` 를 추가하여 사용
bmcho added a commit that referenced this issue Aug 18, 2022
삭제는 평범한 get 링크 호출로 구현
추후 리팩토링을 할 수 있도록
설계 부분에서 개선의 여지를 남겨둠

on delete cascade 설정을 admin - place 간에 추가
이 매핑 데이터는 삭제에 민감하지 않은 편으로 판단
event - place 간에는 룰을 추가하지 않음
연결된 이벤트가 있어서 함부로 지우면 안되는 장소를
삭제할 경우 에러가 나도록.
bmcho added a commit that referenced this issue Aug 18, 2022
삭제 버튼은 새로 항목을 만들 때는 노출되지 않아야 하기 때문에
`id` 값을 기준으로 버튼 노출 여부를 판단하는 로직을 추가
bmcho added a commit that referenced this issue Aug 18, 2022
어드민 페이지에서 장소 상세 페이지마다 연결된 이벤트를
모아서 보여주는 기능 구현

###
이전 수정 기능 개발 시 upsert를 이용하였는데 누락된 부분이있어 추가함
bmcho added a commit that referenced this issue Aug 18, 2022
bmcho added a commit that referenced this issue Aug 23, 2022
시큐리티 기능 적용
디펜던시에는 타임리프를 사용하므로
`thymeleaf-extras-springsecurity5` 추가 잊으면 안 됨

시큐리티 설정은 DB를 사용하는 방식으로,
테스트 계정의 패스워드는 `noop` 을 써서 암호화하지 않음
추후 암호화 가능
로그인 인증 예외 범위는 루트 및 일반 조회 페이지로 지정

기존 테스트는 시큐리티와 별개로 동작시키고 싶으므로
시큐리티 자동 설정과 필터를 제외하는 규칙을 추가
스프링 시큐리티의 인증 테스트는
필요에 따라 별도로 진행할 계획

**PS
Spring Security 5.7.0-M2 부터 
` WebSecurityConfigurerAdapter ` 지원을 하지 않는다.
` SecurityFilterChain` 을 직접 Bean으로 등혹하는 방식을 권장.
bmcho added a commit that referenced this issue Aug 23, 2022
bmcho added a commit that referenced this issue Aug 26, 2022
로그아웃이 가능하도록 로그아웃 링크를 어드민 페이지들에 삽입
bmcho added a commit that referenced this issue Aug 26, 2022
스프링 시큐리티가 기본적인 csrf 보안 기능을 갖추고 있으므로
데이터를 저장, 수정하는 어드민 뷰 페이지에서는
csrf token 을 전달할 필요가 있음
이에 토큰을 설정하는 히든 엘리먼트를 추가

### Reference

* https://docs.spring.io/spring-security/site/docs/current/reference/html5/#servlet-csrf-include-form
bmcho added a commit that referenced this issue Aug 26, 2022
코로나 줄서기 서비스는 기본적으로 이용자 편의를 위해
인트로 페이지를 갖지 않고 바로 서비스 페이지를 보여주기로 함
이에 `/` 페이지가 이벤트 조회 페이지로 이동하게끔 수정
bmcho added a commit that referenced this issue Aug 26, 2022
* 확인 페이지: 자동 로딩을 테스트 관찰하기 위해 5초로 했는데 테스트가 충분하므로 1.5초로 낮춤
* 어드민 장소 상세 페이지: 이벤트 리스트는 수정 시에만 보이도록 `th:if` 추가
* 테스트에 불필요한 출력, import 삭제
bmcho added a commit that referenced this issue Aug 26, 2022
타임리프 템플릿을 자동 생성하면서 만들어진
`lang="en"`이 일부 템플릿에 아직 남아있음
남은 것을 `ko` 로 모두 치환
bmcho added a commit that referenced this issue Aug 26, 2022
스프링 시큐리티 기본 로그인, 로그아웃 페이지를
수동 페이지로 전환
로그인, 로그아웃 기능 post url 은 시큐리티 기본 기능을 활용
bmcho added a commit that referenced this issue Aug 26, 2022
tailwind css 를 cdn 방식으로 적용
로그인, 로그아웃, 이벤트 목록, 어드민 이벤트 상세에 적용
나머지 뷰 디자인은 차차 발전시킬 예정

### Reference

* https://tailwindcss.com/
bmcho added a commit that referenced this issue Aug 26, 2022
spring data rest api 노출 옵션을
`annotated`로 제한
사용하지 않는 api 노출을 일단 막아두는 의미
완전한 삭제는 추후 검토
bmcho added a commit that referenced this issue Aug 26, 2022
앞선 커밋에서  테일윈드 css 적용하면서 없애버린 문장인데
테스트에서 빼지 않음
bmcho added a commit that referenced this issue Aug 26, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant