일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- javascript
- sql
- generic class
- dbms
- DB
- Queue
- 코딩테스트
- spring
- Java
- dfs
- MVC
- Stack
- jsp
- 가상컴퓨팅
- 자료구조
- BFS
- 크루스칼
- 생성자
- 클라우드 컴퓨팅
- 공개키 암호화
- cloud computing
- JPA
- 알고리즘
- data structure
- 암호학
- 코테
- python
- 자바의정석
- JDBC
- Algorithm
- Today
- Total
목록개발 공부/Spring framework (18)
PLOD
※ 이 글은 '스프링 부트 쇼핑몰 프로젝트 with JPA' 책을 참고하여 적은 글입니다.지금처럼 이커머스를 기준으로 프로젝트를 진행할 때 장바구니(위시리스트)와 상품과 회원은 무조건 존재해야 될 엔티티이다.연관관계객체 지향 프로그래밍의 세계와 관계형 데이터베이스의 세계를 연결해주는 개념객체 간의 관계를 데이터베이스의 테이블과 매핑하기 위한 규칙과 방법을 제공연관관계 매핑의 종류는 다음과 같다일대일(1:1) : @OneToOne일대다(1:N) : @OneToMany다대일(N:1) : @ManyToOne다대다(N:M) : @ManyToMany엔티티를 매핑할 때는 방향성을 고려해야 한다. 테이블에서의 관계는 항상 양방향이지만, 객체에서는 단방향과 양방향이 존재한다.1. 단방향 연관관계단방향 연관관계는 한쪽에..
Redis를 사용해서 상품 정보 조회 성능 향상해보았다.상품 아이디 번호(Key)를 통한 상품 정보 캐싱 JMeter를 통해 부하테스트를 해보았다 조건은 다음과 같이 하였다.Thread 개수 : 10000Ramp-up : 30Loop Count : 1접근 페이지 : [GET] http://localhost:8082/product-service/product/2 10000명의 동시 접근 실시 캐싱 전(DB select query를 통한 직접 접근)과 비교하여 인메모리 DB Redis를 사용한 후 속도가 약 99% 정도 증가 되었다.참고https://seowoolog.tistory.com/74 [Spring] Redis로 조회 성능 개선 (Feat. Ngrinder)들어가며 캐시에 저장을 했지만 자주 히트..
현업에서 이커머스 관련 프로젝트를 진행하려면 대규모 트래픽 대응, 마이크로서비스 운영, 캐시, 배치 작업 등 다양한 기술을 활용하여 상품의 선착순 구매를 효과적으로 지원하는 서비스를 만들어야 하는 상황이 생길 것이다.상품의 선착순 구매 페이지는 많은 트래픽이 예상되며, 예상치를 상회하는 트래픽이 몰리는 상황을 가정한다.실제 대규모 트래픽 자체를 다루는 기술은 클라우드 기술을 활용한 경우가 많아 이번 프로그램에서 다루기 어려워서, 이번에 내가 진행한 프로젝트에서는 대규모 트래픽과 분산서버 운영을 고려한 설계능력을 주로 다루고자 한다. 먼저 동시성 문제란, 동일한 하나의 데이터에 2 이상의 스레드, 혹은 세션에서 가변 데이터를 동시에 제어할 때 나타는 문제로,하나의 세션이 데이터를 수정 중일때, 다른 세션에..
MSA작고 독립적으로 배포 가능한 각각의 기능을 하는 서비스들로 구성된 아키텍쳐모놀리식 서비스에서 각각의 비즈니스 로직을 분리하여 개별 프로젝트로 생성한 뒤 가장 앞단에 API Gateway와 같은 분배기를 통해 각 서비스 서버에 요청을 분산하여 관리 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 서비스 자향 아키텍쳐서비스는 기능별로 구분서비스의 교체가 쉽다각 서비스의 최적인 개발언어 DB, HW , 소프트웨어 환경을 사용하여 구현각 서비스는 독립적인 배포가 가능MSA 장단점장점서비스별 스케일링 가능서비스별 다른 프레임워크 사용 가능 (서비스 별 독자적 운영)하나의 서비스가 off 되더라도 나머지 동작 가능부분적으로 로직 업데이트 가능단점초기 구성의 난이도시스템이 돌아가지만 특정 서비스가 o..
@PathVariable경로 변수를 표시하기 위해 메서드에 매개변수에 사용된다경로 변수는 중괄호 {id}로 둘러싸인 값을 나타낸다URL 경로에서 변수 값을 추출하여 매개변수에 할당한다경로변수는 값을 반드시 가져야 한다 → 값이 없으면 404에러 출력주로 상세 페이지, 수정, 삭제와 같은 작업에서 리소스 식별자로 사용된다서버에 보내려는 데이터를 URL 경로에 표시할 수 있다. // GET http://localhost:8080/hello/request/star/Robbie/age/95@Controller@RequestMapping("/hello/request")public class RequestController { @GetMapping("/star/{name}/age/{age}") @Resp..
기존에 Controller 클래스에만 의존하여 모든 기능을 처리하도록 한다면 문제가 발생할 수 있다. 한 개의 클래스에 너무 많은 양의 코드가 존재하기 때문에 코드를 이해하기 어려움 → 가독성 떨어짐현업에서는 코드의 추가 혹은 변경 요청이 계속 생길 수 있다.문제가 발생했는데 해당 Controller 클래스를 구현한 개발자가 퇴사한다면? → 유지보수성 떨어짐 이러한 문제점들을 해결하기 위해 서버 개발자들은 서버에서의 처리과정이 대부분 비슷하다는 걸 깨닫고, 처리 과정을 크게 Controller, Service, Repository 3개로 분리하였다. Web Layer흔히 사용하는 Controller와 JSP / freemaker 와 같은 view 템플릿 영역이다Filter,Intercepter,Con..