Nginx 아파치와의 관계 아파치는 1996년 부터 단 한번도 1등을 놓친적 없을 정도로, 사랑받는 웹서버이다. 하지만 오래된 만큼 신기술에 호환되지 않는 경우도 있을 수 있다. 현재 국내에선 아파치와 nginx 모두 많이 사용되고 있다. 특징 아파치와 다르게 비동기 이벤트 기반 구조를 가지고 있다. 동시접속 처리에 특화되어 있다. Event-Driven 처리 기반 구조 Event-Driven 처리 기반 구조는 여러 개의 커넥션을 모두 Event-Handler를 통해 비동기 방식으로 처리해 먼저 처리되는 것부터 로직이 진행되도록 한다. 이러한 기법의 주 사용 목적은 대화형 프로그램을 만드는 데 사용하는데 PCP 처리와 유사하다. HTTP 서버의 역할 http 프로토콜을 준수한다. 리버스 프록시로서의 역할..
Server & Infra.
벌크 수정, 삭제 연산과 영속성 컨텍스트 벌크 수정연산과 벌크 삭제연산을 각각 수행한 후에 별도로 영속성 컨텍스트 초기화 작업을 하지 않았다고 가정하자. 이후에 전체 조회 작업을 시행하면 Update는 연산이 적용되지 않은 영속성 컨텍스트 데이터, delete는 연산이 적용된 DB 데이터 겨로가가 조회되는 것을 확인할 수 있다. (Repeatable Read) Update 벌크 연산 상황 영속성 컨텍스트와 DB에 아래 데이터가 있다고 하자. 위 상황에서 아래와 같이 28살 미만은 이름을 전부 비회원으로 바꾸라는 bulk update 연산을 수행해보자. @Test @Commit public void bulkUpdate() { queryFactory .update(member) .set(member.user..
Istio, Istio Architecture Istio는 애플리케이션 네트워크 기능을 유연하고 쉽게 자동화할 수 있는 투명한 언어 독립적 방법을 제공하는 현대화된 서비스 네트워킹 레이어인 서비스 메시입니다. 클라우드 기반 애플리케이션을 구성하는 다양한 마이크로서비스를 관리하는 데 널리 사용되는 솔루션입니다. Istio 서비스 메시는 또한 이러한 마이크로서비스가 서로 통신하고 데이터를 공유하는 방법을 지원합니다. 조직이 클라우드로의 이동을 가속화하면서 필요에 따라 애플리케이션도 현대화하고 있습니다. 그러나 모놀리식 레거시 앱을 클라우드 기반 앱으로 전환하면 데브옵스팀의 문제가 발생할 수 있습니다. 개발자는 클라우드에서 이동성을 보장하기 위해 느슨하게 결합된 마이크로서비스를 사용하여 앱을 어셈블하는 방법을..
개요 스프링 클라우드 관련 기술을 익히기전 모놀리식 아키텍처와 마이크로서비스 아키텍처를 공부하던 중 모놀리식 아키텍처에서의 SOA, ESB, SOAP에 대해서 더 자세히 공부해보려고한다. 모놀리식 아키텍처 하나의 거대한 애플리케이션에서 모든 작업을 처리하는 아키텍처다. 내부적으로 의존성이 강하며 구조적으로 결합도가 높은 아키텍처다. 모든 작업을 하나의 하드웨어에서 처리하므로 강력한 하드웨어가 필요하며, 대용량 트래픽이 쏠렸을 때 시스템이 무거워질 수 있다. 마이크로 서비스 아키텍처 작고 독립적인 서비스들을 쪼개 팀 별로 독립적으로 개발 배포를 할 수 있는 아키텍처다. 대용량 트래픽이 쏠렸을 때도 유연하게 대처가 가능하다. 수평적 확장이 가능하며 클라우드 서비스에 적합한 아키텍처로 볼 수 있다. SOA S..
개요 광주소프트웨어마이스터고등학교의 MSG팀에서 진행한 GAuth라는 프로젝트에서 검색 api를 만들면서 querydsl를 적용한 사례를 오늘 작성해보려고 한다. 작성해보고 나서의 장점에 대해서도 얘기해보겠다. 요구사항 요구사항은 이랬다. 학년, 반, 키워드를 통해 유저를 검색한다. 만약 학년, 반에 0이 들어온다면 전체 검색의 기준을 달고 키워드는 "" 빈 문자열이 들어오면 전체 검색 기준을 단다. 예를 들어 학년 반 키워드에 2, 0, "김" 이 들어오면 2학년 김씨 모두를 검색한다. 첫 구현 처음에는 findAll을 통해서 모든 유저리스트를 가져오고 filter를 통해서 유저를 걸러내었다. class GetAcceptedUsersService( private val userRepository: Us..
org.springframework.boot.web.server.PortInUseException: Port 8080 is already in use 인텔리제이 스프링부트로 개발을 하면서 오류를 한번씩은 직면해 봤을 것이다. 원래 되던 애플리케이션이 갑자기 8080포트가 이미 사용중이라고 뜰 때가 있다. 대개 다른 프로세스가 8080 포트를 사용중이라 뜨는 것이다. 인텔리제이를 재 실행했을때 될 수도 있지만 재실행해도 되지 않을때 server.port = 8081 이런식으로 수정할 수도 있지만 그렇고싶지 않을때 8080을 사용중인 프로세스를 찾아 그 프로세스를 종료하는 것이다. lsof -i :8080 8080 포트를 실행중이인 프로세스를 찾고 kill -9 {PID} 그 프로세스의 PID로 프로세스를 ..
개요 도메인 주도 설계 공부 3일차 오늘은 애그리거트에 대해서 알아보겠습니다. 애그리거트란? 애그리거트란 관련된 객체들을 모아 하나의 단위로 취급하는 개념으로, 객체지향 프로그래밍에서, 애그리거트는 객체 간의 관계를 정의하는 방법 중 하나로, 논리적으로 관련된 객체들을 그룹화하여 하나의 묶음으로 다룬다. 쉽게 말해 여러 개의 객체를 묶어 하나의 큰 객체로 다루는 것이다. 애그리거트는 일반적으로 Entity, Value로 구성되고, 애그리거트는 엔티티와 밸류의 관계를 나타내는 루트 root 엔티티를 포함하며 루트 엔티티는 애그리거트에 속한 다른 객체들과 관계를 정의한다. 애그리거트는 불변성을 유지하며, 내부 구현을 캡슐화한다. 애그리거트는 DDD 디자인 패턴에서 중요한 개념 중 하나로 애그리거트를 사용하여..
개요 나는 지금 DDD (도메인 주도 설계) 에 중요성을 느끼고 나서 개념들을 공부하기로 시작했고 DDD에 대해서 내가 공부한 내용들을 포스팅했다. 이번엔 바운디드 컨텍스트라는 용어를 공부해 볼 것이다. Bounded-Context 바운디드 컨텍스트는 도메인 주도 설계에서 처음 소개된 개념이다. 바운디드 컨텍스트는 큰 시스템을 여러 개의 작은 컨텍스트로 나누어 각 컨텍스트 내에서 특정한 비즈니스 규칙과 데이터 모델이 적용되는 것을 의미한다. 각 컨텍스트는 독립적으로 설계되고 구현되며, 서로 다른 컨텍스트 간에는 인터페이스를 통해 상호작용한다. 바운디드 컨텍스트는 도메인 안에서 특정한 비즈니스 문제 영역을 나타내며 그 영역 안에서 용어,개념,규칙등이 일관되게 적용된다. 바운디드 컨텍스트는 도메인 모델링을 ..
개요 도메인 주도 설계 개발자라면 코드를 짜는 것 뿐만 아닌 효율적으로 아키텍처를 구성하고 관리할 수 있는 환경을 만들어 나가야한다고 생각한다. 전체적인 틀을 잡지 않으면 효율적인 코드는 존재할 수 없다고 생각한다. 그렇기 때문에 도메인 주도 설계에 대해서 공부하려고 마음 먹었다. DDD 도메인 주도 설계란? 도메인 주도 설계는 소프트웨어 개발에서 사용되는 설계 방법론 중 하나로 이 방법론은 비즈니스 도메인을 중심으로 소프트웨어를 설계함으로써 비즈니스 문제를 해결하고, 유지보수가 가능한 소프트웨어를 만드는 것을 목적으로 한다. 도메인 주도 설계는 소프트웨어 개발 비즈니스 도메인과 관련된 용어, 개념, 규칙 등을 중심으로 이루어지도록 하고 이를 위해 도메인 모델이라는 개념을 도입해 비즈니스 도메인의 개념..