전체 글
-
[Wee.T] 스케줄러(@Scheduled)를 사용해 주기적으로 자동실행되는 로직 구현하기DEVELOP/Wee.T 2022. 9. 16. 13:09
Wee.T에서 PT를 개설하면, 종료일이라는 개념이 없고, 횟수차감제로 운영됩니다. 이는 실제 헬스 PT가 이루어지는 방식을 재현하고자 한 것인데, 정해진 횟수를 결제하고(ex. 30회) 헬스장에 갈 때마다 횟수가 차감되어 30회를 다 채우면 종료되는 방식입니다. 이를 프로그램으로 구현하기 위해서는 날짜가 지나면 횟수가 자동으로 차감되는 로직을 구현해야 합니다. 진행상황이 업데이트 되어야하는데, 업데이트 되는 조건이 시간인 상황입니다. PT 테이블(t_class)의 ERD 중 스케줄과 등록 관계를 나타내는 관계만 나타내었습니다. 형광펜으로 표시한 컬럼들이 중요합니다. t_class_listenr(PT 수강테이블) 테이블에 PT를 등록한 사람들의 진행현황을 나타내기 위한 progress 컬럼과, 해당 PT..
-
[Wee.T] 게시글 임시저장 기능 구현하기DEVELOP/Wee.T 2022. 9. 16. 09:58
이전에 개발한 커뮤니티 REST API를 사용하여 임시저장 기능을 구현하였습니다. 컨트롤러 쪽 코드는 완성되어있기 때문에 이번에는 클라이언트에서 ajax통신으로 데이터를 주고받는 스크립트 코드 위주로 정리하였습니다. 고려한 부분은 다음과 같습니다. 1. 임시저장의 작성 / 수정 / 삭제 2. 임시저장 게시글을 불러오기 3. 임시저장한 글을 불러와서 실제 게시글 작성을 하면 해당 게시글은 임시저장 리스트에서 사라지도록 하기 DB의 게시글 테이블입니다. 게시글들은 하나의 테이블에서 관리하고, 임시저장 여부를 컬럼으로 구분하여 사용합니다. 테이블을 이렇게 설계해놓았기 때문에, 사실 임시저장의 CRUD로직은 게시글 CRUD로직과 동일합니다. comm_tempsave의 컬럼값만 다르게 넣어주면 됩니다. 임시저장 ..
-
[Wee.T] 커뮤니티 REST API 개발, Swagger를 이용한 문서 자동화 설정DEVELOP/Wee.T 2022. 9. 16. 09:54
Wee.T의 커뮤니티는 REST API 방식으로 개발하고, API 문서는 Swagger를 적용하여 자동화 하였습니다. REST API 설계시 고려했던 점 1. URI 규약을 준수하여 보다 Restful하게 만들기 2. 용도에 맞는 HTTP Method를 사용할 것(GET, POST, PUT, DELETE) Swagger를 사용한 이유? 1. API문서의 자동화가 가능하고, 내 마음대로 커스터마이징 할 수 있다는 장점이 있습니다. 2. swagger-ui 내에서 테스트가 가능하다는 점. 어떤 형식으로 리턴되는지 바로바로 확인할 수 있다는 장점 3. (주관적) 다른 API 문서 툴과 비교하여 가장 직관적이라고 생각되는 UI * 스웨거의 초기 세팅 과정은 이전 포스팅에 작성하였습니다. https://shuri..
-
[Spring] @PutMapping 시 DTO 객체에 매핑이 안될 때Spring 2022. 9. 13. 03:13
게시글 작성, 게시글 수정 로직을 구현하던 중 발생한 오류입니다. 각각 PostMapping, PutMapping으로 컨트롤러를 만들고, ajax로 클라이언트와 연동하려는데 게시글 수정에서만 오류가 났다. 보다시피 둘의 클라이언트 코드는 거의 비슷하다. 컨트롤러로 넘겨줄 데이터를 params에 넣어서 보낸다. 02:51:03.256 ERROR --- [http-nio-8080-exec-33] c.w.a.e.CommonsExceptionHandler.handleException:32 - + 1. Exception type: java.sql.SQLException 02:51:03.256 ERROR --- [http-nio-8080-exec-33] c.w.a.e.CommonsExceptionHandler.ha..
-
[Spring] Swagger 2.x.x 버전 적용하는 방법Spring 2022. 9. 6. 03:35
Swagger를 이용하면 API문서를 자동화할 수 있습니다. Swagger 관련 글들이 유독 스프링부트 환경에서 적용하는 방법이 많아서, 스프링5 환경에서의 스웨거 초기 설정 법을 정리해 둡니다. *스웨거 버전은 2.9.2 사용하였습니다. 1. pom.xml 의존성 추가 2.9.2 io.springfox springfox-swagger2 ${io.springfox.swagger-version} io.springfox springfox-swagger-ui ${io.springfox.swagger-version} swagger2와 swagger-ui 두가지를 설정합니다. 같은 버전을 공유하기 때문에 버전은 프로퍼티로 관리하였습니다. pom.xml 파일을 수정한 후엔 꼭 update project를 진행합니다..
-
[Spring] 트랜잭션이란? 전파 (Transaction Propagation) 속성과 격리레벨(Isolation level)Spring 2022. 9. 1. 23:39
트랜잭션 (Transaction)이란? Transaction is All or Nothing! 트랜잭션을 한마디로 정의하자면 다음과 같습니다. SQL에서 DML문장 수행 후 COMMIT 과 ROLLBACK을 적용하는 것과 같은 개념입니다. 예를들어, 상대방에게 계좌이체를 하는 상황을 가정합니다. 내 통장에서 돈이 빠져나가고 -> 상대방의 계좌에 돈이 입금되는 것까지 완료되어야 계좌이체가 성공했다고 할 수 있습니다. 만약 내 통장에서는 돈이 빠져나갔는데, 상대방의 계좌에는 입금이 안되었다면, 내 통장에서 돈이 빠져나가는 과정까지 모두 취소되어야 합니다. 이렇게 일련의 과정들을 하나의 단위로 묶어서 모두 성공시 수행(COMMIT), 하나의 처리라도 오류가 발생한다면 원래 상태로 되돌리는 것(ROLLBACK)..
-
[Wee.T] 쿠폰페이지 개발(조회, 등록) ajax로 처리하기DEVELOP/Wee.T 2022. 8. 21. 21:26
uri 매핑작업까지 다 마쳐셔, 본격적으로 기능구현을 시작했습니다. 이번에 구현한 페이지는 쿠폰페이지입니다. 이런식으로 동작하는 페이지를 만들었습니다. 쿠폰페이지의 기능은 크게 다음과 같이 나눌 수 있는데, 1. [쿠폰북]엔 다운로드 가능한 쿠폰들의 목록이 보여진다. 2. [내 쿠폰] 탭을 통해 보유한 쿠폰들을 조회할 수 있다. 3. [쿠폰북]의 쿠폰을 다운로드받으면 [내쿠폰] 탭에 추가된다. 4. 쿠폰코드를 직접 입력해 쿠폰을 등록할 수 있다. 이렇게 등록한 쿠폰은 바로바로 [내쿠폰] 탭에 추가된다. 2번 내쿠폰을 조회하는 부분과 4번 기능은 처음부터 ajax로 처리할 것을 염두에 두었습니다. 아무래도 등록할 때마다 새로고침되는 것보단 바로바로 추가되는 것이 좀더 완성도 높은 페이지라 생각했기 때문입니..
-
[Spring] Redirect후에도 전송파라미터를 유지할 수 있을까? RedirectAttributes, @RequestParam에 대해Spring 2022. 8. 19. 00:41
리다이렉트 방식은 페이지를 이동하면 이전 요청은 사라지고 새로운 요청이 발생합니다. 이과정에서 아무 처리를 해주지 않는다면 전송파라미터를 리다이렉트 후에 가져올 수 없습니다. 정말 흔히 볼 수 있는 게시판을 예로들어 상황을 가정해 보겠습니다. 보통 작성, 수정, 삭제와 같이 변경이 일어나는 요청은 리다이렉트로 처리합니다. 이에 따라 게시글 수정창에서 post요청으로 수정 처리를 한 후에는 상세페이지 조회 창으로 리다이렉트 처리를 했습니다. 그러나 리다이렉트로 이동하였기 때문에 이전 요청은 종료되고 새로운 요청이 발생하여 현재 페이지 번호를 나타내주는 currPage파라미터 값을 얻어올 수 없었습니다. 이 상태에서 페이지 목록으로 되돌아가면 예외가 발생합니다. 이 문제를 해결하기 위해 RedirectAtt..