최종 프로젝트
게시판 페이지 구현 및 배포 환경에 맞는 코드 리팩토링
공부
도메인 주도 개발하기 읽고 정리하기
후발대 수업 복습
Q1) 스프링에서 DI를 사용하는 이유? 예를 들어 설명하시오
- 소프트웨어 또는 웹 서비스에서 객체가 자신의 역할을 충실히 수행하기 위해 다른 객체의 메서드 등을 호출해서 사용해야 할 경우가 있다. 그 경우 각 객체에서 해당 메서드를 사용하기 위해 그 메서드를 구현하고 있는 객체를 매 번 생성하여 호출하는 것은 매우 비효율적이며, 각 계층 간 결합도를 높이는 강한 결합이다.
스프링에서는 이를 지양하기 위해 DI를 사용하고 있다. 각 객체를 매번 생성하는 것이 아니라 사용하려는 객체에서 해당 객체에 대한 의존성을 부여하여 객체를 매 번 생성하지 않아도 메서드를 호출해서 사용할 수 있도록 한다.
*MVC 패턴
public class Repository1 {
public Repository1(String id, String pw) {
// DB 연결
Connection connection = DriverManager.getConnection("jdbc:h2:mem:springcoredb", id, pw);
}
}
강한 결합의 경우, 해당 레포지토리를 사용하기 위해 컨트롤러 1~5가 서비스 1 객체를 각각 생성하고 그 서비스에서 레포지토리1를 생성하는 생성자를 통해 해당 객체를 생성한다. 이런 경우, 만약 레포지토리1의 필드 값이 변동되거나 할 때, 컨트롤러1~5 부터 서비스1까지 모든 곳에서 그 변경 사항을 반영해줘야 한다.
DI의 경우 컨트롤러 1~5에선 서비스1에 대한 의존성을 부여하고, 서비스1의 생성자를 사용한다. 서비스1은 레포지토리1에 대한 의존성을 부여하여 레포지토리1에서 만든 생성자를 통해 객체의 메서드 등을 사용할 수 있게하여 각 계층간의 결합도를 낮춘다.
Q2) 스프링 시큐리티를 사용해 회원 관리하는 방법을 순서도를 이용하여 정리하시오
- 회원 가입
1. Clinet -> Server : 회원가입에 필요한 정보 (username, password, email 등)
2. Server : 회원가입 처리
3. Server -> DB : 회원정보 DB에 저장
- 로그인
1. Client -> Server : 로그인에 필요한 정보
2. Server : 로그인 처리
3. Server -> Session : 로그인 성공 시 Session에 저장
4. Server -> Client : 세션 쿠키 전달 (JSESSIONID)
5. Client : Session 쿠키 저장
- 로그인 이후 로그인 상태 유지방법
1. Client에서 Server에 API 요청 시마다 Session 쿠키 전달
Q3) 개발자 테스트 코드 작성 시 장/단점과 테스트 종류 별 (단위 테스트, 통합 테스트, E2E 테스트) 특징?
1) 장/단점
- 테스트 코드를 작성하게 되면 프로덕션 코드를 빌드하여 서버에 올리지 않아도 각 테스트 코드에 해당하는 프로덕션 코드가 의도한 대로 잘 작동하는 지를 확인할 수 있다.
- 개발 리소스를 추가로 소모한다는 단점이 있다
2) 단위 테스트
- 하나의 모듈이나 클래스에 대한 세밀한 부분에 대한 테스트 ~ 멀티 모듈에서 모듈 간 상호 작용을 검증할 수 없다
3) 통합 테스트
- 두 개 이상의 모듈이 연결된 상태에 대한 테스트
- 모듈 간 연결에서 발생하는 에러를 검증할 수 있다
4) E2E 테스트
https://fe-developers.kakaoent.com/2023/230209-e2e/
~ 모듈의 무결성이 애플리케이션의 무결성까지는 증명해줄 수 없기 때문
- 실제 사용자의 실행 환경과 거의 동일한 환경에서 진행할 수 있는 테스트 (= 블랙박스 테스팅)
- 비용이 많이 발생하기 때문에 꼭 필요한 테스트만 수행해야 한다
Q4) ORM, JPA, Spring Data JPA를 구분해서 설명하시오
- ORM : 데이터 베이스의 언어(SQL 등)과 서버의 언어(자바 등)의 사이에서 요청과 응답 간 언어 통역 기술
- JPA : 자바 진영의 ORM 표준 명세, 자바를 사용해 ORM을 구현하는 표준 명세 + Hibernate
- Spring Data JPA : JPA를 편하게 사용하기 위해 Spring에서 JPA를 Wrapping, 반복, 예상가능한 코드를 대신 작성한다. Repository 인터페이스를 작성하면 필요한 구현은 Spring이 한다.
Q5) 절차지향, 객체지향, 관점지향 프로그래밍의 차이점은?
- 상황에 맞게 선택하여 사용할 필요가 있다
1) 절차지향 : 시간의 흐름에 따라 순차 프로그래밍
2) 객체지향 : 역할 별 클래스를 구분하여 프로그래밍, 핵심기능 모듈화
3) 관점지향 : 부가기능을 각각 모듈화 ex) API 시간 측정, 트랜젝션, 예외처리, 로깅 등
'내일배움캠프 4기 스프링 > 내배캠 TIL📘' 카테고리의 다른 글
03. 13 TIL 내배캠 마지막날! (0) | 2023.03.13 |
---|---|
03. 09 TIL (0) | 2023.03.09 |
03. 08 TIL (0) | 2023.03.08 |
03. 07 TIL (0) | 2023.03.07 |
03. 06 TIL (0) | 2023.03.07 |