스프링 부트는 각 계층이 다른 계층과 통신하는 구조를 따른다. 계층은 각 역할과 책임이 있는 소프트웨어의 구성 요소를 의미하는데 계층끼리 소통은 할 수 있지만 각 계층이 다른 계층에 직접 영향을 미치진 않는다.
스프링 부트에서는 프레젠테이션, 비즈니스, 퍼시스턴스 계층이 있다. 계층은 개념의 영역이기 때문에 실제로 구현하는 컨트롤러, 서비스, 리포지토리가 해당 계층의 역할을 수행하는 영역이 된다.
HTTP 요청을 받고 요청을 비즈니스 계층으로 전송하는 역할을 하는 계층을 말한다. 즉 요청에 대해서 어디로 처리할지 컨트롤하는 역할을 하게 되므로 컨트롤러라고 한다. 컨트롤러는 스프링 부트 내에서 여러 개가 존재할 수 있고 역할에 따라 구분한다.
@Controller
@RequestMapping("/member") //클래스 선언부에 작성 시 해당 매핑주소 생략 후 적을 수 있게함
public class MemberController {
@Autowired
private MemberService service; //MemberService 의존성 주입
@GetMapping("/memberAll") /// url주소가 /member/memberAll이지만 클래스 선언부에
//RequestMapping으로 /member를 작성했으므로 미리 매핑한 주소부분은 빼고 작성
public String selectMemberAll(Model model) {
model.addAttribute("members",service.selectMemberAll());
//요청을 처리하기 위해 service를 불러와 이용한다.
return "member/memberList";
}
}
모든 비즈니스 로직을 처리하는 계층으로 서비스를 말한다. 비즈니스 로직이란 서비스를 만들기 위한 서비스 로직을 말하는데 웹 사이트에서 일어나는 작업을 처리하기 위한 로직, 처리하다가 발생하는 예외에 대해 처리하는 로직, 서비스를 취소하는 로직 등 프로세스를 구현하기 위한 로직들을 전부 서비스인 비즈니스 계층이 담당한다.
@Service
public class MemberServiceImpl implements MemberService {
//MemberService 인터페이스를 구현한 클래스
@Autowired
private SqlSession session;
@Autowired
private MemberDao dao;
@Override
public List<Member> selectMemberAll() {
return dao.selectMemberAll(session);
//필요한 서비스를 제공하기 위해 DB와 접근해야하면 DAO 객체를 이
}
}
모든 데이터베이스 관련된 로직을 처리하는 계층을 말한다. 데이터베이스에 접근하는 DAO 객체를 사용할 수 있고 DAO는 DB 계층과 상호작용하기 위한 객체로 이용한다. @Repository
를 사용하는 DAO가 퍼시스턴스 계층 역할을 하고 있다고 이해하면 된다.
@Repository
public class MemberDaoImpl implements MemberDao {
@Autowired
private MemberMapper mapper;
@Override
public List<Member> selectMemberAll(SqlSession session) {
//return session.selectList("member.selectMemberAll"); ->session을 이용해서 처리 가능
return mapper.selectMemberAll(); //mapper 인터페이스를 생성해서 처리 가
}
}
스프링 부트 프로젝트는 정해진 구성은 없지만 추천하고 있는 구성이 존재하기 때문에 많은 개발자들이 추천된 구성으로 프로젝트를 구성한다.
실제 코드를 작성하는 공간으로 프로젝트 실행에 필요한 소스 코드나 리소스 파일을 해당 폴더에 만든다.
main 디렉터리를 열면 java 디렉터리를 확인할 수 있다. 필요한 소스 코드 파일을 java 디렉터리 안에 생성해서 사용한다.
HTML 같은 뷰 관련 파일을 넣을 templates 디렉터리와 JS, CSS, images 같은 정적 파일을 넣을 static 디렉터리를 resources 디렉터리 안에 생성해서 사용한다. 스프링 부트에 대한 설정을 할 수 있는 application.yml 혹은 application.properties 파일도 해당 디렉터리에 작성한다.
application.yml 파일은 스프링 부트 서버가 실행되면서 자동으로 로딩되는 파일로 DB 설정 정보, 로깅 설정 정보 등을 작성할 수 있다.
프로젝트의 소스 코드를 테스트 하기 위해서 사용하는 폴더로 테스트할 코드나 리소스 파일들을 넣어서 사용한다.
build.gradle
: 빌드를 설정하는 파일로 의존성이나 플러그인 설정 등 빌드에 필요한 설정을 작성한다.
setting.gradle
: 필드할 프로젝트의 정보를 설정하는 파일이다.