당니의 개발자 스토리
프로젝트 생성 본문
스프링 핵심 원리 이해1 - 예제 만들기

지금까지 우리가 배운 대로 역할과 구현을 나누어서, 그러니까 인터페이스와 구현한 객체를 나누어서 개발을 해볼 거에요.
근데 정말 순수한 자바로만 개발을 할 겁니다.
그렇게 해서 먼저, 프로젝트 세팅을 하고, 그 다음에 비즈니스 요구사항을 듣고 설계를 할 거에요.
그리고 예제가 어느 정도는 복잡도가 있어야 되기 때문에 회원 도메인, 주문, 할인 같은 도메인들을 넣어가지고, 물론 예제의 핵심에 집중해야 되니까 굉장히 간단하게 할 거에요. 이 도메인들을 섞어서 예제를 하나 만들어 볼 겁니다. 그리고 역할과 구현을 나누고, 이걸 스프링의 도움 없이 순수한 자바로만 개발을 해볼 거에요.
그렇게 해서 나중에 실제 요구사항이 변경됐을 때, 정말 유연하게 잘 대처가 가능한가? 앞에서 배운 다형성, OCP, DIP가 잘 지켜지고 있는지를 보고, 또 문제가 있으면 그거를 다음 장 <Spring 핵심 원리 이해 2>에서 객체지향의 원리를 적용을 해가면서 문제들을 해결해볼 겁니다.
프로젝트 생성
첫 번째는 프로젝트 생성 시간인데요. 이번 시간은 스프링 없이, 정말 다 순수한 자바로만 할 거에요.

그런데 프로젝트 세팅할 때는 스프링 부트를 가지고 하면 편하기 때문에 그렇게 할게요. 뒤에서 스프링 적용할 때도 이 라이브러리들이 필요하기 때문에 일단은 스프링 부트로 프로젝트를 생성하겠습니다.
그럼 먼저 스프링 부트 스타터 사이트로 이동을 해서 스프링 프로젝트를 생성 해보겠습니다.

Spring Boot 버전은 여러가지 버전이 있죠. 가장 안정화된 최신 버전으로 선택하면 됩니다. SnapShot이나 M버전 같은 경우에는 아직 정식 릴리즈된 버전이 아니거든요.
따라서,

이렇게 설정하면 됩니다. 그리고 중요한 건데요, Dependency는 아무것도 선택을 안할 거에요.
아무것도 선택하지 않으면, 스프링 부트가 스프링 코어 쪽 라이브러리만 가지고 몇 개, 정말 간단하게 구성을 해주거든요. 그래서 별도의 의존 관계는 설정하지 않고, Generate를 하면 됩니다.

h2 데이터베이스를 재설치하고,

인텔리제이에서 build.gradle을 open as project 하면,

라이브러리들을 다운 받을 겁니다. 다 다운받고 나면, 먼저 build.gradle을 볼게요.

참고로 build.gradle을 수정하면, 이 코끼리 눌러서 gradle을 refresh 하거나,

여기를 눌러서 reload 해주면 됩니다. build.gradle을 수정을 한다는 의미는 설정을 변경한다는 뜻입니다. 그래야 라이브러리 같은 것들이 변경됩니다.

스프링 부트 버전이 3.2.0 이고, 의존관계가 설정되어 있습니다.

group이 hello 이고, java 버전이 17이라고 나와있습니다.

지금 보면, 의존관계가 spring-boot-starter 만 딱 쓴다고 되어있죠.

그리고 이거는 테스트 관련된 라이브러리로, 이렇게 딱 두가지가 심플하게 들어가 있어요.

여기 보면 core와 context, 이게 진짜 핵심 라이브러리 거든요. 그것만 들어가 있습니다. 우리는 지금 스프링 핵심 강의이니까 이렇게만 해둔 거에요.

여기 보면 CoreApplication 이라고 있습니다. 여기서,

Run을 해보면,

이렇게 되고 끝이 나야합니다. 지금 웹 서버를 띄우고, 스프링 웹 프로젝트를 넣은 게 아니기 때문에 그냥 이렇게 실행하고 끝나버리는 게 맞습니다.
만약, 우리가 dependencies 에서 Spring Web을 선택해서 땡겨왔다면, 톰캣이라는 웹 서버를 띄웠겠죠.

여기까지 하면, 프로젝트 환경 설정 끝이에요.
스프링 핵심 원리 강의이기 때문에 정말 세팅이 단순하죠.
'어! 아까 순수 java 코드로 한다고 하지 않았나요?' 물론입니다. 다만, 나중에 스프링을 넣을 거라서 라이브러리를 미리 받아놓은 거에요. 그래서 일단 스프링으로 세팅을 해 둔겁니다.
다음 시간에는 비즈니스 요구사항이 뭔지 들어보고 간단하게 설계하고 개발하는 시간을 가지겠습니다.
'스프링 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
| 회원 도메인 설계 (0) | 2024.01.16 |
|---|---|
| 비즈니스 요구사항과 설계 (0) | 2024.01.16 |
| 객체 지향 설계와 스프링 (0) | 2024.01.16 |
| 좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2024.01.16 |
| 좋은 객체 지향 프로그래밍이란? (0) | 2024.01.16 |