반응형

자바 스프링 21

스프링 입문 23 - 8.AOP (1)

AOP(Aspect Oriented Programming) AOP란 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 합니다. 시간 측정 로직 먼저 AOP에 대한 자세한 설명을 바로 시작하지 않고 다음과 같은 상황을 가정해보겠습니다. 만약 모든 메소드의 호출시간을 측정하고 싶다면 어떻게 해야할까? 각 메서드 마다 System.currentTimeMillis() 를 이용하여 끝 - 시간을 계산하면 됩니다. 코드로 시간 측정 로직을 구현하면 다음과 같습니다. 예를 들어 join 메서드의 시간을 측정하고 싶다면 위와 같이 변경해야합니다. 위 코드의 문제점 만약 메서드가 약 몇 천 ~ 몇 만 단위로 커진다면 이렇게 코딩을 하는 것을 매우 비효율적입니다. 회원가입, 회원 조회에..

자바 스프링 2022.03.28

스프링 입문 22 - 7.스프링 DB 접근 기술 (6)

스프링 데이터 JPA (Java Persistence API) 이전 강의를 통해서 스프링 부트와 JPA만 사용해도 개발 생산성이 많이 증가하는 것을 확인할 수 있었습니다. 추가로 스프링 데이터 JPA를 사용하면, 기존의 한계를 넘어 리포지토리 구현 클래스 없이 인터페이스만으로 개발을 할 수 있습니다. 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공합니다. 따라서 개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있습니다. 주의할 점은 스프링 데이터 JPA는 JPA를 편리하게 사용하도록 도와주는 기술입니다. 따라서 JPA를 먼저 학습한 후에 스프링 데이터 JPA를 학습을 권장합니다. 스프링 데이터 JPA 회원 리포지토리 repository 폴더에 SpringDataJpaMemberRep..

자바 스프링 2022.03.28

스프링 입문 21 - 7.스프링 DB 접근 기술 (5)

JPA (Java Persistence API) 이전 강의에서 순수 JDBC 에서 JDBC Template으로 변경해서 작성해야 하는 코드를 확 줄일 수 있었습니다. 하지만 아직까지 SQL은 직접 작성해야하는 단점이 있었습니다. JPA를 사용하면 SQL 쿼리도 JPA가 자동으로 처리를 해주어 개발 생산성을 크게 높일 수 있습니다. 마치 이전 MemoryMemberRepository에서 했던 것처럼 객체를 메모리에 넣듯이, JPA에 넣으면 JPA가 중간에 DB에 SQL 보내고, 데이터를 DB에서 가져오고 하는 것을 모두 처리해줍니다. JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다. 라이브러리 추가 build.gradle 파일에 이전에 추가했던 impl..

자바 스프링 2022.03.28

스프링 입문 20 - 7.스프링 DB 접근 기술 (4)

스프링 JdbcTemplate JdbcTemplate은 이전에 만들었던 순수 Jdbc와 동일한 환경설정을 하면 됩니다. 스프링 JdbcTemplate라이브러리는 JDBC API에서 본 connection 같은 반복적인 코드를 대부분 제거해줍니다. 하지만 SQL은 직접 작성해야 합니다. Template이라고 부르는 이유는 디자인 패턴중에 템플릿 메서드 패턴이라는 것이 있는데 그것이 많이 포함되어서 JdbcTemplate이라고 부릅니다. JdbcTemplate 회원 리포지토리 작성 jdbcTemplate는 injection을 받을 수는 없습니다. 대신 이전에 datasource injection 받은 것 처럼 파라미터에 DataSource dataSource를 넣어 jdbcTemplate 생성자를 생성합니다..

자바 스프링 2022.03.28

스프링 입문 19 - 7.스프링 DB 접근 기술 (3)

스프링 통합 테스트 이번 시간은 이전 시간에 만든 DB와 스프링이 JDBC로 연결된 코드를 모두를 테스트 할 것입니다. 이전 코드를 살펴보면, 스프링과 관련 없는 자바 코드입니다. 하지만 이전 코드는 스프링이 직접 관리해주는 코드입니다. 따라서 이번 테스트는 스프링과 연관하여 진행해보겠습니다. 테스트 클래스 작성 이전에 만든 MemberServiceTest 클래스를 복사하여 MemberServiceIntegrationTest로 새로운 클래스를 생성합니다. 그 후 @SpringBootTest, @Transactional 을 추가합니다. @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행합니다. @Transactional : 테스트를 실행할 때, 트랜잭션을 먼저 실행하고 DB의 데이터를 넣..

