TIL

    [TIL/adone] 2022-08-25~26 dto 디렉토리 구조 변경, @Embeddable

    1. dto 디렉토리 대규모 수정 서비스에 estimate(견적)에 관련된 기능이 가장 많은데, dto 구조가 필요 이상으로 복잡하고 가독성이 떨어진다 생각이 들었다. 합칠 수 있는 dto는 합치고, request/response 위주로 분리했다. 매우 헷갈리고.. 오래 걸렸지만 훨씬 깔끔해진 것 같아 뿌듯하다. 2. 유저가 디자인한 간판 생성 api 😇 save the transient instance before flushing : FK 로 사용되는 컬럼값이 없는 상태에서 데이터를 넣으려하면 발생하는 에러이다. → 나는 진짜로 데이터가 없어서 발생했는데, 연관 관계 매핑해줄 때 사용하는 @ManyToOne, @OneToOne, @OneToMany 어노테이션에 cascade옵션을 변경하면 해결 할 수 ..

    [TIL/adone] 2022-08-23~24 API 설계, @Builder.Default, Swagger 설정

    1. 보안그룹 설정, RDS 연결, 탄력적 IP 할당 RDS 보안그룹의 인바운드 규칙을 추가하여, RDS를 생성한 IP주소 외에서도 접근 가능하도록 바꿔주었다. 3306 포트의 IPv4, IPv6 규칙을 추가해주어야 한다. 탄력적 IP도 할당해주었다. 2. 기능명세 + 코드 파악 하나의 화면에서 여러개의 API를 호출하는데, 각각 다른 controller에서 호출하는 것 보다는 하나의 controller로 묶는 것이 좋아보인다. member_role은 하나의 칼럼으로 처리하는 것이 편할 것 같다. 도메인 디렉토리가 estimate → requestEstimate → SignboardInfo로 구성되어 있는데, 간판 객체는 그냥 별도의 디렉토리로 분리하는게 나을 것 같다. service 로직에서 다른 도메..

    [TIL/fairer] 2022-05-14 jpa로직 구현

    😊 Today I Learned 집안일 전체 조회 API - jwt token 적용 집안일 전체 조회 API를 개발할 때, 날짜를 받아와서 해당 날짜에 해당하는 집안일을 리턴하도록 했었다. 로그인 기능이 구현되고, jwt가 추가되면서 토큰을 통해 memberId를 받아와서 날짜 + memberId까지 조인해서 가져와야 했다. jwt는 나중에 수정하더라도 memberId까지 받아서 가져오도록 설계했어야 했는데, 지금까지 날짜만 받아 모든 유저의 집안일을 가져오도록 구현하고 있었다는게 충격이었다. 이정도로 기본적인 부분도 놓치고 있었다니..😇 HouseWorkController 수정 전 @GetMapping(value = "") public ResponseEntity getHouseWork(@RequestP..

    [TIL] 2022-01-12

    😊 Today I Learned 로컬호스트에 몽고디비 설치 후 데이터그립 연결고민만 해오다가 드디어 NoSQL을 사용해보게 되었다. 아직은 매우 낯설다😶 수정된 인자들, API의 효율성을 고려하여 데이터베이스 수정없앨 수 있는 테이블들을 삭제하고, 순서대로 테이블에 접근하기 쉽도록 데이터베이스를 대폭 수정하였다.흑.. 이번에 프로젝트를 진행하면서, 데이터베이스를 설계할 때 필요한 칼럼들과 테이블간의 조인 뿐만아니라 함수 내에서 데이터들을 삽입하거나 꺼내올 때 연관된 테이블간의 선후관계또한 고려해주는게 중요하다는것을 깨달았다. Aniverse 몽고디비로 데이터베이스 다시 설계 NoSQL버전 데이터베이스는 임베디드 방식을 사용하여 다른 테이블과의 참조관계를 최소화시키고, 5~6개의 테이블만으로 데이터들을 저..

    [TIL] 2021-11-09

    😊 Today I Learned 하루종일 Aniverse API 작성 후 연결 😢 Today's error DB 외래키 제약조건을 위반하여 생기는 에러인데, 테이블들의 관계를 생각하지 않고 값들을 한꺼번에 insert해서 생기는 문제이다. post API를 설계할 때 정보들이 DB에 들어가는 순서와 테이블간의 join관계를 고려하여 insert쿼리를 나누어주어야 한다. adoptController exports.postAdoptUserInfo = async function (req, res) { const {animalIdx, userIdx, contactName, contactPhoneNum, adoptComment} = req.body; try{ var adoptListIdx = await adopt..

    [TIL] 2021-10-11

    😊 Today I Learned Aniverse ERD설계 경소톤에서 구현하게될 "Aniverse"의 디비를 설계해보았다. 17개정도의 테이블을 설계했는데, 이미 출시된 어플을 보고 설계하는게 아니라 어려웠지만 재미있었다. 다시 생각할 부분 앱의 흐름도에 따라 DB에 데이터가 들어갈 순서 다시 생각해서 테이블 수정 MySQL 데이터타입 공부 젤리 지급 알고리즘을 쿼리에 넣을지 js코드에 넣을지 배송지 정보 입력 부분 사진 테이블 (비정형 데이터..) 수정 😢 Today's error 😅 Comment

    [TIL] 2021-10-09

    😊 Today I Learned 1. 자료구조 → 원형 큐, 덱 구현 - 1학기 알고리즘 스터디에서 배운 큐와 덱을 원형 큐 클래스를 통해 직접 구현해보고, 이 클래스를 활용하여 DFS와 BFS 함수도 작성해보았다. 2. key, value 형태의 NoSQL 공부 경소톤 코멘트로 비정형 데이터에 대한 설계는 요즘 유행하는 key-value형태로 설계하는게 어떻겠냐는 의견을 주셔서 알아보았다. 키-값 데이터베이스 ↔ NoSQL NoSQL의 Key-Value Database는 저장과 조회라는 가장 간단한 원칙에 충실한 데이터베이스 테이블간 조인을 고려하지 않는다 → 외래키, 제약조건들이 필요없다. 간단한 데이터 모델을 대상으로 데이터를 자주 읽고 쓰는 어플리케이션에 적합하다. SQL을 사용하면 좋은 경우 관..

    [TIL] 2021-08-29

    😊 Today I Learned 1. Youtube API 명세서 수정 validation 에러처리 100번대로 수정 일반적 에러는 보편적으로 100~500번대 사용 데이터베이스 에러 → 4000번대 사용 서버 에러 → 5000번대 사용 Response 에러 → 3000번대 사용 Request 에러 → 2000번대 사용 RESTful API에 맞도록 URL이름, 메소드 수정 Dao에서 값이 수정되는 쿼리가 실행되더라도, 삭제 관련 API일 경우에는 메소드를 PATCH가 아닌 DELETE로 변경 메소드가 DELETE, PATCH인 경우 URL에 /delete/, /patch/ 삭제 API 내용에 맞게 주어와 동사 수정 전체적으로 가독성이 좋아지도록 수정 😅 Comment 교내 해커톤 대회 경소톤 회의를 했..

    [TIL] 2021-08-27

    😊 Today I Learned 1. 영상 조회 필터링 추가 - 최신순, 오래된순, 조회순 filter번호를 query params로 받아옴 → swith문에 넘겨줌 → Dao로 연결되어 각각 다른 쿼리 실행 let videoRows; switch (filter) { case '1': videoRows = await videoDao.getOldVideo(userIdx); return res.json({ result: videoRows, isSuccess: true, code: 200, message: "오래된 순 영상 조회 성공" }); case '2': videoRows = await videoDao.getPopularVideo(userIdx); return res.json({ result: video..

    [TIL] 2021-08-26

    😊 Today I Learned Youtube API 수정하기 → JWT토큰 필요한 API 위주로 😢 Today's error Error 1. Cannot destructure property // 영상 삭제 app.patch('/videos/delete/:videoIdx', jwtMiddleware, video.deleteVideo); 로그인 API를 실행할 때 발급한 JWT토큰을 사용하는 API인데, Route에서 jwtMiddleware를 추가하지 않아 발생한 에러이다. Error 2. ReferenceError : connection is not defined videoDao.videoAccessCheck에서 Connection pool을 생성하지 않아서 발생한 에러이다. 데이터베이스에 연결된 C..

    [TIL] 2021-08-25

    😊 Today I Learned JWT를 사용하여 본인인증이 필요한 API들 수정하기 JWT payload부분에 userIdx를 넣어 토큰 발급 발급된 토큰을 이용하여 영상 삭제 API를 로그인해야 실행이 가능하도록 수정 ex) 영상 삭제 API, 프로필 수정 API 😢 Today's error Error 1 const passwordRows = await userProvider.passwordCheck(selectUserPasswordParams); console.log(passwordRows); if (passwordRows[0].Password !== hashedPassword) { return errResponse(baseResponse.SIGNIN_PASSWORD_WRONG); } userPro..