Spring
-
[Spring] DAO / DTO / VO 정리Spring 2022. 10. 5. 01:31
처음 스프링을 접하게 되면 가장 헷갈리는 개념 중 하나가 DAO, DTO, VO가 아닐까 생각이 듭니다. 제가 프로젝트를 했을 당시에도 이 개념이 헷갈리시는 분들이 많아서 긴 시간을 들여 설명 했던 기억이 납니다. 그래서 블로그에도 이 개념들을 간단하면서도 명료하게 정리해 두려고 합니다. DTO란? 먼저 DTO입니다. 줄임말을 풀어쓰는 순간 이해가 훨씬 쉽습니다. DTO는 Data Transfer Object입니다. "데이터 전송 객체" 라는 뜻입니다. 클라이언트에서 서버로 데이터를 전송할 때, 이 DTO 객체에 필드들을 매핑하여 전달합니다. 필드의 이름과 타입만 맞춘다면 디스패쳐 서블릿이 자동으로 데이터들을 이 DTO객체에 매핑해서 전달합니다. 그리고 각 계층간 데이터를 전송할 때에도 사용합니다. Sp..
-
[Wee.T] 아임포트(Iamport) 결제모듈을 연동하여 결제시스템 구현하기DEVELOP/Wee.T 2022. 9. 18. 01:47
https://chai-iamport.gitbook.io/iamport/ready 결제 연동 준비하기 - 결제연동 메뉴얼 아임포트 회원가입 이후 관리자 페이지 내 결제연동 -> 테스트 연동 관리 탭에서 연동하고자 하는 PG사를 선택합니다. chai-iamport.gitbook.io 아임포트 결제 API를 사용하면 실제 결제가 가능한 서비스를 구현해볼 수 있습니다. 초기설정 메뉴얼은 해당 가이드를 참고하여 회원가입과 PG사 설정, 인증키를 발급받습니다. 결제서비스의 전체적인 흐름 구현한 전체적인 로직의 흐름은 다음과 같습니다. 1. 클라이언트에서 결제창을 통해 결제 요청을 보낸다. (아임포트 API 사용) 2. 결제 성공시 ajax통신을 사용하여 결제를 검증하는 컨트롤러로 요청을 보낸다. 3. 서버에서 검..
-
[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)..