1. 개발환경 설정

** 공통

1. JDK 설치

2. DB 설치 및 실행

 - MariaDB 로컬 설치 or Docker를 통한 DB 설치 진행

 - Docker로 Container를 생성했을 경우, Container를 run 시켜주어

3. Sprint Starter 프로젝트 생성

  •  프로젝트명 :
  •  패키지 명 : 
  •  Java Version :
  •  Spring Boot Version :
  •  프로젝트에서 사용할 라이브러리
    • JDBC API : Java에서 DB 연결을 지원해주는 대표 라이브러리
    • MyBatis Framework : 
    • MySQL Driver : Mysql DB 관련 드라이버
    • ...

-> Spring Boot 프로젝트에서 Maven 빌드 도구를 사용할 경우, pom.xml 파일 내에 dependencies 명시
-> Spring Boot 프로젝트에서 Gradle 빌드 도구를 사용할 경우, build.gradle 파일 내에 dependencies 명시

** IDE로 Eclipse를 사용할 경우 

1. Eclipse 설치

2. Spring Tool Suite(sts) 설치

- Spring 개발을 지원하는 도구 중 하나로써, Eclipse를 기반으로 한 프로그램

3. Eclipse MarketPlace  상에서 Eclipse Enterprise Java & Web Developer Tools 설치 필요

4. Eclipse 환경설정 중 한글 인코딩 설정

 

2. mybatis 프레임워크 관련 설정

mybatis mapper 디렉토리 생성

- Spring Boot에서 sql 명령어를 실행시킬 때 많이 사용하는 기술은 mybatis이다.

- mybatis는 주로 xml 파일에 SQL 명령어를 작성한다.(해당 xml 파일을 mapper라고 명명한다.)

- mybatis mapper xml 파일을 저장하기 위해, src/main/resources 하위에 mappers(또는 사용자정의 이름 ex.sql) 패키지(디렉토리)를 생성

 

Spring Starter Project 프로젝트의 시작 클래스는?

프로젝트명+Application.java 클래스이다.
ex) 프로젝트명이 FmsBe일 경우, FmsBeApplication.java가 시작 클래스이다.

 

mybatis mapper 파일이란?
주로 .xml 형식으로 작성되며 CRUD sql 구문을 작성하고, Java DAO 또는 Repository 클래스를 매핑시켜주는 역할을 한다.(데이터 베이스 레코드와 Java 클래스를 매핑시켜주기 때문에, mapper라고 명명한다.)

3. Spring Application 기본 설정

src/main/resources/Application.yml 파일이란?

이 파일에는 포트정보, 데이터베이스 연결 정보, url, port, db id, db pw, session 유지 초 등 웹 애플리케이션의 중요한 설정 정보를 작성합니다. application.properties 파일에서 관리하기도 한다.
  • mybatis framework 관련 설정을 손쉽게 할 수 있다.
    • mapper-location : 별도로 코드를 작성하지 않고, mappers 폴더 내에 있는 .xml 파일 경로를 설정해 줄 수 있다.
    • type-aliases-package: mybatis가 참조할 dto 모델을 모아놓은 경로를 설정해 줄 수있다.
    • configuration.map-undescore-to-camel-case : mybatis가 자동으로 Camel Case로 변경해주는 옵션을 설정해 줄 수 있다.
  • server 일반 설정 관련을 손쉽게 할 수 있다.
    • port : Backend 서버 포트를 지정할 수 있다.
    • servlet.encoding : 인코딩 설정을 지정할 수 있다.
  • spring 프로파일 관련 설정을 손쉽게 할 수 있다.
    • profiles.active: Spring의 프로파일을 지정한다. default(local) 모드, dev 모드, stage 모드, prod 모드 등 flyway 라이브러리에 영향을 줄 수 있다.
    • config.activate.on-profile: 해당 값에 profile 값중에 하나를 놓고, 프로파일마다 datasource, flyway, redis 접속 정보를 다르게 줄 수 있다.

Spring Boot 에서는 Node.js의 express 처럼 웹서버 프로그램인 Apache Tomcat이 내장되어 있다.

 

4. 데이터베이스 & 테이블 생성 작업

DB 조회 프로그램의 경우, HeidiSQL, DBeaver, Mysql Workbench 등이 있다.

데이터베이스 관리시스템에 자료를 저장하기 위해서는 먼저 database를 만들고, 그 안에 table을 만들어야 한다.

보통 flyway를 사용할 경우, database만 만들고, table 생성의 경우 소스코드 상에서 추가한다.

 

5. MVC 패턴 이해

Spring 프레임워크에서는 MVC 패턴을 많이 사용한다. Model, View, Controller 의 약자로써,

Model은 자료를 저장하고 처리하는 요소이다. View는 화면 처리를 담당하는 요소이다. Controller는 프로그램의 흐름을 제어하는 요소이다.

 

