작성일: 2023.06.14(수)
KT AIVLE AI 개발자 트랙 3기 과정의 마지막인 빅프로젝트를 진행하고 있습니다.
Daily Scrum
내 역할, 협업 내용, 나머지는 팀원 담당
What did you do yesterday?
- spring 기초 공부
- react 기초 공부
- react 컴포넌트 트리 초안 작성
- Wi-Fi 데이터 수집 및 AI 모델링
What will you do today?
- spring JPA 활용 실습
- 회원가입 API 구현
- 회원가입, 로그인 기능 구현
- react 컴포넌트 트리 초안 작성
- Wi-Fi 데이터 AI 모델링
- 카메라 데이터 수집 및 AI 모델링
Are there any impediments in your way?
- 카메라 데이터 포즈 분류
- Wi-Fi 수신기 데스크탑 메인보드 고장
- JWT 토큰 관련 학습
What I did today
JPA 활용
섹션 1. 프로젝트 환경설정
1) 프로젝트 설정
- Spring Initializr: 스프링 부트 스타터
- Dependencies
- JPA: 유틸리티성 라이브러리. 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크
- thymeleaf: 템플릿 엔진. JSP보다 좋음. JSP는 요즘 거의 쓰지 않음
- h2: 개발, 테스트 할 때 유용한 DB
- lombok: 간단한 어노테이션(@)을 통해 코드 반복을 줄여주는 라이브러리
오류 발생
- 위에서 프로젝트를 생성하고, IntelliJ에서 임포트한 과정에서
Unsupported class file major version 64
오류가 발생함
- 스프링 부트와 자바의 버전이 맞지 않아서 생긴 오류 --> IntelliJ - Gradle에서 JAVA버전을 달리 보고 있었음
오류 해결
- Settings - Build - Gradle 에서 Gradle JVM을 스프링 부트에 맞는 버전으로 변경
2) 라이브러리 살펴보기
의존관계 확인하기
- 터미널에서 프로젝트 경로로 들어가서
./gradlew dependencies
실행
스프링 부트 라이브러리
- 많은 라이브러리가 있지만 대표적인 것만 살펴봄
(1) web
(2) thymeleaf
(3) JPA
- aop
- jdbc: tx, template 등이 포함됨
- HikariCP: 커넥션 풀
- hibernate
- spring data JPA
(4) logging
테스트 라이브러리
(1) spring-boot-starter-test
- junit: 테스트 프레임워크
- mockito: 목 객체 만드는 라이브러리
- assertj: 테스트 코드를 편하게 작성하도록 도와주는 유틸리티성 라이브러리
- spring-test: 스프링 통합 테스트 지원
핵심 라이브러리 정리
- 스프링 MVC
- 스프링 ORM
- JPA, Hibernate
- 스프링 데이터 JPA
기타 라이브러리 정리
- H2 database client: 다운받은 h2 버전과 클라이언트 버전이 맞아야 함
- HikariCP: 스프링 부트의 기본 커넥션 풀
- thymeleaf: WEB 관련
- 로깅, 테스트
3) View 환경설정
- thymeleaf를 사용: 스프링에서 밀어주는 엔진
- 장점
- 마크업을 깨지 않고 사용 가능
- 웹 브라우저에서 열림
- 단점
- 태그를 무조건 닫아줬어야 함(버전 3에서 해결됨)
- 요즘은 뷰템플릿을 사용해 서버에서 렌더링하기보다는 react, vue 등으로 해결하는 경우가 많음
ViewName 매핑
- 자동으로 잡아줌
resources: templates/{ViewName}.html
4) H2 데이터베이스
- 다운받은 h2의 경로로 이동후
./h2.sh
실행
- 콘솔에서
jdbc:h2:~/jpashop
실행 -> "jpashop.mv.db"가 홈 디렉토리에 생성됨
- 이후부터는 콘솔에서 네트워크 모드로 접속 권장 ->
jdbc:h2:tcp://localhost/~/jpashop
5) JPA와 DB 설정
- 프로젝트에서 properties 대신 yml 파일 만들기(resources 폴더)
jpa.hibernate.ddl-auto: create
- 애플리케이션 실행 시점에 테이블을 지우고 재생성
show_sql vs org.hibernate.SQL
- show_sql: System.out에 하이버네이트 실행 SQL을 남김
- org.hibernate.SQL: logger를 통해 남김
꿀팁: 쿼리 파라미터 로그 남기기
org.hibernate.orm.jdbc.bind: trace
: yml에 추가
implemetation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
: build.gradle에 추가
마치며
오늘 팀원이 예기치 못한 상황을 겪기도 하고, 데이터 수집에 쓰이는 컴퓨터 메인보드가 나가기도 하는 등의 사건 사고가 있었다.
하지만 다행히도 이번 주 메인 목표였던 AI파트에서 카메라와 Wi-Fi로 수집한 데이터를 가지고 모델을 어느정도 학습했다고 한다.
프로젝트에서 AI가 중심을 담당하고 있기 때문에 모델의 구현과 성능이 가장 중요한 것 같다.
내일 3주차 점검 발표 시간이 있을 예정인데, 백엔드 파트에서 보여줄만 한 결과물이 없다...
우선 내일 오전에 발표자료를 만들면서 백엔드 파트 팀원과 소통을 해야할 것 같다.
프론트 팀원들도 공부를 어느정도 진행한 상황에서 조금씩 구현을 하는 중인 상황.
이번 주는 어떤 따끔한 피드백을 받을지 벌써부터 궁금하다.