일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 보조스트림
- 자바
- 백준
- 이스티오
- OS
- thread
- Kotlin
- list
- GC
- SpringBoot
- spring
- gradle
- 스프링
- K8s
- Collection
- 쿠버네티스
- MSA
- jvm
- Real MySQL
- Stream
- 스트림
- 토비의 스프링
- 토비의 스프링 정리
- mysql
- Stack
- Java
- IntellJ
- JPA
- redis
- 자바 ORM 표준 JPA 프로그래밍
- Today
- Total
목록스프링 (6)
인생을 코딩하다.
안녕하세요. 오늘은 2차 캐시에 관해 정리한 내용을 작성해 보도록 하겠습니다. 그리고 2차 캐시에 관해 글을 작성하기에 앞서 우선 캐시와 JPA의 1차 캐시에 관해 잠시 설명해 보도록 하겠습니다. 🔍 캐시란 무엇이고, 캐시는 왜 사용하는 걸까요? Cache는 간단히 말해서 나중의 요청에 대한 결과를 미리 저장했다가 빠르게 사용하는 것입니다. 위로 갈수록 빠르고 비싸고 밑으로 갈수록 느리고 저렴한 저장소라고 생각하면 됩니다. Secondary Memory를 디스크 영역이라고 보시면 됩니다. 기본적으로 데이터는 컴퓨터가 꺼져도 저장이되어야 하기 떄문에 Secondary Memory(SSD,HDD 등)에 저장이 되는데, 기술이 발달하고 하드웨어들이 커지다보니깐 Main Memory나 Cache Memory, ..
CI는 왜 발생했을까요? CI는 애자일 프로젝트를 수행하는 데 많은 도움이 됩니다. 애자일 방법론에 관해 이야기하기에는 이 글이 너무 길어지기 때문에 여기를 보고 오시면 좋을 것 같습니다. 애자일 개발 방법론은 빠른 배로플 기반으로 하는데, CI는 애자일에서 필요한 속도를 얻는데 도움을 줍니다. 하지만 어떻게 CI가 이 과정에서 도움이 될까요? 간단한 예제를 통해 알아봅시다. 기능을 개발할 떄는 코드를 여러번 수정하게 되는데, 이 과정에서 코드를 반영하고, 버전 관리 시스템에서 변경 사항을 가져오고, 소스코드를 빌드하고, 단위테스트를 진행하고, 통합된 코드를 빌드하고, 이를 묶어 배포하는 등 여러 과정을 수행합니다. CI 환경에서는 젠킨스 같은 도구를 이용해 모든 과정을 빠르게 에러 없이 진행할 수 있습..
Domain 레이어란? 1. Domain - 저장소와 밀접한 중심 도메인을 다루는 계층은 더 견고하고 특별하게 격리되고 관리되어야 하기 때문에 반드시 분리되어야 한다. 즉, JPA를 기준으로 한다면 테이블과 맵핑되는 Class들 - 이 계층은 오로지 도메인에만 집중하고, 어떠한 도메인이든 그 도메인이 가져야할 서비스와 무관한 도메인의 비즈니스가 있다. 2. Repository - 도메인의 CRUD 역할을 한다. 여기서 주의할 점은 모든 CRUD 역할을 이곳에서 하는 것이 아니다. 이 모듈은 시스템에서 가장 보호받아야 하며 가장 견고해야 할 모듈이므로, 이 모듈에서 CRUD에 관한 정의를 작성할때 많은 고민을 해야한다. - 예를 들어 시스템 도메인에 관한 통계를 기능으로 추가한다고 했을 때, 이는 시스템이..
통합테스트 장점 모든 빈을 올리고 테스트를 진행하기 때문에 운영환경과 가장 유사하게 테스트 가능 API를 테스트 할 경우 요청부터 응답까지 전체적인 테스트 진행 가능 단점 모든 빈을 올리고 테스트를 진행하기 때문에 테스트 시간이 오래걸리고 무거움 테스트의 단위가 크기 때문에 테스트 실패시 디버깅이 어려움 외부 API 콜 같은 Rollback 처리가 안되는 테스트를 진행하기 어려움 단위테스트 장점 TDD 의 첫 단계의 기능 단위의 테스트 코드 작성 단위테스트를 진행하면 여러 문제점들을 사전에 차단하여 더 빠른 오류 검증 및 수정을 빠르게 해결 가능 단점 아래 참고 테스트 격리 : 테스트를 서로 격리하여 한 테스트를 실행해도 다른 테스트에 영향을 주지 않도록 해야한다. 즉, 테스트는 순서에 상관없이 독립적으..
CORS : Cross - Origin Resource Sharing 프론트 관련 서버를 별도로 띄었는데 백엔드 API 서버와 완전히 다른 주소로 인식하게 되었다. 이런 경우에 보안성 때문에 서로 접근할 수 없게 처리가 되어있었다. 프론트 서버는 http://localhost:3000/ 이였고, 백엔드 API 서버는 http://localhost:8080/restaurants 였다. 개발자도구(F12)에서 API 서버를 호출하기 위해 fetch('http://localhost/restaurants') 를 해주었는데 아래와 같은 CORS 에러가 발생하였다. 그래서 이 부분을 스프링에서 제공하는 @CrossOrigin을 이용해서 해결하고자 하였다. 그래서 controller 클래스 맨 위에 @CrossOri..
스프링에 대한 얘기를 하면 빠지지 않는 개넘이 '의존성 주입'이라는 개념이다. 프레임워크를 이용해 본 적이없는 경우라면 쉽게 이해하지 못하는 개념이라 간단한 이야기로 정리해보겠다. 의존성이라는 것은 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미한다. 그리고 주입은 말 그대로 와부에서 밀어넣는 것을 의미한다. 즉 의존성이 필요한 객체에 필요한 객체를 찾아서 '주입'하는 역할을 하게된다. 저욱 자세한 것은 구글링을 통해 알아보면 좋겠다. 밑에 예제는 레스토랑 객체를 만들고 레스토랑에서 일하는 세프 객체를 주입하는 예제이다. (실제 코드를 개발할 떄는 그다지 사용될 일이 없는 에제지만, 의존성 주입 코드를 통해서 이해하는 용도로 사용하려고 한다.) 우선 lombok을 이용해서 s..