본문 바로가기

개발 일지

[TIL]이노베이션 캠프 55일차

1. 개발 진행 상황

2022.09.24(토) 11:30

실전프로젝트 1주차 멘토링

사전 제출 자료를 기준으로 멘토링 받음
제출했던 내용: 코드컨벤션, api 컨벤션, 깃플로우 전략, 기술스택, 진행상황, 질문

1. 코드컨벤션
BE: 인텔리제이 제공 기본 컨벤션을 이용하면 간편함(파일명: 파스칼케이스, 변수명: 카멜케이스, 패키지: 소문자 등)
FE: BE보다 비교적 구체적인 코드컨벤션이 요구됨. 에어비앤비(https://github.com/airbnb/javascript) 코드 컨벤션을 참고하기

2. api 컨벤션
BE: RESTful학습할 것, 두루뭉술하지 않게 정확하고 구체적인 컨벤션 정하기

3. 깃플로우 전략
깃플로우 전략 학습할 것

4. 기술 스택
1) BE/FE 기술 스택 나눠서 기재할 것
2) FE: 기재한 라이브러리가 꼭 필요해서 사용하는건지, 정확한 이유 알고 사용할 것
3) BE
Q. jdk11를 선택한 이유 A. 호환이 좋다고 판단
Q. Nginx 사용 이유 A. 무중단 배포하기 위해 사용
👉🏻 지금 스프링부트에서 기본으로 사용되고 있는 톰캣으로도 무중단 배포 사용 가능, Nginx는 현재 프로젝트에 오버스펙으로 보임

5. 진행상황
1) 개인 별 진행상황 설명
2) 진행상황에 대한 피드백
- 일단 주기능 먼저 구현할 것, 부가적인 부분에 집중하기보다는 기본 기능 구현에 집중
- 진행 속도가 더딘 부분이 기본 기능(주기능)이라면 기능 분담해서 기본 기능 구현을 우선으로 할 것
- (지도api를 받아오는 부분 현재 FE쪽에서 진행중) 지도라는 특성상 FE에서 진행하고 있는 것으로 보이는데, 지도에 대한 데이터 처리(데이터 저장, 데이터 조작 등)를 하려면 BE에서 진행하는 것을 추천

⭐️ 코드 복사-붙여넣기 하지말고 공부하면서 코드 작업하기

📚 과제
1. 깃플로우 전략
Git, Github, Git flow가 무엇인지, 이것들의 차이를 설명할 수 있게끔 학습할 것

2. RESTful API
api 컨벤션과 관련하여 학습, 정확한 쓰임을 알고 사용할 수 있게 학습 할 것 

 

내가 맡은 기능 1: 코스(게시글) 평가 점수를 받고 받은 점수의 평균을 계산하여 반환하기

 

1) 어떻게 구현해야 할까 생각해봄

방법 1. for문 이용하여 평균 구하는 알고리즘 구현

-> 내가 구현할 수 있는 평균 구하는 코드는 코드가 깔끔해보이지 않음, 스프링부트의 장점을 살린평 균 구하는 방법은 없을까

방법 2. java에 평균 구하는?관련 클래스가 있지 않을까?

-> 찾아봐야함

방법 3. 스프링부트에서 내가 모르는 평균 구하는 기능이 있지 않을까?

-> 찾아봐야함

방법 3. DB를 이용한 평균 값 뽑아오기

-> JPA 공부 필요(DB를 뽑아내기, 뽑은 데이터를 저장하기 이런 부분), DB공부했을 때 MySQL 평균 구하는 SQL문이 있었던게 생각났고, 여기에 적용할 수 있고 데이터를 가지고 올 수 있는건가..? 

 

 👉🏻 뭐가 효율적인지 모르겠고, 내가 적용할 수 있는 것인지도 모르겠고..ㅠㅠㅠ아는게 없으니 막막... 일단 검색을 해본다

 

2) 적용할 수 있는 방법 찾아보기(코드가 아닌 머리로 생각)

방법1. 평균 구하는 알고리즘을 머리로 그릴 수 있고 코드로 짜보기도 했지만 지금 이 프로젝트 어디에 어떻게 적용해야하지?

일단 코스(게시글)id와 점수를 받아서 저장을 해야하니까 클래스, 컨트롤러, 서비스를 만들면 되겠고

그리고 이 입력 받은 id를 기준으로 평균 점수를 다시 또 저장하거나 반환해주면 되지 않을까

 

방법2. math클래스가 있지만 평균을 구하는 것은 없거나..내가 못찾거나

 

방법3. 이것도 내가 적용 못하거나 못찾거나...ㅎ

 

방법4. QueryDSL이랑 JPQL을 이용하면 가능하지 않을까?

 

3) 중간 결론

제일 베이직하다고 해야하나..원시적이라고 해야하나..ㅎ 결국 내가 제일 적용하기 쉬운 방법1을 선택해서 코드를 만들었다..

QueryDSL이랑 JPQL을 찾아보니 뭔가 적용할 수도 있을 것같은데.. 공부하기에 시간이 많이 걸릴 것 같아서 일단 기능되게 구현해놓고

