전체 글 563

커넥션 풀 이해

커넥션 풀 이해 데이터베이스 커넥션을 매번 획득 데이터베이스 커넥션을 획득할 때 다음과 같은 복잡한 과정 거침 애플리케이션 로직은 DB 드라이버 통해서 커넥션 조회 DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다. DB는 커넥션 생성이 완료되었다는 응답을 보낸다. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 많이 소모되는 일이다. DB는 물론이..

Spring/SpringDB 2022.06.14

JDBC 개발 - 등록

JDBC를 사용해서 회원 Member 데이터를 데이터베이스에 관리하는 기능을 개발해보자 H2 데이터베이스 설정 마지막에 있는 테이블과 샘플 데이터 만들기를 통해 member 테이블을 미리 만들어 둔다. schema.sql drop table member if exists cascade; create table member ( member_id varchar(10), money integer not null default 0, primary key (member_id) ); domain 패키지를 만들고 Member class를 만들어준다. package hello.jdbc.domain; import lombok.Data; @Data public class Member { private String memb..

Spring/SpringDB 2022.06.14

Spring Boot으로 웹 출시까지 #12. 권한에 맞는 화면 구성 및 API 호출 & 13. JPA 이용한 커스텀 쿼리 만들기

사용자 권한에 따라 API 제한 하기 @Secured, @RolesAllowed, @PreAuthorize 혹은 새로운 어노테이션을 만들어서 접근 권한을 설정 가장 간단한 @Secured를 이용 WebSecurityConfig Class에서 아래 부분에서 @Autowired를 주석처리 해주니 일단 에러가 임시방편으로 해결되었다. 근데 Signup하고 signin이 되는 과정으로 안넘어간다. 로그인이 안되는중 => 게시판도 안보임. MySQL [mydb]> select * from user; +----+----------+--------------------------------------------------------------+---------+ | id | username | password | ..

Spring/SpringBoot 2022.06.06

Spring Boot으로 웹 출시까지 #11. JPA로 조회방법(FetchType) 설정하기

서로 연관된 두 테이블간의 조회방법 설정 EAGER LAZY N + 1 문제 및 해결방법 알아보기 User Controller에서 Fetch Type을 알아보자. User Controller package com.example.myhome.model; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Data public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;..

Spring/SpringBoot 2022.06.04

Spring Boot으로 웹 출시까지 #10. JPA를 이용하여 @OneToMany 관계 설정하기

Board Class에 User 정보를 넣어주자. 게시글 입장에서 사용자는 다대일 관계 사용자 입장에서는 게시글과 일대다 관계 참고 https://zetawiki.com/wiki/MySQL_%ED%85%8C%EC%9D%B4%EB%B8%94_%EC%BB%AC%EB%9F%BC_%EC%B6%94%EA%B0%80 MySQL 테이블 컬럼 추가 - 제타위키 다음 문자열 포함... zetawiki.com board 테이블에 user_id 컬럼을 만들고 user_id 컬럼을 user의 id 컬럼을 참조하여 외래키로 만들어준다. MySQL [mydb]> ALTER TABLE board ADD user_id BIGINT(20); Query OK, 0 rows affected, 1 warning (0.028 sec) Rec..

Spring/SpringBoot 2022.06.04

Spring Boot으로 웹 출시까지 #9. Spring Security를 이용한 로그인 처리

Securing a Web application에서 Spring Security를 참고해준다. org.springframework.boot spring-boot-starter-security org.springframework.security spring-security-test test 예제 구성은 아래와 같이 나와있다. authorizeRequests formLogin logout @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { htt..

Spring/SpringBoot 2022.06.03

Spring Boot으로 웹 출시까지 #8. JPA를 이용한 페이지 처리 및 검색

bootstrap를 이용해서 page-overview를 확인하는 ui를 변경해주자. JPA를 이용해서 페이지를 가져오는 작업을 PagingAndSortingRepositorty interface를 검색해서 참고한다. BoardController을 아래와 같이 해준다. @GetMapping("/list") public String list(Model model) { Page boards = boardRepository.findAll(PageRequest.of(1, 20)); model.addAttribute("boards", boards); return "board/list"; } pageable도 이용해서 코드를 작성해주자. @GetMapping("/list") public String list(Mod..

Spring/SpringBoot 2022.06.02

Spring Boot으로 웹 출시까지 #7. JPA이용한 RESTful API 작성

참고 사이트에서 REST 서비스를 Spring을 이용해서 다뤄보자. JPA를 이용해서 mariaDB의 데이터 조작할 수 있는 컨트롤러 생성 PostMan을 이용해서 http요청을 통해 CRUD 데이터 조작하기 참고 사이트 아래의 HTTP is the Platform을 사용해보자. package payroll; import java.util.List; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springfr..

Spring/SpringBoot 2022.06.02