초급자를 위해 준비한
[웹 개발, 백엔드] 강의입니다.
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다.
✍️
이런 걸
배워요!
예제를 만들면서 자연스럽게 스프링을 이해할 수 있습니다.
스프링을 어떻게 공부해야 하는지 예제를 만들면서 자연스럽게 배울 수 있습니다.
스프링으로 웹 애플리케이션을 만드는 방법을 배울 수 있습니다.
스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다.
???? 확인해주세요!
본 강의는 자바 스프링 완전 정복 시리즈의 첫 번째 강의입니다. 우아한형제들 최연소 기술이사 김영한의 스프링 완전 정복 로드맵을 먼저 확인해주세요.
• 로드맵 링크: https://www.inflearn.com/roadmaps/373 (클릭하면 바로가기)
김영한의 스프링 입문
코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
소스 :
[1] 강의 소개
1.강의 소개
강의:
2.강의 소개
강의 :
# 버전 수정 이력 ## v2022-11-28 * 스프링 부트 3.0 내용 추가 * 프로젝트 선택에서 `Gradle - Groovy` 추가 ## v2022-09-04 * 오타 `helloConroller` -> `helloController` (hswkd9895님 도움) * 코드 오타 `template/` -> `templates/` (anthologia님 도움) ## v2021-12-01 *주의!* h2 데이터베이스는 꼭 다음 링크에 들어가서 *1.4.200* 버전을 설치해주세요. 최근에 나온 2.0.206 버전을 설치하면 일부 기능이 정상 동작하지 않습니다. https://www.h2database.com/html/download-archive.html 만약 이미 설치하고 실행까지 했다면 다시 설치한 이후에 *~/test.mv.db* 파일을 꼭 삭제해주세요. 그렇지 않으면 다음 오류가 발생하면서 접속되지 않습니다. General error: "The write format 1 is smaller than the supported format 2 [2.0.206/5]" [50000-202] HY000/50000 ## v2021-07-18
[2] 프로젝트 환경 설정
3.프로젝트 생성
강의 :
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.2'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
4.라이브러리 살펴보기
강의 :
5.View 환경설정
강의:
스프링부트 문서
:
https://docs.spring.io/spring-boot/docs/3.0.2/reference/htmlsingle/#getting-started
controller
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data" ,"hello");
return "hello";
}
}
html
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 th:text="${data}">data</h1>
</body>
</html>
6.빌드하고 실행하기
강의:
./gradlew build
빌드후 라이브러리 이동
cd ./build/lib
java -jar hello-spring-0.0.1-SNAPSHOT.jar
잘 안될 경우
./gradlew clean build
[3] 스프링 웹 개발 기초
7.정적 컨텐츠
강의:
8.MVC와 템플릿 엔진
강의:

9.API
강의:

@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name, Model model){
Hello hello =new Hello();
hello.setName(name);
return hello;
}
static class Hello{
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
[4] 회원 관리 예제 - 백엔드 개발
10.비즈니스 요구사항 정리
강의:

11.회원 도메인과 리포지토리 만들기
강의:
12.회원 리포지토리 테스트 케이스 작성
강의:
MemoryMemberRepositoryTest
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import hello.hellospring.reository.MemberRepository;
import hello.hellospring.reository.MemoryMemberRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.List;
public class MemoryMemberRepositoryTest {
MemberRepository repository =new MemoryMemberRepository();
@AfterEach
public void afterEach(){
repository.clearStore();
}
@Test
public void save(){
Member member =new Member();
member.setName("spring");
repository.save(member);
Member result =repository.findById(member.getId()).get();
Assertions.assertThat(member).isEqualTo(result);
}
@Test
public void findByNmae(){
Member member1=new Member();
member1.setName("spring1");
repository.save(member1);
Member member2=new Member();
member2.setName("spring2");
repository.save(member2);
Member result =repository.findByName("spring1").get();
Assertions.assertThat(result).isEqualTo(member1);
}
@Test
public void findAll(){
Member member1 =new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 =new Member();
member2.setName("spring2");
repository.save(member2);
List<Member> result =repository.findAll();
Assertions.assertThat(result.size()).isEqualTo(2);
}
}
13.회원 서비스 개발
강의:
https://www.inflearn.com/course/스프링-입문-스프링부트/unit/49583?tab=curriculum
MemberService
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.reository.MemberRepository;
import hello.hellospring.reository.MemoryMemberRepository;
import java.util.List;
import java.util.Optional;
public class MemberService {
private final MemberRepository memberRepository =new MemoryMemberRepository();
/**
* 회원가입
* @param member
* @return
*/
public Long join(Member member){
//같은 이름이 있는 중복 회원 x
extracted(member);
memberRepository.save(member);
return member.getId();
}
private void extracted(Member member) {
memberRepository.findByName(member.getName()).ifPresent(m->{
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
/**
* 전체 회원 조회
* @return
*/
public List<Member> findMembers(){
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
}
14.회원 서비스 테스트
강의:
https://www.inflearn.com/course/스프링-입문-스프링부트/unit/49584?tab=curriculum
MemberServiceTest
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.reository.MemberRepository;
import hello.hellospring.reository.MemoryMemberRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class MemberServiceTest {
MemberService memberService ;
MemberRepository memberRepository;
@BeforeEach
public void beforeEach(){
memberRepository =new MemoryMemberRepository();
memberService =new MemberService(memberRepository);
}
@AfterEach
public void afterEach(){
memberRepository.clearStore();
}
@Test
void 회원가입() {
//give
Member member =new Member();
member.setName("hello");
//when
Long saveId =memberService.join(member);
//then
Member findMember= memberService.findOne(saveId).get();
Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
}
@Test
public void 중복_회원_예외(){
//given
Member member1 =new Member();
member1.setName("spring1");
Member member2=new Member();
member2.setName("spring1");
//when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
// try{
// memberService.join(member2);
// fail();
// }catch (IllegalStateException e){
// Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
// }
//then
}
@Test
void findMembers() {
}
@Test
void findOne() {
}
}

















댓글 ( 4)
댓글 남기기