{"id":13316321,"url":"https://github.com/YuumiNam/springboot-hellogradle","last_synced_at":"2025-03-10T22:32:59.671Z","repository":{"id":65430602,"uuid":"589916623","full_name":"YuumiNam/springboot-hellogradle","owner":"YuumiNam","description":"(인프런) 스프링입문 - 코드로배우는 스프링부트, 웹MVC, DB접근기술","archived":false,"fork":false,"pushed_at":"2023-01-28T13:14:56.000Z","size":130,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-03-12T05:41:39.835Z","etag":null,"topics":["java-gradle","jpa","mariadb","spring","springboot","thymeleaf"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/YuumiNam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2023-01-17T08:43:44.000Z","updated_at":"2023-02-03T06:46:29.000Z","dependencies_parsed_at":"2023-02-12T21:30:27.613Z","dependency_job_id":null,"html_url":"https://github.com/YuumiNam/springboot-hellogradle","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YuumiNam%2Fspringboot-hellogradle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YuumiNam%2Fspringboot-hellogradle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YuumiNam%2Fspringboot-hellogradle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YuumiNam%2Fspringboot-hellogradle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YuumiNam","download_url":"https://codeload.github.com/YuumiNam/springboot-hellogradle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242939425,"owners_count":20209874,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java-gradle","jpa","mariadb","spring","springboot","thymeleaf"],"created_at":"2024-07-29T18:21:31.943Z","updated_at":"2025-03-10T22:32:59.408Z","avatar_url":"https://github.com/YuumiNam.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Springboot를 Gradle, JPA, Thymeleaf를 활용한 최신트렌드로 입문\n### (기존에는 Maven, MyBatis, jsp)\n\u003cbr\u003e\u003cbr\u003e\n\n### (인프런) 스프링 입문 - 코드로배우는 스프링부트, 웹MVC, DB접근기술\n#### 인프런 주소 : https://www.inflearn.com/\n\u003cbr\u003e\u003cbr\u003e\n\n**스프링부트 기본 라이브러리**\n```\nspring-boot-starter-web\n\tspring-boot-starter-tomcat: 톰캣(웹서버)\n\tspring-webmvc: 스프링 웹MVC\nspring-boot-starter-thymeleaf: 웹브라우저에 HTML이 보이는 것 -\u003e HTML을 만들어주는 Template Engine이 필요\n\t\t\t\t=\u003e Thymeleaf (View)\n\nspring-boot-starter (공통): 스프링부트 + 스프링코어 + 로깅(logback, slf4j)\n```\n\u003cbr\u003e\u003cbr\u003e\n\n**테스트 라이브러리**\n```\nspring-boot-starter-test\n\tjunit: 테스트 프레임워크\n\tmockito: 목 라이브러리\n\tassertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리\n\tspring-test: 스프링 통합 테스트 지원\n```\n\u003cbr\u003e\u003cbr\u003e\n\n![화면 캡처 2023-01-17 180755](https://user-images.githubusercontent.com/114986610/212855861-8a30af47-7abb-4f03-a5f6-415ee5a81ea9.png) \\\n출처 : 김영한의 스프링 입문\n\n- 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다\n- (참고) **spring-boot-devtools** 라이브러리를 추가하면, html파일을 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능\n\u003cbr\u003e\u003cbr\u003e\n\n**웹사이트를 구성하는 3가지 방법**\n1. 정적컨텐츠 (HTML파일 자체를 웹에 올림)\n2. MVC모델 (Model, View, Controller)\n3. API 사용\n\u003cbr\u003e\u003cbr\u003e\n\n**스프링 빈을 등록하는 2가지 방법**\n1. 컴포넌트 스캔과 자동 의존관계 설정\n``` java\n@Controller\npublic class MemberController {\n\t\n\t// DI 첫번째 방법 : 필드 주입\n\t// @Autowired\n\tMemberService memberService;\n\t\n\t// DI 두번째 방법 : 생성자 주입 (추천)\n\t// 의존관계가 실행중에 동적으로 변하는 경우는 거의 없으므로\n\t@Autowired\n\tpublic MemberController(MemberService memberService) {\n\t\tthis.memberService = memberService;\n\t}\n}\n```\n\n컴포넌트 스캔 원리\n- @Component 어노테이션이 있으면 스프링 빈으로 자동 등록됨\n- @Controller 컨트롤러가 스프링 빈으로 자동 등록된 이류도 컴포넌트 스캔 때문\n\n- @Component 를 포함하는 다음 어노테이션도 스프링 빈으로 자동 등록됨\n\t- @Controller\n\t- @Service\n\t- @Repository\n\u003cbr\u003e\n\n2. 자바 코드로 직접 스프링 빈 등록하기\n``` java\n@Configuration\npublic class SpringConfig {\n\n\t// private DataSource dataSource;\n\tprivate EntityManager em;\n\t\n//\t@Autowired\n//\tpublic SpringConfig(DataSource dataSource) {\n//\t\tsuper();\n//\t\tthis.dataSource = dataSource;\n//\t}\n\n\t@Autowired\n\tpublic SpringConfig(EntityManager em) {\n\t\tthis.em = em;\n\t}\n\t\n\t@Bean\n\tpublic MemberService memberService() {\n\t\treturn new MemberService(memberRepository());\n\t}\n\t\n\t@Bean\n\tpublic MemberRepository memberRepository() {\n\t\t// return new MemoryMemberRepository();\n\t\t// return new JdbcTemplateMemberRepository(dataSource);\n\t\treturn new JpaMemberRepository(em);\n\t}\n}\n```\n\n- XML로 설정하는 방식도 있지만 최근에는 잘 사용하지않음\n- 실무에서는 정형화된 컨트롤러, 서비스, 레포지토리 같은 코드는 컴포넌트 스캔을 사용함\n- 그러나 상황에 따라서 구현 글래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록\n\u003cbr\u003e\u003cbr\u003e\n\n**스프링 DB 접근기술**\n1. 순수 JDBC \\\n(고대 개발자 선배님이 썼던방법... 넘어갈예정)\n2. 스프링 JDBCTemplate \\\n(**JDBCTemplate**, **MyBatis** 같은 라이브러리는 순수 JDBC API에서 본 반복코드를 대부분 제거해줌. 하지만 SQL은 직접 작성해야함)\n3. **JPA** \\\n(기존의 반복코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해줌 \\\nSQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환 할 수 있음)\n\n\u003cbr\u003e\u003cbr\u003e\n\n**JPA와 DB관련 라이브러리 추가**\n1. build.gradle에 추가할 사항\n``` java\ndependencies {\n\timplementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.7.3'\n\timplementation 'org.springframework.boot:spring-boot-starter-data-jpa'\n}\n```\n\n2. application.properties에 추가할 사항\n``` java\nspring.datasource.driverClassName=org.mariadb.jdbc.Driver\nspring.datasource.url=jdbc:mariadb://127.0.0.1:3306/(DB 이름)\nspring.datasource.username=(user 이름)\nspring.datasource.password=(user 패스워드)\nspring.jpa.properties.hibernate.format_sql=true\nspring.jpa.hibernate.ddl-auto=none\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYuumiNam%2Fspringboot-hellogradle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FYuumiNam%2Fspringboot-hellogradle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYuumiNam%2Fspringboot-hellogradle/lists"}