프로그래밍/팀프로젝트

Team.Exit7-레시피 암기 서비스.01

내일도화이팅 2023. 3. 26. 03:42

부제 : 첫 팀프로젝트, 첫 블로그, 첫 글

 

프로젝트 명

- 레시피 암기 서비스
 

프로젝트 처음 취지

- 아르바이트 신입으로 채용이 될 시 레시피를 외우는 어려움을 덜어주는 서비스를 만들자.
 

문제점

- 기업들이 자신의 레시피에 대한 오픈을 꺼려할 가능성이 충분히 있음.
- 저작권 문제가 발생할 수 있음.
 

대책안

- 레시피가 아니더라도 영어단어, 사자성어, 국기, 수도 등 암기를 해야하는 분야는 많이 존재하고 굳이 저작권과 레시피 공개가 까다로운 식당의 레시피가 아니더라도 집에서 만들어 먹을 수 있는 혹은 요리 자격증과 관련된 레시피를 외우게 도와줄 수 도있다.
 

확장 가능성

- 암기뿐 아니라 수학 문제 풀기 서비스와 같은 서비스들과 연동하면 고객이 다른 서비스들을 조회하고 사용할 필요없이 우리 서비스만 이용을 해도 다양한 공부를 할 수 있다.
- 수능, 토익, 자격증, 법률 등 다양한 공부관련 분야를 서포팅하는 서비스로 확장할 수 있다.
 

1. spring boot 셋팅

1) http://start.spring.io 에 접속

 

2) 빌드도구 Gradle 선택

더보기

Gradle이란,

Groovy(JVM 상에서 실행되는 Java와 문법구조가 비슷한 스크립트 언어)를 기반으로 한 오픈소스 빌드 도구이다.

Gradle의 가장 큰 장점으로는 빠르다는 점이다.

 

※Gralde가 빠른 이유

1. 점진적 빌드(Incremental Builds)

task의 변경여부를 확인하여 변경된 파일만 빌드한다.

 

2. 빌드캐시(Build Cache)

2개 이상의 빌드가 돌아갈 때 하나의 빌드에서 다른 빌드에 사용되는 파일이 빌드된다면 빌드 캐시를 통해 파일들이 중복되지 않도록 빌드한다.

 

3. 데몬 프로세스(Daemon Process)

메모리 상에 빌드 결과물을 보관하여(프로세스를 오랫동안 살려두어) 다음 빌드 시 속도를 줄인다.

 

실제로 Gradle 공식문서에 따르면,

"Gradle은 먼저 출시된 Maven보다 빌드 속도가 2배 이상 최대 100배 이상 더 빠르다."

 

그외에도 프로젝트 설정 주입(Configuration Injection) 방식으로 정의되어 Maven보다 재사용에 유리하다는 점과 스크립트의 가독성이 좋다는 등의 장점이 있다.

 

3) Spring Boot 버전으로는 2.7.5를 선택한다.

더보기

2.7.5를 선택한 이유

첫번째 숫자의 의미는 매이저 버전(Major Version), 두번째 숫자는 마이너 버전(Minor Version), 세번째 숫자는 패치 버전(Patch Version)을 의미한다. 

 

매이저 버전(Major Version)은 현재(2022년 10월 기준) 3버전대까지 나왔으나, 메이저 버전(Major Version)이 달라지면 기존의 것들과 달라지는 요소들이 많기 때문에 기존의 코드와 호환성의 문제가 발생한다.(그래서 업그레이드가 필수다.)

실제로 메이저 버전이 3점대인 스프링 부트는 Java EE(Java Platform, Enterprise Edition)에서 Jakarta EE(Jakarta, Enterprise Edition)로 변경되는 등의 변경점이 있다.(그렇게 되면 import부터 javax에서 jakrta로 바꿔야한다.)

 

이에 필자와 필자의 팀원들은 많은 자료를 찾으며 공부를 하며 개발을 해야되는 입장에서 기술문서나 포털사이트, 깃허브, 공식문서 등에 비교적 정보가 적은 3점대의 메이저 버전개발보다 정보가 많은 2점대의 메이저 버전을 사용하는 것이 현명한 판단이라고 생각하였다.(3점대의 메이저 버전으로 개발을 하는 건 어느정도 공부가 된 다음으로 미루기로 하였다.)

 

또한, 3점대 메이저 버전 스프링 부트가 개발되었더라도 여전히 2점대 메이저 버전 스프링 부트가 업데이트되고 있으므로, 2점대 메이저 버전을 사용해도 큰 문제가 발생하지 않는다.

 

마이너 버전(Minor Version)이 업데이트 될 경우 스프링 부트가 업데이트를 할 경우 기능적으로 업데이트가 되지만 스프링 부트 프레임워크 개발자가 의도적으로 업데이트하는 것이기 때문에 호환성 문제가 적은 버전을 말한다. (그래서 최신 버전을 선택했다.)

 

패치 버전(Patch Version)은 이전 버전의 호환성 버그같은 오류 등을 수정할 때 증가하는 버전을 의미하므로 마이너 버전과 마찬가지로 최신 버전을 선택했다.

 

