안녕하세요 ! 민 입니다 . 이틀 전에 스프링의 개념에 대해서 블로그를 작성해보았는데요. 역시 코딩은 백문이 불여일견이죠 . 개념을 알아도 사용해보지 않으면 모르는것과 다름없듯이 스프링을 사용해보면서 그 예시와 설명을 확인해보시죠 !
목차
1. 스프링의 구조
2. 구조에 대한 설명
3. 요약
스프링으로 인터넷강의를 보시거나 공부해보시면 구조가 눈에 들어오실 것 입니다 .
pom.xml
web.xml
root-context.xml
servlet-context.xml
Repository
Service
Controller
Mapper
Mybatis
DTO
이번 블로그에서 말씀드릴것은 각각의 요소들이 어떠한 역할을 하는지에 대해서만 말씀 드리려고 합니다 . 세세하게 말씀드리는것은 따로 블로그를 올려드리도록 할게요 !! 전체적인 구조를 알고 게시판과 같은 간단한 프로젝트를 만들어보시면서 아 이건뭐지 ?? 이런 생각이 드신다면 세세하게 작성된 블로그를 확인해주시면서 공부해주셔도 좋을 것 같아요 .
보통 이런식으로 총 10가지 구조를 가지게 되어있는데요 . 처음보는 것도 있고 DTO 같은 경우에는 평소에도 본 것 같고 그러시죠 ??
하나씩 사진과 코드로 설명해드리겠습니다 .
...
pom.xml 은 저희가 프로젝트를 만들고 사용할 때 설정할 라이브러리에 대한 정보가 들어가 있습니다 .
이 말은 Spring 파일의 pom.xml 은 Maven 으로 라이브러리를 끌어와서 사용할 수 이다는 것을 이야기 합니다 . (Maven ➡️ 프로젝트를 빌드해주고 라이브러리를 관리하며 개발자들이 업무 환경에서 협력하며 일을 할 수 있도록 개발 된 도구입니다. )
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<java-version>11</java-version>
<org.springframework-version>5.3.20</org.springframework-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
</properties>
2.web.xml
저희가 가져다 쓸 라이브러리를 확인했다면 이제는 Spring을 사용하기 위한 기본적인 설정을 해야겠죠 ? 그 기본적인 설정을 해주는 게 web.xml 입니다. web.xml 에 기본적인 설정을 해두면 스프링 프레임워크(Spring Framework)에서 web.xml은 WAS(Web Application Server)가 최초로 구동될 때, web.xml 파일을 읽어서 메모리에 올리고 web.xml에는 웹에서 사용하는 다양한 설정들을 하는 곳이라고 할 수 있습니다.
3.root-context.xml
모든 서블릿이 공유할 수 있는 Bean들이 모인 공간으로 공통 bean을 설정
JSP와는 관련없는 객체(Bean)을 설정하고 스프링 MVC 설정과 관련된 여러 처리를 담당한다.
<!-- 데이터베이스 이름 및 계정 확인 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
<property name="username" value="system"/>
<property name="password" value="1234"/>
</bean>
<!-- 현재 프로젝트 패키지 경로 맞는지 확인 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value ="classpath:/mybatis-config.xml" />
<property name="mapperLocations" value="classpath:/mapper/*.xml" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
View와 밀접하지 않은 정보를 기술하는 xml 파일
DB는 View(JSP)와 관련이 없으므로, DB 접속은 root-context.xml 에 설정
그럼 자동적으로 view에 대한 설정을 하는 파일이 존재해야 할 텐데
그 기능을
4. servlet-context.xml 에서 담당해줍니다.
@PostMapping("/save")
public @ResponseBody List<CommentDTO> save(@ModelAttribute CommentDTO commentDTO) {
System.out.println("commentDTO =" + commentDTO);
commentService.save(commentDTO);
// 해당 게시글에 작성된 댓글 리스트를 가져
List<CommentDTO> commentDTOList = commentService.findAll(commentDTO.getBoardId());
return commentDTOList;
} --> service를 사용해서 넘겨주는게 보이시죠 ??
public class CommentService {
private final CommentRepository commentRepository;
public void save(CommentDTO commentDTO) {
commentRepository.save(commentDTO);
}
public List<CommentDTO> findAll(Long boardId) {
return commentRepository.findAll(boardId);
}
}
--> 여기서는 Repository로 넘겨줍니다 .
public class CommentRepository {
private final SqlSessionTemplate sql;
public void save(CommentDTO commentDTO) {
sql.insert("Comment.save" , commentDTO);
}
public List<CommentDTO> findAll(Long boardId) {
return sql.selectList("Comment.findAll", boardId);
}
}
--> sql을 이용해서 DB와 접근 !!
public class CommentDTO {
private Long id;
private String commentWriter;
private String commentContents;
private Long boardId;
private Timestamp commentCreatedTime;
} --> 필요한 변수들을 선언해줍니다.
DB에서 정보를 받아서 다시 차례대로 Repository->Service->Controller -> View 에게 차례대로 넘겨줍니다 😀
그럼 이제 90프로 왔습니다 . 앞으로는 mybatis와 mapper에 대한 설명만이 남았는데요. 바로 확인하러가시죠!!
.
9. mybatis -> jdbc 드라이버를 간략하고 쉽게 사용할 수 있도록 해준다 . ( 이건 설명이 너무 많이 필요해서 간략하게 작성해보았습니다.)
10. Mapper -> sql문을 작성해서 오류가 최대한 발생하지 않도록 도와준다 .
<mapper namespace="Comment">
<insert id="save" parameterType="comment">
insert into comment_table(id , commentWriter, commentContents, boardId , commentCreatedTime )
values(comment_seq.NextVal , #{commentWriter}, #{commentContents}, #{boardId} , sysdate)
</insert>
<select id="findAll" parameterType="Long" resultType="comment">
select * from comment_table where boardId=#{boardId} order by id desc
</select>
</mapper>
--> 평소에 작성하는 코드보다 훨 씬 더 깔끔하게 정리가 된 걸 확인할 수 있죠 ?
1.pom.xml -> '라이브러리를 가져온다'
.
2.web.xml -> '기본설정 + WAS가 처음 구동될 때 사용되는 설정'
.
3.root-context.xml -> view에 관한 설정 말고 모든 설정
DB,Service, Repository , Controller 등
.
4.servlect-context.xml -> view에 관한 설정
.
5.Controller -> view에 대한 요청처리 + Service로 넘긴다
.
6.Service -> 비즈니스 로직 수행 -> Repository로 넘김
.
7.Repository -> DB와 연결을 해서 값을 가져온다.
.
8.DTO -> Controller , Service , Repository 에서 사용하는 변수기술
.
9.mybatis -> JDBC를 조금 더 편히하게 사용
.
10.mapper -> sql문을 조금 더 간결하게 사용하도록
각각의 특징을 살펴보면 뭔가 조금 더 쉽게 사용하고 해주고 설정을 해 주는 구조라는 걸 파악할 수 있죠 ?? Spring 으로 간단한 프로젝트를 만들어보면서 이건 이런 구조구나 파악해보는 시간을 가지시면 좋겠습니다 .
오늘 하루도 빡코 !!!