일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ddd
- dataframe
- 스프링
- 위상정렬
- 백준
- 파이썬
- 이펙티브 자바
- 알고리즘
- java
- pandas
- 세그먼트 트리
- docker
- dfs
- BFS
- 자바
- Redis
- disjoint set
- 헥사고날 아키텍처
- 문자열
- UML
- spring security
- equals
- 데이터 flow
- 포트앤어댑터 아키텍처
- series
- 다익스트라
- DP
- 비트마스크
- springboot
- JPA
- Today
- Total
목록개발 (95)
코딩못하는사람
들어가며 사내에서 진행하는 새로운 프로젝트를 진행하였는데요, '새롭게 발생하는 요구사항에 빠르게 대응하기 위해 확장성 있게 설계하자'는 목표가 있었습니다. 따라서 목표에 맞게 팀 스터디 때 리서치했던 "헥사고날 아키텍처"를 적용해보는 경험을 해보았고, 아키텍처에 관해 리서치한 부분 간단하게 정리해보았습니다. 헥사고날 아키텍처란? - 사전적 의미로는 ”육각형 건축물”을 의미합니다. - 소프트웨어 설계에 사용되는 아키텍처 패턴중 하나로 여러 소프트웨어 환경에 쉽게 연결할 수 있도록, 느슨하게 결합된 애플리케이션 구성요소를 만드는 것을 목표로 하는 아키텍처입니다. - 도메인의 비즈니스 로직을 외부 라이브러리 및 툴로부터 분리 할 때 포트와 어댑터라고 부르는 인터페이스를 사용하기 때문에 포트&어댑터 아키텍처라고..
Lec 05 코틀린에서 조건문을 다루는 방법 1. if문 Java에서 if-else는 Statement이지만, Kotlin에서는 Expression입니다 Statement : 프로그램의 문장, 하나의 값으로 도출되지 않는다 Expression : 하나의 값으로 도출되는 문장 statement중에 하나의 값으로 도출되는 문장들이 Expression (포함관계) int score = 30 + 40; -> Expression이면서 statement String grade = if 문 ~~~~ 에러 -> if 문을 하나의 값으로 취급하지 않기 때문에 (statement) 자바에서는 이러한 경우를 위해 삼항연산자를 제공 Experssion이면서 statement 코틀린에서는 Experssion으로 취급한다. 따라..
var vs val 가변 불변 발 밸 타입 선언이 필수가아님 변수: 타입 모든변수는 val로 만들고 필요시에 var로 변경하자. 명시적으로 타입을 작성하지 않아도 추론해준다. (지금까지 팩킹 언팩킹에 대해서 생각을 안하고있었구나 내가.) 코틀린에서 primitive type 코틀린에서 Long과 long이 Long으로 같이 묶이지만, 상황마다 다르게 내부적으로는 primitive 타입으로 작동하게 한다. 숫자, 불리언, 문자에 대해서는 primitive타입을 알아서 사용해준다. 프로그래머가 boxing, unboxing을 신경쓰지 않도록 해준다. nullable은? 코틀린에서는 null이 들어갈 수 있는 변수를 다르게 처리한다. null이 들어갈 수 있다면, 타입?를 사용하면 됨 -> Long? 객체 인..
1.도메인 모델과 경계 도메인을 완벽하게 표현하는 단일 모델을 만드려는 실수 -> 오히려 모든 하위 도메인에 맞지 않는 모델을 만들게 된다. 회원 도메인은 회원이 될수있고 주문자가 될수있고 보내는사람이 될수있는 예시. 섞이기 시작하면 모델의 의미가 약해지기 때문에 요구사항 반영이 어려워진다. 명시적으로 구분되는 경계를 가져서 섞이지 않도록 해야 한다. 모델은 특정 컨텍스트하에서 완전한 의미를 갖는다.구분되는 경계를 갖는 컨텍스트를 DDD에서는 바운디드 컨텍스트라고 부른다. 2. 바운디드 컨텍스트 바운디드 컨텍스트는 모델의 경계를 결정, 한개의 바운디드 컨텍스트는 한개의 모델을 갖음. 용어를 기준으로 구분. BD는 실제로 기능을 제공하는 물리 시스템, 도메인 모델은 바운디드 컨텍스트 안에서 도메인 구현. ..
2장 주요내용 아키텍처 DIP 도메인 영역의 주요 구성 요소 인프라스트럭처 모듈 2.1 네 개의 영역 도메인,응용,표현 영역은 구현 기술을 사용한 코드를 직접 만들지 않는다 - ? 64p 대신 인프라 스트럭처 영역에서 제공하는 기능을 사용해서 필요한 기능을 개발한다. ex) DB에 보관된 데이터가 필요하다면 인프라 영역의 DB모듈을 사용하여 데이터를 읽음. 2.2 계층 구조 아키텍처 계층 구조는 특성상 상위 계층에서 하위 계층으로의 의존 만 존재하고 하위 계층은 상위 계층을 의존하지 않는다. 하지만 구현의 편리함을 위해 계층 구조를 유연하게 적용하기도 한다. 예를 들어 응용 계층은 바로 아래 도메인 계층에 의존하지만 외부시스템과의 연동을 위해 인프라 계층에 의존하기도 한다. 하지만 이러한 구조를 가지게 ..
1.1 도메인이란? 온라인 서점을 개발자에 입장에서 바라보게 되면 온라인 서점은 우리가 소프트웨어를 통해 구현해야 할 대상이 된다. 책 한권을 판매하기 위해 필요한 상품 조회, 구매, 결제, 배송 추적등의 기능을 제공해야 하는데, 이렇게 해결하고자 하는 문제 영역을 도메인(Domain)이라고 한다. 한 도메인은 다시 하위 여러 도메인으로 나뉜다. 주문의 하위 도메인은 고객의 주문을 처리하고, 혜택의 하위 도메인은 쿠폰과 할인같은 서비스를 제공할 것이고, 배송 하위 도메인은 구매한 상품을 전달하는 일련의 과정을 처리할 것이다. 도메인마다 고정된 하위 도메인이 존재하는 것은 아니다. 또한, 하위 도메인을 어떻게 구성할지 여부는 상황에 따라 달라진다. 또, 특정 도메인을 위한 소프트웨어라고 해서 도메인이 제공..
서비스 기업에서는 데이터 기반 의사결정(Data-Driven)이 중요하게 자리 잡았다. 데이터가 부족했을 때는 리더의 경험과 감에 의해 의사결정을 했다면, Data-Driven은 데이터를 기반으로 핵심 의사결정을 하는 것을 말한다. 하드웨어가 발달하고 클라우드(AWS,Azure 등)가 발달하면서 데이터를 저장할 수 있는 공간을 손쉽게 제공해준다. 따라서 서비스에서 유저가 일으키는 이벤트(클릭, 스크롤 등) 뿐만 아니라 서버가 남기는 로그 데이터같은 많은 데이터를 저장할 수 있게 된다. 또한 데이터 분석 툴도 많이 나와있기 때문에 Data-Driven에 큰 도움을 준다. 데이터 파이프라인이란? 서비스를 운영하며 생기는 많은 데이터를 무사히 저장소에 저장하기 위해 여러 서버 컴퓨터가 작업을 한다. 데이터를 ..
HashMap은 key의 중복을 허용하지 않고 key-value를 1:1로 매핑하는 자료구조이다. hash의 제공해주는중 장점으로는 빠른 탐색,삽입,삭제에도 있지만 해시 충돌이라는 문제를 꼭 생각해봐야 한다. 해쉬 충돌 동일하지 않은 어떤 객체 X와 Y가 있을 때, 즉 X.equals(Y)가 '거짓'일 때 X.hashCode() != Y.hashCode()가 같지 않다면, 이때 사용하는 해시 함수는 완전한 해시 함수(perfect hash functions)라고 한다. Integer, Long, Double 같은 Number 객체는 객체가 나타내려는 값 자체를 해시 값으로 사용할 수 있기 때문에 완전한 해시 함수 대상으로 삼을 수 있다. 하지만 String이나 POJO(plain old java obje..
1.문제점 제작한 웹서비스의 반응시간이 엄청나게 길어지는 문제가 발생했다. 고가용성(High Availability)를 지키지 못한 예이다. 2.접근 반응시간이 길어지지만 결국에는 정상 API를 수행하는점을 바탕으로 로드밸런싱 과정에서 일어난 문제라고 추측하였다. 3.원인 로드밸런싱 해 놓은 서버를 가지고 있는 EC2가 서비스 기간이 만료되어 서버가 죽었던 것을 까먹고 있었다. 그에 따라서 라운드 로빈 방식으로 다운된 서버에 계속 부하를 보낸 후 default 설정만큼 대기하고 살아있는 서버에서 작업을 해온 것이다. (default 설정은 max_fails=1,fail_timeout=10이다.) 옵션 ip_hash : 같은 방문자로부터 도착한 요청은 항상 같은 업스트림 서버가 처리 할 수 있게 한다. w..
@Transactional 어노테이션을 AOP와 PSA의 관점에서 공부해보았다. AOP(Aspect Oriented Programming) @Transactional 어노테이션을 사용하면 별도의 트랜잭션 관련 코드없이 트랜잭션 서비스를 이용할 수 있다. 트랜잭션에 대한 공통 코드를 어노테이션이 AOP를 통해 대신 처리해주어 우리가 구현해야 할 비즈니스 로직에 집중할 수 있게 해주는 것이다. Spring에서는 Proxy pattern을 이용해 AOP를 구현한다. @Transactional을 사용하고 있는 aspect를 보자. @Transactional어노테이션이 붙어있는 곳에서 transactionalMethodExecution메서드를 실행하라는 aspect이다. transactionalMethodExec..