SnapShot은 개발이 완료된 최종버전이 아닌 개발 중간단계의 버전을 의미하므로 snapshot이 붙어있지않은 개발 완료 버전을 선택했다.

 

4) Project Metadata 작성

Group

- 기업 도메인(팀 프로젝트명인 exit7으로 하였다.)
 

Artifact

- 빌드 결과물 이름(확장성을 위해 레시피라는 단어를 사용하지 않고 문제 제공 서비스를 의미하는 matterService로 지었다.)
 

Name

- 이름(빌드 결과물 이름과 마찬가지로 지었다.)
 

Description

- 프로젝트에 대한 간단한 설명을 적는 란이다.(별로 중요하지 않으므로 Help a memorizing as a service. 라고 입력다.)
 

Package name

-패키지 이름(Group명과 Artifact를 입력하니 자동으로 com.exit7.matterService로 바뀌었고 굳이 건들지 않았다.)
 

Packaging

-압축 아카이브 파일 Java 애플리케이션이 동작하도록 자바 프로젝트를 압축한 파일인 jar(Java Archive)과 servlet/jsp 컨테이너를 배치할 수 있는 웹 애플리케이션 압축파일인 war(Web Application Archive) 중 선택하는 곳이다. (servlet/jsp 컨테이너 배치 계획이 없고 Spring boot의 표준인 jar을 선택했다.)
 

Java

-Java 버전을 선택한다. Java는 하위 호환성이 매우 높기 때문에 현업에서 많이 사용하는 Java 11을 굳이 선택하지 않아도 된다고 생각했고 혹시 모를 스프링 부트 3.0 업데이트를 위해 Java 17이상만 지원하는 스프링 6.0에 맞춰 Java 17버전을 선택했다.
 

Dependencies

- 프로젝트 생성전 미리 라이브러리를 주입할 수 있다.( 추후 build.gradle에서 추가할 수 있으므로 기본적인 것만 추가한다.)

더보기

1. Lombok

- @RequiredArgsConstructor(생성자),  @Getter(게터), @Setter(세터) 등 다양한 애노테이션을 제공하여 개발자가 직접 입력해야되는 코드를 길이를 줄여준다.

 

2. Spring Web

- Spring MVC를 사용하여 RESTful를 포함한 웹 애플리케이션을 구축한다. (Apache tomcat도 자동으로 주입해주어 웹 프로젝트 시 필요한 라이브러리이다.) 

 

3. Thymeleaf

- 서버 사이드 HTML 랜더링(SSR)이 특징인 타임리프(Thyleaf)는 서버에서 HTML을 동적으로 렌더링하기 위해 사용한다.

(Natural Template이라고 불릴 정도로 순수한 HTML 구조를 유지한다는 장점이 있다.)

 

5) GENERATE(Ctrl + Enter)를 클릭하여 압축파일을 내려받는다.

 

2. IntelliJ에서 실행

1) 내려받은 파일의 압축을 푼다.

 

2) Setting-Open-설치받은 프로젝트 폴더 안에 있는 build.gradle을 선택한다.

 

3) Open as Project를 선택한다.(프로젝트를 열껀지 물어보는 창이다.)

 

4) Trust Project를 선택한다.(믿어도 되는 프로젝트인지 물어보는 창이다.)

 

5) This Window 혹은 New Window를 선택한다.(프로젝트를 새 창으로 열지 열지않고 그대로 사용할지 아니면 그냥 열지 않을지 물어보는 창이다.)

 

3. Gradle 프로젝트가 정상적으로 실행이 되었는지 로컬서버를 돌려 실행해본다.

1) src\main\java-hello.hellospring의 하위에 있는 Application으로 끝나는 .java파일을 실행 시킨다.

※필자는 matterService로 만들었기 때문에 Class 이름이 MatterServiceApplication이다.

 

2) 브라우저 주소창에 localhost:8080을 입력한다.

※ 위 사진의 에러는 맵핑도 안해놓고 도대체 뭘 백하라는 말이냐? 라는 뜻으로 아무것도 맵핑이 안되어 있어서 나오는 에러이다. 개발자가 프로젝트 개발과정에서 의도적으로 맵핑을 해야 맵핑이 되므로 위의 창이 뜨면 정상적으로 로컬 서버 실행에 성공했음을 의미한다.

 

다음 포스팅 때는 어떤 DB를 선택할 것인지, 어떤 구조로 나눌 것인지, 역할 분담은 어떻게 할 것인지, 깃허브 브랜치 관리는 어떻게 하는지에 대하여 포스팅 예정이다.

 

팀명 : Exit7

1) 의미

- 인생의 출구는 하나만 존재하지않는다. 7개 아니 그 이상의 출구가 존재할지도 모른다. 우리는 한가지에 방법에 국한되지 않고 여러가지 출구를 탐색하여 우리만의 답을 찾을 것이다.
- 우리팀이 자주 가는 카페인 비브레이브가 전포역 7번 출구 바로 앞에 있기 때문에 지은 이름이기도 하다.

 

팀원

백엔드 - 김도훈, 장소윤, 진유라
프론트엔드 - 박재홍