실무에서는 Controller[controller/A.java] -> Service[service/A.java] -> DAO[repositories/A.java] 순으로 호출하는 경우가 많다.
DAO란?
Data Access Object로써, 실제로 DB 상에서 sql 쿼리문을 통해 값을 조회해 오거나,
수정/삽입/삭제하는 함수를 포함하고 있는 객체를 의미한다.
주로 데이터 처리를 하는 클래스를 의미한다. Repository라고 불리기도 한다.
mybatis 라이브러리를 사용할 경우,
entity별로 CRUD sql이 정의된 xml과 mapping 되어 있는 .java 파일을 의미한다.
(보통 repository 폴더명 하위에 존재한다.)

6. DAO 또는 Repository 파일 작성

7. mybatis mapper(.xml) 파일 생성 및 sql 작성하기

가장 기본적인 예시, 실제 프로젝트에서는 하위와 같이 사용한다.

- <mapper namespace="매핑할 DAO 또는 Repository 파일 경로"> ... </mapper>  형식으로 선언하여, mybatis가 매핑할 수 있도록 설정한다.
- 조회문일 경우
<select id="Repository 내 조회매핑함수명"
             parameterType="함수에 입력이 있을 경우, 입력 parameter 형식"
             resultType="결과 리스트의 단위 객체 형식, 리스트 형식으로 지정해줄 필요 없다!"> ... </select>
- #{ 입력 Dto 내 멤버변수명 } 형식으로 입력 파라미터에서 값을 가져와(.을 사용할 필요 없아), query에 사용할 수 있다.
- parameterType은 존재하더라도, 생략될 수 있다.(기본값이 <java.util.Map>인 듯?)
- 수정문일 경우
<update id="Repository 내 수정매핑함수명"
              parameterType="함수에 입력이 있을 경우, 입력 parameter 형식"> ... </update>
- query를 입력값의 조건(if)에 따라 다르게 변경시켜 적용하길 원하는 경우
<![CDATA[
   앞부분 쿼리 ~~~
]]>
<if test="입력 파라미터 관련 logic expression"> sql문 </if> // if의 test 항목에 입력된 식이 참일 경우만, query 추가
<![CDATA[
   뒷 부분 쿼리 ~~~
]]>
- 추가문일 경우
<insert id="Repository 내 추가매핑함수명"
            parameterType="함수에 입력이 있을 경우, 입력 parameter 형식"
            useGeneratedKey="AutoIncrement Key를 사용할 경우, true 지정"
            keyProperty="입력으로 받은 파라미터 객체에서, key가 되는 멤버변수명"> ... </insert>
- 삭제문일 경우
<delete id="Repository 내 추가매핑함수명"
             parameterType="함수에 입력이 있을 경우, 입력 parameter 형식"> ... </delete>

xml 문서란?
Extended Markup Language의 약자로써, html과 달리 xml는 태그를 자유롭게 만들고 사용할 수 있으며, xml은 주로 데이터를 주고 받을 때 표준 형식으로 사용된다.
프로그램의 환경설정, 화면 구성 등의 다양한 용도로 사용되기도 한다.

<?xml version="1.0" encoding="UTF-8"?> 구문은 해당 파일이 xml 문서임을 나타내는 구문이다.

8. Spring Boot로 FrontEnd도 구현할 경우, JSP와 CSS를 작성한다.

- 주로 API Server(BE) 용도로만 사용되므로, 생략한다.

- BE / FE를 동시에 구현할 경우, API Server 역할을 함과 동시에, 해당 API를 호출하여 작성하는 화면도 작성한다.

값을 return하는 것이 아닌, write.jsp로 이동하라는 의미

- JSP로 FE도 동시에 구현할 경우, Controller는 주로 API Server 보다화면 Url Routing의 기능을 수행한다.

참고 지식
- 파일 첨부를 하려면, <form enctype="multipart/form-data" /> 형식으로 요청을 보내야 한다.

 

간단한 Spring 어노테이션 목록

 

@Bean
public 리턴형식 함수명() { return new ...}

Java 객체를 만드는 명령어로써, 웹 서버가 시작 될 때, 해당 method가 실행되면서 객체가 생성된다.
Spring 프레임워크가 시작될 때 Method의 이름으로 된 bean이 만들어진다.
서버가 시작할 때 bean이 이미 만들어진다는 특징이 있다.
주로 Configuration 어노테이션이 들어간 Spring을 설정하는 클래스 내에 들어가는 메소드에서 선언한다.
@Repository
public class ProductDAO { ... }

DAO에서 쓰이는 어노테이션으로써, Spring 프레임워크에서 관리하는 데이터 처리를 위한 bean으로 등록시키는 역할을 한다.
서버가 시작될 때 자동으로 실행되고, 메모리에 로딩된다.

