웹을 통한 테스트 방법의 문제점불필요한 추가 작업 필요DAO 테스트가 목적인데 서비스 클래스, 컨트롤러, 뷰 등 모든 레이어를 다 만들어야 테스트가 가능테스트만을 위해 추가한 부분에서 에러 발생할 수 있음실행 시간이 오래걸림작은 단위의 테스트, 단위 테스트 Unit Test테스트하고자 하는 대상이 명확하다면 그 대상에만 집중에서 테스트하는 것이 바람직 (관심사의 분리)단위의 범위는 정해져있지는 않음. 작게 보면 메소드 하나일 수도 있음. 충분히 하나의 관심에 집중해서 효율적으로 테스트할 만한 범위의 단위로 볼 수 있음.일반적으로 단위는 작을수록 좋음 JUnit의 특징Java의 대표적인 단위 테스트 프레임워크어노테이션 기반으로 테스트 코드 작성 (@Test, @BeforeEach, @AfterEach 등)..
객체지향 설계의 기본 원칙관심사의 분리하도록 리팩토링DB 커넥션 생성 역할과 DB 조회 역할의 객체를 분리인터페이스를 두고 구현 방식에 따라 여러 구현체를 사용. 분기처리를 대신함. 전략패턴개방폐쇄원칙 OCP타 객체로부터의 의존도를 낮춰 타 객체 변경에도 영향을 받지 않고, 자신은 확장성을 열어둠스프링이란 바로 지금까지 설명한 객체지향적 설계 원칙과 디자인 패턴에 나타난 장점을 자연스럽게 개발자들이 활용할 수 있게 해주는 프레임워크다. 제어의 역전 (IoC오브젝트 간의 관계를 맺는 작업의 제어권을 별도의 오브젝트 팩토리를 만들거나 이를 일반화한 IoC 컨테이너에게 위임함오브젝트가 자신이 사용할 대상의 생성이나 선택의 책임으로부터 자유로워짐IoC는 기본적으로 프레임워크만의 기술도 아니고 프레임워크에게 꼭 ..
https://www.youtube.com/watch?v=ZBu_slSH5Sk 유튜브 쉬운코드의 맵, 해시테이블 설명을 보고나서 추가로 궁금한 부분들을 정리해보았습니다. 영상의 설명이 너무 좋아 같이 봤으면 해서 영상도 같이 올립니다. Map key-value pair들을 저장하는 ADT 같은 key를 가지는 pair는 최대 1개만 존재 associative array, dictionary라고 불리기도 함 구현체 Hash Table Tree-based 💡 ADT (Abstract Data Type, 추상 데이터 타입) 데이터와 해당 데이터에 적용되는 연산들을 묶어놓은 개념. 데이터 내부 구현을 감추고 데이터와 연산의 인터페이스만을 노출시켜 코드의 모듈성과 재사용성 향상을 목표로 함. ex) Stack, ..
Pageable Spring data core api에서 제공하는 인터페이스 JPA Repository 메소드 파라미터에 Pageable 객체를 넣어주면 자동으로 페이지네이션 적용 public interface UserRepository extends JpaRepository { List findByLastname(String lastName, Pageable pageable); } 반환타입 : Page, Slice, List Page : 페이지 + totalCount Slice : 페이지 + 전후 슬라이스 존재 여부 List : 페이징 안된 전체리스트 PageRequest 페이징 요청 정보 생성 쿼리스트링으로 사용하는 법 컨트롤러에 파라미터로 PageRequest 삽입 쿼리스트링에 page=3&size..
분산처리, 동시성관리, 비동기 이런거 위주로 자료를 찾아보다가 아래 포스팅을 우연히 발견했습니다. 보다 보니 몰랐던 내용들이 너무 많아 JAVA NIO까지 추가로 찾아보게 되었습니다. https://velog.io/@sihyung92/how-does-springboot-handle-multiple-requests 스프링부트는 어떻게 다중 유저 요청을 처리할까? (Tomcat9.0 Thread Pool) 스프링 부트는 웹서버 어플리케이션 구조에 대해 잘 몰라도, 뚝딱 웹서버 어플리케이션을 만들게 도와줍니다. 하지만 한번씩 궁금증이 들 때가 있습니다. 이게 왜 되지..? 스프링, 이거 왜지? 시 velog.io 스프링부트의 다중 요청 처리 플로우 내장 서블릿 컨테이너인 Tomcat을 이용 Tomcat은 다중..
이전에 대량의 엑셀다운로드 처리 중 cpu가 급증하는 문제가 생겨 이를 해결한 내용을 다룬 적이 있는데요 그땐 시간이 없어서 그냥 XSSF에서 SXSSF로 바꾸면 되는구나~라고만 하고 넘어갔는데 SXSSF 컴포넌트는 어떻게 메모리를 관리하는건지 궁금해져서 공식문서를 다시 찬찬히 읽어봤습니다 이전 포스팅 👇 [Apache POI] 다량의 데이터 엑셀 다운로드 처리로 인한 서버 장애 대응 후기 스테이징 QA 도중 갑자기 사이트의 모든 기능이 먹통이 됐다는 소식을 들었습니다. 확인해보니 CPU 사용량이 급증하여 서버가 다운됐던 것이었습니다. 우선 서버를 재부팅하여 먹통 문제는 해결 jibsakim.tistory.com 공식문서에서의 SXSSF에 대한 설명을 보면 슬라이딩 윈도우(sliding window)가 ..
Java Bean이란 자바 빈이란, 3가지 규칙을 지키는 클래스이다 모든 필드는 private이며, getter/setter 메서드를 통해서만 접근이 가능하다 argument가 없는 (no-argument) 생성자가 존재한다 java.io.Serializable 인터페이스를 구현한다 import java.io.Serializable; public class SomeBean implements Serializable { private String beanName; private int beanValue; public SomeBean() { // no-argument constructor } public String getBeanName() { return beanName; } public void setB..
테스트코드는 저에게 진짜 애증의 영역입니다. 이해하고 싶은데 파면 팔수록 뭐가 자꾸 새로운게 튀어나옵니다. 각종 용어와 관련 기술이 난무하고 샘플코드도 저마다 스타일이 다른 것 같습니다. 제가 혼란스러웠던 것들에 대해 하나씩 정리해보고자 합니다. xUnit과 JUnit xUnit : unit testing framework의 통칭하는 것으로, 각 언어별로 지원하는 xUnit이 있습니다. JUnit은 그 중 한 종류로 자바용 유닛테스팅 프레임워크입니다. ex) JAVA - JUnit, .NET - NUnit, C++ - CppUnit, ... JUnit과 AssertJ, Mockito JUnit은 위에서 언급한대로 JAVA의 유닛테스팅 프레임워크 입니다. 테스트 환경이라고 봐도 무방하지 않을까 싶습니다. ..
테스트코드와 TDD에 대해 책도 보고 구글링도 해봤지만 그래서 난 뭘 해야하는지가 감이 안와서 회사에서 제가 작업했던 API에 대해 테스트코드를 작성해봤습니다. 회사 코드를 공개할 순 없으니, 샘플용으로 간단한 API를 설계해보고 그걸로 같이 테스트 코드를 작성해보고자 합니다. 부족한 점이 많습니다. 잘못됐거나 보강 필요한 부분은 댓글 부탁드려요. 빵집의 상품 목록 조회 API 개요 EndPoint : /bread/list Method : GET Parameter : breadName (빵 검색어) Response Body { "code": 0, "message": "success", "response": { "statusCode": 200, "requestTime": "2022-03-13 16:34:4..
스테이징 QA 도중 갑자기 사이트의 모든 기능이 먹통이 됐다는 소식을 들었습니다. 확인해보니 CPU 사용량이 급증하여 서버가 다운됐던 것이었습니다. 우선 서버를 재부팅하여 먹통 문제는 해결하였고, 원인을 찾아 나섰습니다. 지난 새벽 배포 때 다른 서버(노드)에서 몇만건정도의 데이터 엑셀 다운로드를 몇차례 시도했을때도 CPU 사용량이 급증했던 것이 기억나서 그 부분을 이번 서버(자바)에서도 확인해보기로 했습니다. 엑셀 다운로드 시도할 때마다 CPU 사용량이 급증하는 것을 확인했습니다. RDS는 이상 없고 EC2만 다운된 걸로 보아 서비스단에서 다량의 데이터를 처리하다 무언가 과부하가 걸렸을 것으로 추측했습니다. 로컬에서 상용DB를 연결하여 재현해보니 아래와 같은 에러 로그가 발생했습니다. org.apach..
- Total
- Today
- Yesterday
- database
- php
- mongoDB
- AOP
- k8s
- 쿠버네티스
- 분산처리
- kubernetes
- Container
- devops
- CS
- docker
- kafka
- laravel
- 대규모 데이터 처리
- Spring
- 캐시
- springboot
- JUnit
- phpUnit
- 라라벨
- MySQL
- 카프카
- 스프링
- Infra
- index
- 샤딩
- NoSQL
- 몽고디비
- java
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |