전체 글 133

[스프링 핵심 원리] 섹션 1.4 객체 지향 설계와 스프링 (SOLID)

1.4.1 좋은 객체 지향 설계의 5가지 원칙(SOLID) 앞서 섹션 1.3에서 좋은 객체 지향의 원칙으로 다형성에 대해 알아보았다. 좋은 객체 지향의 설계의 또 다른 원칙으로는 SOLID 가 있다. SOLID : 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 다음과 같이 정리하였다. 1) SRP : 단일 책임 원칙 (single responsibility principle) 2) OCP : 개방-폐쇄 원칙 (Open/closed principle) 3) LSP : 리스코프 치환 원칙 (Liskov substitution principle) 4) ISP : 인터페이스 분리 원칙 (Interface segregation principle) 5) DIP : 의존관계 역전 원칙 (Dependency in..

[스프링 핵심 원리] 섹션 1.3 객체 지향 설계와 스프링 (좋은 객체 지향 프로그래밍)

1.3.1 다형성의 실세계 예시 좋은 객체 지향의 핵심은 다형성에 있다. 먼저, 다형성을 실세계에 비유하여 이해하기 위해, 세상을 역할 과 구현으로 구분해보자. 운전자를 클라이언트라고 하고, 자동차라는 역할이 있다고 가정하자. 자동차 역할은 K3, 아반떼, 테슬라 모델3 각각의 자동차 구현을 통해 수행될 수 있다. 이때, 운전자는 자동차 모델이 바뀌더라도, 운전자의 역할은 동일하게 수행가능하다. 즉, 운전자는 자동차 역할(인터페이스) 에 대해서만 의존하게 된다. 여기서 중요한 핵심은, 자동차 역할이라는 인터페이스를 만드는 이유는, 운전자라는 클라이언트의 편의성을 높이기 위함이다. 즉, 클라이언트에 영향을 주지 않고, 구현의 변경이 유연하고 용이하도록 하는 것을 다형성 이라고 한다. 1.3.2 Java 에..

[스프링 핵심 원리] 섹션 1.2 객체 지향 설계와 스프링 (스프링이란?)

1.2.1 스프링 생태계 스프링은 여러 기술들의 집합으로 볼 수 있다. 스프링 기술들을 하나씩 살펴보자. 필수 스프링 기술 - 스프링 프레임 워크 : 스프링의 핵심 기술이다. - 스프링 부트 : 다른 여러 기술들을 편리하게 사용할 수 있도록 도와준다. 선택 스프링 기술 - 스프링 데이터 : DB의 기본적인 CRUD (등록, 수정, 삭제) 는 유사하므로, 이를 편리하게 사용할 수 있도록 도와준다. - 스프링 세션 : 세션 기능을 편리하게 사용할 수 있도록 도와준다. - 스프링 시큐리티 : 보안과 관련된 기술이다. - 스프링 Rest Docs : API 문서화를 편리하게 도와준다. - 스프링 배치 : 배치 처리에 특화된 기술이다. - 스프링 클라우드 : 클라우드와 관련된 기술이다. 이 외에도, 다양한 스프링..

[스프링 핵심 원리] 섹션 1.1 객체 지향 설계와 스프링 (스프링의 탄생)

1.0.1 강의 소개 스프링의 핵심 원리를 제대로 학습하기 위해서는, 단순히 스프링이 제공하는 기능을 배우고 사용하는 것을 넘어, 스프링이 제공하는 객체지향을 이해할 필요가 있다. 즉, 스프링의 핵심 가치는 '객체 지향 프로그래밍' 에 있다. 앞선 스프링 입문 강의에서, 스프링의 전반적인 작동 원리는 이해하였지만, 스프링이 왜 객체 지향을 제공하는지, 또 스프링의 핵심 원리는 무엇인지에 대해서는 아직 모호한 점이 많았다. 따라서 이번 강의를 통해, 스프링이 제공하는 기능을 학습할 뿐만 아니라, 스프링에 대한 본질적인 이해를 하기 위해 노력해보고자 한다. 1.1.1 이야기 - 자바 진영의 추운 겨울과 스프링의 탄생 (스프링의 역사) 먼저, 스프링의 탄생 배경에 대해 가볍게 알아보자. 2000년대 초반에는,..

[스프링 입문] 섹션 7 AOP (+ 강의를 마치며)

7.1 AOP 가 필요한 상황 예를 들어, 모든 메소드의 호출 시간을 측정해야 한다고 가정하자. 시간 측정을 위해서는 memberConrtoller, memberService, memberRepository 에 시간 측정 로직을 전부 작성하여야 할 것이다. 실제 MemberService 에 회원 조회 시간을 측정하는 코드를 작성해보자. try { } finally { } 문을 통해, ( 종료시간 - 시작 시간 ) 으로 시간을 측정하도록 한다. @Transactional public class MemberService { private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository)..

[스프링 입문] 섹션 6.6 스프링 DB 접근 기술 (스프링 데이터 JPA)

6.6.1 스프링 데이터 JPA 란? 앞서 스프링 부트와 JPA 를 통해 개발 코드가 단순화되고, 개발 생산성이 증가하는 것을 볼 수 있었다. 여기에 더해 스프링 데이터 JPA를 사용하면, repository 에 구현 클래스 없이 interface 만으로도, 개발이 완료된다. 또한, 스프링 데이터 JPA 는 기본 CRUD 기능도 제공한다. 즉, 스프링 데이터 JPA를 사용하면, 단순하고 반복적인 코드를 거의 작성하지 않으므로, 핵심 비즈니스 로직을 개발하는데 집중할 수 있다. 이러한 스프링 데이터 JPA는 실무에서 선택이 아닌 필수이다. (단, JPA 를 먼저 학습하고 스프링 데이터 JPA 를 학습하여야 한다.) 6.6.2 스프링 데이터 JPA 코드 작성 - Repository 스프링 데이터 JPA 의 ..

[스프링 입문] 섹션 6.5 스프링 DB 접근 기술 (JPA)

6.5.1 JPA 란? 앞선 섹션 6.4의 JdbcTemplate 예제에서, 중복 코드는 제거할 수 있었지만, 여전히 SQL 은 개발자가 작성해야했다. JPA는 기존의 반복 코드 뿐만 아니라, 기본적인 SQL도 직접 만들어서 실행해준다! 또한, SQL과 데이터 중심의 설계에서, 객체 중심의 설계로 패러다임을 전환한다. 따라서 JPA 를 사용하여 개발하면, 개발 생산성을 크게 향상시킬 수 있다. 6.5.2 JPA 코드 작성 - 라이브러리 JPA 를 이용하여 DB에 접근하는 코드를 작성해보자. 먼저, build.gradle 파일의 dependencies 에 아래의 코드를 추가하고, 라이브러리를 받아준다. implementation 'org.springframework.boot:spring-boot-start..

[스프링 입문] 섹션 6.4 스프링 DB 접근 기술 (스프링 통합 Jdbc Template)

6.4.1 스프링 Jdbc Template 코드 작성 앞선 섹션 6.2의 예제에서, 대부분의 코드들이 중복으로 작성되었다. 스프링 JdbcTemplate, MyBatis 같은 라이브러리는 JDBC API 에서의 중복 코드를 제거해준다. 따라서 순수 Jdbc 보다 훨씬 간결하게 코드를 작성할 수 있다는 장점이 있다. (단, sql 은 직접 작성해야 한다.) JdbcTemplate 코드를 작성해보자. 먼저, Jdbc Template 환경 설정의 경우, 섹션 6.3의 순수 Jdbc 설정과 동일하다. buile.gradle 파일의 dependencies 에 아래의 코드를 추가로 작성한다. implementation 'org.springframework.boot:spring-boot-starter-jdbc' ru..

[스프링 입문] 섹션 6.3 스프링 DB 접근 기술 (스프링 통합 테스트)

6.3.1 스프링 통합 테스트 코드 작성 앞서 섹션 3.5에서 진행한 회원 서비스 테스트의 경우, 스프링과는 관련 없이, 순수한 자바 코드만을 테스트하였다. 하지만 섹션 6.2에서 JDBC repository 로 DB까지 연결하는 코드를 테스트 하기 위해서는, 스프링 컨테이너와 DB를 연결한 통합 테스트를 진행해야 한다. ( Database Connection 정보들을 스프링 부트가 가지고 있기 때문) 먼저, test > java > hello.hellospring > service 폴더에 MemberServiceIntegrationTest 파일을 만들고 다음과 같이 코드 작성한다. 아래의 코드는 상단 일부만을 나타내었다. @SpringBootTest @Transactional class MemberSe..

[스프링 입문] 섹션 6.2 스프링 DB 접근 기술 (순수 JDBC)

6.2.1 순수 JDBC - 드라이버 세팅 앞서 섹션 5에서 DB를 메모리에 저장하면, 서버를 내렸을 때 정보가 모두 손실되는 문제가 있었다. 따라서, 어플리케이션에서 DB 를 연동하여, 회원 정보가 데이터베이스에 저장되도록 하고자 한다. 그중에서 첫 번째로, 고전적인 방식인 순수 JDBC 기술을 살펴보자. 먼저, build.gradle 파일에 Jdbc 와 H2 데이터 베이스 관련 라이브러리를 추가해야 한다. 다음 코드를 dependencies 안에 추가로 작성해준다. implementation 'org.springgramework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' - Jdbc : Java는 db와 연동하려면 기본적으로 jdb..