전체 글 67

Kotlin 문법 - 표준 라이브러리편

유용한 코틀린 표준 라이브러리에 대해 알아본다. 이전 글) Kotlin 문법 - 입문편 Kotlin 문법 - 초보편 Kotlin 문법 - 중수편 Pair 클래스 Pair 클래스는 두 개의 변수를 하나로 묶는다. data class Pair( val first: A, val second: B ) : Serializable fun divide(a: Int, b: Int) : Pair = Pair(a / b, a % b) fun main(args: Array) { val (q, r) = divide(10, 3) println("몫: $q, 나머지: $r") //몫: 3, 나머지: 1 } Triple 클래스 Triple 클래스는 세 개의 변수를 하나로 묶는다. data class Triple( val first..

Kotlin 2022.10.08

책 <객체지향의 사실과 오해>

책장 정리 중 ··· 메모해놨던 부분을 여기로 옮긴다. 조영호, 위키북스 No object is an island. 협력은 요청과 응답으로 구성된다. 협력하는 과정 속에서 객체는 역할을 부여받아 어떤 행동을 할 책임을 가진다. 중요한 것은 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고받으며 협력하는가다. All the objects have a state(상태), behavior(행동) and identity(식별자). 상태란 특정 시점에 객체가 가지고 있는 정보의 집합이다. 객체는 자율적인 존재임으로 다른 객체의 상태에 직접적으로 접근할 수도, 상태를 변경할 수도 없다. 행동이란 외부의 요청 또는 수신된 메세지에 응답하기 위해 동작하고 반응하는 활동이다. 객체가 외부에 노출하는 것은..

Principal 2022.10.05

Kotlin 문법 - 중수편

헷갈릴만한 코틀린 문법을 정리해본다. 이전 글) Kotlin 문법 - 입문편 Kotlin 문법 - 초보편 객체 선언 프로그램 전체에서 공유하는 하나뿐인 객체를 만들기 위해 Java에서는 싱글톤 패턴 코드를 작성하였다. 코틀린에서는 다음과 같이 간단하게 만들 수 있다. object Person { var name: String = "" var age: Int = 0 fun print() { println("$name, $age") } } fun main(args: Array) { Person.name = "Sarah" Person.age = 42 Person.print() //Sarah, 42 } Person 식별자로 바로 객체에 접근한다. Person은 타입 이름이기도 하여서 var person: Per..

Kotlin 2022.10.03

Kotlin 문법 - 초보편

헷갈릴만한 코틀린 문법을 정리해본다. 이전 글) Kotlin 문법 - 입문편 객체 Object val person = object { val name: String = "홍길동" val age: Int = 30 } println(person.name) //홍길동 name, age처럼 객체에 포함된 변수들을 property라고 한다. 프로퍼티는 반드시 선언과 동시에 초기화되어야 한다. 프로퍼티가 자바의 필드와 동일해보이지만, 프로퍼티는 필드와 getter, setter가 합쳐진 개념이다. 클래스 Class class Person { var name: String = "" var age: Int = 0 } fun main(args: Array) { var person = Person() person.name..

Kotlin 2022.09.29

Kotlin 문법 - 입문편

이 글에선 헷갈리겠다 싶은 코틀린 문법에 대해서 남겨보려고 한다. 산술 연산의 결과 타입 모든 산술 연산자 +,-,*,/,% 에 대하여, Double/Int 이든 Int/Double 이든 결과 타입은 항상 Double이다. 10.0/5 처럼 계산 결과에 소수점이 없다고 하더라도 결과 타입은 Double이다. 결과 타입이 Int가 되면 계산 결과의 소수점이 손실될 수 있기 때문이다. Int 타입끼리 산술 연산을 하게 되면 결과 타입은 무조건 Int이다. 3/2 (둘 다 Int)의 계산 결과가 1.5일 것 같지만 1이다. 계산 결과에 소수점이 존재하더라도 보존되지 않는다. Int 타입보다 작은 정수 타입들(Byte, Short)끼리 산술 연산을 하면 무조건 Int이다. 변수 타입 변경 코틀린의 자바보다 타입..

