일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 페치조인
- JPA
- Embeddable
- DiscriminatorColumn
- Algorithm
- n+1문제
- commit
- relational DB
- Spring
- 분할상환분석
- 영속성전이
- 순수jpa
- 관계형 데이터베이스
- Flush
- relational database
- DiscriminatorValue
- 엔티티 매핑
- 영속성 컨텍스트
- 고아객체
- 플러시
- fetch join
- MappedSuperclass
- Spring Data JPA
- Amortized Analysis
- 정렬
- 지연로딩
- ROLLBACK
- 즉시로딩
- DB
- 값타입
- Today
- Total
목록전체 글 (27)
Jun's note
프로젝트 리팩토링 단계 중, 로드밸런싱 기술에 대해 알게되어 이를 정리해볼려고 한다! 1. 로드밸런싱이란? 한마디로 서버 부하를 분산하는 것이다. 한 대의 서버로 부하가 집중되지 않도록, 트래픽을 여러 서버로 분산하는 것이다. 로드밸런싱하는 방법은 웹서버를 통한 로드밸런싱, AWS 서비스를 통한 로드밸런싱 이렇게 2가지 방식으로 구현할 수 있다. 1 - 1) 웹서버를 통한 로드밸런싱 - Nginx를 예로 들 수 있다. Nginx는 웹서버로, 하는 일은 크게 2가지가 있다. 첫번째는 클라이언트로부터 요청받은 정적파일(html,js,이미지파일 등)을 처리한다. 이를 통해 WAS의 부담을 줄여줘 좀더 안정적인 서버를 구축할 수 있다. WAS는 동적인 데이터를 처리하기 때문에 웹서버보다 잘 죽는다고 한다. 만약..
1. 배경 나는 코드 한줄을 적더라도 깊이있게 생각한 다음에 작성한다. 그러다 문득 전역변수, 정적변수, 지역변수는 어떻게 관리되는지 궁금해 찾아보았다. 자바도 하나의 가상머신을 통해 작동되기 때문에 메모리관리는 OS메모리관리와 비슷하다. 2. 정리 1) JVM 구조 크게 5가지 영역으로 나눌수있다. 메소드영역 전역변수가 저장된다. 스레드가 메소드영역에 있는 값을 공유할 수 있다. -> 여러 스레드가 동시에 하나의 공유변수의 값을 변경하면 문제가 발생하여 동기화 과정이 필요할 수 있다. -> 전역변수를 사용할때는 final 키워드를 되도록이면 사용하여 문제가 안생기도록 조심하자! 소멸시기: 프로그램이 종료할때 메소드영역에 있는 변수들이 소멸된다. 힙영역 동적으로 할당된 변수, 참조타입 (reference..
JPQL은 1차캐시를 확인하지 않고 바로 DB에 쿼리문을 날린다. JPA의 큰 장점에는 1차캐시와 변경감지 기능이 있었다. 우리가 값을 조회할때 먼저 DB를 확인하지 않고 1차캐시부터 확인한다. 1차캐시에 찾던 값이 존재하면 1차캐시만 확인하고, 1차캐시에 없을 경우에 DB를 조회한다. 만약 직접 JPQL로 update문을 수행하면 어떤일이 일어날까? 1. JPQL 수행 2. 트랜잭션이 커밋되면, 쿼리문이 DB에 반영된다. (DB에는 변경된 값이 업데이트됨) 이 때, 값을 조회하면 (1차캐시에 있는) 3. 1차캐시를 확인하여 값을 넘겨준다. 4. 넘겨받은 값은 수정안된 값이었다. -> 문제발생 문제점: JPQL로 직접 update했기때문에 1차캐시랑 DB에 저장된 값이 서로 다른 상황 만약 1차캐시에 없..
1. 배경 프로젝트에서 하던 중에 궁금증이 생겼다. 상수 변수를 내가 하나의 값을 지정해서 사용할지, 랜덤함수를 통해 생성된 임의값을 사용할지 고민했다. final Long userId1= 1L; vs final Long userId2= new Random().nextLong(); 이 둘의 차이가 궁금했다. 결론은 '이 둘은 메모리 측면에서 볼때 거의 비슷하다' 이다. 2. 이유 이는 Long이 참조타입이기때문이다. 참조타입은 heap에 실제값이 저장되고 저장된 메모리 주소값을 stack에 저장한다. 그래서 userId1의 실제값은 heap에서 생성된다. userId2는 new연산자를 통해 정의했기때문에 당연히 heap에서 생성된다. 즉, userId1과 userId2 두 변수 모두 실제값은 heap에 ..
@ModelAttribute는 Spring MVC에서 사용된다. (주로 jsp와 같은 뷰템플릿과 함께 사용한다.) - 동작방식 예시코드 참고해서 정리해본다. @Controller public class UserController { @Autowired private UserService service; @GetMapping("/user-info") public String getUserInfo(@ModelAttribute("user") UserInfo userInfo, Model model) { model.addAttribute("result", service.getUserInfo(userInfo)); //userInfoVO 반환 //Model return "user-info";//View } } pub..
- 에러메시지: org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found - 문제상황: 'multipart boundary가 발견되지 않았다'는 뜻이다. - 해결방법: request 헤더의 content-type값에 boundary가 붙어서 요청되어야한다. content-type: multipart..
- 문제상황 MultipartFile 타입 데이터를 request할때, 서버에서 java.lang.NullPointerException: null 에러 발생 - 원인 MultipartFile이 null이라는 것은 MultipartFile 값을 찾을 수 없다, 즉 '해당 타입의 값이 존재하지 않음'을 의미 쉽게 말해 값을 request했을때 body에 해당 값이 담겨있지 않다는 거다. 왜냐하면 null이라는 사전적 의미를 보면 더 자세히 이해할 수 있다. '값이 없음'을 나타내는 영어 단어. 값이 존재하지 않는다는 뜻에 가까우며, 값이 0조차 아니라는 뜻이다. - 해결방법 request body값에 해당 값이 포함되어있는지 확인 추가로 MultipartFile타입에 대해 정리해보자. MultipartFil..
- 에러 문구 org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'content' is not present - 상황 @RequestPart를 사용하여 데이터를 Form Data형식으로 받는 상황 (정확하게 말하면 프론트엔드와 axios로 통신) - 원인 에러 문구를 해석해보면 'content가 존재하지 않다'고 되어있다. @RequestPart(value = "content", required = true) String content required=true 는 default값으로 설정되어있으며, 데이터를 보낼때 해당 값은 '무조건' 포함되어있어야한다. 그런데, request..