쿼리를 작성하다보면 막연한 의문이 든다.. Where 조건을 작성하는 순서에 따라 성능에 영향을 미칠까? 혹은 INNER JOIN 순서가 성능에 영향을 줄까? 결론은 NO! 쿼리최적화 과정에서 순서를 맞춘다. SELECT * FROM member m WHERE m.age 0 and (100/m.age > 0) SELECT * FROM member m WHERE (100/m.age > 0) and m.age 0 where절 순서는 query optimizer가 적절히 변경해준다. 0으로 나누어 에러를 발생하는 경우를 발생시켜도 알아서 쿼리 순서를 최적화 시켜 실행시켜준다! SELECT * FROM member as m INNER JOIN organization as o ON m.organizationID ..
https://fearless-hardboard-bd6.notion.site/Document-26266e6d385d4ee19e024644ec4cb0be 코인사조 Document 프로젝트 주제 fearless-hardboard-bd6.notion.site [AWS Architecture] MSA 인사이트를 얻을 목적으로 시작한 사이드프로젝트 후기를 작성합니다. 주제는 코인 자산 관리 시스템(~ 다양한 거래소의 코인을 모아서 보여주는 앱)을 간단하게 만들어보기로 했고 프론트 1명, 백엔드 3명이서 작업을 진행했으며, 백엔드 영역에서 커뮤니티 도메인과 자산 도메인의 일부를 담당했습니다. 첫 3주 동안은 EDA(Event Driven Architecture), DDD(Domain Driven Developmen..
MSA에 대한 학습을 진행하기 위해 MSA에 대한 개요와 리엑티브 프로그래밍을 학습했다. Async + Nonblocking, Publish, Subscribe, webflux 등 MVC가 아닌 생소한 백엔드 개발 영역 학습을 진행했다. 첫 주차, 과제 리엑티브 프로그래밍 실습을 진행하며, reactor의 각 종 연산자, publisher, subscribe, schedule로 쓰레드 관리를 이해하고 실습해보았다. 완벽히 이해하고 사용하는 실습은 아니어서, 아직 부족한게 많지만 조금씩 더 채워나가야 겠지.. :) /** * ["Blenders", "Old", "Johnnie"] 와 "[Pride", "Monk", "Walker”] 를 순서대로 하나의 스트림으로 처리되는 로직 검증 */ @Test pub..
Shell Script로 환경설정 자동화를 진행하다보면, 한 번에 모든 것을 설치하는 방법으로 진행 할 수도 있지만 그 때, 그 때 상황에 따라 무엇을 설치 할 지, 무엇은 설치 안할지에 대해 시나리오를 세울 필요가 있습니다. 그래야 작성한 스크립트를 유연하게 사용 할 수 있겠죠? 그렇기 위해서는 질문을 하고 셋팅을 진행 할 지 말지를 묻는게 가장 기본이 됩니다. 최근 쉘 스크립트로 환경설정 자동화 스크립트를 작성하며 시나리오를 만들고 있습니다. 간략히 말해 jdk를 설치하시겠습니까? nginx를 설치하시겠습니까? 뭐 그런 질문에 대한 순서와 응답이죠. 질문에 대해 응답을 하는 가장 간단한 방법은 응답에 대해 read 문법을 사용해 값을 읽는 방법이 있습니다. echo "please, write your..
function JDK_INSTALL { #JDK 버전 확인 java -version rt=$? if [ "$rt" -ne 0 ] then # 파일 압축 해제 gzip -d $DIR/jdk-8u191-linux-x64.tar.gz # TAR 풀기 tar -xvf $DIR/jdk-8u191-linux-x64.tar -C $DIR #JDK 경로로 JDK 이동 mv $DIR/jdk1.8.0_191 $jdkDIR #=================== JDK 경로 설정 (/etc/profile 하단에 경로 등록) =============== echo -e "\n\nexport JAVA_HOME=/usr/java/jdk1.8.0_191" >> /etc/profile echo -e "\nexport JRE_HOME=..
1) dependency 등록 2) config 등록 3) controller에 api 작성 annotation 등록으로 가능하다. io.springfox springfox-boot-starter 3.0.0 먼저 pom.xml에 io.spring.fox를 dependency를 등록한다. @Configuration public class SwaggerConfig { @Bean public Docket api(){ return new Docket(DocumentationType.SWAGGER_2) .useDefaultResponseMessages(false) .apiInfo(getApiInfo()) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSel..
백엔드 개발자라면 알고 있어야 할 RESTful API 문서 만들기~ 처음에는 API문서 만드는 툴로 많이 사용한다는 Swagger만을 시험삼아 적용해 볼 생각이었지만 현재 어떤 툴이 있는지 정도는 알고 넘어가야 하지 않을까 라는 마음으로 가볍게 서칭을 해보고 어노테이션 기반으로 Rest api 문서를 만드는 Swagger를 시험삼아 Spring에 적용해보기로 했다. 검색해보며 괜찮은 툴이 많다는 것을 알게되었다. 1. Swagger https://gngsn.tistory.com/69 Node.js + Swagger, 어렵지 않게 사용하기 안녕하세요 ! 오늘도 node 서버와 관련된 게시글을 작성하려고 합니다 〰️ 오늘은 swagger에 사용법에 대해 알아보겠습니다 ~.~ 그동안,,, API 명세서 작성..
매주 목요일 개발 스터디를 진행하고 있습니다. 5명이 진행하며, 코로나 때문에 게더타운에서 진행 한 지 벌써 두 달이 다 되어가고 있습니다. 당연시 여기는 개발 지식이나 서로의 회사에서 사용하는 개발방법론 등을 가지고 이야기 나눕니다. 오늘은 대략 10가지 정도의 주제를 가지고 이야기를 나누었는데요. 그 중에서 기억이 남는 내용을 가지고 정리를 해봅니다. 1. CI/CD의 대해 설명해보자. CI/CD를 정의할 때, 우리는 CI 까지만 구축되어 있어! 혹은 CI/CD 모두 구축되어 있어라고 간혹 개발자들 사이에서 듣게 되는 용어입니다.저도 역시 이 용어의 범위가 매우 헤깔렸기에, 대화들이 기억에 많이 남습니다. CI는 지속적인 통합, CD는 지속적인 배포를 의미하며 통합과 배포의 자동화를 의미합니다. 저는..
개발자의 필독서라고 선정될 만큼, 개발자로서 태도/마인드/전략에 대한 이야기를 담고 있습니다. 개발자로서 답답함이 많은 요즘, 저에겐 이 책 한권이 힐링으로 다가옵니다. 그 중에서도 눈길이 가는 세 이야기를 발췌했습니다. 1. 제자리 걸음 벗어나기 ( 성장!(몰입)하는 환경으로 변화하기 ) 개발을 할 때 실력과 작업난이도가 비슷하면, 작업에 몰입할 수 있고 성장 할 수 있는 환경이라고 합니다. 그런데, 비슷하지 않으면 지루함이나 불안함을 느끼게 됩니다. 지루함과 불안함을 느끼면, 성장할 수 없는 환경이라고 필자는 말합니다. 지루함을 느끼는 케이스는 "실력 > 작업의 난이도"인 케이스이고, 불안함을 느끼는 케이스는 "작업의 난이도 > 실력"인 케이스 입니다. 이 두 케이스에 대해 몰입이 가능한 상태로 가기..
최근 회사 제품의 개선안을 조사할 당시 배포자동화를 위해 Docker를 조사하게되었다. Docker의 컨테이너 안에 jar, jdk, postgreSQL 등을 설치 해놓고 Docker hub에 push 후 pull 한다면, 솔루션을 새로운 곳에 배포 할 때 혹은 신규입사자가 들어왔을 때 한 번에 개발환경을 구축할 수 있을 것이라는 기대감 때문이었다. 하지만, 아쉽게도 환경셋팅 자동화를 쉘스크립트로 하자는 의견으로 좁혀졌다. 수 많은 사용자가 있는 서비스들도 쿠버네티스, 도커를 통해서 Devops 하고 있는 시점에 쉘스크립트로만 환경셋팅을 자동화하자는 말이 매우 아쉬웠다. 하지만, Docker를 조금이라도 사용할 수 있게 되었다. 쉘스크립트 작성 및 환경설정 테스트를 개발서버에서 자유롭게 진행하기에는 다소..
최근 DDD, MSA를 이해하기 위해 지인들과 작은 사이드 프로젝트를 진행하고 있습니다. 모두, 직장인 개발자로 구성되어 있기에 본업처럼 많은 에너지를 쏟고 있지는 못하지만, 그래도 모두 시간을 쪼개어 열정적으로 진행하니 즐겁습니다. DDD, MSA란 말은 참 많이 들었는데 그 과정들을 실무에서 적용 해보기 어려워 많이 궁금했습니다. 책을 봐도 이해가 잘 되지 않았습니다. https://youtu.be/QUMERCN3rZs 위 영상을 참고하여, 4가지 색의 포스트 잇을 이용하여 파란색 : command 노란색 : item 주황색 : event 빨간색 : external ( 외부시스템 ) 기능을 나누고 요청 과정을 포스트잇으로 정리합니다. 정리한 내용을 바탕으로 같은 데이터 요청에 해당하는 경우를 한 곳에..
정적팩터리와 생성자 모두 선택적 매개변수가 많을 때 적절히 대응하기가 어렵다. 매개변수가 많을 때 사용할 수 있는 방법들을 살펴보자. 점층적 생성자 패턴 public class NutrionFacts { private final int servingSize; //필수 private final int servings; //필수 private final int calories; //선택 private final int fat; // 선택 private final int sodium; // 선택 private final int carbohydrate; // 선택 public NutrionFacts(int servingSize, int servings) { this(servingSize, servings, 0)..