분류 전체보기
-
[서킷 브레이커 패턴] 호출하는 외부 API의 장애에 대응디자인 패턴 2022. 8. 3. 23:42
* 서킷브레이커 패턴이란? 서킷 브레이커 패턴이란 MSA에서 안정성을 높이기 위한 디자인 패턴으로 서로 분리된 서비스 간 통신 시, 언제 어떤 문제가 발생할 지 알 수 없기 때문에 이를 통제하기 위한 수단으로 도입되었다. MSA 일부 도메인 서비스에서 장애가 발생 시 적절한 조치가 되어있지 않다면 장애가 전염될 수 있다. 또한 서비스간 트랜잭션 처리가 잘 안되어 있을 경우 데이터 정합성이 깨질 수 있다. 이때 서킷 브레이커 패턴은 문제가 발생하면 프로세스를 차단함으로써 특정 도메인 장애가 다른 서비스에 영향을 주는 것을 막을 수 있다. * 서킷 브레이커의 특징 1. API 요청 시, 성공 및 실패 횟수를 기록한다. 2. 설정된 실패 임계치에 도달하면 API를 차단하고 지정된 예외처리 로직을 실행시킨다. ..
-
[CleanCode] 의미있는 이름 짓기클린코드 2022. 7. 28. 19:21
1. 의도를 분명하게 밝혀라 - 존재 이유, 수행 기능, 사용 방법 2. 그릇된 정보를 피하라 - 유형을 이름에 넣지 말고 ( ...List ), 흡사한 이름은 사용하지 말고, 유사한 개념은 유사하게 표기 3. 의미있게 구분하라 - 연속되는 숫자 사용을 피하고 (list1, list2 ... ), 읽는 사람이 차이를 알도록 불용어를 사용 x 4. 발음하기 쉬운 이름을 사용하라 5. 검색하기 쉬운 이름을 사용하라 - 긴 이름보다 짧은 이름을 사용 6. 인코딩을 피하라 - 타입을 명시하는 헝가리식 표기법이나, 멤버 변수 접두어 지양 7. 한문자 변수이름을 피하라 - 루프 반복 횟수의 경우 예외 8. 클래스, 객체이름은 명사나 명사구를 사용하라 - Manager, Processor, Data, Info 등 단..
-
기술면접 대비 개념 정리 - 2기타 2022. 7. 11. 01:07
Q. MVC 패턴에 대해 설명해주세요 MVC 패턴이란 Model, View, Controller의 약자로 애플리케이션 구성요소를 세 가지의 역할로 구분한 패턴을 의미합니다. 모델은 데이터와 비즈니스 로직을 관리하고 뷰는 레이아웃과 화면을 처리하며 컨트롤러는 명령을 모델과 뷰 부분으로 라우팅하는 역할을 합니다. Q. 스프링과 스프링 부트의 차이점에 대해 말씀해주세요 먼저 스프링 부트의 경우 내장 톰캣을 사용하기 때문에 따로 톰갯을 설치하거나 매번 버전을 관리해주어야할 필요가 없습니다. 다음으로 starter를 통한 dependecy 자동화 기능이 있어 dependency들의 버전 관리 등을 자동으로 관리해줍니다. Q. IOC와 DI란 무엇인지 설명해주세요 DI란 스프링 프레임워크가 제공하는 의존 관계 주입..
-
기술면접 대비 개념 정리 - 1기타 2022. 7. 11. 00:41
Q. 객체지향 프로그래밍에 대해 설명해주세요 객체 지향 프로그래밍이란 컴퓨터 프로그래밍 패러다임 중 하나로 프로그래밍에서 필요한 데이터를 추상화 시켜서 상태와 행위를 가진 객체를 만들고 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다. 객체 지향 프로그래밍은 코드 재사용이 용이하고 유지보수가 쉬우며, 프로젝트 시 업무 분담이 쉽기 때문에 대형 프로젝트에 적합하다는 장점을 가집니다. 반면에 처리 속도가 상대적으로 느리고 설계시 많은 시간과 노력이 필요하다는 단점을 가지고 있습니다. Q. 객체 지향 프로그래밍의 특징 4가지에 대해 설명해주세요 객체 지향 프로그래밍은 추상화, 캡슐화, 상속, 다형성이라는 특징을 가지고 있습니다. 추상화란 공통의 속성이나 기능을 묶어 이름을 붙이는 자..
-
[JPA] 연관관계 설정 - 단방향, 양방향JPA 2022. 7. 10. 17:05
객체의 참조와 테이블 외래키 매핑 단방향 연관관계 A, B 엔티티가 있을 때 A가 B에 대한 단방향 연관관계를 가진다면 A에서 필드로 가지고 있는 B 참조변수로 B를 조회할 수 있지만 반대로 B에서는 A에 접근하는 필드를 가지지 않는다. 객체는 참조(주소)로 테이블은 외래키로 연관관계 맺는다. 객체의 참조와는 달리 테이블에서는 항상 양방향 관계를 가진다. 참조를 통한 연관관계는 언제나 단방향이기 때문에 양방향으로 만들기 위해서는 반대쪽에도 필드를 추가해서 참조를 보관해야한다. ※ 참고 : 객체 그래프 탐색과 조인 - 객체가 참조를 사용하여 연관관계를 탐색하는 것을 객체 그래프 탐색이라고 한다. - 데이터 베이스에서 외래키를 사용하여 연관관계를 탐색하는 것을 조인이라고 한다. 연관관계 매핑이란? 객체가 가..
-
[JPA] 객체와 테이블 매핑, 기본 키 매핑JPA 2022. 7. 10. 14:03
매핑 어노테이션 종류 1. 객체와 테이블 매핑 : @Entity, @Table 2. 기본키 매핑 : @Id 3. 필드와 컬럼 매핑 : @Column 4. 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity JPA를 사용하여 테이블과 매핑할 클래스에 붙힌다. 이때의 JPA가 관리하는 클래스를 엔티티라고 부른다. - 속성 name : JPA에서 사용할 엔티티 이름을 지정하는 속성으로 생략 시, 기본값인 클래스 이름을 사용한다. 다른 패키지에서 이름이 같은 클래스가 충돌하지 않도록 주의해야한다. - 주의사항 1. 기본 생성자가 필수다. 2. final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 3. 저장할 필드에 final을 사용하면 안된다. @Tab..
-
[JPA] 준영속(detached)과 병합(merge)JPA 2022. 7. 10. 00:11
준영속이란? 영속 상태의 엔티티가 영속성 컨텍스트에서 분리된 것을 의미한다. 준영속 상태의 엔티티는 영속성 컨텍스트가 관리하고 있지 않기 때문에 영속성 컨텍스트가 제공하는 기능을 사용할 수 없다. - 거의 비영속 상태와 가깝다 : 영속성 컨텍스트가 관리 X, 기능 사용 불가 - 식별자 값을 가지고 있다. : 영속 상태였었기 때문 - 지연 로딩을 할 수 없다. : 영속성 컨텍스트가 관리하고 있지 않기 때문 준영속 상태로 만드는 방법 1. detach(entity) 특정 엔티티만 준영속 상태로 전환한다. 즉, 영속성 컨텍스트가 해당 엔티티를 관리하지 않는다. (1차 캐시, 쓰기 지연 SQL 저장소에서 해당 엔티티에 대한 모든 정보를 제거한다.) 2. clear() 영속성 컨텍스트를 초기화 하여 모든 엔티티를..
-
[JPA] Flush, 영속성 컨텍스트 변경내용을 DB에 동기화JPA 2022. 7. 10. 00:04
flush는 제목 그대로 영속성 컨텍스트의 변경내용을 데이터 베이스에 반영하는 것이다. flush를 하는 방법은 아래와 같다. 1. 엔티티 매니저의 flush 메서드 직접 호출 2. 트랜잭션 커밋 시, flush 자동 호출 3. JPQL 쿼리 실행 시, flush 자동 호출 엔티티 매니저의 flush 메서드 직접 호출 테스트, 다른 프레임워크와 JPA를 함께 사용하는 경우 이외에는 거의 사용하지 않는다. 트랜잭션 커밋 시, flush 자동 호출 단순 트랜잭션 커밋을 통해 DB에 데이터가 반영되는 것이 아니고 flush 호출을 통해 영속성 컨텍스트의 변경된 내용을 DB에 반영하는 것이기 때문에 JPA는 트랜잭션 커밋 시, flush를 자동 호출한다. JPQL 쿼리 실행 시, flush 자동 호출 JPQL이..