목록전체 글 (316)
ecsimsw
Web server with socket API Socket API를 이용하여 Http 형식의 요청을 처리, 응답할 수 있는 웹 서버를 제작한다. github : https://github.com/ecsimsw/multiplexing-server Steps 1. Socket API를 구현한 간단한 Socket Server를 제작한다. - Socket server를 구현하고 client 연결, 메시지를 처리한다. - Http 요청, 응답 포맷을 확인하고 Socket Server가 이를 해석, 처리, 반환할 수 있도록 한다. - Jsoup을 이용하여 html 파일을 변환, 사용자의 접근에 따른 동적인 페이지를 반환한다. 2. Multi-Threading을 이용한 비동기 요청 처리를 구현한다. 3. Selec..
라인의 오픈소스 행사 최근에 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 관련 도메인을 분리해둔 상황이었다. 이번 요구 사항을..
외부 디렉토리 동적 파일 참조 스프링부트에서 파일을 응답하는 법을 정리하려고 한다. 다만 보통 resouces/static에 넣어 사용하는 정적 컨텐츠가 아닌, 실행 도중 동적으로 생성하거나, 관리하는 파일을 다루는 방법을 고민해보았다. 요구 사항 1. 사용자가 실행 도중 업로드한 파일을 저장한다. 2. 저장된 파일의 물리적인 경로를 숨기면서 요청 -> 응답할 수 있도록 하고자 한다. 3. 즉 실제 파일 물리 경로인 card-photos/** 과 달리, 클라이언트의 요청은 /images/cards/** 처럼 명확한 path로 요청할 수 있도록 하고자 한다 방법 위 같은 요구 사항은 다음처럼 ResourceHandler를 사용하면 간단히 해결할 수 있다. 아래처럼 WebMvcConfigurer를 구현하고,..
기존 PR 방식에 지친다면? 마틴파울러 블로그에 소개된 브랜치 전략을 소개하려고 한다. Rouan Wilsenach가 올해 9월 달에 작성한 따끈따끈한 글인데, 공감되기도 하면서도 필요한 팀들이 많을 것 같아 정리해본다. CI 정책이 확실하게 있고 팀원들이 어느 정도 경력이 있다면, 그리고 기존의 PR 방식이 늘어지고 의미 없다고 느껴본 적이 있는 사람이라면 한 번쯤 읽어보면 좋을 것 같다. Ship / Show / Ask Ship/Show/Ask is a branching strategy that helps teams wait less and ship more, without losing out on feedback. martinfowler.com 간단한 정리 Rouan Wilsenach가 제안하는 이..
클릭 위치가 부채꼴 안에 포함되어 있는지 알고 싶어요! 옆 회의실에서 '프롤로그'팀이 수학 문제 푸는 거를 보고 재밌어 보여 나도 참여해보았다. 라이브러리 없이 직접 확률에 따른 사잇각을 구하고 영역 클릭시 해당 내용을 확인할 수 있는 기능을 구현 중이었고, 사용자 클릭 이벤트가 주어졌을 때 그 좌표가 해당 영역에 포함되어 있는지 확인할 수 있는 로직이 필요했다. 1. 클릭 범위 확인 우선 클릭할 수 있는 범위가 맞는지를 확인했다. 아래 그림에서 빨간색으로 표시한 부분을 말한다. 간단히 작은 원보다 밖에 있고, 큰 원 안에 있는지를 확인하면 된다. 2. 각도 확인 이번에는 좌표가 A 영역 부채꼴 안에 포함되었는지를 확인할 것이다. 영역 시작 선을 a, 영역 끝 선을 b이라고 한다. x축과 a가 이루는 각..