본문 바로가기

Spring/스프링 입문

(7)
7. AOP (Aspect Oriented Programing) AOP가 필요한 상황 AOP는 핵심적인 로직을 구현하는데 있어서 핵심적인 로직과는 무관하지만 보조적으로 중간에 삽입해야 하는 로직들에 대해서 외부로 따로 빼놓고, 실행될때 자동으로 중간에 보조적 로직을 삽입하여 실행하도록 하는 것입니다. 핵심 관심 사항 (core concern) vs 공통 관심 사항 (cross-cutting concern) Ex) 모든 메소드의 호출 시간을 측정하고 싶다면? 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? AOP 적용 이전 AOP 적용 핵심 관심 사항과 공통 관심 사항 분리 AOP 적용 이전 MemberSerivce의 메소드마다 회원 조회 시간 측정 추가 시간을 측정하는 기능은 핵심 관심 사항이 아니다. 시간을 측정하는 기능은 공통 관심 사항이다. 시간을 측정하는..
6. 스프링 DB 접근 기술 H2 데이터베이스 설치 H2 윈도우에 설치 H2 다운로드 사이트에 들어가서 Last Stable 버전을 다운 후 설치한다. 사이트 주소: http://www.h2database.com/html/download.html 윈도우라 윈도우 버전 설치. 설치된 H2의 bin의 h2.bat을 클릭해 실행시킨다. 자동으로 웹 H2 콘솔이 뜬다. 처음에 비밀번호가 없으므로 그냥 연결 누르면 된다. h2.bat파일 실행시킬 때 나오는 CMD 창을 꺼버리면 페이지에 연결할 수 없다고 나온다. Spring에 H2 데이터베이스 연결 build.gradle의 dependencies에 jdbc와 H2 관련 라이브러리 추가. 참고로 runtimeOnly는 실행 시점에만 사용이란 의미. ComplieOnly는 컴파일 시점에만 사용..
5. 웹 MVC 개발 화면 웹 기능 - 홈 화면 추가 GetMapping으로 "/"을 해놓으면 기본으로 Welcome Page로 제공하는 Index.html보다 더 우선순위가 높다. 즉 컨트롤러가 정적 파일보다 우선 순위가 높다. 화면 웹 기능 - 등록 등록 화면 만들기 등록 기능 만들기 Entity인 Member 대신 DTO로 사용할 MemberForm 객체 만들기. Domain의 Entity는 DTO로 절대 사용하면 안된다. 왜냐하면 Entity는 직접 DB에 사용하는 개체이므로 View단에서 쓰이는 DTO와 분리를 해줘야 한다. 조회는 Get 방식, 저장은 Post 방식으로 한다. 화면 웹 기능 - 조회
4. 스프링 빈과 의존관계 스프링은 웹 어플리케이션 실행 시 스프링 컨테이너에 스프링 빈을 등록해서 의존 관계를 자동으로 설정해준다. 스프링을 사용하면 객체를 스프링 빈으로 등록해서 써야 얻는 이점이 많다. 스프링 Bean 등록 방법에는 2가지가 있다. 컴포넌트 스캔과 자동 의존관계 설정 자바 코드로 직접 스프링 빈 등록하기 두가지 방법 모두 알아야 한다. 컴포넌트 스캔과 자동 의존관계 설정 컴포넌트 스캔 컴포넌트 스캔은 @SpringBootApplictaion이 있는 패키지와 하위 패키지들을 전부 조사해서 @Component가 있는 객체를 모두 스프링 컨테이너의 스프링 Bean으로 등록한다. hello.hellospring 패키지와 하위 패키지의 @Component가 있는 클래스만 스프링 컨테이너의 스프링 Bean으로 생성 @S..
3. 회원 관리 예제 - 백엔드 개발 비즈니스 요구사항 정리 비즈니스 요구사항 데이터: 회원ID, 이름 기능: 회원 등록, 조회 아직 데이터 저장소가 선정되지 않음 (가상의 시나리오) 웹 어플리케이션 계층 구조 컨트롤러: 웹 MVC의 컨트롤러 역할 서비스: 핵심 비지니스 로직 구현 리포지토리: DB에 접근, 도메인 객체를 DB에 저장하고 관리 (DAO 생각하면 됨) 도메인: 비지니스 도메인 객체, Ex)회원, 주문, 쿠폰 등 주로 DB에 저장하고 관리됨 클래스 의존 관계 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용, Ex) HashMap 회원 도메인과 레포지토리 만들기 회원 객체 package he..
2. 스프링 웹 개발 기초 정적 컨텐츠 MVC와 템플릿 엔진 API 정적 컨텐츠 html 파일 그대로 Client에게 보내준다. MVC와 템플릿 엔진 MVC: Model, View, Controller 템플릿 엔진을 가지고 Request에 따라 HTML 파일을 변경한 후 Client에게 보내준다. 아래 사진처럼 HelloController를 만든 후 url에서 hello-mvc를 호출 할 수 있도록 Get 메서드를 만든다. @RequestParam은 URL 파라미터에서 value에 해당되는 값을 가져온다. Ex.) localhost:8080/hello-mvc?name=Lisa&age=18 이면 Lisa를 String name의 인자값으로 가져온다. 기본은 required=true이므로, false로 안바꾸면 name이 없을 시 에..
1. 프로젝트 환경 설정 프로젝트 생성 스프링 부트 스타터로 프로젝트 생성 스프링 부트 스타터 사이트에서 스프링 프로젝트 생성 https://start.spring.io/ Project Maven Project, Gradle Project 선택. 요즘은 Maven에서 Gradle로 넘어가는 추세라고 한다. Spring Boot SpringBoot 버전 선택. Snapshot, M3같은 미정식 버전을 제외하고 최신 버전 선택함. SnapShot: 거의 매일 찍어내는 버전. 데일리 빌드 버전 M(Milestone): 팀이나 프로젝트에서 정해진 주기마다 배포하는 버전. M3 이면 Milestone 3번째 것. Project Metadata Group: 보통 기업 도메인명 Artifact: build되어 나온 결과물(jar, war) ..