분류 전체보기 (84) 썸네일형 리스트형 reverse proxy 프록시는 범용적인 용어 - 대리자 ( 원본 객체 이전에 무언가를 처리하는 역할) 네트워크 프록시에서는 클라이언트와 서버간의 중계서버 일반적으로 프록시를 말하면 forward proxy foward proxy - 클라이언트의 정보를 가려줌 ( server가 응답 받은 요청을 누가 보냈는지 알지 못하게 한다.) reverse proxy는 internet과 server의 사이에 있는 프록시 서버 ( 서버로 가기전에 로드밸런싱의 역할을 하는 프록시 서버) (캐싱) , (익명화 - 서버의 정보를 숨길 수 있음, 서버인척 응답을 보내, 익명화를 할 수 있음) , (로드 밸런싱 - 서버에 역할을 분배해준다) 출처. 우아한 tech - reverse proxy 테코톡들 block, non-block / sync, async block: 제어권이 호출자에게 없음 non-block: 제어권이 호출자에게 있음 sync: 결과값이 오면 바로 그것을 실행 async: 결과값이 와도 바로 그것을 실행하지 않아도 됨 A,B 프로세스가 있을 때, A가 B에게 어떤 작업을 요청했다면 blocking은 A가 그동안 대기하는 것 non-blocking은 A가 그동안 다른일을 할 수 있는 것 sync는 B의 작업이 끝나면, 알아채는 즉시 A가 그 작업을 진행하는 것 async는 B의 작업이 끝나면, A가 그 작업을 언제 진행하도 상관이 없는 것 webRTC 개념이해 서버 - 클라이언트의 경우 서버가 브라우저에 그냥 메시지를 전송할 수 없음 → request가 와야지만, response를 줄 수 있음 실시간 서비스를 만드려면 → 계속 서버로 확인 request를 전송해야함 그래서 websocket이 나옴 ( 통신이 열려있는 동안, 서버에서 리퀘스트 필요없이 바로 메시지를 보낼 수 있음/ 리얼타임 경험을 위해 만들어짐- > 채팅방은 웹소켓 서버에 모두가 접속한 것) 서버의 메모리 파워( 유저가 많으면 많을 수록 더 많은 메모리 필요하고, 서버에 더 돈을 써야함, 서버에 많은 비용이 들어감) → 그래서 webRTC (채팅방을 그러면 브라우저끼리 연결하자!) →웹 리얼 타임 커뮤니케이션 ( p2p 커뮤니케이션) 단순 텍스트 뿐만 아니라, 영상, 오디오 등도 다 주고 받을 .. 트랜잭션 격리 수준 read uncommitted - 한 프로세스에서 여러개의 트랜잭션이 사용될 때, 하나의 트랜잭션에서 작업을 처리하고, 커밋하지 않았는데, 다른 트랜잭션에서 커밋되지 않은 데이터를 가져와서 읽는 dirty read가 발생할 수 있다. read committed - dirty read가 발생하지 않는다. non-repeatable read가 발생할 수 있다. non-reapable read란 읽는 도중에 다른 트랜잭션이 해당 데이터를 변경하는 경우, 동일한 쿼리로 SELECT를 했지만, 두 결과가 다를 수 있다. 하나의 트랜잭션이 진행되는 동안, 동일한 SELECT는 같은 결과를 반환해야하는 데, 그렇지 못하는 것을 non-repeatable read라고 한다. JPA는 기본적인 트랜잭션 격리 수준을 re.. IdClass vs EmbeddedId 복합키를 jpa에서 사용하는 방법 IdClass : pk에 해당하는 멤버변수들을 모아서 다른 클래스로 만들고, 실제로 사용할 클래스에서 IdClass annotation을 사용하여 지정함 EmbeddedId: Embeddable로 다른 클래스를 만들고, EmbeddedId로 해당 클래스를 지정해두면, 복합키로 사용할 수 있음 IdClass는 상속관계에 있어서, 부모 클래스와 자식 클래스의 멤버변수들을 복합하여 Pk로 사용하는 경우에 장점이 있고, EmbeddedId는 객체지향적으로 사용할 수 있는 장점이 있다. 둘다 serializable 인터페이스를 구현해야하고, equals, hashCode를 구현해야 한다. 기본 생성자가 있어야 한다. 식별자 클래스는 public이어야 한다. IdClass의 경우 .. 제네릭 변성 컴파일 시점에 컬렉션에 잘못된 값이 들어가는 것을 예방해준다. A가 B의 상위 타입일 때, GenericType가 GenericType의 상위 타입이 아니면, 변성 없음(invariant- 무변성, 무공변) (즉 캐스팅이 안됨) 무변성일 때, 당연히 되야할 것 같은 것이 안되는 문제가 있음 GenericType 로 하면... → 이게 해결됨( extends로 공변처리) GenericType 카프카 파티션 정책에 관하여 kafka에 대한 자세한 설명은 생략하고, kafka와 파티션에 대한 이야기를 진행한다. 우선 kafka는 메시지 큐의 한 종류인 이벤트 브로커로서 기존 producer/consumer 구조에서는 각 애플리케이션들이 커넥션을 맺어야했지만, kafka를 사용하면 kafka에서 연결들을 관리해줘서 괜찮다. kafka에 있는 메시지 큐를 topic이라고 한다. 그리고 topic의 데이터가 너무 많아지는 경우가 있을 수 있기 때문에, partition이라는 개념이 있다. partition은 물리적인 저장단위로, topic은 1개 이상의 partition으로 저장된다. 그러면 여기에 생각해 볼 것이 있다. producer -> partition -> consumer로 구성되는데 partition, consumer.. Spring Native JVM 대신에 GraalVM을 사용하는 스프링이다. 왜 Native냐면 native image를 빌드의 결과로 생성한다 java 기반의 컴파일러와 vm을 구현 --- 1. polyglot 여러 언어 실행가능 2. 메모리 사용량이 JVM보다 적음 3. 실행시간이 훨씬 빠름 JVM은 .java파일을 .class파일로 변경하고, 그 후 운영체제별 JVM이 해당 운영체제에 맞는 기계어로 변경하여 실행한다. 하지만, graalVM은 .java파일을 바로 해당 운영체제에 맞는 기계어로 변경한다. 그래서 실행시간이 훨씬 빠르게 된다. 운영체제의 문제는 docker image로 만드는 것으로 해결된다. 항상 환경이 정해져있기 때문이다. 그러면 왜 JVM을 Graalvm으로 바꿔끼면 바로 spring을 사용할 수 있는 .. HashTable과 HashMap의 일반적인 차이 HashTable의 코드 public synchronized int size() { return this.count; } public synchronized boolean isEmpty() { return this.count == 0; } public synchronized Enumeration keys() { return this.getEnumeration(0); } public synchronized Enumeration elements() { return this.getEnumeration(1); } synchronized -> thread-safe HashMap synchronized를 사용하지 않음 싱글 스레드 환경에서 더 효율적 스프링 면접 준비 다른 블로그 질문 참조.. 여기서 적을 수 있다고, 면접에서 대답할 수 있을까? 그건 잘 모르겠지만.. OOP가 뭐죠 객체지향 프로그래밍입니다. 상속, 다형성, 캡슐화, 인터페이스를 지원합니다. 상속 - 부모 클래스의 기능을 자식 클래스가 사용할 수 있습니다. 코드 중복제거라는 장점이 있긴하지만, 컴포지션으로 대체됩니다. 사실상 장점이 다형성밖에 없는 것 같긴 합니다. 다형성 - 코드상에서는 인터페이스를 의존하여, 실제 런타임에 구현 클래스를 사용하게 합니다. 추상에 의존하게 하여 OCP를 가능하게 해줍니다. 캡슐화 - 인터페이스와 구현을 분리할 수 있습니다. 퍼블릭 인터페이스만 테스트하면 되고, 나머지 구현은 적절히 바꿔도 괜찮습니다. 인터페이스 - 즉 추상화라는 말인데, 추상에 의존하게 하면 코드의 .. 이전 1 2 3 4 5 6 7 ··· 9 다음 목록 더보기