이론 정리 153

대규모 시스템 설계 공부 003

시스템 설계 면접 공략법 일단 시스템 설계 면접은 면접에서 실제 서버에서 쓰이는 만큼 복잡하고 어려운 설계를 요구하지 않는다. 설계 기술을 시연하고, 그 과정에서 결정들에 대한 방어 능력을 보이고, 면접관의 피드백을 건설적인 방법으로 처리할 자질이 있음을 보이는 자리이다. 따라서 해당 시스템 설계 면접에서 면접관이 찾고자 하는 것은 기술적 측면의 평가 지원자가 협력에 적합한 사람인지 평가 압박이 심한 상황도 잘 헤쳐나갈 자질이 있는지, 모호한 문제를 건설적으로 해결할 능력이 있는지 평가 좋은 질문을 던질 능력이 있는지 평가 이라고 한다. 또 한가지 중요한 것은 설계의 순수성(purity)에 집착한 나머지 타협적 결정(tradeoff)를 도외시하고 과도한 엔지니어링(over-engineering)을 하게 ..

Soft Delete와 Hard Delete의 차이와 @SQLDelete

DB의 삭제 구현 방법은 두가지가 있다. Soft Delete 데이터를 실제로 삭제하지 않고, 삭제 flag를 변경하는 방법이다. Hard Delete 실제로 데이터를 삭제하는 방법이다. 실제로 서비스를 구현할 때에는 Soft Delete를 자주 사용한다. 하지만 Spring Data JPA에서 이 Soft Delete를 구현할 때에는 주의해야 할 점이 다수 있다. 만약에 한꺼번에 많은 데이터를 삭제하는 경우가 생긴다면 어떨까?? 이러한 Bulk연산에서 Soft Delete를 사용할 때에 여러 번의 쿼링이 진행되게 될 것이다. 이를 해결하기 위해서 @SQLDelete어노테이션과 JPA에서 제공하는 deleteAllInBatch를 사용할 수 있다. @SQLDelete JPA에서 기본으로 삭제는 Hard D..

대규모 시스템 설계 공부 002

