Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[week02] Dohyeon #11

Merged
merged 3 commits into from
Jan 3, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions week02/dohyeon/week02dohyeon.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
## 2주차 - 섹션 4, 5 : 회원 관리 예제 - 백엔드 개발 & 스프링 빈과 의존관계

### **1. 비즈니스 요구사항**

- **데이터**: 회원 ID, 이름
- **기능**: 회원 등록, 회원 조회

---

### **2. 회원 도메인 및 레포지토리 구현**

- **회원 정보 조회 로직**: 회원의 ID와 이름으로 회원 정보를 조회.
- **회원 레포지토리 테스트 케이스**:
- **테스트 실행 방법**:
1. Java의 main 메서드를 사용하거나
2. 웹 애플리케이션의 컨트롤러를 통해 기능 실행.
- **단점**:
- 실행 속도가 느림.
- 반복 실행이 어려움.
- 여러 테스트를 한 번에 실행하기 어려움.
- **해결책**: JUnit을 활용하여 문제 해결.

---

### **3. JUnit 테스트 활용**

- **테스트 코드 작성**:
- `Assertions.assertEquals` 또는 실무에서 더 많이 사용하는 `assertThat` 사용.
- **테스트 후 클리어 처리**:
- 테스트 완료 후 다른 테스트 실행 시 에러를 방지하기 위해 `@AfterEach` 사용.

---

### **4. 회원 서비스 개발 및 테스트**

- **테스트 문법**:
- `given`, `when`, `then` 구조를 사용하여 가독성 향상.
- **예외 처리**:
- `try-catch` 대신 `assertThrows` 문법 제공.

---

### **5. 의존성 주입 및 스프링 빈 설정**

- **new 키워드 사용**:
- `new`로 객체를 생성하면 매번 새로운 객체가 생성됨.
- 이런 경우엔 `@Autowired`를 사용하여 의존성 자동 주입.

### **스프링 빈 등록 방법**

1. **컴포넌트 스캔 방식**:
- `@Component`를 사용하여 자동 등록.
- **장점**: 간편하고 코드 작성 용이.
2. **자바 코드로 직접 등록**:
- 스프링 설정 파일에 명시적으로 빈 등록.
- **장점**: 변경 사항 발생 시 설정 파일만 수정하면 됨.

---

### **6. 컴포넌트 스캔과 자동 의존관계 설정**

- `@Component` 어노테이션이 있는 클래스는 스프링 빈으로 자동 등록.
- `@Controller`도 컴포넌트 스캔 방식으로 스프링 빈에 등록됨.
- **싱글톤 방식**:
- 스프링은 기본적으로 빈을 싱글톤으로 등록하여 하나의 객체만 공유.

### **의존성 주입 방법**

1. **Setter 주입**:
- 단점: 의존성이 변경될 가능성이 있음.
2. **필드 주입**:
- 단점: 테스트가 어렵고 변경이 힘듦.
3. **생성자 주입**:
- **권장 방법**: 객체 생성 시점에 의존성을 명확히 설정 가능.

---

### **7. 정리**

- **회원 관리 기능** 구현 시:
- 테스트 코드는 JUnit을 사용하여 효율적으로 작성.
- 의존성 주입은 생성자 주입을 권장.
- 스프링 빈은 컴포넌트 스캔 방식 또는 자바 코드 방식으로 등록 가능.
- 스프링 컨테이너는 기본적으로 빈을 싱글톤으로 관리하여 효율성을 높임