본문 바로가기
BACK-END/SPRING

Spring | 2025-12-01

by codechu 2025. 12. 1.

구조

 

프로젝트 설정

  • Name :   프로젝트 이름
  • Location : 프로젝트가 생성될 위치
  • Language : 프로젝트 개발에 사용될 언어 설정
  • type : 빌더 및 프로젝트 의존성 관리자 종류 지정
  • Group : 프로젝트 그룹
  • Artifact : 프로젝트 식별자 ( 특별한 이유가 없다면 name과 동일하게 지정됨. 단 케밥 케이스 사용)
  • JDK : 프로젝트를 컴파일 할때 사용할 JDK 지정 (17)
  • Java : IDE 에서 문법을 검사할 때 사용할 자바 버전 지정 ( 자바 17 )
  • Packaging : 컴파일 방식 지정
    • Jar : 웹 어플리케이션이 아카이브에 포함된 형태로 컴파일, 독립된 형태로 실행될 수있도록 한다.
    • War : 웹 어플리케이션이 누락된 상태로 컴 파일. 실행하기 위해 별도의 웹 어플리케이션이 요구된다.

 

프로젝트 의존성 설정

  • Developer Tools
    • Lombok : 어노테이션 기반 코드 자동완성 및 속성 부여를 위한 의존성
    • Spring boot DevTools : 스프링 부트 개발 보조 및 생산성 향상을 위한 의존성
  • web 
    • Spring  Web : 스프링 부트 웹 개발 확장 의존성
  • Templete Engines 
    • Thymeleaf : 스프링 부트를 활용한 동적 HTML 개발을 위한 템플릿 엔진 중 하나인 타임 리프를 사용하기 위한 의존성.
  • SQL 
    • JDBC API : JDBC (Java database connectivity) 는 자바와 데이터베이스 간의 연결을 위한 인터페이서의 집한인 구조체이며, 스프링부트 프레임워크에서 직접 관리하지 않는 저수준(low level)의 의존성.
    • Spring boot data JDBC : DBCP ( Database connection pool, 기본적으로 hikariCP)을 포함하는 스프링 부트 프레임워크에서 관리하는 고수준의 의존성
    • Mybatis Frameword : SQL 을 직접 작성하는 매퍼(Mapper)기반의 ORM(Object-Relation Mapping)의 일종인 MyBatis을 위한 의존성
    • MariaDB Driver : JDBC 를 구조체를 구현한 Maria DB DBMS에 접속하기 위한 구현체 의존성

 

프로젝트 구조 (scr.pom 말고는 아직은 건드리지 않음)

빼먹은 의존성은 pom.xml - dependencies 에서 add 속성해서 spring JDBC 추가하기

 

  • .idea : 해당 프로젝트 IntelliJ IDEA 관련 설정을 포함하는 디렉토리. 특별한 경우가 아니라면 건드리지 않는다.
  • .mvn : Maven 빌더/ 의존성 관리자 관련 설정을 포함하는 디렉토리. 특별한 경우가 아니라면 건드리지 않는다.
  • src : 프로젝트의 자바 코드와 리소스를 포함하는 디렉토리.
    • main : 프로젝트의 주가 되는 자바 코드와 리소스를 포함하는 디렉터리
      • java : 프로젝트의 자바 코드를 포함하는 디렉토리. 해당 디렉토리 밑으로는 자바 코드로 인식하고 자바 문법을 적용한다.
      • resources : 프로젝트의 자바 코드와의 리소스 (HTML, CSS,JS 이미지, 영상 등) 을 담고있다.
        • mappers : MyBatis 에서 사용할 SQL을 작성할 XML 파일을 포함하기 위한 디렉토리.  설정에 따라 디렉토리 이름을 변경할 수 있다. 
        • static : 프로젝트에서 사용할 정적인 리소스(정적인 html, css,js이미지,영상 파일)을 포함하는 디렉토리. 해당 디렉토리는 루트(/) 에 매핑되어 있다.
        •  templates : 프로젝트의 템플릿 엔진을 위한 동적인 HTML 파일을 포함하는 디렉토리 이다.
        • application.properties : 서버와 스프링 부트, 의존성들의 설정을 담는 파일.
    • test : 프로젝트 단위 테스트( unit test)를 위한 자바 코드와 리소스를 포함하는 디렉토리.
  • .gitattributes : Git VCS 에서 개별 파일이나 디렉토리에 대한 설정을 명시하기 위한 파일.
  • .gitigrone : Git VCS 에서 개별 파일이나 디렉토리를 제외하기 위한 파일.
  • HELP.md : Spring boot 와 Maven에 관한 가이드를 담고 있는 파일. 삭제하여도 무관함.
  • mvnw : Maven 래퍼(Wrapper) 맥/리눅스 계열 운영체제를 위해 존재한다. 특별한 경우가 아니라면 건드리지 않는다.
  • mvnc.cmd : Maven 래퍼(Wrapper). 윈도우 계역 운영체제를 위해 존재한다. 특별한 경우가 아니라면 건드리지 않는다.
  • pom.xml : Maven 빌더/ 의존성 관리자 및 프로젝트에 대한 설정 파일. 의존성을 추가하는 등의 관리를 할 수 있다.

 

