java
-
[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를 진행합니다..
-
[Wee.T] 쿠폰페이지 개발(조회, 등록) ajax로 처리하기DEVELOP/Wee.T 2022. 8. 21. 21:26
uri 매핑작업까지 다 마쳐셔, 본격적으로 기능구현을 시작했습니다. 이번에 구현한 페이지는 쿠폰페이지입니다. 이런식으로 동작하는 페이지를 만들었습니다. 쿠폰페이지의 기능은 크게 다음과 같이 나눌 수 있는데, 1. [쿠폰북]엔 다운로드 가능한 쿠폰들의 목록이 보여진다. 2. [내 쿠폰] 탭을 통해 보유한 쿠폰들을 조회할 수 있다. 3. [쿠폰북]의 쿠폰을 다운로드받으면 [내쿠폰] 탭에 추가된다. 4. 쿠폰코드를 직접 입력해 쿠폰을 등록할 수 있다. 이렇게 등록한 쿠폰은 바로바로 [내쿠폰] 탭에 추가된다. 2번 내쿠폰을 조회하는 부분과 4번 기능은 처음부터 ajax로 처리할 것을 염두에 두었습니다. 아무래도 등록할 때마다 새로고침되는 것보단 바로바로 추가되는 것이 좀더 완성도 높은 페이지라 생각했기 때문입니..