Project

    [Capstone Design] 느낀점

    11-21 E-R Diagram을 설계하는 것이 매우 힘들다는 것을 알게 되었습니다. 처음에 뭣 모르고 Entity를 막 설계했다가 어딘가 로직이 자꾸 엉키고 기능 한개 빼먹고 설계해서 다시 설계하고... 삽질만을 계속하게 되었습니다. 이대론 안되겠다 싶어 다시 되짚어 보았습니다. "어떻게 완벽하게 Entity를 설계하지?" 데이터베이스 시간에 배웠던 요구사항 분석, 개념적 설계, 논리적 설계를 떠올리게 되었고 처음부터 저희가 어떻게 구현하려 하는지부터 다시 생각하게 되었습니다. 처음에 계획서에 작성했던 기능들을 떠올려보며 이것을 토대로 E-R Diagram에 맞게 설계를 다시 해보았습니다. 1대다? 다대다? 'User' 개체와 'Item' 개체간의 관계가 처음에는 회원은 여러 물품을 대여할 수 있습니다..

    [Capstone Design] 간단한 이용 내역 알림 기능 구현

    Web Socket, SSE 등을 이용한 실시간 통신은 지금 단계에서는 어려울 것 같아 User가 어플리케이션을 접속하거나 새로고침 했을 때 DB에 있던 알림을 Push하는 방향으로 진행하려 합니다. 대여를 시작했을 때 대여를 시작하면, 대여 시점의 시간을 DB에 저장함과 동시에 알림에 대여하였다고 표시합니다. 처음 앱을 접속하거나 새로고침 할 때 대여한 시간부터 2일 이상 지나있을 시 지나갔다고 표시합니다. 반납하였을 때 반납 버튼을 누르면 해당 유저에게 반납되었다는 알림을 생성합니다. 궁금한 점 - Spring에서 Service클래스에 여러개의 Repository를 상속 받아도 효율면에서 괜찮은지? - admin 즉, 관리자 기능은 따로 controller와 service를 만들어서 구현하는게 나은지..

    [Capstone Design] 간단한 배포

    AWS EC2와 S3를 활용하여 구현하였습니다. 처음에는 EC2 내부에서 openjdk와 mysql을 설치한 후 .jar파일을 통해 빌드를 직접 진행하였는데 Docker라는 프로그램을 사용하면 docker 내에서 알아서 실행환경을 만들어줘서 쉽게 실행이 가능하다는 것을 주변 사람들로부터 들어서 docker를 이용하여 배포를 진행하였습니다. 아직 빌드 테스트 자동화 및 무중단 배포까지는 공부해보지 못했지만 처음으로 배포를 성공했다는 점에서 의의를 두고 싶습니다. [docker] 도커를 이용한 SpringBoot, MySQL 간단한 배포 AWS EC2 인스턴스 만들기 docker, docker compose 설치 (docker는 root권한이 필요하기 때문에 sudo 없이 사용하기 위해 사용자를 docker..

    [Capstone Design] 간단한 로그인 구현

    구현 방식 backend server 클라이언트에서 오는 학번과 비밀번호를 DB에 저장되있는 학번과 비밀번호를 대조하여 서로 일치하면 HTTP OK를 통하여 학번 비번을 body에 함께 실어 보냅니다. frontend Android Studio에서는 retrofit 라이브러리를 활용하여 HTTP 통신을 하였습니다. Retrofit에 관련된 자세한 내용은 해당 포스팅을 참조해주세요. [Android Studio] Retrofit을 이용한 통신 종속성 및 인터넷 권한 추가 Model 정의 Retrofit API 정의 Retrofit Client 정의 Activity or Fragment에서의 사용 Retrofit이란 안드로이드의 HTTP 통신을 구현하는 여러 라이브러리 중 한개입니다. MVVM 패턴을 사 b..

    [Capstone Design] 간단한 검색 기능 구현

    검색 - Keyword Serching 찾고자 하는 물품이 따로 있을 때 키워드 검색을 이용해서 원하는 물품만 출력되도록 하는 기능을 구현할 수 있습니다. 쿼리 - MySQL 검색에서 사용되는 쿼리는 다음과 같습니다. LIKE MySQL에서는 FROM과 ORDER BY 사이의 WHERE 절에서 LIKE와 원하는 키워드를 넣으면 됩니다. %를 통해 사이에 있는 키워드도 인식할 수 있습니다. 페이징 처리할 때 사용하는 쿼리에 이를 추가하였습니다. Spring Data JPA in Repository JPA Repository에서 기본으로 제공해주는 Containing기능을 사용합니다. 이는 WHERE 절과 LIKE의 기능을 가지고 있습니다. 밑의 SQL 문과 대응합니다. Page findByItemNameC..

    [Capstone Design] 간단한 페이징 처리 구현

    페이징 처리 - Pagination 화면에서 표시할 수 있는 갯수가 제한되기 때문에 페이징 처리를 통해 갯수만큼만 전달할 수 있게 합니다. 쿼리 - MySQL 페이징 처리에 사용되는 쿼리는 다음과 같습니다. select item0_.id as id1_0_, item0_.itemDetailName as itemdeta2_0_, item0_.itemName as itemname3_0_, item0_.used as used4_0_ from Item item0_ order by item0_.id desc limit ? ORDER BY 결과 테이블 내용을 원하는 순서로 출력하게 도와줍니다. 현제 DESC(Descending 내림차순)으로 정렬하였고 LIMIT ? 숫자만큼의 행을 출력하도록 합니다. Spring D..

    Capstone Design

    캡스톤 디자인을 진행하면서 프로젝트를 어떻게 진행하는지 기획 단계부터 데이터베이스 설계 및 본격적인 개발, 배포까지 일련의 과정을 알아갈 수 있는 시간이 되려고 노력하고 있습니다. 캡스톤디자인 2 1. 프로젝트 기획 2. ERD 설계 및 table 관계 매핑 3. Spring 기본 뼈대 설계 4. 기능 구현 5. 배포 6. 연동

    [REST API] 1. MVC패턴 및 기본 CRUD 구현

    개발 순서 Spring 프로젝트를 만들 때 제 나름대로의 순서입니다. 이 순서대로 만드는 것이 데이터의 흐름을 생각하기에 가장 좋았던 것 같습니다. Entity 만들기 Repository 만들기 Service 만들기 Controller 만들기 Entity 만들기 DB에 어떤 릴레이션이 들어가는지 정하는 단계입니다. 또한 JPA를 사용하기 때문에 DB간의 매핑이 곧 객체간의 매핑입니다. JPA의 개념이 기본적으로 잡혀 있어야 제대로 된 Entity를 만들 수 있습니다. @Entity @NoArgsConstructor @AllArgsConstructor @Data public class Item { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) priva..

    [REST API] 2. 예외처리 만들기

    @ExceptionHandler는 Cotroller에서의 예외를 잡아 메서드로 처리 @ControllerAdvice는 Controller에서의 예외를 한곳에 모아둠 ExceptionAdvice라는 클래스 만들고 @ExceptionHandler와 @ControllerAdvice를 동시에 사용 Exception이란 패키지 안에는 각각 Exception 커스텀 클래스 생성 예외처리의 필요성 사용자가 잘못된 요청을 서버로 보냈을 때 잘못되었음을 알려주는 역할입니다. 예외처리를 만들지 않아도 서버에서 알아서 예외처리를 해주지만, 이 역시 프론트엔드 개발자가 알지 못해 결국 사용자에게 어떤 것이 문제인지 정확히 말해줄 수 없게 됩니다. 예외처리를 구현할 경우 보다 명확한 오류 이유를 전달하여 프론트 단에서 처리할 ..

    [Capstone Design] 현재 진행상황

    주차별 기능 구현 SpringBoot + JPA + MySQL 프로젝트 초기설정 ERD 설계 및 테이블 관계 설정 HTTP API 설계 Retrofit 라이브러리를 이용한 Android Studio에서 http 통신 CRUD 구현 로그인 처리 페이징 처리 카테고리 처리 검색 기능 이미지 처리 제재에 따른 어플 강제 종료 구현 AWS 백엔드 서버 배포 (중간중간 예외처리와 검증 구현) 현재 6번째 까지 완료하였습니다. 하지만 계속 설계해보면서 ERD와 API를 계속 수정해야 될 것 같습니다. 문제 1. id값이 DB에서 1로 초기화하지않고 9, 10.. 으로 시작합니다. 3번 id의 인스턴스를 삭제하면 자동으로 id가 정렬이 되게 하고싶습니다. 2. ManyToOne으로 member와 warning을 매핑..