프로젝트 초기 설정 

 

JDBC 설정

  • JDBC API : Spring Boot Data JDBC 등의 의존성을 설정한 경우 아래와 같이 DBMS와 관련된 정보를 application.properties 에 제공해 주어야 한다.

 

spring.datasource.driver-class-name = [드라이버 클래스 이름]
spring.datasource.url=[접속 주소]
spring.datasource.username =[사용자 이름]
spring.datasource.password=[사용자 비밀번호]

 

  • 드라이버 클래스 이름은 JDBC 구조체를 구현하는 구현체의 드라이버 클래스 이름이어야 하며 별도의 의존성을 추가하여야 한다.(Maria db driver. my sql )
  • spring.datasource.url은 JDBC 를 통해 DBMS에 접속할때 주로 jdbc : [DBMS 종류 ] : // [호스트] : [포트]/ 의 형식을 사용하며 가령 Maria DB 에  localhost 로스트에 3306포트를 사용해 접속한다면 그 url은  jdbc:mariadb://localhost : 3306 과 같다.

 

Thymeleaf 설정

  • Thymeleaf는 Spring Boot 에서 동적인 html 파일을 위해 사용하는 뷰 템플릿 엔진 중 하나이다.
  • Thymeleaf문법을 사용하기 위해 html 문서의 <html> 태그 속성으로  를 추가한다
  • 모든
  • Thymeleafdhk 와 관련된 내용은 서버단에서 컴파일된 상태로 클라이언트에게 응답으로 반환됨으로, 클라이언트는 이와 관련된 내용(원본 코드)을 확인할 수 있다

 