자바 스프링 2022.03.28

스프링 입문 18 - 7.스프링 DB 접근 기술 (2)

순수 JDBC 이번 시간은 애플리케이션과 DB를 연동해서 DB에 데이터를 실제로 저장해보겠습니다. 요즘은 이런 방식으로 진행하지 않습니다. 환경 설정 1. build.gradle 파일에 라이브러리를 추가합니다. implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' 자바는 기본적으로 DB와 연동되기 위해서는 JDBC가 필요합니다. H2 데이터베이스와 연동되기 위해서는 h2 클라이언트가 필요합니다. 2. DB 경로 설정 src > main > resources > application.properties 파일에 다음을 추가합니다. spring.datasource.url=jdbc:h2:t..

자바 스프링 2022.03.28

스프링 입문 17 - 7.스프링 DB 접근 기술 (1)

이전 시간은 임시 데이터를 메모리에 저장을 했다면 지금부터는 간단한 H2라는 데이터베이스를 설치하여 이곳에 데이터를 저장하고 꺼내오는 방식을 스프링에 적용시켜보도록 할 것입니다. H2 데이터베이스 설치 H2 데이터베이스 : 개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공합니다. (https://www.h2database.com/html/download-archive.html)에서 1.4.200 버전을 설치합니다. 저는 windows10 이므로 따른 설정은 하지 않았습니다. 실행파일을 바로 실행하면 H2 Console 이라는 실행파일이 깔리는데 이 파일을 실행하면 H2 데이터베이스 설정창이 브라우저에 띄어집니다. 주소는 자동 설정된 아이피를 localhost 로 바꿔줍니다. 데이터베이스 파일을 ..

자바 스프링 2022.03.28

스프링 입문 16 - 6.회원 관리 예제 - 웹 MVC 개발

회원 웹 기능 이전시간에 memberController를 만들어 의존관계를 설정해놓은 것을 바탕으로 회원관리 예제를 웹 MVC로 개발 해볼 것입니다. memberController를 통해서 회원을 등록하고 조회 하는 것을 만들어 보겠습니다. 1. 홈 화면 추가 @Controller public class HomeController { @GetMapping("/") public String home(){ return "home"; } } Controller 패키지에 HomeController를 만들고 @Controller를 추가합니다. 이를 통해 http://127.0.0.1:8080을 접속하면 (“/”) 로 인해 가장 먼저 뜨는 화면을 제어하는 코드입니다. Hello Spring 회원 기능 회원 가입 회..

자바 스프링 2022.03.28

스프링 입문 15 - 5.스프링 빈과 의존관계 (2)

자바 코드로 직접 스프링 빈 등록하기 이전시간에 등록한 @Service, @Repository, @Autowired를 모두 지우고 진행합니다. Hello.Hellospring 패키지에 SpringConfig라는 클래스를 생성하고 @Configuration를 추가합니다. 그 후 @Bean 어노테이션과 함께 memberService 를 추가합니다. @Bean이 memberService를 컨테이너에 저장한다는 의미입니다. memberService 외에 MemoryMemberRepository 객체를 반환하는 memberRepository 메서드를 생성하고 @Bean을 추가합니다. MemberService()는 memberRepository에 의존하기 때문에 MemberService 객체를 반환할 때 파라미터로..

카테고리 없음 2022.03.28

스프링 입문 14 - 5.스프링 빈과 의존관계 (1)

컴포넌트 스캔과 자동 의존관계 설정 이전까지는 memberservice랑 리포지토리를 만들었습니다. 그리고 member객체를 만들어 memberservice를 통해서 가입을 진행시키고 리포지토리에 저장을 시키고 가져오는 로직을 구성하고 테스트까지 진행해봤습니다. 이번시간에는 화면에 나타내기 위해 Controller랑 BeutifulSoup가 필요합니다. Controller랑 BeutifulSoup를 사용하기 위해서는 MemberController는 MemberService를 통해서 회원가입하고 MemberService를 통해서 조회할 수 있어야 합니다. 이러한 관계를MemberService가 MemberController를 의존한다고 표현하고 둘은 의존관계에 있다고 표현합니다. 스프링 빈 (Spring ..

자바 스프링 2022.03.28

스프링 입문 13 - 4.회원 관리 예제 - 백엔드 개발 (5)

회원 서비스 테스트 이전시간에 만든 회원 서비스를 테스트 해보겠습니다. 이번시간에는 지난 번 테스트 케이스를 작성하는 것과 달리 MemberService 안에서 바로 테스트를 진행할 수 있습니다. MemberService를 선택 > Alt + Enter > Create Test > 멤버 모두 체크 이렇게 하면 자동으로 TestCase가 자동으로 생성됩니다. 테스트는 한글로 바꿔도 가능합니다. 빌드할 때 실제 코드에 반영되지 않고 영어권 사람들과 작업하는 것이 아니라면 직관적인 한글로 테스트를 하는 경우도 있으니 이번에는 한글로 메서드를 바꿔서 테스트 해보겠습니다. 회원가입 서비스 테스트 다음과 같이 코드를 작성하고 run을 실행합니다. @Test void 회원가입() { //given Member mem..

자바 스프링 2022.03.28

스프링 입문 12 - 4.회원 관리 예제 - 백엔드 개발 (4)

회원 서비스 개발 회원 리포지토리와 도메인을 활용해서 실제 비즈니스 로직을 작성하는 단계입니다. 서비스 클래스는 비즈니스에 가까운 이름으로 지어야 개발자와 기획자 모두 로직을 쉽게 파악할 수 있습니다. 회원가입 기능 /** 회원가입 **/ public Long join(Member member){ // 조건: 같은 이름을 가진 회원은 가입 X Optional result = memberRepository.findByName(member.getName()); result.ifPresent(m -> { throw new IllegalStateException("이미 존재하는 회원입니다."); }); memberRepository.save(member); return member.getId(); } Hello..

자바 스프링 2022.03.28

스프링 입문 11 - 4.회원 관리 예제 - 백엔드 개발 (3)

회원 리포지토리 테스트 케이스 작성 테스트 케이스란? 이전 시간에 작성한 MemberRepository 인터페이스, MemoryMemberRepository 등이 제대로 작동하는지 코드로 검증하는 방법으로 개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드를 통해서 실행하거나, 웹 애플리케이션의 컨트롤러를 통해서 해당 기능을 실행합니다. 하지만 이러한 방법은 오래 걸리고, 반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵다는 단점이 있습니다. 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결합니다. JUnit을 통한 TestCase 작성 이전 시간에 main 디렉토리에 repository 패키지를 만든 것 처럼, test 디렉토리에 repository라는 패키지를 ..

자바 스프링 2022.03.28

스프링 입문 10 - 4.회원 관리 예제 - 백엔드 개발 (2)

회원 도메인과 리포지토리 만들기 회원 객체 생성 Hello.Hellospring 패키지에 domain이라는 패키지를 생성합니다. Member라는 클래스를 생성하고 id, name 이라는 변수를 선언합니다. 여기서 id는 사용자가 입력한 id가 아닌 시스템이 회원을 구분하지 위한 고유의 id 값입니다. 그 후 getter, setter 객체를 생성합니다. 리포지토리 생성 Hello.Hellospring 패키지에 MemberRepository를 클래스가 아닌 인터페이스로 생성합니다. import Hello.Hellospring.domain.Member;를 추가하여 Member에서 빨간색을 없애줍니다. 빨간줄을 없애는 방법은 Member 우클릭 > Show Context Action > import class..

자바 스프링 2022.03.28

스프링 입문 8 - 3.스프링 웹 개발 기초 - API

정적 컨텐츠를 제외하면 크게 MVC 방식에서 view를 찾아서 템플릿 엔진을 통해서 화면을 렌더링 하여 HTML을 웹 브라우저에 넘기는 방식과 API 방식이 있습니다. 오늘은 API 방식을 알아보도록 하겠습니다. API HelloController 클래스에 다음과 같은 메소드를 새로 추가합니다. @Controller public class HelloController { @GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name){ return "hello " + name; // hello spring } @ResponseBody: HTTP는 start line, header, bo..

자바 스프링 2022.03.28

스프링 입문 7 - 3.스프링 웹 개발 기초 - MVC와 템플릿 엔진

MVC 과거에는 view와 controller 를 구분하지 않았습니다. 그래서 view에 controller 기능을 넣어서 JSP를 가지고 개발했습니다. 이 방식을 모델 1 방식이라고 부릅니다. 지금은 MVC 패턴 방식으로 개발을 많이 합니다. 개발을 할 때, 기능에 따라 분리해서 개발해야 효율이 늘어나고 유지보수가 수월해집니다. M : Model - 화면에서 필요한 요소를 모델에 담아 View 에 넘겨주는 역할 V : View - 보여지는 것에 초점을 맞추어 개발 C : Controller - 비즈니스 로직과 관련되어 있거나 서버와 관련된 처리하는 데에 집중하여 개발 새로운 controller 생성 HelloController 클래스 HelloController 클래스에 hello-mvc control..

자바 스프링 2022.03.28

스프링 입문 6 - 3.스프링 웹 개발 기초 - 정적 컨텐츠

웹 개발은 크게 3가지 방법으로 나뉩니다. 정적컨텐츠스프링 부트는 정적 컨텐츠 기능을 자동으로 지원합니다. 서버에서 처리나 실행없이 파일을 웹 브라우저에 바로 표현하는 것 MVC와 템플릿 엔진 템플릿 엔진: 정적인 HTML을 바로 웹 브라우저로 보내는 것이 아니라 서버에서 프로그래밍으로 처리 및 변형을 통해 MTML을 동적으로 표현하여 웹 브라우저로 보내는 것입니다. MVC: Model, View, Controller를 통해 템플릿 엔진이 동적으로 웹을 표현하는 것으로 템플릿 엔진을 통해 View를 표현합니다. 요즘은 MVC와 템플릿 엔진으로 개발을 많이 함 API JSON 데이터 포맷으로 데이터를 전송하는데 정적 컨텐츠 스프링 부트 문서에서 정적 컨텐츠에 대한 설명을 확인할 수 있습니다. 링크: 스프링..

자바 스프링 2022.03.28

스프링 입문 3 - 2.프로젝트 환경설정 - 빌드하고 실행하기

시스템 환경 제 노트북 환경은 다음과 같습니다. java 11, windows 10 gradlew로 빌드하기 저는 프로젝트 Hellospring 폴더 주소창에서 cmd 를 입력하고 gradlew 로 빌드를 했더니 다음과 같은 에러가 발생했습니다. ERROR: JAVA_HOME is set to an invalid directory: ~~~~~ Please set the JAVA_HOME variable in your environment to match the location of your Java installation. 이는 Java 환경 변수 경로를 잘못 설정한 에러때문에 발생하는것으로 파악됩니다. 저도 초기에 설명을 따라 JAVA_HOME의 주소를 C:\Program Files\Java\jdk-1..

자바 스프링 2022.03.28

스프링 입문 3 - 2.프로젝트 환경설정 - 라이브러리 살펴보기

라이브러리 살펴보기 External Libraries를 통해 Gradle이 알아서 당겨온 라이브러리를 확인할 수 있습니다. IntelliJ에서 왼쪽 하단의 네모 아이콘을 누르면 오른쪽 상단에 Gradle 메뉴가 생성되는것을 확인할 수 있습니다. 여기서의 Dependencies가 라이브러리의 의존관계를 나타내며 저는 초기 spring boot starter를 통해 web와 thymeleaf 라이브러리만 가져왔으나 web와 thymeleaf이 필요한 라이브러리는 알아서 가져온 것을 확인할 수 있습니다. 즉 web 라이브러리가 tomcat 라이브러리를 Embeded 하고 있습니다. 요즘에는 예쩐과 달리 tomcat 서버, WAS를 따로 설치하지 않고 이런 방식으로 라이브러리 하나만을 빌드해서 웹서버를 띄어 편..

자바 스프링 2022.03.28

스프링 입문 2 - 2.프로젝트 환경설정 - 프로젝트 생성

프로젝트 생성 사전 준비 - java 11 설치 - IDE: IntelliJ 또는 Eclipse 설치 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성합니다 예전에는 스프링 프로젝트를 처음부터 다 만들었다면 요즘은 대부분 스프링 부트로 스프링 프로젝트를 만듭니다. - URL : 실제 프로젝트 생성 Project 필요한 라이브러리를 가져오고 빌드하는 라이프 사이클까지 모두 관리해주는 툴 과거는 Maven으로 만들었지만 요즘은 Gradle로 넘어오는 추세입니다. Language Java Spring Boot 버전을 선택해야하는데 SNAPSHOT, M1은 정식 릴리즈된 버전이 아니므로 선택하지말고 정식 버전인 2.6.X을 선택해야 합니다. Group 보통 기업의 도메인이나 이름을 넣지만 입문자는 크게..

자바 스프링 2022.03.28
1 2
반응형