본문 바로가기

전체 글37

[Spring] 좋은 객체 지향 설계 / IoC(Inversion of Control) / DI(Dependency Injection) [Spring] 자바 프로젝트 생성 - DIP / OCP 규칙 준수하도록 변경하기, 리팩터링[Spring] 자바 프로젝트 생성 - 인터페이스와 구현의 구분, DIP / OCP 규칙 위반 예시비즈니스 요구사항과 설계회원회원 가입, 회원 조회 기능일반 / VIP 등급회원 데이터: 자체 DB 구축 or 외부 시스jelliclesu.tistory.com좋은 객체 지향 설계의 5가지 원칙의 적용 여기서 3가지 SRP, DIP, OCP 적용 SRP(단일 책임 원칙): 한 클래스는 하나의 책임만 가져야 함클라이언트 객체는 직접 구현 객체를 생성하고, 연결하고, 실행하는 다양한 책임을 가지고 있음 SRP 단일 책임 원칙을 따르면서 관심사를 분리함구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당클라이언트 객.. 2024. 9. 21.
[Spring] 자바 프로젝트 생성 - DIP / OCP 규칙 준수하도록 변경하기, 리팩터링 [Spring] 자바 프로젝트 생성 - 인터페이스와 구현의 구분, DIP / OCP 규칙 위반 예시비즈니스 요구사항과 설계회원회원 가입, 회원 조회 기능일반 / VIP 등급회원 데이터: 자체 DB 구축 or 외부 시스템과 연동(미확정)주문과 할인 정책회원은 상품 주문 가능회원 등급에 따라 할jelliclesu.tistory.comAppConfig 생성AppConfig.java애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별도의 설정 클래스사용 영역과, 객체를 생성하고 구성(Configuration)하는 영역으로 분리구현 객체 생성MemberServiceImplMemberRepositoryOrderServiceImplDiscountPolicy생.. 2024. 9. 21.
[Spring] 자바 프로젝트 생성 - 인터페이스와 구현의 구분, DIP / OCP 규칙 위반 예시 비즈니스 요구사항과 설계회원회원 가입, 회원 조회 기능일반 / VIP 등급회원 데이터: 자체 DB 구축 or 외부 시스템과 연동(미확정)주문과 할인 정책회원은 상품 주문 가능회원 등급에 따라 할인 정책을 적용할인 정책: 변경 가능성 높음 (모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용 or 정률 적용 or 미적용)회원 데이터, 할인 정책: 지금 결정하기 어려움. 그렇다고 이런 정책이 결정될 때까지 개발을 무기한 기다릴 수도 없음.➡️ 인터페이스를 만들고 구현체를 언제든지 갈아끼울 수 있도록 설계참고: 우선 스프링 없는 순수한 자바로만 개발을 진행회원 도메인 설계회원 도메인 요구사항회원 가입, 회원 조회 기능일반 / VIP 등급회원 데이터: 자체 DB 구축 or 외부 시스템과 연동(미확정)회.. 2024. 9. 21.
[Spring] 객체 지향 설계, 다형성, SOLID 객체 지향 설계와 스프링스프링이란?스프링 생태계  스프링 프레임워크핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타웹 기술:  스프링 MVC, 스프링 WebFlux데이터 접근 기술: 트랜잭션, JDBC, ORM 지원, XML 지원기술 통합: 캐시, 이메일, 원격접근, 스케줄링테스트: 스프링 기반 테스트 지원언어: 코틀린, 그루비 스프링 부트스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨손쉬운 빌드 구성을 위한 starter 종속성 제공스프링과 3rd parth(외부) 라이브러리 자동 구성메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공관례.. 2024. 9. 20.
[Spring] AOP(Aspect Oriented Programming) AOPAOP: Aspect Oriented Programming (관점 지향 프로그래밍)  AOP 가 필요한 상황 가정모든 메소드의 호출 시간을 측정하고 싶다면?AOP 적용 전 ⚠️ 문제회원가입, 회원 조회에 시간을 측정하는 기능은 핵심 관심 사항이 아님시간을 측정하는 로직은 공통 관심 사항시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어려움시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어려움시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 함  AOP 적용 AOP 패키지 생성 - TimeTraceAop.java@Aspect@Component@Around ✔️ 해결공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core conce.. 2024. 9. 12.
[Spring] H2, JDBC, JPA / 통합 테스트 스프링 DB 접근 기술 H2 데이터베이스 설치개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공 [ https://www.h2database.com ]# 권한 주기chmod 755 h2.sh# 실행./h2.sh 데이터베이스 파일 생성방법JDBC URL: jdbc:h2:~test (최초 한번)Terminal 에서 home에 test.mv.db 파일 생성 확인이후부터 JDBC URL: jdbc:h2:tcp://localhost/~/test 더보기⚠️ H2 데이터베이스 접속 후 주소창에 앞 부부만 localhost 로 변경순수 JDBC⚠️ JDBC 로 직접 코딩하는 것은 20년 전 이야기이므로 그냥 이렇게 했었다~정도만 참고하고 넘어가기  환경 설정build.gradle 에 jdbc, h2 관련 라이브.. 2024. 9. 11.