목록 분류 전체보기 (302)
1. Kotlin 핵심 문법1.1 data classJava의 DTO/VO를 한 줄로 만든다. equals, hashCode, toString, copy가 자동 생성된다.// Java로 치면 @Data @AllArgsConstructor 붙인 클래스data class Target( val id: String, val name: String, val url: String)val t = Target("1", "API", "http://...")val t2 = t.copy(name = "변경됨") // name만 바꾼 새 객체 주의: data class의 equals/hashCode는 주 생성자의 프로퍼티만 비교한다. body에 선언한 프로퍼티는 무시된다.data class User(val ..
Single-cycle based mips simulator싱글 사이클 기반의 mips simulator를 디자인한다. github : https://github.com/ecsimsw/simple-computer-architecture/tree/b.single_cycle ConceptsSingle-Cycle processor CPU는 내부 회로를 동작시키기 위해 일정한 주기로 규칙적인 전기 신호를 발생시키는데 이를 Clock이라고 한다. 즉 1 clock cycle은 한 번의 전기 신호를 말하고, 한 클럭에 걸리는 시간을 클럭 주기(Clock Period 또는 Clock cycle time)이라고 한다. 싱글 사이클 프로세서는 그 사이클 동안 하나의 명령어를 처리하는 프로세서를 의미한다. Control..
Backlog Backlog는 연결 대기할 수 있는 큐의 사이즈이다. 사용자와 연결이 완료되었지만 애플리케이션에서 처리하지 못하는 상황인 경우 (ex, 동기 처리 또는 사용 가능한 스레드 부족)에 연결을 큐에 담아두는데, 그 사이즈를 말한다. 보다 자세히 TCP의 3way Handshake를 보면 아래 그림과 같다. 서버는 클라이언트로부터 전달 받은 SYN을 syn_queue에 저장해두고, SYN+ACK 패킷을 클라이언트에 전달하게 된다. 이때 지정한 시간동안 클라이언트에서 ACK 패킷이 제대로 오지 않는다면, 이 syn_queue 안에 연결을 확인하여 클라이언트에 다시 지정된 시간 간격으로, 지정된 횟수 재시도하는 것이다. 그리고 이렇게 ACK 패킷을 전달받은 요청이 완료된 연결을 accept_queu..
Web server with socket APISocket API를 이용하여 Http 형식의 요청을 처리, 응답할 수 있는 웹 서버를 제작한다.github : https://github.com/ecsimsw/multiplexing-server Steps1. Socket API를 구현한 간단한 Socket Server를 제작한다. - Socket server를 구현하고 client 연결, 메시지를 처리한다. - Http 요청, 응답 포맷을 확인하고 Socket Server가 이를 해석, 처리, 반환할 수 있도록 한다. - Jsoup을 이용하여 html 파일을 변환, 사용자의 접근에 따른 동적인 페이지를 반환한다.2. Multi-Threading을 이용한 비동기 요청 처리를 구현한다.3. Sele..
라인의 오픈소스 행사 최근에 LINE의 테크 블로그에서 `Open Source Sprint 2021: 오픈소스에 잘 기여하는 문화 만들기`라는 오픈소스 기여를 위한 행사가 주최된 후기를 읽을 수 있었다. 라인에서 공개하고 사용하고 있는 오픈소스 프로젝트에, 제1사용자인 라인 개발자들이 좀 더 편하게 기여할 수 있도록 또는 활동에 동기를 줄 수 있도록 하기 위한 행사인 것 같았다. 그리고 언제나처럼 그들에 대한 동경심과 개발 욕구?가 불타서 한 동안 내가 기여할 수 있는 오픈 소스를 알아봤었다. 솔직히 아무것도 모르고 Spring boot 저장소의 PR을 보면서 `나도 한번?`이라는 감히 큰 꿈도 가졌었는데, 너무 어려워서 점점 탐색하는 프로젝트 규모가 작아졌던 웃픈 기억이 있다. 🥲 이런 행사들과 기업이..
결과를 먼저 보면..원했던 결과부터 소개하고자 한다. 내 라이브러리를 만들어 사람들한테 소개하는 것. 딱 아래처럼 사용자들이 gradle이나 maven의 dependency로 내가 만든 모듈을 import 해 사용하도록 하고 싶었다. dependencies { ... implementation 'com.github.ecsimsw:fast-crud:0.0.1'} maven central repository는 절차가 까다로워, 좀 더 편하게 jitpack을 사용하기로 했고 Spring boot 모듈을 사용했기 때문에 생겼던 문제들과 해결 팁을 소개하고자 한다. (예시에서 나온 fast-crud가 이번에 만들어 배포한 것인데, Spring boot - JPA 프로젝트에서 Entity에 어노테이션 하..
Local Maven Repository에 Gradle project 라이브러리 배포 1. build.gradle 수정 - plugins : 'java' -> 'java-library' 수정 / id 'maven-publish' 추가 plugins { id 'java-library' id 'maven-publish' } - 라이브러리 정보 기입 publishing { publications { maven(MavenPublication) { groupId = 'com.ecsimsw.fastCrud' // groupId artifactId = 'library' // artifactId version = '0.0.1-SNAPSHOT' // version from components.java } } } 2. s..
도메인 이벤트로 의존성 분리? 우아한테크코스 지원 플랫폼 개발을 하면서 제이슨한테 배운 개념이다. 그 당시에는 '오 멋진걸~, 이렇게도 할 수 있구나 🤩' 정도였도로 지나쳤었다. 패키지간의 의존, 리팩토링을 위한 분리를 고민하기 시작하면서 이제는 좀 더 와닿아서 이렇게 대박 기술인 양 정리하게 되었다. 문제와 요구 사항 커머스 서버를 만드는 프로젝트를 발전시키는 중이었다. 기존에는 없었던 명세였는데, 각 상품별 주문 횟수를 기록할 수 있다는 요구 사항이 추가되었다. 1. 사용자가 주문(Order)을 생성하게 되면, 그 장바구니에 포함된 각 제품(Product)에 orderedCount를 증가시킨다. 이 이전까지는 OrderService는 Product 관련 도메인을 분리해둔 상황이었다. 이번 요구 사항을..