표현식

  • 변수 표현식 (${}) : 어떠한 값이나 조건을 표현하기 위해 사용하는 표현식으로, 중괄호 내부에서는 자바 문법을 사용할 수 있다. 단, 문자열 표현은 홑따옴표(') 를 사용한다
  • 예시 <div th:text="$(Math.random())"><div>
  • 주소 표현식(@{} ): 주소(경로)를 표현하기 위해 사용하는 표현식으로 중괄호 내부는 '주소' (매개변수 = 값)의 형식으로 작성한다.
  • 예시(컴파일 전) : <a href ="@('/board' ( id = 'notice',page = 5 ))">공지사항 </a>
  • 예시(컴파일 후) :  <a href ="/board ?id=notice&page=5"> 공지사항 </a>
  • 조각 표현식 (~{}): 다른 ThymeleaHTML 파일에 있는 코드 조각을 인입하기 위해 사용하는 표현식으로 HTML 파일 경로 :: 조각 이름 의 형식으로 작성할 수 있다.
  • 타임 표현식(T () ): 자바의 특정 타입에 접근하기 위해 사용한다. 
    • 예시: <div th:text="$(T(java.time.LocalDateTime).now())"></div>
    • LocalDateTime 이 가지고 있는 정적인 메서드 now를 호출하기 위해서는 now 메서드를 포함하고 있는 타입( java.time.localdatetime) 까지 t() 표현식을 사용하여 접근하여야 한다.
    • 타입으로 접근시 정적인 멤버에만 접근할수 있음에 유의한다.

속성

 

  • th:attr : 해당 태그에 html 속성 및 값을 부여하기 위해 사용한다. th:attr ="이름 - 값  
  • th:checkd : 해당 속성 값인 조건이 참(true) 일 때만 해당 태그에 checked 속성을 부여한다.'
  • th:disabled : 해당 속성 값인 조건이 참(true) 일 때 해당 태그에 disabled 속성을 부여한다
  • th: each
  • th:fragment : Thymeleaf코드 조각의 이름(식별자)를 지정하기 위해 사용한다.
  • th:if : 해당 속성 값인 조건이 참(true)일 때에만 해당 태그를 응답에 포함시킨다.
  • th:replace : 해당 속성을 가지고 있는 태그를 thymeleaf 코드 조각으로 대체하기 위해 사용한다.
  • th:selected : 해당 속성 값인 조건이 참 일때 해당 태그에 selected 속성을 부여한다
  • th:text 해당 속성이 부여된 태그의 내부 내용을 지정한다. 특수문자를 이스케이프 처리한다.
  • th:utext 해당 속성이 부여된 태그의 내부 내용을 지정한다. 특수문자를 이스케이프 처리하지 않는다.
  • th:value 해당 속성이 부여된 태그의 value 속성 값을 지정한다
  • th:with : 해당 속성이 부여된 태그 혹은 하위 태그에서 사용 할 수 있는 변수를 선언한다.
  • th:with="이름 = 값" 형식으로 작성하며, 여러개의 변수가 필요한 경우 쉼표(,)로 구분해 선언하되, th:with 속성을 동일 태그에 여러개 작성하지 않는다.

 

기타

 

<th:block></th:block> : 가상의 태그이며 별도의 조치를 하지 않는다면 실제로 렌더링되지 않는다.

 

 

 

 

 

 

 

MyBatis 설정

  • MyBatis Framework 의존성을 추가한 경우 아래와 같이 관련된 정보를 application.properties 에 제공해 주어야 한다. 
mybatis.mapper-locations=classpath:/mappers/**/*.xml
  • classpath는 /src/main/resources/를 의미한다.
  • 필요에 따라 디렉토리의 이름을 변경할 수도 있다.
spring.application.name=stydy-memo

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url =jdbc:mariadb://localhost:33061/
spring.datasource.username=
spring.datasource.password=

spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.cache=false

mybatis.mapper-locations=classpath:/mappers/**/*.xml


// 타임리프 템플릿 캐시를 비활성화한다.
// 개발 중에는 HTML 수정 사항이 즉시 반영되어야 하기 때문에 캐시를 끄는 것이 좋다.
// 캐시를 활성화하면 템플릿을 메모리에 저장해 재사용하므로 속도는 빠르지만,
// 수정된 내용이 반영되지 않는 문제가 발생할 수 있다.
// 운영 환경에서는 성능을 위해 캐시를 다시 활성화한다.

mysql 경우

spring.datasource.driver-class-name=org.mysql.jdbc.Driver
spring.datasource.url =jdbc:mysql://localhost:33061/
spring.datasource.username=root
spring.datasource.password=

mybatis.mapper-locations=classpath:/mappers/**/*.xml

 

  <link href="/hello.css" rel="stylesheet"> -> 어디에 있는 제일 최상단에 위치한 hello.css를 
  불러오겠다는 말/ 사용 권장
 
  <link href="hello.css" rel="stylesheet"> 상대경로
    http:localhost:8080// a/b/c/d/e/f/g/hello.css
    
   <link href="../hello.css" rel="stylesheet"> : 상대 경로 한 단계 위
  http:localhost:8080// a/b/c/d/e/f/g/hello.css

 

MVC

  • MVC(Model - view - controller) 패턴은 웹 개발 및 프로그램 개발 시에 사용하는 개발  패턴 중 하나이다.
  • 원활환 협업 및 향후의 유지 관리, 보수를 용이하게 하기 위해 MVC 패텬을 지키면서 개발하는 것이 매우 중요하다

 

Controller ( 클라이언트와 가장 가까움 )

  • 컨트롤러( Controller ) MVC 패턴에서 실질적으로 사용자(클라이언트)의 요청(Request)을 받아 응답(Response)을 되돌려주는 엔드포인트(끝단, End-Point)역할을 하는 클래스이다.
  • 요청을 받을 수 있는 주소(경로)에 대한 매핑(mapping)된 메서드를 가지고 있다.
  • 요청에서 전달받은 인자에 대한 유효성 검사 등의 로직을 직접 구현하지 않는것이 좋다. (if 비밀번호 다섯자리 유효한가 등의 실제 로직 하지 않은 서비스가 함)
  • 데이터베이스에 접속하기 위한 로직을 구현하거나, Data Access Layer(DAL)를 의존성으로 가져서는 안 된다.

Model

Service Logic

    • 서비스(Service)는 MVC 패턴에서 컨트롤러(Controller)가 넘겨준 인자에 대한 유효성 검사(정규화)를 실시한다.
    • 그 외 대체적인 로직을 구현하고, 컨트롤러(Controller)와  Data Access Layer(DAL)간의 연결고리 역할을 한다.
    • 데이터베이스에 접속하기 위한 로직을 구현할 수 없다.
    • Data Access Layer(DAL)을 의존성으로 가질 수 있다.(컨트롤러와 서비스의 차이점)
Data Access Layer(DAL)란?

➡ 데이터베이스와 직접 얘기하는 층(계층)
➡ DB에 데이터를 넣고, 가져오고, 수정하고, 지우는 일을 담당하는 계층
즉, 서비스(Service) 는 DB를 직접 만지지 않고**DAL에게
“야, DB에서 이거 가져와줘!”라고 부탁하는 구조야.

 

 

Data Access Layer(DAL)

  • Data Access Layer(DAL : 데이터 접근 계층)은 MVC 패턴에서 데이터베이스에 직접적으로 접근할 수 있는 유일한 구성요소이다.
  • 넘겨받는 데이터에 대한 로직을 구현하거나 패턴 내의 다른 구성요소에 데한 의존성을 가지지 않아야 한다.
  • Data Access Object(DAO) : JDBC API를 통한 DriverManager가 제공하는 기능으로 저수준(Low - Level) 코드로 직접 데이터베이스에 연결해 필요한 CRUD 기능을 구현한다.
  • Repository : JPA (Java Persistence API) 등의 OMR(Object Relational Mapping) 을 사용할 때 사용하는 DAL 의 접미어이다.
  • Mapper :MyBitas 등의 SQL Mapper 를 사용할 때 사용하는 DAL의 접미어이다.

Data Structure

  • Entity : 데이터 베이스의  테이블과 패킹디는 데이터 구조 클래스이다. 테이블이 가지는 열을 멤버 변수로 가지고, primary key 에 대해 통일성을 판별한다.
  • Data Transfer Object(DTO) : 계층간의 데이터를 전달하거나 엔티티가 가질 수 없는 데이터를 추가로 가지게 하기 위해 사용한다. 가변적 (Mutable)이고, 참조 기반으로 동일성을 판별한다.
  • Value Object(VO) : 계층 간에 데이터를 전달하거나 엔티티가 가질 수 없는 데이터를 추가로 가지게 하기 위해 사용한다. 불변적(immutable)이고 값기반으로 동일성을 판별한다.

View

  • 뷰(view)는  MVC 패턴에서 사용자에게 보여질 화면을 구현하는 부분이다. 주로 동적인 HTML 표현을 위해 사용한다.
  • 뷰를 처기하기 위한 템플릿 엔진의 종류가 많은데 대표적인 예는 아래와 같다.
    • JSP
    • Thymeleaf
    • FreeMaker

 

 

 

'BACK-END > SPRING' 카테고리의 다른 글

Spring | 2025-12-02  (1) 2025.12.03