@Autowired
ProductDAO productDao;
서버 시작할 때, 만들어진 Bean 또는 Repository 객체를 연결시키는 역할을 한다.
@Repository 어노테이션이 없을 경우, ProductDAO 클래스의 객체를 만드는 작업을 직접 해야한다.
ex) ProductDAO productDao = new ProductDAO();
@Repository 어노테이션으로 감쌌을 경우, @Autowired 어노테이션으로 쉽게 사용할 수 있다.
ex)
@Autowired
ProductDAO productDao; // 원래 같으면 new ProduceDAO()로 객체를 생성해주어야 하나,
// 어노테이션으로 이미 생성된 객체를 참조시켜준다.(의존관계 주입 - dependency injection)
@Controller
public class ProductController { ... }
@Controller 어노테이션이 붙은 클래스는 Spring 프레임워크에서 관리하는 bean임을 선언하는 것을 의미한다.
웹 어플리케이션이 시작될 때, @Controller 어노테이션이 붙은 클래스가 자동 실행되고, 메모리에 로딩된다.
(bean은 Java 클래스의 객체를 의미한다.)

 

@RequestMapping("/")
public String home() { ... return "redirect:/list" }
주로 Controller 파일 내부에서 사용되는 어노테이션으로 url과 java method를 연결시켜주는 역할을 한다.
사용자가 해당 url을 입력하면, 매핑된 함수가 호출된다.
- redirect하고 싶을 때, "redirect:/url.." 형식으로 반환시킨다.
- 보통의 경우, 함수의 return 형식을 api response body 형식과 동일하게 지정한다.
@RequestParam(defaultValue="~") [변수형식] [변수명]
public [리턴 형식] 메소드(@RequestParam(defaultValue="~") String product_name, ...)
해당 어노테이션이 붙은 변수는 get 방식 또는 post 방식으로 전달된 값들을 저장하는 용도의 변수로 만들어준다.

defaultValue는 전달된 값이 없을 경우 기본값으로 사용할 값이다.

@PathVariable [변수형식] [변수명]

해당 어노테이션이 붙은 변수는 요청 url에서 path 파라미터로 전달받은 값을 저장하는 용도의 변수로 만들어준다.

@SpringBootApplication이란?
 스프링 부트의 가장 기본적인 설정을 선언해 줍니다.
내부적으로 기존 @ComponentScan과 @EnableAutoConfiguration 어노테이션이 하는 역할을
자동으로 수행한다.


@ComponentScan이란? 
- @Component 어노테이션 및 @Service, @Repository, @Controller 등의 어노테이션을 스캔하여 Bean으로 등록해주는 어노테이션입니다.

@EnableAutoConfiguration이란?
- @EnableAutoConfiguration은 사전에 정의한 라이브러리들 Bean으로 등록해 주는 어노테이션입니다.
- 사전에 정의한 라이브러리들이 모두가 등록되는 것은 아니고 특정 Condition(조건)이 만족될 경우에 Bean으로 등록합니다.
@Configuration이란?
설정파일을 만들기 위한 애노테이션이자, Bean을 등록하기 위한 어노테이션이다.
가시적으로 설정파일임을 선언하며, Bean을 등록하겠다는 의미이다.

 

더보기

ApplicationContext ac = new AnnotationConfigApplicationContext(xxx.class); 와 같은 코드를 사용한 사람의 질문
Q. AnnotationConfigApplicationContext() 안에 매겨변수에 적어주는 것만으로 충분하지 않은가?
- 해당 어노테이션을 사용하면 Bean을 등록할 때 SingleTon이 되도록 보장해준다는 장점이 있다.

- 어노테이션을 사용해야, Spring Container에서 Bean을 관리할 수 있게 된다.

@Component이란?
개발자가 직접 작성한 Class Bean으로 등록하기 위한 어노테이션이다.
SingleTon 클래스 Bean을 생성해주고, Spring Container에서 해당 Bean을 관리할 수 있다.


(@Scope 어노테이션으로, 싱글톤이 아닌 방식으로도 생성이 가능)
해당 어노테이션은 다른 Controller, Repository, Configuration 어노테이션과 같이 선언적 어노테이션이다.
(클래스를 정의했으니, 빈으로 등록하라는 의미이며, Spring이 ComponentScan 시, Component 어노테이션이 붙은 클래스들을 검색한다.)

 

 

 

학습 출처

- 스프링 부트 웹애플리케이션 첫걸음 JSP, MariaDB 연동

- https://memostack.tistory.com/237 [MemoStack:티스토리]

- Feign 적용 (tistory.com)

- 우아한 feign 적용기 | 우아한형제들 기술블로그 (woowahan.com)

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기