Kotlin 2022.09.28

DDD와 어플리케이션 이벤트 스토밍

DDD (Domain Driven Design) 소프트웨어가 복잡한 것은 도메인이 복잡하기 때문이다. 그래서 도메인 전문가(기획자)와 개발자가 어떻게 협업하느냐가 중요하다. 이를 위해 보편언어를 사용하고, 모델 주도 디자인을 해야 한다. 단순히 Entity, value object, aggregate와 같은 구체적 개념이라기보단 개발 프로세스에 대한 철학이다. step1. 보편언어 정의 도메인에 대한 어휘를 이해관계자(기획자, 개발자, 분석가 등등)들이 공통적으로 이해할 수 있도록 정의한다. step2. 모델 주도 설계 도메인 분석과 설계의 간극은 최소화한다. 분석/설계/구현의 모든 단계를 관통하는 하나의 모델을 유지한다. 모델 = 코드 도메인이란? 영역, 집합 비즈니스 Domain 예를 들면 주문, 고..

Principal 2022.08.24

Wildcards in Java

아래와 같은 코드는 컴파일 에러가 발생하지 않는다. public class Test { public static void main(String args[]) { test(new Building()); test(new House()); } static void test(Building building) {} } class Building {} class House extends Building {} 이미 알고 있겠지만, House는 Building을 상속받기 때문이다. 주어진 타입 변수는 서브 타입으로 대체 가능하다. 이를 Substitution principle(치환 원리)이라고 한다. 아래 코드도 컴파일 에러가 발생하지 않는다. public class Test { public static void ma..

Java 2022.08.10

[간단실습] AWS 네트워크 설정하기 (VPC, Subnet 등)

우선 계정에 기본으로 생성된 VPC가 존재한다. 그냥 참고하면 된다. 1단계. VPC 만들기 IPv4 CIDR: 10.0.0.0/16 으로 지정 (사용가능한 IP 65,534개) 테넌시: 단일 전용 하드웨어에서 VPC 인스턴스를 실행할 것인가 지정하는 설정값 (당연히 더 비쌈) VPC를 생성하면 자동으로 라우팅테이블, NACL이 생성된다. 2단계. Subnet 만들기 퍼블릿 서브넷 IPv4 CIDR: 10.0.0.0/24 으로 지정 (사용가능한 IP 251개) 가용영역 a 기본이 아닌 서브넷에는 IPv4 퍼블릭 주소 지정 속성이 false로 설정되어 있으므로 true로 변경해준다. 프라이빗 서브넷 IPv4 CIDR: 10.0.0.1/24 으로 지정 (사용가능한 IP 251개) 가용영역 b (데이터 손실을..

DevOps 2022.08.06

AWS VPC 기본 개념

VPC (Virtual Private Cloud) 가상 네트워크 고객의 자체 데이터 센터에서 운영하는 기존의 네트워크가 개념적으로 매우 유사하다. VPC 특징 계정 생성시 default로 VPC를 만들어 준다. VPC 위에서 EC2, RDS, S3 등의 서비스를 활용할 수 있다. 서브넷을 구성할 수 있다. 보안 설정을 할 수 있다. (IP block, inbound outbound 설정) VPC peering (VPC 간의 연결)을 할 수 있다. IP 대역을 지정할 수 있다. VPC는 하나의 Region에만 속할 수 있다. (다른 Region으로 확장이 불가능) VPC 구성 Availability Zone Subnet(CIDR) Internet Gateway Network Access Control Li..

DevOps 2022.07.18

네트워킹의 기본 - IP 주소

IP 주소 컴퓨터 사이에 통신을 하려면 컴퓨터의 위치값(IP 주소)을 알아야 한다. IP 형식 172.16.254.1 ↓ 10101100.00010000.11111110.00000001 (4개의 8비트로 이루어진 옥텟) IPv4 Classes 첫 번째 옥텟의 앞자리 숫자를 바탕으로 Class들을 구분한다. A Class : 0 _ _ _ _ _ _ _ . _ _ _ _ _ _ _ _ . _ _ _ _ _ _ _ _ . _ _ _ _ _ _ _ _ B Class : 1 0 _ _ _ _ _ _ . _ _ _ _ _ _ _ _ . _ _ _ _ _ _ _ _ . _ _ _ _ _ _ _ _ C Class : 1 1 0 _ _ _ _ . _ _ _ _ _ _ _ _ . _ _ _ _ _ _ _ _ . _ _ ..

DevOps 2022.07.16

AWS 계정 MFA 활성화하여 보안 강화하기

MFA (Multi Factor Authentication) 다단계 인증 정규 자격 증명 방법 이외에 서비스 제공자가 지원하는 추가 보안 인증 방법을 수행하는 것 MFA 지원 루트 계정 및 IAM 사용자에 적용 가능 웹 콘솔 로그인 및 CLI 사용 모두에 적용 가능 지원 유형 가상 MFA 디바이스 - 소프트웨어 어플리케이션 (Google Authenticator, Authy, 1Password) SMS 문자 메지시 기반 - SMS / 이메일 / ARS 인증 다른 하드웨어 MFA 디바이스 - OTP 하드웨어 U2F 보안키 - YubiKey 디바이스 AWS 계정에 MFA 적용하기 메뉴: 내 계정 > 보안 자격 증명 > 멀티 팩터 인증(MFA)

DevOps 2022.07.07

우분투에 AWS CLI 설치하기

AWS CLI AWS 서비스 관리를 위한 CLI 명령형 도구 2020년 2월 버전 2 출시 (버전 2부터 컴파일된 바이너리 형태로 배포되기 때문에 파이썬 의존성이 필요하지 않음) 설치하기 최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface 설치 관리자의 아무 위치에서나 Cmd+L을 눌러 설치에 대한 디버그 로그를 볼 수 있습니다. 이렇게 하면 로그를 필터링하고 저장할 수 있는 로그 창이 열립니다. 로그 파일도 /var/log/install.log에 자 docs.aws.amazon.com # curl 설치 sudo apt update sudo apt install curl unzip build-essential curl # aws cli 설치 curl "htt..

DevOps 2022.07.07

윈도우에서 우분투 사용하기 - WSL (Windows Subsystem for Linux)

윈도우에서 사용 가능한 리눅스 환경을 의미한다. 여러 리눅스 배포판을 지원한다. 사용 설정 - Windows 기능 활성화 DISM(Deployment Image Serving and Management) - 윈도우 이미지와 관련된 조작을 위한 커맨드라인 명령어 cd C:\Windows\System32\ dism.exe dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart # 이후 재부팅, wsl 명령어 동작 확인 우분투 설치 MS 스토어에서 설치 가능. WSL 버전을 1에서 2로 업데이트 하기 위해서는, https://wslstorestorage.blob.core.windows.net/w..

DevOps 2022.07.05

DevOps 업무

목표 지속적 통합 Continuous Integration 지속적 배포 Continuous Delivery 마이크로서비스 Micro-services IaC (Infrastructure as Code) 모니터링과 로깅 Monitoring & Logging 소통 및 협업 Communication & Collaboration 데브옵스 엔지니어의 역할 조직에 데브옵스 문화를 정착시키는 환경을 만들어준다. (개발자가 개발 뿐만 아니라 운영에도 참여할 수 있는 환경을 만들어준다. 주요 고객이 바로 개발자!) 데브옵스 팀의 업무 도메인 네트워크 Network 가상 네트워크 및 물리 네트워크 구성 프록시 / VPN 서버 운영 DNS 서버 운영 개발 및 배포 플랫폼 Development & Deployment Platf..

DevOps 2022.07.05

JHipster로 MSA 쉽게 구성하기

JHipster란? JHipster는 모던 웹 애플리케이션과 마이크로서비스 아키텍처를 빠르게 구성할 수 있게 도와주는 오픈소스 개발 플랫폼이다. JHipster - Full Stack Platform for the Modern Developer! JHipster is a development platform to quickly generate, develop, and deploy modern web applications and microservice architectures. We support many frontend technologies, including Angular, React, and Vue. We even have mobile app support for Ionic and Reac www..

DevOps 2022.04.20