본문 바로가기

Frameworks/Springboot14

[Spring] 커넥션 풀과 DataSource에 대한 이해 [김영한님의 스프링 DB 1편 - 데이터 접근 핵심 원리를 학습 후 정리한 내용입니다.] 순서 커넥션 풀이란? DataSource이란? DataSource 예제 - DriverManager DataSource 예제 - 커넥션 풀 DataSource 실제 적용 1. 커넥션 풀이란? 데이터베이스 커넥션을 획득할 때에는 아래 그림과 같이 매우 복잡한 과정을 거친다. 애플리케이션 로직은 DB드라이버를 통해 커넥션을 조회한다. DB드라이버는 DB와 TCP/IP 커넥션을 연결한다. 이 과정에서 3 way handshake 같은 네트워크 동작이 발생한다. DB드라이버는 TCP/IP 커넥션이 연결되면, ID PW와 기타 부가정보를 DB에 전달한다. DB는 ID PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생.. 2023. 5. 22.
[Spring] JDBC에 대한 이해 [김영한님의 스프링 DB 1편 - 데이터 접근 핵심 원리를 학습 후 정리한 내용입니다.] 순서 JDBC에 대한 이해 JDBC를 활용한 CRUD 예제 1. JDBC에 대한 이해 1) JDBC등장 이유 애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다. 클라이언트가 애플리케이션 서버를 통해 데이터를 정하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터를 사용한다. 커넥션 연결: TCP/IP를 사용해서 커넥션을 연결한다. SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. 여기서 사용하는 DB가 바뀐다면 어떻게 해야.. 2023. 5. 22.
[Springboot] Redis로 동시성 문제 해결하기 [최상용님의 재고 시스템으로 알아보는 동시성 이슈 해결방법을 학습 후 정리한 내용입니다.] 순서 Redis 라이브러리 알아보기 작업환경 세팅 Lettuce 사용하기 Redisson 사용하기 정리 1. Redis 라이브러리 알아보기 Redis를 사용하여 동시성 문제를 해결하는 대표적인 라이브러리에는 2가지가 존재한다. Lettuce Redisson Lettuce Setnx 명령어를 활용하여 분산락을 구현한다. 기존의 값이 없을 때만 Set을 하는 명령어이다. Setnx는 Spin Lock방식이므로 retry 로직을 개발자가 작성해야 한다. Spin Lock이란, Lock 을 획득하려는 스레드가 Lock을 획득할 수 있는지 확인하면서 반복적으로 시도하는 방법이다. Redisson Pub-sub기반으로 Loc.. 2023. 5. 9.
[Springboot] Synchronized, Database로 동시성 문제 해결하기 [최상용님의 재고 시스템으로 알아보는 동시성 이슈 해결방법을 학습 후 정리한 내용입니다.] 순서 재고 시스템 생성과 문제 발생 Synchronized 사용하기 Database 사용하기 - Pessimistic Lock Database 사용하기 - Optimistic Lock Database 사용하기 - Named Lock 1. 재고 시스템 생성과 문제 발생 재고 시스템을 만들기 위해서 도메인과 서비스를 만들어보자. 도메인의 경우 id, productId, quantity 필드를 가지며, quantity를 받아서 감소시키는 비즈니스 로직이 도메인 상에 존재한다. [Domain] @Entity public class Stock { @Id @GeneratedValue(strategy = GenerationTy.. 2023. 5. 9.
[Springboot] PRG패턴 정리 [김영한님의 스프링 MVC 1편-백엔드 웹 개발 핵심 기술을 학습 후 정리한 내용입니다.] 상품등록, 조회에 관한 간단한 웹페이지를 만드는 과정이었지만, 기본기부터 다지자는 마음에서 더 꼼꼼하게 강의를 들었던 것 같다. 뷰 템플릿으로 JSP가 아닌 Thymeleaf을 사용하게 되서,, 그 문법을 새롭게 배웠고, 강의 마지막 부분에서 PRG패턴과 RedirectAttributes을 사용해서 상품등록의 중복을 막고 사용자친화적인 message를 제공하는 것을 보고 정리를 하게 되었다. ● 현재상황 /add로 되있는 url은 상품등록폼으로 연결된 주소이고, 컨트롤러에서는 아래와 같이 상품명, 가격, 수량을 받아서 Item에 저장하고, 해당 basic/item이라는 뷰 템플릿으로 이동하게 된다. @PostMap.. 2022. 8. 26.
[Springboot] HTTP요청, 응답 처리 방식 정리 [김영한님의 스프링 MVC 1편-백엔드 웹 개발 핵심 기술을 학습 후 정리한 내용입니다.] HTTP요청이 들어올 때 매핑하는 방식부터 시작해서, 여러가지 어노테이션으로 요청 파라미터를 처리하는 방식, 또 json은 어떻게 처리하는지, 그리고 응답하는 방법과 여러가지 예시를 다루었다. 나중에 까먹을 수도 있다는 생각으로 정리했다. ● HTTP 요청을 매핑해보자. @RequestMapping(value= "/URL", method = RequestMethod.HTTP메서드) @RequestMapping(value="/hello-basic", method=RequestMethod.GET) public String helloBasic() { log.info("helloBasic"); return "ok"; } .. 2022. 8. 24.