시스템 용량이나 성능 요구사항을 개략적으로 추정하는 방법 이 개략적 규모 추정을 효과적으로 해내려면 규모 확장성을 표현하는 데 필요한 기본기에 능숙해야 한다. 2의 제곱수 데이터 양의 계산 결과를 얻으려면 볼륨의 단위를 2의 제곱수로 어떻게 표현하는지를 우선 알아야 한다. 이게 데이터 볼륨 단위들이다. 응답지연 값 2010년 공개된 통상적인 컴퓨터에서 연산들의 응답지연 값이다. 이 내용들을 분석하면 이런 결론이 나온다. 메모리는 빠르고, 디스크는 느리다. 디스크 탐색은 가능한 한 피할것. 단순한 압축 알고리즘은 빠르다. 인터넷으로 데이터를 보내기 전에 가능하면 압축하라. 데이터 센터는 보통 여러 지역에 분산되어 있고, 센터들 간에 데이터를 주고받는 데에는 시간이 걸린다. 가용성 관련 수치들 고가용성(hi..

대규모 시스템 설계 공부 001

사용자 수에 따른 시스템의 확장성에 관하여 알아본다. 단일 서버 모든 웹, 앱, DB, 캐시 등이 한개의 서버에서 실행되는 사례이다. 사용자가 도메인 이름을 통해 웹사이트 접속. 이 때 도메인 이름을 도메인 이름 서비스(DNS)에 질의하여 IP로 변환하는데, 이 DNS는 외부 서비스를 사용하게 되므로 해당 서비스의 일부는 아님. DNS조회를 통한 IP주소 반환 해당 주소로 HTTP요청 전달 요청 결과 반환 해당 사진에서 웹 브라우저 / 모바일 앱 의 두 종류 단말로부터 요청이 들어온다. 웹 브라우저 BE(자바, 파이썬 등) 과 FE(HTML, JS) 사용 모바일 앱 모바일 앱과 웹 서버간 통신을 위해서는 HTTP프로토콜 이용 반환 응답은 주로 JSON이 사용된다. DB 트래픽 처리 서버(웹계층)과 DB서..

OSIV와 성능 최적화

Open Session In View : 하이버네이트 Open EntityManager In View : JPA (관례상 OSIV라 한다.) OSIV ON Spring boot 어플리케이션을 처음 실행하면 다음과 같은 warn문구가 출력된다. 2022-03-15 11:23:35.504 WARN 11052 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to ..

MA(모놀리식)와 MSA에 관하여

MA(Monolithic Architecture) 사전상으로 monolithic이란 단단히 짜여 하나로 되어 있는 정의되어 있다. 그 말 자체에서 알 수 있듯, 모놀리식 아키텍쳐란 전체 서비스를 하나의 서버에서 구동시키는 것이다. 간단히 말하자면 모든 서비스가 완전히 통짜로 짜여있다고 생각하면 편하다. 굉장히 많은 기업에서 아직 사용중인 방법이며, 명확한 장단점이 존재한다. MA의 장점 먼저 모든 기능들이 하나의 시스템 상에서 동작한다. 즉 개발 진행에 있어 속도가 빠르다는 장점이 있다. End-to-End 테스트가 간편하다. MA의 단점 유지보수할 때에 어려움이 따른다. 하나의 프로젝트에 모든 서비스가 동작하기 때문에 이를 고치기 위해서는 많은 내용들을 확인해 보아야 한다. CDCI를 진행할 때에도, ..

이론 정리 2022.04.07

List와 Set의 차이점, 활용

List랑 Set의 차이가 뭘까?? 그리고 둘의 차이점에서 어떤 활용이 가능할까?? 이에 대해 알아보려고 한다. 1. List는 순서가 존재하고 Set은 순서가 없다. 예전글에서 LinkedList와 ArrayList의 차이를 알아보았다. 여기서 중요한 내용중 하나로 나온것이 바로 '순서’이다. List는 순서를 가지며, 데이터가 이 순서에 맞추어 쌓아진다. 코드를 통해서 확인해보자 public class Main { public static void main(String args[]) { ArrayList fact = new ArrayList(); fact.add("ryoo"); fact.add("chan"); fact.add("is"); fact.add("genius!"); fact.add("He")..

이론 정리/java 2022.04.06

abstract class와 interface에 관하여

abstract class 이름에서 알 수 있듯, 추상 클래스는 선언만 하고 실제 구현부는 작성하지 않은 상태로 남겨둔 클래스이다. 추상 클래스는 다음과 같은 특징을 갖는다. new메소드를 사용하여 객체를 직접 생성할 수 없다. 구현부가 실제로 없기 때문에 자식 클래스에서 구현하게 된다. 그리고, 이 구현은 무조건 이루어져야 한다. 이 메소드 내에는 추상 메소드가 존재하며, 이 메소드를 자식 클래스에서 구현한다. 추상 클래스는 간단히 말하자면 미완성 설계도라고 생각하면 된다. 예를 들어 개, 고양이, 소, 말, 돌고래 라는 동물들이 있는 경우 추상 클래스로 동물을 선언해주면 동물이 갖는 공통의 특성을 아래에서 하나씩 사용할 수 있다. 동물(추상 클래스) 걷기 뛰기 숨쉬기 이 뛰는 방식, 걷는 방식, 숨쉬..

이론 정리/java 2022.04.06

Java의 Optional 클래스

자바 사용중 가장 많이 만나는 에러 중 하나가 바로 널 에러이다.(NPE - Null Pointer Exception) 개인적으로 Springboot의 JPA를 사용해서 값을 가져올 때에 이 null처리에 많은 신경을 써야 한다고 생각한다. Java8 이전까지 NPE를 해결하기 위해서는 두 가지들 중 하나를 택해야 했다. 예외 출력 예외를 던지는 것인데, 이것은 정말 예외가 발생하는 상황에 사용하도록 한다. null 반환 null을 실제로 받아오는 것으로, 클라이언트에서 별도로 처리해야 한다. 이런 식으로 처리하였는데, 이 로직을 수행하는 데에 코드가 복잡해 질 수도 있기 때문에 초기값을 사용하는 경우도 있었다. Java8 버전부터 Optional클래스를 사용하여 이 NPE를 해결할 수 있도록 도와준다...

이론 정리/java 2022.04.03

싱글톤(Singleton) 패턴에 관하여

Singleton Pattern이란, 어플리케이션 실행 시 최초 한번만 메모리를 할당하고, 이 메모리에 인스턴스를 만들어서 사용하는 디자인 패턴이다. 주로 DBCP(DataBase Connection Pool)처럼 공통 객체를 여러개 생성해서 사용해야 하는 경우 쓴다. 싱글톤 패턴의 장점 위에서 설명했듯, 싱글톤 패턴은 어플리케이션 실행 시 단 하나의 인스턴스를 한 번만 할당하게 된다. 따라서 만들어진 메모리 영역에 new연산자를 통해 접근하게 되면 이 접근에 대해 메모리 낭비를 방지할 수 있게 되며, 처음에 실행 시 만들어진 인스턴스에 접근만 하면 되므로 속도 측면에도 이득이 있다. 그리고 클래스 간 데이터 공유를 원할하게 해 준다. 싱글톤 패턴으로 만들어진 인스턴스는 static 전역 변수이기 때문이..

이론 정리/java 2022.04.03