diff --git a/application-test/app-test/pom.xml b/application-test/app-test/pom.xml
index 2707b0b5..3b1eb24f 100644
--- a/application-test/app-test/pom.xml
+++ b/application-test/app-test/pom.xml
@@ -21,6 +21,22 @@
org.springframework.boot
spring-boot-starter
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.h2database
+ h2
+
+
+ org.projectlombok
+ lombok
+
org.springframework.boot
diff --git a/application-test/app-test/src/main/java/com/example/apptest/Study.java b/application-test/app-test/src/main/java/com/example/apptest/Study.java
deleted file mode 100644
index 73b643cb..00000000
--- a/application-test/app-test/src/main/java/com/example/apptest/Study.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.example.apptest;
-
-public class Study {
-
- private StudyStatus status;
-
- private int limit;
-
- private String name;
-
- public Study(int limit, String name) {
- this.limit = limit;
- this.name = name;
- }
-
- public Study() {
- }
-
- public Study(int limit) {
- if (limit <= 0) {
- throw new IllegalArgumentException("limit은 0보다 커야 한다.");
- }
- this.limit = limit;
- }
-
- public StudyStatus getStatus() {
- return this.status;
- }
-
- public int getLimit() {
- return limit;
- }
-
- public String getName() {
- return name;
- }
-
- @Override
- public String toString() {
- return "Study{" +
- "status=" + status +
- ", limit=" + limit +
- ", name='" + name + '\'' +
- '}';
- }
-}
diff --git a/application-test/app-test/src/main/java/com/example/apptest/StudyStatus.java b/application-test/app-test/src/main/java/com/example/apptest/StudyStatus.java
deleted file mode 100644
index 48af3e3d..00000000
--- a/application-test/app-test/src/main/java/com/example/apptest/StudyStatus.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.example.apptest;
-
-public enum StudyStatus {
- DRAFT, STARTED, ENDED
-}
diff --git a/application-test/app-test/src/main/java/com/example/apptest/domain/Member.java b/application-test/app-test/src/main/java/com/example/apptest/domain/Member.java
new file mode 100644
index 00000000..507c538b
--- /dev/null
+++ b/application-test/app-test/src/main/java/com/example/apptest/domain/Member.java
@@ -0,0 +1,21 @@
+package com.example.apptest.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Member {
+
+ @Id @GeneratedValue
+ private Long id;
+
+ private String email;
+}
diff --git a/application-test/app-test/src/main/java/com/example/apptest/domain/Study.java b/application-test/app-test/src/main/java/com/example/apptest/domain/Study.java
new file mode 100644
index 00000000..8984f0bb
--- /dev/null
+++ b/application-test/app-test/src/main/java/com/example/apptest/domain/Study.java
@@ -0,0 +1,47 @@
+package com.example.apptest.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.time.LocalDateTime;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Study {
+
+ @Id @GeneratedValue
+ private Long id;
+
+ private StudyStatus status = StudyStatus.DRAFT;
+
+ private int limit;
+
+ private String name;
+
+ private LocalDateTime openedDateTime;
+
+ private Long ownerId;
+
+ public Study(int limit, String name) {
+ this.limit = limit;
+ this.name = name;
+ }
+
+ public Study(int limit) {
+ if (limit <= 0) {
+ throw new IllegalArgumentException("limit은 0보다 커야 한다.");
+ }
+ this.limit = limit;
+ }
+
+ public void open() {
+ this.openedDateTime = LocalDateTime.now();
+ this.status = StudyStatus.OPENED;
+ }
+}
diff --git a/application-test/app-test/src/main/java/com/example/apptest/domain/StudyStatus.java b/application-test/app-test/src/main/java/com/example/apptest/domain/StudyStatus.java
new file mode 100644
index 00000000..c4a6aca1
--- /dev/null
+++ b/application-test/app-test/src/main/java/com/example/apptest/domain/StudyStatus.java
@@ -0,0 +1,5 @@
+package com.example.apptest.domain;
+
+public enum StudyStatus {
+ DRAFT, STARTED, ENDED, OPENED
+}
diff --git a/application-test/app-test/src/main/java/com/example/apptest/member/MemberService.java b/application-test/app-test/src/main/java/com/example/apptest/member/MemberService.java
new file mode 100644
index 00000000..5ab57aa0
--- /dev/null
+++ b/application-test/app-test/src/main/java/com/example/apptest/member/MemberService.java
@@ -0,0 +1,10 @@
+package com.example.apptest.member;
+
+import com.example.apptest.domain.Member;
+
+import java.util.Optional;
+
+public interface MemberService {
+
+ Optional findById(Long memberId);
+}
diff --git a/application-test/app-test/src/main/java/com/example/apptest/study/StudyRepository.java b/application-test/app-test/src/main/java/com/example/apptest/study/StudyRepository.java
new file mode 100644
index 00000000..94d09e4d
--- /dev/null
+++ b/application-test/app-test/src/main/java/com/example/apptest/study/StudyRepository.java
@@ -0,0 +1,9 @@
+package com.example.apptest.study;
+
+import com.example.apptest.domain.Study;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface StudyRepository extends JpaRepository {
+}
diff --git a/application-test/app-test/src/main/java/com/example/apptest/study/StudyService.java b/application-test/app-test/src/main/java/com/example/apptest/study/StudyService.java
new file mode 100644
index 00000000..b4face39
--- /dev/null
+++ b/application-test/app-test/src/main/java/com/example/apptest/study/StudyService.java
@@ -0,0 +1,25 @@
+package com.example.apptest.study;
+
+import com.example.apptest.domain.Member;
+import com.example.apptest.domain.Study;
+import com.example.apptest.member.MemberService;
+
+public class StudyService {
+
+ private final MemberService memberService;
+ private final StudyRepository studyRepository;
+
+ public StudyService(MemberService memberService, StudyRepository studyRepository) {
+ assert memberService != null;
+ assert studyRepository != null;
+ this.memberService = memberService;
+ this.studyRepository = studyRepository;
+ }
+
+ public Study createNewStudy(Long memberId, Study study) {
+ Member member = memberService.findById(memberId)
+ .orElseThrow(() -> new IllegalArgumentException("Member doesn't exist for id: " + memberId));
+ study.setOwnerId(memberId);
+ return studyRepository.save(study);
+ }
+}
diff --git a/application-test/app-test/src/main/resources/application.properties b/application-test/app-test/src/main/resources/application.properties
deleted file mode 100644
index 8b137891..00000000
--- a/application-test/app-test/src/main/resources/application.properties
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/application-test/app-test/src/main/resources/application.yml b/application-test/app-test/src/main/resources/application.yml
new file mode 100644
index 00000000..53372abf
--- /dev/null
+++ b/application-test/app-test/src/main/resources/application.yml
@@ -0,0 +1,21 @@
+spring:
+ h2:
+ console:
+ enabled: true
+ path: /h2-console
+
+ datasource:
+ url: jdbc:h2:mem:testDb
+ driver-class-name: org.h2.Driver
+ username: sa
+ password:
+
+ jpa:
+ hibernate:
+ ddl-auto: create
+ generate-ddl: true
+
+ properties:
+ format_sql: true
+ hibernate:
+ show-sql: true
diff --git a/application-test/app-test/src/test/java/com/example/apptest/study/StudyServiceTest.java b/application-test/app-test/src/test/java/com/example/apptest/study/StudyServiceTest.java
new file mode 100644
index 00000000..e5a8cc30
--- /dev/null
+++ b/application-test/app-test/src/test/java/com/example/apptest/study/StudyServiceTest.java
@@ -0,0 +1,19 @@
+package com.example.apptest.study;
+
+import com.example.apptest.member.MemberService;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class StudyServiceTest {
+
+ @Test
+ void createStudyService() {
+
+ MemberService memberService = Mockito.mock(MemberService.class);
+ StudyRepository studyRepository = Mockito.mock(StudyRepository.class);
+ StudyService studyService = new StudyService(memberService, studyRepository);
+ }
+
+}
\ No newline at end of file