day25 - 0829
프레임워크(FrameWork)
- ???
** 라이브러리(Library)
- 자주 사용되는 유용한 기능을 하는 class들을 미리 만들어 놓고 기능별로 분류하여 제공하는 패키지 파일
- API는 이러한 클래스들의 코드를 문서로 제공하는 것.
Spring Framework
- Java / Kotlin 기반의 웹 프레임워크
- 특징
1) 의존성 주입 (Dependency Injection, DI)
- 의존성 : 변경사항이 있는 경우 서로에게 영향을 많이 주는 관계
- 사용자가 객체를 직접 생성하는게 아니라 외부(Spring)에서 생성해서 사용자에게 주입
2) 제어 역전 (Inversion Of Control, IOC)
- 사용자의 제어권(객체 생성, 메소드 호출 등)을 다른 주체에게 넘기는 것
- Spring에게 제어를 위임하여 Spring이 만든 객체를 주입 -> 의존성 객체의 메소드 호출
3) POJO (Plain Old Java Object) 방식
4) 관점 지향형 프로그래밍 (Aspect Oriented Programming, AOP)
5) 생명주기 관리
Spring Boot Framework
- Spring Boot Starter
프로젝트에 설정해야 할 다수의 의존성들을 사전에 미리 정의해서 의존성 조합 제공
- Embedded Tomcat (내장 톰캣)
Spring Boot Framework에는 Tomcat이 내장되어 있다
- AutoConfiguration (자동 환경설정)
Spring Framework의 기본 프로젝트 세팅의 상당 부분을 자동 설정(AutoConfiguration)
** Servlet
- Client의 요청을 처리하고 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 Java 프로그램
** Servlet Container
- Servlet을 관리해주는 Container
- Client의 요청(Request)을 받아주고 응답(Response)할 수 있게 웹 서버와 소켓으로 통신
** Tomcat
- Java 기반의 Servlet Container이자 웹 서버
STS (Spring Tool Suite)
- Spring Framework를 지원하는 Eclipse 기반 통합 개발 환경(Integrated Development Environment, IDE)
필수 설정 (Eclipse와 동일)
0. 설정창 진입
Window - Preferences 선택
1. Encoding 설정
encoding 검색 - General - Workspace - Text file encoding에서 UTF-8로 변경
2. Font 설정
font 검색 - General - Appearance - Colors and Fonts에서 Basic - Text Font에서 원하는 폰트 및 글자 크기 변경
3. JDK 설정
jdk 검색 - Installed JREs - Add 선택 - JDK가 설치된 경로를 추가
** JDK(Java Development Kit) : Java 개발자용 도구
** JRE(Java Runtime Environment) : Java 실행 환경
** JDK는 JRE를 포함하고 있다
4. GitHub commit 설정
git 검색 - Version Control(Team) - Git - Configuration - Add Entry 선택 후 GitHub 이메일과 닉네임 설정
5. GitHub와 연동
1) 우측 상단에 Open Perspective 선택
2) Git 선택
3) Git Repositories에서 Clone a Git repository 선택
4) 불러올 GitHub repository URL, GitHub 아이디 및 토큰 입력
Spring Starter 프로젝트 생성
1. New - New Spring Starter Project 선택
- Service URL : 해당 주소(Spring initializer)로 연결하여 프로젝트를 생성 (대신 생성해준다)
- Name : 프로젝트명
- Type : 빌드 프레임워크 선택 (Maven / Gradle)
- Packaging : 내장 서버(Embeded Tomcat)만 사용할 것인지 Jar(Java Archive /
외장 서버도 사용할 것인지War (Web Archive)
- Java Version : Java 버전 선택 (8 / 11 / 17 / 18)
- Language : Java 기반 언어 선택 (Java / Kotlin / Groovy)
- Group : 프로젝트를 생성하는 조직명
- Artifact : 해당 조직에서 만든 프로그램명
- Description : 상세 설명
- Package : 패키지명, 보통 Group과 Artifact를 합쳐서 만든다
2. Spring Starter Project의 Dependency 설정
- 사용할 라이브러리 선택
- Spring Boot DevTools
- Property Defaults (속성 기본값)
- Automatic Restart (자동 재시작)
파일 수정 후 저장을 하면, Classpath에 존재하는 파일의 변경을 감지하고, 자동으로 서버를 재시작 - Live Reload (라이브 리로드)
JS 파일을 수정하면 자동으로 브라우저를 새로 고침 - Global Settings (전역 설정)
- Remote Applications (원격 애플리케이션)
- Spring Web
Spring Starter Project의 구성
src
● src/main - 배포될 프로젝트에 포함되는 내용들이 위치하는 곳
● src/main/java - Java Source File이 위치하는 곳
● 프로젝트명Application.java - Spring Boot App이 시작하는 main 파일
● ServletInitializer.java - Web Container에 배포될 경우 운영 설정 파일
● src/main/resources - 설정 파일과 정적 컨텐츠가 위치하는 곳
● static - 정적 컨텐츠 파일의 위치 ex) 이미지, 스크립트 등
● templates - Thymeleaf 등 HTML 기반 템플릿 파일의 위치
● application.properties - Spring Boot 중앙 설정 파일(yml로 치환 가능)
● src/main/webapp - (구) 설정 파일의 위치, (현) JSP 파일의 위치
● src/test - 배포될 프로젝트에 포함되지 않는 테스트 코드가 위치하는 곳
target
- maven build의 결과물이 생성되는 위치
- 생성할 때마다 파일이 변경되므로 Git과 같은 버전 관리 시스템에서 관리되지 않도록 제외 설정한다
help.md
- Spring에서 제공하는 프로젝트 기본 설명서 파일
- Markdown 형식으로 작성되어 있으며 Reference Documentation과 Guides에 대한 Link가 존재한다
mvnw
- Maven Wrapper 파일
- 별도의 Maven 설치 없이 프로젝트 내에서 Maven을 사용할 수 있다
● mvnw : Linux 계열을 위한 파일
● mvnw.cmd : Windows를 위한 파일
PORT 번호 변경
1. Oracle DB의 HTTP PORT 번호 변경
- Oracle이 사용하는 PORT 번호
- Oracle Database Listener : 1521
- Oracle Service for Microsoft Transaction Server : 2030
- Oracle HTTP Listener : 8080
1) 관리자 계정(system)으로 로그인
2) HTTP PORT 번호 변경 쿼리 실행 - PORT번호에 바꿀 PORT 번호를 입력한다
exec dmbs_xdb.setHttpport(PORT번호);
3) 변경된 HTTP PORT 번호를 확인하는 쿼리
select dbms_xdb.getHttpport() from dual;
2. Spring Boot의 PORT 번호 변경
src/main/resources - application.properties에서 Port 번호 8888로 변경
MVC 패턴
- 프로그램을 Model - View - Controller 로 나누어 개발하는 디자인 패턴
Model
- Controller가 호출을 하면 DB와 연동하여 데이터와 연관된 비즈니스 로직을 처리 (CRUD)
View
- Controller로부터 받은 Model의 결과값을 사용자에게 화면으로 출력
Controller
- Model과 View 사이의 인터페이스(데이터 교환의 중간자) 역할
- 사용자로부터 View에 요청이 있으면 Controller는 해당 업무를 수행하는 Model을 호출하고
Model이 업무를 모두 수행하면 다시 결과를 View에 전달하는 역할을 합니다.
** DTO (Data Transfer Object)
DTO는 계층 간(Controller, View, Business Layer) 데이터 교환을 위한 자바 빈즈(Java Beans)를 의미한다.
DTO는 로직을 가지지 않는 데이터 객체이고 getter/setter 메소드만 가진 클래스를 의미한다.
- 필드
- 기본 생성자
- getter & setter
Controller
- MVC 패턴(Model-View-Controller)에서 Controller를 의미
- 클래스명 위에 @Controller라는 annotation을 작성하여 해당 클래스가 컨트롤러임을 명시
Annotation
@Controller | 클래스명 위에 작성하며 해당 클래스가 Controller 역할을 하게 된다 |
@RequestMapping("주소명") | 요청(request)을 특정 클래스나 메소드에 mapping한다 |
@ResponseBody | 메소드의 return 값(응답, response)을 HTTP Response body에 담는 역할 |
@RequestParam | 요청 파라미터에 바인딩되어야 할 매개 변수를 나타냄 |
Spring03quiz - src/main/java - com.kh.spring03.controller - QuizController
Spring04quiz - src/main/java - com.kh.spring04.controller - QuizController
spring04까지