구조

프로젝트 설정
- 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 말고는 아직은 건드리지 않음)

- .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)를 위한 자바 코드와 리소스를 포함하는 디렉토리.
- main : 프로젝트의 주가 되는 자바 코드와 리소스를 포함하는 디렉터리
- .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 |
|---|