좀 더 좋은 방법을 적용할 수 있다면 수정하는 것으로...ㅎ

 

2. 개발 중 발생한 이슈와 해결

3. 새로 배운 것

@

4. 참고 레퍼런스

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#preface

 

Spring Data JPA - Reference Documentation

Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

https://medium.com/@odysseymoon/spring-data-jpa%EC%97%90%EC%84%9C-groupby-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0-82cddc6e5d4a

 

Spring Data JPA에서 GroupBy 처리하기

Spring Data JPA에서는 GroupBy 를 사용하려면 어떻게 해야 할까요? Reference Doc 에서도 Group By 관련 키워드는 찾아보기 힘듭니다. Group By를 이용하려면 다른 방식을 적용해야 하는데요, Spring…

medium.com

https://wonit.tistory.com/470

 

[배워보자 Spring Data JPA] 쿼리 메서드와 @Query를 이용한 사용자 정의 쿼리

해당 글은 배워보자 Spring Data JPA 시리즈 입니다. 해당 시리즈의 내용이 이어지는 형태이므로 글의 내용 중에 생략되는 말들이 있을 수 있으니, 자세한 사항은 아래 링크를 참고해주세요! Spring Dat

wonit.tistory.com

https://escapefromcoding.tistory.com/617

 

QueryDsl 기본문법

QueryDsl 검색 조건 쿼리(From, Where)  검색 조건은 username이 member1, 나이가 10~30살인 사람입니다. select, from은 같은 경우 selectFrom으로 합쳐서 사용할 수 있습니다. where조건은 and로 게속 이어나갈..

escapefromcoding.tistory.com

https://joojimin.tistory.com/64

 

Day 2. QueryDSL 기본 문법

본 포스트는 인프런 - 실전! QueryDSL의 강의를 듣고 공부한 내용입니다 https://www.inflearn.com/course/Querydsl-%EC%8B%A4%EC%A0%84 실전! Querydsl - 인프런 | 강의 Querydsl의 기초부터 실무 활용까지 한번..

joojimin.tistory.com

https://devk0ng.github.io/2021/08/16/jpa_jpql/#JPA%EC%9D%98-%EC%BF%BC%EB%A6%AC-%EB%B0%A9%EB%B2%95-%EC%A7%80%EC%9B%90

 

객체지향쿼리언어 JPQL에 대해 알아보자! | devk0ng's blog

객체지향쿼리언어 (JPQL) JPA의 쿼리 방법 지원 JPQL JPA Criteria QueryDSL 네이티브SQL (그냥 sql 쿼리 날리는 거) JDBC API 직접 사용, MyBatis, Spring JDBC Template 이 중에서도 JPQL 과 QueryDSL의 조합으로 사용하는

devk0ng.github.io

https://milenote.tistory.com/136

 

[자바 ORM 표준 JPA 프로그래밍] 10.2 JPQL

Reference. 자바 ORM 표준 JPA 프로그래밍 책 목차 및 이전 글 더보기 들어가기 전 JPA 특징, Q&A 1. JPA 소개   1.1 SQL을 직접 다룰 때 발생하는 문제점   1.2 패러다임의 불일치   1.3 JPA란 무엇인가?..

milenote.tistory.com

https://leveloper.tistory.com/103?category=759395 

 

[JPA] JPQL (Java Persistence Query Language)

 JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리 기술을 지원한다. 이번 글에서는 다양한 객체지향 쿼리 중 JPQL에 대해 다룰 것이다. JPQL이란?  JPQL은 엔티티 객체

leveloper.tistory.com

5. 오늘 한 일 / 회고

이번주 내가 맡은 기능은 게시글 CRUD, 게시글 좋아요 기능, 게시글 평가 점수 주기 및 해당 게시글 평균 점수 반환

일단 위 기능을 구현했고 정상 동작함

 

이번주 기능 구현할 것이 하나가 남았는데 게시글에 카테고리 부분이다.

카테고리라고 칭하긴 하는데...이게 중복카테고리가 되는 개념이라...내가 검색해서 찾아본 카테고리 구현과는 조금 다른느낌?

보통 코드 구현한 카테고리는 1개 게시글이 1개의 카테고리에 해당하는데

내가 구현해야하는 것은 1개 게시글이 A카테고리에 A, B카테고리에 C, C카테고리에 A에 다 해당하는 식으로.. 중복이 되게 하는것이다.

보통 작은 개인쇼핑몰을 보면 전자에 해당하고,

오픈마켓을 보면 '모자'를 검색하면 카테고리가 골프, 아웃도어, 잡화, 여성의류, 남성의류 등등 카테고리가 여러개 나오는데...

일단 카테고리를 각각 선택해야하고, 카테고리를 각각 선택(카테고리 1만, 카테고리 1/2만 선택하면)검색은 어떻게 구현해야하지...?;;ㅠㅠ

다시 머리로 그리고 검색으로 채워나가야겠다....

 

6. TO-DO LIST

카테고리를 등록하고 카테고리 중복 검색을 어떻게하는지

그리고 추가적으로 카테고리 입력할 때 아예 받을 수 있는 값을 제한 할 수 있는지? 알아보기