- Today
- Total
목록Category (318)
개발하는 고라니
[Spring Boot] Mono Repo, Multi Module (with. Gradle Kotlin DSL) Intro 개인 프로젝트 정도의 규모라면 하나의 프로젝트 안에 api, web, admin 등이 모두 들어가있어도 커버가 되지만, 규모가 커지면 각각 개별 프로젝트로 나누어야 관리가 될 정도가 된다. 그럼 나 dev-gorany.tistory.com 이전 글에서 프로젝트를 다중 모듈로 구성해보았다. Gradle을 사용하면 어렵지 않게 구현가능하다. 하지만 Gradle Kotlin DSL의 문법은 생소하기도 하고, 사용법이 미세하지만 달라서 낯설기 때문에 여러 삽질이 필요했다. 이번 글에서는 Querydsl을 적용해 api에서 QDomain class를 사용하는 것을 목표로 해보자. 목표 ap..
Intro 개인 프로젝트 정도의 규모라면 하나의 프로젝트 안에 api, web, admin 등이 모두 들어가있어도 커버가 되지만, 규모가 커지면 각각 개별 프로젝트로 나누어야 관리가 될 정도가 된다. 그럼 나눴다고 가정하자. 우리는 4개의 repository가 있다. api web admin-api admin-web 이때 admin에 어떤 기능을 추가해달라고 요청이 왔다. 그래서 admin-api, admin-web을 수정해서 PR(Pull Request)을 올렸다. 다음 요구사항은 새 프로모션이다. api, web, admin 모두 개발을 했고 PR을 올렸다. 하나의 이슈이지만 4번의 PR을 올렸다. 지금은 '이게 어때서?' 라고 생각할 수 있다. 조금 더 극단적으로 가정해서 주문과 정산, 회원이 다시..
1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net [요구사항] 중복 제거 단어 길이 작은 순서대로 정렬 길이가 같다면 철자 순으로 정렬 Code - [Kotlin] fun main() { /* read/write 가능한 List 선언 */ val list = mutableListOf() /* readln()은 console 입력 */ for (i in 1..readln().toInt()) list.add(readln()) /** * distinct() -> 중복제거 * sortedWith() -> C..
대부분 개인적으로 프로젝트를 하거나, 공부를 하는 차원에서는 Git 혹은 Github에 대해 저장하고, 불러오는 용도로만 써도 무방했다. 하지만 필드에서 협업을 하게되면 어쩔 수 없이 '더 공부해야겠구나' 느끼게 된다. 그 이유는 회사마다 코드를 관리하는 정책이 다르기 때문이다. 예를 들어, A 회사는 pull(fetch + merge)로 하고, B 회사는 squash merge로 하고, C 회사는 rebase를 쓴다. 혹은 rebase와 merge를 섞어서 쓰기도 한다. 마찬가지 이유로 구체적인 정책이 정해지진 않아왔지만, 최근 들어 모든 팀이 동일한 정책을 사용하기로 맞추어 졌고, Rebase를 사용하기로 했다. 하지만 나는 rebase가 뭔지 모른다. 그래서 실습하며 배워보고자 한다. Rebase ..
이번 한 주는 특별히 다른 점은 없었으나, 유난히 시간이 빨리가버린 그리고 정신없이 흘러간 한 주가 아니었나 싶다. 아마도 제목과 같이 서비스 장애를 겪었고, 갖은 문제가 발생했기 때문이라 생각한다. 사실 어디부터가 장애고, 어디까지가 장애라고 해야하는지 모르겠지만. 이미 배포 중인 서비스가 예기치 못한 이슈를 겪으면 장애라고 생각한다. 그리고 내가 겪은 현상은 확실히 서비스 장애이다 :). 우선, 물품 별 배송정보를 토대로 상태를 업데이트 하며 고객에게 톡이 전송되는 프로세스가 있는데, 기존에는 메뉴얼로 작업되고 있었다. 이를 최근 자동화 로직을 설계하고, 나름대로 검증 후 배포를 내보냈다. 3주 정도는 문제없이 동작하는 줄 알았는데, 금주 일부 고객의 문의가 들어왔다. 30분 마다 동일한 톡이 반복적..
MySQL Architecture MySQL 서버 MySQL 엔진 (머리) 스토리지 엔진 (손, 발) InnoDB 스토리지 엔진 MyISAM 스토리지 엔진 ※ MySQL 엔진? - 클라이언트로부터 접속 및 쿼리 요청을 처리하는 Connection Handler와 SQL Parser 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이루며, MySQL은 ANSI SQL을 지원하기 때문에 표준 문법에 따라 작성된 쿼리는 타 DBMS와 호환되어 실행 O ※ 스토리지 엔진? - MySQL 엔진은 요청된 SQL을 분석하거나 최적화하는 처리를 수행한다. - 이에 반해 스토리지 엔진은 실제 데이터를 디스크 스토리지에 저장하거나, 디스크 스토리지로부터 데이터를 읽어오는 부분을 전담한다. - MySQL 서버..
MySQL에서 사용자 계정을 생성하는 방법이나 각 계정의 권한을 설정하는 방법은 다른 DBMS와는 조금 다르다. 대표적으로 MySQL의 사용자 계정은 단순히 사용자의 ID뿐 아니라 사용자가 어느 IP에서 접속하고 있는지도 체크한다. 또한 MySQL 8.0 부터 권한을 묶어 관리하는 Role 개념이 도입되었기 때문에 각 사용자의 권한으로 미리 준비된 권한 세트를 부여하는 것도 가능하다. 계정의 식별 방식 권한 역할 위 세 가지에 대해 반드시 숙지하자. 식별 MySQL의 사용자는 ID와 클라이언트가 실행된 호스트명이나, 도메인 또는 IP 주소도 계정의 일부가 된다. 따라서 ID와 호스트를 함께 명시해야 하며, ID와 호스트를 감싸는 역따옴표(₩)는 종종 작은 따옴표(')로 사용하기도 한다. 'gorany1'..
MySQL 설치 [environment] Mac OS (M1) mysql (latest) linux/amd64 Docker가 이미 설치되어 있다는 가정하에 진행해본다. $ docker run -p 3306:3306 \ --platform linux/amd64 \ --name mysql-db \ -e MYSQL_ROOT_PASSWORD=[password] \ -e MYSQL_DATABASE=[database] \ -e MYSQL_USER=[username] \ -e MYSQL_PASSWORD=[password] \ -d mysql MySQL 컨테이너가 실행된 것을 확인하고 컨테이너에 들어가보자. $ docker ps -a $ docker exec -it mysql-db [MySQL 실행 파일 위치 및 설정..