프로젝트 환경설정

1. 프로젝트 생성(https://start.spring.io/ 로 들어간다.)

프로젝트 생성

-프로젝트를 만들고 라이브러리를 살펴본다.

-html 화면렌더링하기 위해 뷰와 관련된 환경설정

-H2 DATABASE를 설정하고

-JPA랑 데이터베이스 설정하고

실제로 돌아가는지 확인할 예정

 

프로젝트

-Gradle

*Maven에서 Gradle로 많이 넘어 가는 추세이다.

*2.2버전 이상으로 설정 할 경우에는 조금 환경이 달라질 수 있다.

 

Spring Boot 버전

-안정화된 2.1.7버전으로

 

Dependencies - 라이브러리 추가

Spring web starter

-Build web Restful App, Spring MVC, Apache Tomcat as default embedded container

 

Thymeleaf

-modern server side jave template engine

*서버사이드

*JSP는 요즘 사용하지 않는다. 성능이나 여러 가지 이슈들이 있기 때문.

스프링부트 내장톰캣에서도 권장하지 않는다.

 

Spring Data JPA (유틸리티 성 라이브러리)

-스프링 데이터 jpa 대해서 설명을 하지 않을 예정

-스프링 jpa로 어떻게 잘 어플리케이션 만드는 법을 아는 것이 중요

그래서 jpa에 대해서 개인적으로 깊이 알고 공부하는 것이 좋고, 이번에는 도움용으로 사용하는 것이 좋음

 

H2 DATABASE

-개발하거나 테스트할 때 유용하다.

-H2 데이터베이스 설치는 간단하다. MYSQL을 어렵다.

-메모리를 내장상태에서 실행할 수도 있다. 간단하게 교육용 장점이 있따.

 

Lombok

-지루하게 반복하는코드(boilerplate code)를 줄여준다라는 의미

 

 

2. Intelli J 설치

https://www.jetbrains.com/ko-kr/idea/

 

IntelliJ IDEA: JetBrains가 만든 전문 개발자용 Java IDE

Enterprise Java, Scala, Kotlin 등을 지원하며 강력한 기능을 제공하고 인체 공학적으로 설계된 Java IDE

www.jetbrains.com

3. build.gradle import

4. build.gradle 알아보기

plugins{ }

안에 내용은 다음과 같다.

-springboot 2.1.13버전 설치 표기

*plugin이 라이브러리 까지 관리를 해주기 때문에 2.1.14로 변경할 경우

 다른 라이브러리 버전까지 전부 업그레이드 된다.

-springboot에 필요한 dependency 필요한 라이브러리 추가 되었다는 내용

-java언어 설치 표기

 

sourceCompatibility ='1.8'

-자바 버전

 

configurations {	
               compileOnly {	 
                extendsFrom annotationProcessor	
               }

-Lombok으로 인해 생성된 코드들. annotation processor가 핵심!

 

repositories {	
             mavenCentral()
}

-repositories mavenCentral에서 라이브러리를 다운로드 받겠다라는 의미

 

dependencies {	
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'	
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'	
implementation 'org.springframework.boot:spring-boot-starter-web'	
compileOnly 'org.projectlombok:lombok'	
runtimeOnly 'com.h2database:h2'	
annotationProcessor 'org.projectlombok:lombok'	
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

-내가 프로젝트 생성시 선택한 dependencies 라이브러리들이 나와 있다.

 

5. 환경세팅  확인_1

JpashopApplication에서 generation codemain method가 있으니 실행시켜보자.

-Tomcat started on port(s): 8080(http) with context.. 가 보인다.

 

제대로 시작이 되었는지 실행해보자. 지금까지 아무것도 만들지 않았으니 흰색페이지에

글자 몇개만 나와야 정상이다. 실행시켜 보니 정상세팅이 되었음을 확인!

6. 환경세팅  확인_2

테스트케이스 실행

External libraries에 라이브러리가 왜이렇게 많은가

-예를 들어 JPA 라이브러리가 있다면

 JPA와 의존된 라이브러리들을 다운로드 받는 행위가 다른 라이브러리에서도 일어나기 때문에 많아지게 된 것이다.

 

*예전에는 웹어플리케이션 개발을 위해 세팅만 1주일이 걸렸다고 한다.

지금까지 실행하는 것들을 쉬지 않고 이행했다면 몇분도 걸리지 않았을 것 같다..

 

7. Lombok세팅확인 (#마주한에러해결)

-Lombok 사용하면 작성해야 할 코드양을 줄여준다.

 

객체를 만들때 변수선언, 기본생성자 Getter, Setter까지 메소드를 작성해줘야 하지만,

Lombok 플러그인은 생성을 한번에 해결가능하다. 사용할 변수 선언만 해주고

클래스명 위에 @Data라는 annotation을 선언해주면 끝이다.

 

*Lombok을 사용하기 위해서 plugin을 설치해야 한다.

 

Lombok 세팅확인 : 세팅확인순서

File->Setting->Plugins->lombok검색->install->restart IDE->

*Lombok설치후 꼭 해주어야 할 것

File->Setting->Plugins->Compiler->annotation processor에서 enable 클릭

 

Lombok 실제 동작 확인

다시한번 Lombok설정이 잘 작동되는지 코드를 실행(RUN)으로 확인

#마주한에러해결1

다음과 같은 에러 발생

Caused by: java.net.BindException: Address already in use: bind

확인해보니 톰캣 서버의 포트가 열려 있는 상태에서 코드실행하면 발생하는 에러라고 한다.

 

CMD창에서

netstat -ano 또는 netstat -a -n -o로 활성연결된 톰캣의 8080포트확인

taskkill /f /pid 2536 (8080포트로 활성화된 프로세스를 종료함)

이후 다시 실행해도 코드실행완료되지 않아 무슨 문제인지 보았더니

그리고 SpringApplication.run(JpashopApplication.class, args)을 삭제하지 않은 것이었다.

지웠더니 코드실행 및 출력이 에러 없이 완료 되었다.

 

 

다시 재실행 하니 data = hello가 보인다.

 

환경설정 추가

최근 IntelliJ 버전은 Gradle로 실행을 하는 것이 기본 설정이다.

이러한 기본설정은 실행속도가 느리기 때문에 다음과 같이 변경하기로 한다.

Setting-> Build, Execution, Deployment-> Build Tools -> Gradle

Gradle Build and run using: Gradle -> IntelliJ IDEA

Run tests using: Gradle -> IntelliJ IDEA

 

프로젝트생성까지 완료!!

스프링부트란

-복잡하고 어려운 스프링기술을 간결하고 쉽게 사용할 수 있도록 도와주는 기술

 

JPA

-강력한 ORM 기술

-자바진영에서는 두가지 기술의 조합으로 높은 생산성과 맵 어플리케이션을 개발하는 추세

 

목표

-프로젝트를 처음부터 끝까지 코딩으로 완성하는 것이 목표

 

목록

프로젝트 환경설정

-스프링부트

-Gradle

-JPA

-톰캣

-Thymeleaf(타임리프)

-HIBERNATE

 

요구사항 분석

-쇼핑몰 구축을 위한 요구사항 분석

 

도메인설계

-요구사항기반으로

 

엔티티설계

 

테이블설계

 

JPA로 엔티티와 테이블을 ORM으로 맵핑

 

애플리케이션 아키텍쳐 구성

 

핵심비즈니스 로직개발

-테스트케이스로 이것을 검증한다.

 

=>이것들을 하게 되면 도메인 주도 설계를 이해 할 수 있다.

=>이것을 기반으로 웹계층개발을 올린다.

=>컨트롤러 타임리프로 올려서 HTML이 렌더링 되게 만든다.

실습할 네트워크 구성도

 

실습 네트워크 전체 구성도 설명

1. 3개의 zone을 구성해서 공인 ip(200.200.200.240/28)를 받아 하나의 네트워크 구성, 그리고 2개 네트워크를 사설 ip로

   구성하여 총 3개 네트워크(zone)을 구성했다.

 

2. 2개의 사설 ip는 200.200.200.243 공인 ip가 있는 dhcp서버를 이용하여 사설 ip 2개를 노란색, 주황색 zone에 있는

   pc에 ip를 할당 받았다.

 

3. Main-Server-1, Main-Server-2 에 FHRP(게이트웨이 이중화)방법 중에 하나인 HSRP를 이용해 구성했다.

 

4. Backbone 밑에 내려가는 포트에 nat 설정을 했다.

 

5. backbone에서 ISP와 이어져 있는 경로를 stating routing을 통해 구성했다.

 

실습

1.3개의 zone을 구성해서 공인 ip(200.200.200.240/28)를 받아 하나의 네트워크 구성, 그리고 2개 네트워크를 사설 ip

  로 구성하여 총 3개 네트워크(zone)을 구성했다.

총 3개 네트워크 zone 구성

 

2개의 사설 네트워크와 이어져 있는 L2스위치에는 vlan10, 20을 각각 주었고

1개 공인 IP를 받은 곳에는 vlan 200을 주었다.

 

L2-1(vlan 10), L2-2(vlan 20), L2-3(vlan 200)

명령어

L2SW(config)#vlan 10

L2SW(config-vlan)#exit

L2SW(config)#interface fa0/3

L2SW(config)#switchport mode access

L2SW(config)#switchport access vlan 10

L2SW(config)#exit

 

위와 같은 방법으로 vlan20, vlan 200도 동일하게 포트에 네트워크 별로 vlan으로 나누었다.

#내가 마주한 문제

switchport mode trunk는 서로 다른 네트워크를 구분하기 위해 해주는 기능인데,

현재 구성도에서는 각 L2스위치당 네트워크 1개만 존재하기 때문에 해줄 필요가 없다.

해줄 경우에는 dhcp서버에서 사설 ip를 설정하고 난후 ip를 할당 받지 못하니

하나의 네트워크가 있을 때에는 trunk를 해주지 말 것! (dhcp서버에서 ip를 할당받지 못해 한참을 헤매다 알아낸 사실ㅠ)

 

2. 2개의 사설 ip는 200.200.200.243 공인 ip가 있는 dhcp서버를 이용하여 사설 ip 2개를 노란색, 주황색 zone에 있는

   pc에 ip를 할당 받았다.

 

현재 상태에서는 backbone으로 가거나 internet으로 갈 수 없고 dhcp에서 ip를 가져와야 하는 상황이다.

 

DHCP 서버(200.200.200.243)로 부터 IP를 할당 받기 위해서는 MAIN-1,2장비에 3가지를 해야 한다.

a.DHCP 서버에서 DHCP에서 받아올 IP를 서버에서 하기처럼 설정 및 서버자체에 공인 IP(200.200.200.243)설정

(IP ADDRESS : 192.168.10.1, GATEWAY : 192.168.10.254, DNS : 8.8.8.8, SUBNET MASK : 255.255.255.0)

 

b.MAIN-1,2 장비가 200.200.200.240/28를 모르기 때문에 각각 ip를 부여 한다.

MAIN-1(config)#int vlan 200

MAIN-1(config)#ip address 200.200.200.252 255.255.255.240

MAIN-1(config)#no shutdown

MAIN-1(config)#standby 200 ip 200.200.200.254(게이트웨이주소)

*이 게이트웨이 주소를 보고 MAIN1,2에 들어오고 다시 다른 곳으로 통신하러 나갈 때에는 ip 200.200.200.252 로 통신

 

MAIN-2(config)#int vlan 200

MAIN-2(config)#ip address 200.200.200.253 255.255.255.240 (각각 다른 ip를 부여 해야 한다.)

MAIN-2(config)#no shutdown

MAIN-2(config)#standby 200 ip 200.200.200.254 (<-하는김에 200 네트워크도 이중화설정완료)

 

c.DHCP에서 ip를 받아올 수 있도록 ip helper-address 명령어를 부여한다.

MAIN-1(config)#int vlan 10 (vlan 20도 동일하게 할 것)

MAIN-1(config-if)#ip helper-address 200.200.200.243(dhcp 서버역할을 하는 서버 ip 주소를 부여)

MAIN-1(config-if)#exit

 

MAIN-2(config)#int vlan 10 (vlan 20도 동일하게 할 것)

MAIN-2(config-if)#ip helper-address 200.200.200.243(dhcp 서버역할을 하는 서버 ip 주소를 부여)

MAIN-1(config-if)#exit

 

=> 각 PC에 들어가서 ip configuration에 들어가서 DHCP를 누르면 IP 할당이 된다.

 

 

3번부터는 다음 글에서 작성하도록 하겠음!

 

+ Recent posts