전체 글143 [AWS] 탄력적(Elastic) IP란? 탄력적 IP란 탄력젹 IP 주소는 동적 클라우드 컴퓨팅을 위해 고안된 고정 퍼블릭 IP 주소이다. 모든 인스턴스나 네트워크에 탄력적 IP를 연결할 수 있다 왜 사용하나요? EC2 인스턴스를 생성하면 동적 IP를 할당받는다. 인스턴스를 중지하거나 종료 후 다시 실행시키면 다른 IP가 할당되는 문제가 발생한다. 따라서 고정적인 탄력적 IP를 할당받아 사용한다. 일정 시간 이후 비용이 청구되기 때문에 각별히 관리하여 사용해야 한다. 2022. 10. 7. [도커] 도커란 무엇인가? 동기: 도커 캐릭터도 만들어 사용해왔으나 정작 도커에 대해 무관심했던 것 같다. ㅎㅎ 이번 기회에 알아보려 한다 도커란 무엇인가? 도커란 컨테이너 기술을 기반으로 한 일종의 가상화 플랫폼이다. 왜 컨테이너 위에 만드는가? 컨테이너란 컨테이너가 실행되는 호스트 OS의 기능을 그대로 사용하면서 프로세스를 격리해 독립된 환경을 만드는 기술이다. 가상화와 컨테이너 가상화는 하드웨어를 여러 개의 가상 머신으로 분할하는 기술이다. 기존 환경을 Host Os, 가상 머신 환경을 Guest Os라고 부른다. 가상 머신 생성을 위해 하이퍼바이저라는 소프트웨어를 이용한다. 하이퍼 바이저란? 호스트 하드웨어에 설치되어 Host, Guest를 나누는 중간 역할을 담당한다. 게스트는 하이퍼바이저에 의해 관리되고 자원 할당을 받.. 2022. 10. 7. [스프링] TestContainer란? 새로 하는 프로젝트에서 TestContainer를 이용해 멱등성 있는 테스트를 구축하고 싶어 알아보게 되었다. TestContainer란? Junit Test를 지원하는 자바 라이브러리, Docker 컨테이너를 사용할 수 있도록 일회용 인스턴스를 사용한다. 어떤 환경에서든 독립적이고 멱등성 있는 테스트 환경을 제공한다. 기존의 방식 H2같은 인메모리 DB 사용 또는 테스트용 DB를 구축해서 사용했다. 인메모리 DB는 실 사용 DB와 방언 차이가 있을 수 있다. 테스트용 DB는 구축하는데 비용이 든다. Local DB를 띄워서 하더라도 각 개발자 환경에 맞춰야 한다. TestContainer 방식을 사용하면 일회성 Docker 컨테이너를 띄우기 때문에 실 DB와 똑같다. 개발자가 테스트용 DB에 대한 리소.. 2022. 10. 4. [스프링] String 클래스 자동 trim 메서드 적용하기 새 프로젝트 도중 string 클래스가 앞뒤 공백이 있어도 저장이 되는 것을 확인할 수 있었다. DTO의 각 필드마다 trim 메서드를 적용할 수 있었지만 그러면 보일러 플레이트가 너무 많아져 관리 포인트가 늘어난다. 아래 역직렬화 모듈을 String 클래스만 등록하여 사용할 수 있다. StdScalarDeserializer 클래스를 오버라이드하여 원하는대로 커스텀하여 적용할 수 있다. @Component public class StringTrimModule extends SimpleModule { public StringTrimModule() { addDeserializer(String.class, new StdScalarDeserializer(String.class) { @Override public.. 2022. 10. 2. [마이크로서비스패턴] CQRS에 대해 알아보자 CQRS란? 명령과 조회 모델을 분리하는 패턴이다. 트랜잭션 모델을 커맨드, 조회 모델을 쿼리 두 가지로 구현한다. 커맨드 모델은 자체 RDBMS에 매핑된다. 커맨드는 데이터가 바뀔때마다 이벤트를 발행한다. 쿼리 모델은 도메인 이벤트를 구독하고 이러한 이벤트를 처리한다. CQRS의 장점 좋은 성능: MSA 아키텍쳐 환경에서 효율적인 쿼리가 가능하다. -> 여러 조인이 필요하지 않다 CQRS는 이벤트 소싱 모델의 한계를 보완한다.(이벤트 저장소가 기본키 쿼리를 지원) 관심사 분리 -> 도메인 모델에 따라 분리하고 더 하여 명령 조회 모델까지 분리하게 되면 각 특성에 맞는 DB를 선택할 수 있고, 모델 특성에 맞는 기술을 선택할 수 있다. CQRS 단점 아키텍쳐가 복잡해진다. -> 여러 종류의 DB를 사용하.. 2022. 9. 26. [마이크로서비스패턴] DDD에 대해 알아보자 DDD란? Domain-Driven Design의 약자로 복잡한 비즈니스 로직을 개발하기 위해 OOD를 개선한 접근 방식이다. 도메인 내부에서 문제 해결이 가능한 형태로 모델링하는 기법으로 공용 언어를 정의한다. DDD와 마이크로서비스 아키텍쳐를 함께 적용하기 위해 알아야할 것들이 있다. 공용 언어 공용 언어를 정의해 도메인 간 용어 혼동이 일어나지 않게 해야 한다. 하위 도메인 단일 통합 모델은 여러 도메인 간의 합의를 이끌어 내기 어렵다. DDD는 각 서비스가 자체 도메인 모델을 가지며 전체 도메인 모델 문제를 해결할 수 있다. 경계 컨텍스트(Bounded Context) 도메인 모델의 범위이다. 이러한 모델을 표현하며 모든 관련 책임자의 업무 이해를 높일 수 있다. 또한 설계와 개발이 따로 분리되어.. 2022. 9. 26. [네트워크] HTTPS에 대해 설명해주세요. HTTP VS HTTPS HTTP → 데이터를 주고 받기 위한 프로토콜 80번 포트 사용 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이다. HTTP의 구조 HTTPS → 데이터 암호화가 추가된 프로토콜 443번 포트 사용 암호화 알고리즘 메시지 다이제스트 메시지 무결성 검사를 위해 암호 해시 함수를 이용해 생성하는 크기가 고정된 값 비 예측성 - 조금만 달라져도 예측할 수 없다. 역상 저항성 충돌 저항성 MD5, SHA-256 대칭키 암호 대칭 키 암호 - 비밀 키라고도 한다. 암호화, 복호화에 같은 키를 사용하는 암호 AES128, AES256-GCM(32byte) 공개키 암호 비대칭 키를 사용 개인키와 공개키가 있어 개인키로 공개 키를 유도 공개 키로 암호화, 개인 키로 복호화한다. 암복호의 .. 2022. 9. 24. [자바] String, StringBuilder, StringBuffer 차이점 정리 공통 특징은 String을 저장하는 클래스이다 그러나 여러 다른 특징들을 가지고 있다. String String은 두 가지 생성 방식이 있다. JVM의 힙 영역에 저장되어 가비지 컬렉터의 관리를 받게 된다. 그러나 리터럴 방식으로 생성하면 String Pool 영역에 생성되어 절대 변하지 않는 값을 가지고 있다. 그렇기에 만약 for문으로 String에 "+" 를 붙이는 것을 10개 돌리면 10개의 String 객체가 새로 생기게 된다. 생성된 String은 String Pool에 지속적으로 생기게 된다. 이렇게 되면 가비지 컬렉터가 지속적으로 추적하여 메모리 해제를 해야하는 문제가 있다. 불변성을 갖고 있기에 Thread-Safe하다는 특징 있다. String first = "first"; //리터럴 .. 2022. 9. 23. [자바] 자바 8에 새롭게 변화된 기능들 자바 8로 오면서 많은 부분이 바뀌게 되었다. 오늘 날 배포 환경에서는 8이나 11 버전을 많이 사용하는 것으로 알려져 있는데 무엇이 추가되었는지 알아보자 목차 1. 람다 표현식 2. 스트림 API 3. Optional 4. Interface의 Default 메소드 5. 날짜 관련 클래스 람다 표현식 자바8부터 지원 함수형 프로그래밍 지원 메소드를 하나의 식으로 표현한 것 메소드를 람다식으로 표현하면 메소드의 이름과 반환타입이 없으므로, 익명함수라고도 한다. 람다식 장단점 장점 코드가 간결, 가독성이 좋다. 함수 만드는 과정 없이 한번에 처리 가능 병렬 프로그래밍 용이 단점 디버깅이 까다롭다. 재귀식에는 부적합 스트림 API (이것이 자바다) Collections 또는 Array의 요소를 하나 씩 참조해.. 2022. 9. 23. [자바] 자바를 사용하는 이유 JAVA를 많이 사용하는 이유 객체 지향 언어 자바는 객체 지향 언어로 여러 객체의 협력을 통해 프로그램을 개발한다. 프로젝트를 독립적인 객체 단위로 분리해 작업할 수 있기에 규모가 크더라도 유지보수나 확장성이 좋다. 플랫폼에 독립적인 언어 자바는 플랫폼에 영향을 받지 않아 다양한 운영체제 환경에서 제약없이 사용할 수 있다. C언어로 개발한 프로그램이 있을때, prog.c 라는 파일을 만들어 컴파일러가 컴파일 하게 되면 prog.exe가 만들어진다. 이러한 실행 파일은 해당 운영체제에 맞게 제작되었기에 다른 운영체제에서는 실행할 수 없다. 따라서 타 운영체제에 맞는 실행 파일을 만들어야 한다. 그러나 자바는 Prog를 만들어 컴파일하게 되면 Prog.class가 생성된다. 운영체제에 맞는 기계어가 아닌 .. 2022. 9. 23. [마이크로서비스패턴] 2. 분해 전략 애플리케이션 요건 애플리케이션이 할 일을 정의한 기능 요건이다. 보통 유스 케이스, 유저 스토리로 정의한다. ~성으로 끝나는 서비스 품질 요건. 확장성, 신뢰성같은 런타임 품질 외에도 관리성, 테스트성, 배포성처럼 개발 시점 품질도 해당됩니다. 계층형 아키텍쳐 계층형 아키텍쳐는 전형적인 아키텍쳐 스타일로 명확히 정의된 역할을 분담하여 계층 간 의존성은 아키텍처로 제한한다. 육각형 아키텍처 스타일 애플리케이션 표현 계층 대신 로직을 호출해 외부 요청을 처리하는 어댑터와 영속화 계층 대신 로직에 의해 호출되고 호출하는 아웃바운드 어댑터를 둔다. 핵심은 로직이 어댑터를 의존하지 않는 점이다. 느슨한 결합 느슨하게 결합된 서비스는 마이크로서비스의 주요 특성이다. 유지보수성, 테스트성을 높이고 애플리케이션 개발 .. 2022. 9. 14. [마이크로서비스패턴] 번외. 패키지 설계 시 지켜야할 객체 지향 설계 원칙 11가지를 알아보자. SRP 클래스 변경의 이유는 하나여야만 한다. OCP 클래스 동작을 수정하지 않고 확장할 수 있어야 한다.( LSP 하위 클래스는 상위 클래스로 대체가 가능해야 한다 ISP 기능별로 세밀하게 인터페이스로 분리되어야 한다. DIP 구현체가 아닌 추상객체에 의존되어야 한다. REP - The Release Reuse Equivalency Principle 재사용 단위는 릴리즈 단위이다. CCP - The Common Closure Principle 동일한 유형의 변경에 대해 닫혀 있어야 한다. 패키지에 영향을 주는 변경은 패키지의 모든 클래스에 영향을 미친다. CRP - The Common Reuse Principle 구성 요소의 클래스는 함께 재사용된다. 하나라도 재사용하는 경우 모두 재사용한다. ADP .. 2022. 9. 14. 이전 1 2 3 4 5 ··· 12 다음