본문 바로가기

내일배움캠프 4기 스프링/내배캠 TIL📘

03. 10 TIL

728x90

최종 프로젝트

게시판 페이지 구현 및 배포 환경에 맞는 코드 리팩토링

공부

도메인 주도 개발하기 읽고 정리하기

 

후발대 수업 복습

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/

 

E2E 테스트 도입 경험기 | 카카오엔터테인먼트 FE 기술블로그

방경민(kai) 사용자들에게 보이는 부분을 개발한다는 데서 프론트엔드 개발자의 매력을 듬뿍 느끼고 있습니다.

fe-developers.kakaoent.com

~ 모듈의 무결성이 애플리케이션의 무결성까지는 증명해줄 수 없기 때문

- 실제 사용자의 실행 환경과 거의 동일한 환경에서 진행할 수 있는 테스트 (= 블랙박스 테스팅)

- 비용이 많이 발생하기 때문에 꼭 필요한 테스트만 수행해야 한다

 

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 시간 측정, 트랜젝션, 예외처리, 로깅 등

 

 

728x90

'내일배움캠프 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