
AOP가 필요한 상황 갑자기 악덕 상사가 나타나 요새 우리 프로그램에 문제가 있는 것 같다며 모든 메소드의 호출 시간을 측정해 보라고 한다. 난 메소드 1000개의 시작과 끝에 시간 측정 로직을 모두 심어야 한다. 머리에 큰일났다는 생각 뿐이다. 그렇게 열심히 수정해뒀더니, 상사가 다시 와서 초 단위로 측정하니 잘 안 나오네..라며 밀리세컨드 단위로 바꾸라고 한다. . . . 모든 메소드의 호출 시간을 측정하고 싶다면? 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? MemberService 회원 조회 시간 측정 추가 src/main/java/hello.hellospring/service/Memb..

JPA JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다. JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다. JPA를 사용하면 개발 생산성을 크게 높일 수 있다. build.gradle 파일에 JPA, h2 데이터베이스 관련 라이브러리 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' //implementation 'org.springframework.boot:spring-boot-st..

순수 JDBC 환경 설정 # build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리 추가 // DB와 연동하기 위해 필요한 드라이버 implementation 'org.springframework.boot:spring-boot-starter-jdbc' // DB와 붙을 때 필요한 데이터베이스가 제공하는 클라이언트 runtimeOnly 'com.h2database:h2' # 스프링 부트 데이터베이스 연결 설정 추가 resources/application.properties spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.driver-class-name=org.h2.Driver spring.datasource...

들어가기 전에 우리는 이전 포스팅에서 회원 정보를 메모리에 저장했기 때문에 서버를 껐다 켜면 데이터가 메모리에서 모두 사라졌다. 실무에서는 이런 일이 발생하면 안되기 때문에 데이터베이스를 통해 저장하고 관리해야 한다. 이를 위해 우선 가볍고 간단한 H2 데이터 베이스를 설치하고, 데이터베이스 SQL을 통해 애플리케이션 서버와 DB를 연결해 보자. 연결할 때 필요한 것이 바로 Jdbc라는 기술이며, 먼저 오래 전의 개발자들이 어떻게 개발했는지 순수한 Jdbc로 경험을 해 보고 중복을 제거하여 애플리케이션에서 DB로 SQL을 편하게 날릴 수 있는 스프링 Jdbc Template을 사용할 예정이다. 그리고 더 나아가서 SQL조차 개발자들이 직접 짜지 않고 JPA라는 기술을 통해 등록/수정/삭제 쿼리를 날릴 수..

회원 웹 기능 - 홈 화면 추가 # HomeController java/hello/hellospring/controller/HomeController.java package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } > @GetMapping("/")에서 "/"는 가장 처음의 도메인(localhost:8080)을 의미한다. >..

컴포넌트 스캔과 자동 의존관계 설정 # 스프링 빈을 등록하고 의존관계 설정하기 지난 Section3에서 구축했던 백엔드 기능에 화면을 붙여보자. 화면 구축을 위해서는 Controller와 View Template이 필요하다. 그러려면 MemberController를 만들어야 하는데, MemberController는 MemberService를 통해서 회원가입과 데이터 조회가 가능해야 한다. 이러한 관계를 'MemberController가 MemberService에 의존한다'고 표현한다. @Controller : 스프링이 처음에 뜰 때 스프링 컨테이너가 생기는데, 이때 @Controller가 있으면 객체(여기에서는 MemberController)를 생성해서 스프링 컨테이너에 넣어 둠. 이렇게 컨테이너에 넣어..