자바의 exception 종류는 다음과 같다. Checked Exceptions Exception 클래스는 Checked Exception이다. Exception 클래스의 자식 클래스인 RuntimeException 을 제외 한 나머지 자식 클래스에서 발생할 수 있는 Exception 에 제한한다. 컴파일러는 컴파일 시점에 해당 Exception을 체크하기 때문에 compile-time exception 이라고도 불린다. 컴파일러는 개발자가 Exception 처리를 했는지 여부를 확인하기 때문에 필수로 해줘야 한다. 그렇지 않으면 컴파일 오류가 발생한다. 예시 컴파일 오류가 발생했다. FileNotFoundException은 IOException을 상속받는데, IOException은 Exception을 ..
JWT 에 대한 지식이 너무나도 부족한 나에게 JWT 웹 토큰을 생성하고 검증할 수 있는 일이 주어졌다. 사실 짧은 시간내에 개발을 진행해야 했던 상황이라 JWT에 대해서 공부하기엔 시간이 부족했다. 😥 . . . 애플리케이션을 개발할 떄 모든 사용자가 전부 사용하도록 구현하면 어떻게 될까? 예로 구글 본사로 생각해보자. (사실무근) 구글에 모두가 출입할 수 있지는 않을 것이다. 출입증이 있는 사람만 가능하겠다. 또한 특정 오피스 같은 경우에는 특정 인물만 들어갈 수 있을 것이다. 가짜 출입증을 만들어서 들어간다고 했을 때 아마 시스템 상으로 검증을 할 것이다. 만약 출입증이 없이 모두가 들어갈 수 있다고 하면 악의를 품은 사람들이 문제를 일으킬 수도 있을 것이다. . 따라서 출입증을 가지고 있는 즉, ..
이 글을 쓰기 이전에 . . 잘못된 쿼리를 작성하면서 데이터 조회 속도가 매우 느리다는 것을 알게되었다. (데이터를 가져오기 위해 다중 조인이 필요했고 복잡하다고 느꼈던 쿼리문에 대해서 동작에 이슈가 없는지만 체크했던게.. 😥) 성능 개선을 위한 여러가지 방법을 확인해봤지만 가장 쉽게 접근할 수 있었던 건 쿼리를 다시 작성하는 것이었다. 이 과정속에서 또 알아가는 건 내가 작성하는 쿼리의 실행계획을 확인할 수 있다는 것과 옵티마이저의 하는 일 이었다. . . . 옵티마이저는 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장되어 있는지 통계 정보를 참조하고, 기본 데이터를 비교하여 최적의 실행 계획을 수립하는 작업을 담당한다. 종류 비용 기반 최적화(Cost-based optimizer..
엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다.예를들어 회원 엔티티를 조회할 때 연관된 팀 엔티티는 비즈니스 로직에 따라 사용될 때도 있지만 그렇지 않을 때도 있다.그럼 팀 엔티티를 필요할 때 조회하면 어떨까?그러기 위해서 JPA는 엔티티가 실제 사용될 때까지 데이터베이스에서 조회를 지연하는 방법 즉, 지연로딩을 제공한다.그럼 지연로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데이것을 바로 프록시 객체라고 한다. 프록시 구조를 먼저 살펴보자.프록시 클래스는 실제 클래스를 상속 받아서 만들어진다.따라서 실제 클래스와 겉 모양이 같고 우리는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. 프록시 객체의 초기화 과정을 알아보..
양방향 연관관계 매핑@Entitypublic class Member { @Id @Column(name = "MEMBER_ID") private String id; private String username; @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; //연관관계 설정 public void setTeam(Team team) { this.team = team; } //getter, setter}@Entitypublic class Team { @Id @Column(name = "TEAM_ID") private String id; ..
플러시영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화하는 것이다. 플러시를 실행할 경우 다음과 같은 일이 일어난다. 변경 감지가 동작해서 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다.수정된 엔티티는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다. 영속성 컨텍스트를 플러시하는 방법은 3가지가 있다. em.flush()를 직접 호출한다.엔티티 매니저의 flush() 메서드를 직접 호출해서 영속성 컨텍스트를 강제로 플러시한다.테스트나 다른 프레임워크와 JPA를 함께 사용할 때를 제외하고 거의 사용하지 않는다. 트랜잭션 커밋 시 플러시가 자동 호출된다. JPQL 쿼리 실행 시 플러시가 자동 호출된다. 추가로..
객체와 관계형 데이터베이스는 지향하는 목적이 서로 다르므로 둘의 표현 방법은 다르다.이것을 객체와 관계형 데이터베이스의 패러다임 불일치 문제라고 한다. 패러다임의 불일치로 인해 발생하는 문제를 살펴 본 후, JPA를 통한 해결책을 알아보자.상속abstract class Item { Long id; String name; int price;}class Album extends Item { String artist;}class Movie extends Item { String director; String actor;}class Book extends Item { String author; String isbn;}만약 Album 객체를 데이터베이스에 저장하려면 이 객체를 분해해서 다음 ..
개발을 하다보면 내부 또는 외부 API 를 호출하는 일이 생긴다. (내가 말하는 내부 API는 내 프로젝트가 마이크로서비스 구조인 경우를 생각하고 작성한 것이다.🧐) * JDK에서 지원하는 HttpURLConnection 클래스를 사용할 수 있다. 그렇다면 스프링에서는 다른 Rest API 를 호출할 때 어떠한 템플릿을 지원하는지 알아보자. RestTemplate Spring 3.0 부터 지원 thread-per-request 모델 기반 Synchronous & Blocking 방식 RestTemplate 방식의 특징을 좀 풀어서 이해해보자. thread-per-request 모델 기반 ? 정확하게 말하자면 RestTemplate 은 thread-per-request 모델을 기반으로 하는 Java Ser..
스프링 부트에서 유효성 검증 사용하기 spring boot 2.3 이상부터는 dependency 를 추가해주어야 한다. spring-boot-starter-validation 은 다음과 같이 정의되어 있다. Starter for using Java Bean Validation with Hibernate Validator Java Bean Validation? Hibernate Validator? 무엇인지 알아보자. Bean Validation Java Bean 유효성 검증을 하기 위한 메타데이터 모델 및 API를 정의한 것이다. - 위키백과 표준 프레임워크이다. * 명세 확인하기 * JSR380은 Jakarta EE 그리고 JavaSE 의 일부인 빈 유효성 검사를 위한 Java API이다. Hiberna..
worker process 는 클라이언트로부터 요청받는 이벤트를 처리하는 프로세스이며 다음과 같은 특징이 있다. 각 worker process는 싱글 스레드로 동작한다. non-blocking 방식으로 요청을 처리하여 Context Switching을 최소화 한다. 설정 및 확인 nginx.conf worker_processes number | auto; worker process 확인하기 //worker_processes 설정 하지 않았을 때 프로세스 확인 root@79f15debee4d:/# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 13:03 ? 00:00:00 nginx: master process nginx -g daemon off; nginx ..
- Total
- Today
- Yesterday
- fail-fast
- Load Balancer
- Caching
- 정적변수
- java
- object
- spring boot
- HashSet
- 오블완
- 자동구성
- Spring
- fail-safe
- HashMap
- 인터페이스
- Security
- 인스턴스변수
- nosql
- JPA
- syncronized
- 고정 세션
- @conditional
- Sticky Session
- 다중화
- Red-Black Tree
- Hash
- nginx
- 티스토리챌린지
- 로드 밸런서
- 추상클래스
- AutoConfiguration
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |