일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- TIL
- TodayILearned
- maven
- tdd
- mybatis
- web
- sqldeveloper
- PWA
- 프레임워크
- 프로그레시브웹앱
- 국비지원
- HTML
- js
- 서브쿼리
- SpringMVC
- 생활코딩
- progressive web app
- 오라클
- 자바프로그래밍
- CSS
- JavaScript 내장객체
- javaprogramming
- javascript
- 자바스크립트
- Oracle
- 스프링
- framework
- springaop
- sql
- 메이븐
- Today
- Total
1cm
자바 프로그래밍_Day_93_Framework:Maven 본문
2021. 12. 29
오랜만의 블로그 글이다.
지난 css 수업 정리 글 이후 수업 이후 블로그에 글 업로드는 멈추고 맥북 메모장에 정리만 해놓았다. 그것만으로도 사실 조금 벅찼고, 거기에 세미 프로젝트까지 시작이 되면서 체력적으로도 정신적으로도 좀 힘들었던 한달 반 정도의 시간들이었다. 내가 힘들었던 구간은 자바스크립트와 서버에 관한 부분이었는데 아무래도 체화하는 시간이 짧게 주어져서 그런지 이해하기가 스스로 많이 벅찼다. 지금도 물론 100% 이해가 된 건 아니지만 그래도 블로그를 한 번 시작한 이상 이대로 버려두기엔 아까우니 메모에 정리된 내용들은 다른 카테고리에 올리고, 이 카테고리의 글들은 최대한 그날 그날 정리한 내용들로 채워나가려고 한다. 정말 부족함을 많이 느끼는 과정이다-. 스스로 게을러지고 나태함을 많이 느끼기도 한다. 그래도 수업이나 유튜브, 구글링을 통해 다방면으로 계속 보다보니 아주 조금씩은 이해가 되기 시작한다. 잠깐 멈칫은 할 수 있어도 온전히 멈추지 말자..!
1교시에는 수업 설문조사를 진행하고, 프레임워크에 대한 설명을 짧게 들었고, 2교시부터 제대로 수업이 시작이 되었다.
오늘은 프레임워크와 메이븐에 대해서 배웠는데, 설명만 들어도 기존에 작업하던 것 보다 프레임워크로 작업하면 훨씬 수월하게 작업할 수 있을 것 같았다.
프레임워크(Framework) 란?
Frame + work로 분리해서 보면 이해가 더 쉽다. 개발자가 소프트웨어를 개발함에 있어 코드를 구현하는 개발 시간을 줄이고, 코드의 재사용성을 증가시키기 위해 클래스 묶음이나 뼈대, 틀을 제공하는 라이브러리를 구현해 놓은 것이다. 웹 애플리케이션 개발에 필요한 기능이 어느정도 구현이 되어있는 반제품에 가까워서 사용자가 프레임워크를 활용해서 개발을 하게 되면 어느정도 일정 수준의 품질을 얻을 수 있고, 유지보수가 용이하다는 장점이 있다.
여기서 라이브러리는 도구, 공구고 프레임워크는 틀, 뼈대라는 느낌이라고 보면 되는데, 수업을 들으면서 실습하고, 구글링을 하다가 아래 블로그를 보고 이해가 쏙쏙 되었다!
프레임워크(Framework)? 라이브러리(Library)? 둘의 차이점? 이것만 알면 됩니다.
막 프로그래밍을 배우기 시작했거나 프로그래밍을 모르는 분들에게 저 두 개념은 아주 헷갈리는 개념일 것입니다. 사실 어느정도 숙달된 프로그래머라도 일반인에게 저 두 개념을 쉽고 확실하
engkimbs.tistory.com
고로 프레임워크라는 뼈대, 틀 안에서 라이브러리라는 도구로 개발을 한다라는 플로우로 이해하면 될 것 같다.
Framework 특징
1. 개발자가 따라야 하는 가이드를 제공 (틀, 뼈대를 제공해준다고 보면 됨)
2. 개발을 할 수 있는 범위가 정해져 있다.
3. 개발자를 위한 다양한 도구, 플러그인들을 지원한다.
Framework 장단점
장점
- 개발 시간을 줄일 수 있음
- 정형화 되어 있기 때문에 일정 수준 이상의 품질 기대 가능 (생산성 향상)
- 유지보수 용이
단점
- 너무 의존하면 개발자의 능력이 떨어져서 스스로 개발하는 것이 어려워짐
- 습득에 걸리는 시간이 오래 걸림
- 기본 설계된 구조에 의해 자유도가 떨어짐
- 사용하지 않는 기능에 대한 라이브러리가 포함될 수 있음
Framework 종류
구분 | 설명 | 종류 |
영속성 Framework |
데이터 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들을 라이브러리화해서 구현한 프레임워크 | - Mybatis - Hibemate |
자바 Framework |
Java EE를 통한 웹 애플리케이션 개발에 초점을 맞추어 필요한 요소들을 모듈화 하여 제공하는 프레임워크 | - Spring Framework - 전자정부표준 - Spring - Struts |
화면 구현 Framework |
Front-End를 보다 쉽게 구현할 수 있게 틀을 제공하는 프레임워크 | - Boostrap - Foundation - MDL |
기능 및 지원 Framework |
특정 기능이나 업무 수행에 도움을 줄 수 있는 기능을 제공하는 프레임워크 | - Log4j - JUnit 5 - ANT, Maven, Gradle |
수업에서는 Mybatis, Spring Framework, Log4j, JUnit 5, Maven을 사용할 예정이고,
추가적으로 Hibernate, Gradle을 따로 공부해보면 좋을 것 같다고 하셨다.
STS설치
앞으로의 수업들을 위해 Spring Tool Suite 설치했다. 또 새로운 산을 넘기 위한 준비를 한다.
> 구글에 sts검색 후 spring.io 사이트 접속
Spring Tools 4 is the next generation of Spring tooling
Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or Theia IDE.
spring.io
> Spring Tools 는 4까지 나와있다.
이클립스, VScode, Theia에서 사용가능하다.
우리는 스크롤을 내려서 STS3으로 다운을 받았다.
> Spring Tool Suite 3 wiki 클릭
STS는 따로 설치하지 않아도 확장 프로그램으로도 설치할 수 있다.
비주얼 스튜디오에서는 확장-> marketplace에서 sts검색 후 설치.
이클립스에서는 Help -> Eclipse Marketplace -> sts 검색 후 원하는 스프링툴 설치
수업에서는 스프링 레거시 프로젝트 (스프링 프레임워크로 웹 프로젝트 작업) 이클립스 버전에 따라 문제가 생길 수 있기 때문에 사이트에서 직접 다운받았다.
아무튼 위 페이지로 들어가서 스크롤을 내리면 설치할 수 있는데, 윈도우는 zip, 맥은 dmg, 리눅스는 마지막 tar.gz로 해당 OS에 맞게 설치하면 된다.
나는 맥을 쓰기 때문에 설치 후 해당 앱 클릭 후 STS를 응용프로그램(Application)으로 옮겨주었다.
이클립스 기반의 STS이기 때문에 설치 후 프로그램을 열면 이클립스와 똑같은 환경처럼 보인다.
그리고 기본으로 들어가있는 servers는 전부 삭제 해준다(박스)
그리고 Preferences -> Encoding -> UTF-8로 인코딩 설정을 맞춰준다.
Context Types에서는 Java Class File, Text만 utf-8로 설정
json 인코딩 설정도 utf-8로 맞춰준다.
Spelling 체크에서도 UTF-8로 설정
그리고 Java Compiler 설정에서 JDK컴파일이 11로 되어있는지 확인
그러면 JRE 설정도 11로 설정되어있을 거다.
그리고 기존에 있던 서버를 Remove 후 아파치 톰캣 설치했던 버전으로 add시켜준다.
그리고 서버 탭에 Tomcat 추가시켜준다.
그리고 서버 설정
- Prot Name에서 Http Port Number 8080 -> 8088로 수정
- 타임아웃도 60초로 수정
- Server Options에서 Serve modules without publishing 체크 후 저장한 뒤 서버 실행으로 잘 실행되는지 확인해보기
그 다음 롬복(lombok.jar)도 추가해줬다.
이상하게 이전 이클립스를 쓸 때 롬복을 추가할 땐 자동으로 추가가 잘 됐는데 여기선 잘 안돼서 선생님 도움으로 수업끝나갈 쯤 추가해줬다.
나중에 잊어버릴까봐 메모해놓기
- 맥 터미널 -> l(L 소문자)s -a -> cd Desktop -> cd develop(롬복이 저장된 폴더명) -> l(L)s -a -> lombok.jar 확인 후 java -jar lombok.jar 입력해준 뒤 엔터
해주면 아래처럼 인스톨할 수 있다.
STS에 체크 되어있는지 확인하고(이클립스는 이전에 계속 수업 들었어서 추가 되어있음) Install / Update 눌러서 설치진행해준다.
성공적으로 롬복이 설치된 걸 확인할 수 있다.
그리고 잘 들어갔는지 확인
응용프로그램(Application) -> STS 우클릭 / 패키지 내용 보기 -> Contents -> Eclipse -> 안에 lombok.jar가 들어왔다면 성공이다.
이렇게 STS 환경설정은 끝이다.
그 다음은 Maven 설치다.
Apache Maven
- Maven 이란?
자바용 프로젝트 관리 도구로, project object model(POM) XML 문서를 통해 해당 프로젝트의 버전 정보 및 라이브러리 정보들을 통합하여 관리하는 프레임워크이다. 프로젝트를 관리하고, 프로젝트가 배포될 수 있게끔 build해주는 툴이라고 보면 된다. (통합 빌드 툴)
왜 쓸까? -> 여러 다른 환경(OS)에서 동일한 형태로 배포가 가능하게끔 해주는 프레임워크이기 때문에 쓴다.
라이브러리 종속성(라이브러리 관리)
일반적인 프로젝트는 개발자가 필요한 라이브러리를 직접 찾아서 추가해야 하지만, Maven을 사용하면 pom.xml 문서에 사용하고자 하는 라이브러리를 기술하여 등록하면 자동으로 프로젝트에 추가되므로 라이브러리 관리의 편리성을 제공해준다.
POM 이란?
POM(Project Object Model)은 하나의 프로젝트에서 사용하는 자바 버전, 라이브러리, 플러그인 구성을 통합하여 관리할 수 있게 각 설정 정보를 XML로 문서화한 것을 말한다.
그래서 pom.xml은 프로젝트 최상위에 존재하며, 프로젝트에 대한 정보, 라이브러리, 빌드에 대한 정보들을 작성하는 페이지다.
STS에는 기본적으로 EMBEDDED로 Maven이 설치가 되어있는데 따로 다운받아서 추가해줬다.
메이븐 설치는 아래 링크 참고
Maven – Download Apache Maven
Downloading Apache Maven 3.8.4 Apache Maven 3.8.4 is the latest release and recommended version for all users. The currently selected download mirror is https://dlcdn.apache.org/. If you encounter a problem with this mirror, please select another mirror. I
maven.apache.org
Binary zip archive에 apache-maven-3.8.4-bin.zip 설치
설치 후 Installations에 등록시켜준다.
그리고 다운받은 maven-3.8.4 폴더 -> conf -> settings.xml을 User Settings에 추가시켜준다.
그 다음 새로운 Maven 프로젝트 만들어주기
next 클릭
Archetype : 어떤 형태의 프로젝트를 만들 것인지
org.apache.maven.archetypes 선택
Group Id : 조직의 고유 Id를 적어줘도 되고, 대부분 회사나 사이트 도메인을 거꾸로 적는 것이 관습적이다.
Artifact Id : 프로젝트를 패키징 했을 때 패키징 된 프로젝트의 대표적인 이름
Version : 개발 중일 땐 보통 SANPSHOT으로 설정, 배포 시에는 RELEASE로 설정
package : 베이스 패키지
각각 채워주고 finish해주면 pom.xml에 추가 되는 것을 확인할 수 있다.
일일이 만들어줘야 했던 패키지, 클래스들이 자동으로 만들어지니까 신기했다.
아무튼 여기서 properties내에 있는 maven.compiler.source와 maven.compiler.target이 1.7로 되어 있어서 11로 변경 후
업데이트 프로젝트를 눌러주면 나는 반영이 좀 늦게 되긴 했는데 아무튼 Properties 들어가서 Java Compiler, Java Build Path 확인해보면 11로 변경되있는 걸 확인할 수 있다. 한 번에 변경이 되는게 좋은 점 같다.
그리고 사용하고자 하는 라이브러리가 있으면 maven repository에 검색 후 원하는 라이브러리를 가지고 오면 된다.
라이브러리는 텍스트 작성된 부분의 코드를 클릭하면 복사가 되고, pom.xml 내의 dependencies 안에 붙여 넣어 주면된다.
그렇게 가져온 라이브러리는 Ojdbc6, Lombok, JUnit, assertj 이다.
라이브러리를 추가해주면 자동으로 jar가 추가되는 것을 확인할 수 있다.
테스트 코드에 있는 메소드들은 JUnit Test로 테스트 진행
초록색이 뜨면 테스트 성공
assertTure( false ) 설정 후 테스트 진행 시 초록색이 빨간색으로 변하면서 어디서 에러가 나는지 알려준다.
실습 코드
티스토리 코드블럭 Java 적용
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--
modelVersion : maven 프로젝트 구성을 위해 사용되는 메이븐 버전 정보
-->
<modelVersion>4.0.0</modelVersion>
<!-- 프로젝트 정보 설정 -->
<!-- groupId : 조직의 고유한 Id를 정의한다. -->
<groupId>com.kh</groupId>
<artifactId>mybatis</artifactId>
<!-- 프로젝트의 버전 : 배포시 Release라고 지정되어 배포된다. -->
<version>0.0.1-SNAPSHOT</version>
<!-- 프로젝트 이름 -->
<name>mybatis</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!-- 라이브러리 속성 설정 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<!-- 라이브러리 의존성 설정 -->
<dependencies>
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6 -->
<!-- DB 관련 라이브러리 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
<!-- lombok 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<!-- scope : 라이브러리가 실행될 시점 설정 / provided : 컴파일할 때만 사용되며, 배포시에는 사용되지 않음 -->
<scope>provided</scope>
</dependency>
<!-- Test 관련 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<!-- 테스트를 더 효율적으로 검증할 수 있는 관련 라이브러러 -->
<!-- https://mvnrepository.com/artifact/org.assertj/assertj-core -->
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.21.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 프로젝트 빌드에 대한 설정(프로젝트 빌드에 사용될 여러가지 정보들) -->
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
수업 끝
'국비지원_Java > Java Programming_2' 카테고리의 다른 글
자바 프로그래밍_Day_98_Framework : MyBatis 동적 쿼리 / 게시글 조회 (0) | 2022.01.12 |
---|---|
자바 프로그래밍_Day_97_Framework : MyBatis 동적 SQL (0) | 2022.01.08 |
자바 프로그래밍_Day_96_Framework : MyBatis / 동적 쿼리 (0) | 2022.01.06 |
자바 프로그래밍_Day_95_Framework:MyBatis (0) | 2022.01.04 |
자바 프로그래밍_Day_94_Framework:MyBatis/TDD (0) | 2022.01.02 |