BackEnd
-
📌 AOP가 필요한 상황 ➞ 모든 메소드의 호출 시간을 측정하고 싶은 경우?➞ 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? ① 직접 코드를 작성해 구해보기@Transactionalpublic class MemberService { // 회원가입 public Long join(Member member) { long start = System.currentTimeMillis(); try { // 중복 회원 검사 validateDuplicateMember(member); memberRepository.save(member); return member.getId(); } fi..
[입문] 07. AOP📌 AOP가 필요한 상황 ➞ 모든 메소드의 호출 시간을 측정하고 싶은 경우?➞ 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? ① 직접 코드를 작성해 구해보기@Transactionalpublic class MemberService { // 회원가입 public Long join(Member member) { long start = System.currentTimeMillis(); try { // 중복 회원 검사 validateDuplicateMember(member); memberRepository.save(member); return member.getId(); } fi..
2024.05.18 -
📌 H2 데이터베이스 ➞ 지금까지는 회원의 정보를 메모리에 저장을 했다.➞ 그러나 이제는 데이터베이스를 이용해 회원의 정보를 저장하고자 한다. ▶︎ H2 설정 ➞ 다음은 H2 데이터베이스를 사용하기 위해 필요한 설정들이다. 1. build.gradle 2. application.properties ① build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2'} ② application.propertiesspring.datasource.url=jdbc:h2:tcp://localhost/~/testspring.datasource..
[입문] 06. 스프링 DB 접근 기술📌 H2 데이터베이스 ➞ 지금까지는 회원의 정보를 메모리에 저장을 했다.➞ 그러나 이제는 데이터베이스를 이용해 회원의 정보를 저장하고자 한다. ▶︎ H2 설정 ➞ 다음은 H2 데이터베이스를 사용하기 위해 필요한 설정들이다. 1. build.gradle 2. application.properties ① build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2'} ② application.propertiesspring.datasource.url=jdbc:h2:tcp://localhost/~/testspring.datasource..
2024.05.11 -
📌 회원 웹 기능 - 홈 화면 추가 ① 홈 컨트롤러 추가 ➞ localhost:8080 요청이 들어오면, @GetMapping 호출되어 home.html view 파일을 찾아 실행한다.➞ 이때 @GetMapping이 없으면 static 폴더의 정적 파일을 실행한다.➞ 컨트롤러는 정적 파일보다 우선순위가 높기 때문이다.package hello.hellospring.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;@Controllerpublic class HomeController { @GetMapping("/") public ..
[입문] 05. 회원관리 예제 - 웹 MVC 개발📌 회원 웹 기능 - 홈 화면 추가 ① 홈 컨트롤러 추가 ➞ localhost:8080 요청이 들어오면, @GetMapping 호출되어 home.html view 파일을 찾아 실행한다.➞ 이때 @GetMapping이 없으면 static 폴더의 정적 파일을 실행한다.➞ 컨트롤러는 정적 파일보다 우선순위가 높기 때문이다.package hello.hellospring.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;@Controllerpublic class HomeController { @GetMapping("/") public ..
2024.05.05 -
📌 스프링 빈과 의존관계 ▶︎ DI (의존성 주입) ➞ 생성자에 @Autowired가 있으면 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다➞ 이렇게 객체 의존관계를 외부에서 넣어주는 방식을 DI (Dependency Injection), 의존성 주입이라고 한다.➞ 이를 통해 객체가 필요로 하는 다른 객체나 서비스를 직접 생성하지 않고, 외부에서 제공받아 사용할 수 있다. ① 회원 컨트롤러에서 의존관계를 추가할 때 주의할 점 ➞ @Autowired를 통한 DI는 helloController, memberService 등과 같이 스프링이 관리하는 객체에서만 동작한다.➞ 하지만 다음과 같은 경우 에러가 발생하는데 왜 그럴까?➞ 이는 memberService가 자동으로 스프링 빈으로 인식되지 않아서 Co..
[입문] 04. 스프링 빈과 의존관계📌 스프링 빈과 의존관계 ▶︎ DI (의존성 주입) ➞ 생성자에 @Autowired가 있으면 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다➞ 이렇게 객체 의존관계를 외부에서 넣어주는 방식을 DI (Dependency Injection), 의존성 주입이라고 한다.➞ 이를 통해 객체가 필요로 하는 다른 객체나 서비스를 직접 생성하지 않고, 외부에서 제공받아 사용할 수 있다. ① 회원 컨트롤러에서 의존관계를 추가할 때 주의할 점 ➞ @Autowired를 통한 DI는 helloController, memberService 등과 같이 스프링이 관리하는 객체에서만 동작한다.➞ 하지만 다음과 같은 경우 에러가 발생하는데 왜 그럴까?➞ 이는 memberService가 자동으로 스프링 빈으로 인식되지 않아서 Co..
2024.05.05 -
1. 비즈니스 요구사항 정리 ◦ 데이터 : 회원ID, 이름 ◦ 기능 : 회원 등록, 조회 ◦ DB : 미정 - RDB, NoSQL 등등 다양한 저장소를 고민중인 상황 2. 웹 어플리케이션 계층 구조 ◦ 컨트롤러 : 웹 MVC의 컨트롤러 역할 ◦ 서비스 : 핵심 비즈니스 로직 구현 ◦ 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 ◦ 도메인 : 비즈니스 도메인 객체 - 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 📌 클래스 의존 관계 ◦ DB를 선정하지 않아서, 우선 인터페이스로 구현 클래스를 변경 가능하도록 설계한다. ◦ 개발 진행을 위해 초기에는 구현체로 가벼운 메모리 기반의 데이터 저장소를 사용한다. 3. 회원 도메인과 리포지토리 📌 회원 객체 - do..
[입문] 03. 회원 관리 예제 - 백엔드 개발1. 비즈니스 요구사항 정리 ◦ 데이터 : 회원ID, 이름 ◦ 기능 : 회원 등록, 조회 ◦ DB : 미정 - RDB, NoSQL 등등 다양한 저장소를 고민중인 상황 2. 웹 어플리케이션 계층 구조 ◦ 컨트롤러 : 웹 MVC의 컨트롤러 역할 ◦ 서비스 : 핵심 비즈니스 로직 구현 ◦ 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 ◦ 도메인 : 비즈니스 도메인 객체 - 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 📌 클래스 의존 관계 ◦ DB를 선정하지 않아서, 우선 인터페이스로 구현 클래스를 변경 가능하도록 설계한다. ◦ 개발 진행을 위해 초기에는 구현체로 가벼운 메모리 기반의 데이터 저장소를 사용한다. 3. 회원 도메인과 리포지토리 📌 회원 객체 - do..
2024.04.06 -
1. 정적 컨텐츠 ◦ 정적 컨텐츠란 파일을 사용자 화면에 그대로 나타내는 것이다. 파일을 그대로 전달하기 때문에 정적이라고 표현한다. ◦ 기본적으로 /main/resources/static 경로 안에 생성한다. 📌 resources > static > hello-static.html 정적 컨텐츠 입니다. ⭐️ 정적 컨텐츠의 흐름 1. 가장 먼저 "톰캣" 내장 서버를 거친다. 2. 이때, 스프링 컨테이너에 hello-static에 대한 컨트롤러를 살펴본다. 3. 정적 컨텐츠는 관련 컨트롤러가 필요 없기에, /resources/static 폴더의 hello-static.html 파일을 찾아 반환한다. 2. MVC와 템플릿 엔진 ◦ MVC는 각각 Model, View, Controller를 뜻한다. ◦ MVC..
[입문] 02. 스프링 웹 개발 기초1. 정적 컨텐츠 ◦ 정적 컨텐츠란 파일을 사용자 화면에 그대로 나타내는 것이다. 파일을 그대로 전달하기 때문에 정적이라고 표현한다. ◦ 기본적으로 /main/resources/static 경로 안에 생성한다. 📌 resources > static > hello-static.html 정적 컨텐츠 입니다. ⭐️ 정적 컨텐츠의 흐름 1. 가장 먼저 "톰캣" 내장 서버를 거친다. 2. 이때, 스프링 컨테이너에 hello-static에 대한 컨트롤러를 살펴본다. 3. 정적 컨텐츠는 관련 컨트롤러가 필요 없기에, /resources/static 폴더의 hello-static.html 파일을 찾아 반환한다. 2. MVC와 템플릿 엔진 ◦ MVC는 각각 Model, View, Controller를 뜻한다. ◦ MVC..
2024.04.05 -
1. 프로젝트 생성 1.1. 스프링 부트 스타터 • 프로젝트 선택 ‣ Project : Gradle - Groovy ‣ Spring Boot : 3.x.x ‣ Language : Java ‣ Packaging : Jar ‣ Java 17 • Project MetaData ‣ groipId : hello ‣ artifactId : hello-spring • Dependencies ‣ Spring Web ‣ Thymeleaf 1.2. Gradle 전체 설정 ▸ build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.2.4' id 'io.spring.dependency-management' version '1.1.4' } group ..
[입문] 01. 프로젝트 환경 설정1. 프로젝트 생성 1.1. 스프링 부트 스타터 • 프로젝트 선택 ‣ Project : Gradle - Groovy ‣ Spring Boot : 3.x.x ‣ Language : Java ‣ Packaging : Jar ‣ Java 17 • Project MetaData ‣ groipId : hello ‣ artifactId : hello-spring • Dependencies ‣ Spring Web ‣ Thymeleaf 1.2. Gradle 전체 설정 ▸ build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.2.4' id 'io.spring.dependency-management' version '1.1.4' } group ..
2024.03.24 -
19장. 웹 페이지에서 댓글 삭제하기 19.1. 댓글 삭제의 개요 댓글 삭제는 2단계로 진행한다. 1. 댓글 [삭제] 버튼 만들기 2. [삭제] 버튼 클릭해 REST API 요청 보내기 어느 댓글에서 삭제 요청했는디 알아야 서버를 통해 댓글을 삭제할 수 있기 때문에 [삭제] 버튼 클릭 이벤트를 처리할 때 [삭제] 버튼을 통해 댓글의 id를 전달할 것이다. 19.2. 댓글 삭제 버튼 추가하기 댓글 [삭제] 버튼은 댓글 [수정] 버튼 옆에 위치할 예정이다. class 속성 값으로는 comment-delete-btn을 추가해, 댓글 삭제 시 클릭 이벤트 처리를 위한 선택자로 사용한다. 17-18장에서는 아이디 선택자(#id)를 이용해 HTML 문서의 요소를 선택했는데, 이번에는 클래스 선택자(.class)로 ..
[Spring Boot] 19. 웹 페이지에서 댓글 삭제하기19장. 웹 페이지에서 댓글 삭제하기 19.1. 댓글 삭제의 개요 댓글 삭제는 2단계로 진행한다. 1. 댓글 [삭제] 버튼 만들기 2. [삭제] 버튼 클릭해 REST API 요청 보내기 어느 댓글에서 삭제 요청했는디 알아야 서버를 통해 댓글을 삭제할 수 있기 때문에 [삭제] 버튼 클릭 이벤트를 처리할 때 [삭제] 버튼을 통해 댓글의 id를 전달할 것이다. 19.2. 댓글 삭제 버튼 추가하기 댓글 [삭제] 버튼은 댓글 [수정] 버튼 옆에 위치할 예정이다. class 속성 값으로는 comment-delete-btn을 추가해, 댓글 삭제 시 클릭 이벤트 처리를 위한 선택자로 사용한다. 17-18장에서는 아이디 선택자(#id)를 이용해 HTML 문서의 요소를 선택했는데, 이번에는 클래스 선택자(.class)로 ..
2024.02.02