전체 글 126

Gradle Multi-module 프로젝트에서 Build Logic 공유하기

Precompiled Script로 작성한 빌드 로직을 각 모듈에 적용하는 방법을 기록합니다.아래 예제 코드는 Kotlin dsl로 Spring Boot 프로젝트를 구성합니다.(Kotlin 2.0.0, Spring Boot 3.3.0, Gradle 8.7)buildSrc/build.gradle.kts내 빌드 스크립트에 외부 플러그인을 적용하려면 buildSrc/build.gradle.kts에서 외부 플러그인 의존성을 선언합니다.외부 의존성 내 플러그인에 적용하기// kotlin dsl plugin을 선언합니다. 따옴표가 아닌, 벡틱입니다.plugins { `kotlin-dsl` } repositories { mavenCentral() } dependencies { imp..

테크타카 회고

테크타카를 떠나게 되었습니다. 채용 과정에서 좋았던 경험이 떠오르고, 설렜던 입사일이 생각납니다. 지금 돌아봐도 테크타카는 지원자를 정말 소중하게 대해주었습니다. 모르는 게 많아 고생했던 날이 있었고, 좋은 코드를 위해 팀원들과 함께 사유했던 날도 있었습니다. 회사생활 내내 존경할 수 있는 동료들이 있었고, 손 위에 피어나는 서비스가 있었습니다. 필요로 했던 만큼 성장하지 못한 것 같아 아쉽기도 합니다. 저와 테크타카 모두 도약할 수 있기를 기원합니다.

일상/회고록 2023.02.12

Homebrew 유용한 명령어

brew docs 브라우저에서 Homebrew의 온라인 설명서를 엽니다. brew install [formula] 패키지를 설치합니다. brew uninstall [formula] 패키지를 삭제합니다. brew list 설치된 패키지를 나열합니다. brew casks 설치할 수 있는 모든 cask 패키지가 나열됩니다. brew search [text] 패키지를 검색합니다. brew upgrade 설치된 패키지를 업그레이드합니다. brew cleanup [options] [formula|cask...] 오래된 잠금 파일과 이전 버전의 다운로드 파일을 삭제합니다. 옵션없이 명령을 수행하면 120일 이전의 파일을 삭제합니다. --prune=days : days 로 명시된 일자보다 오래된 캐시 파일을 삭제합니다..

네트워크 기초 - 네트워크 장비

Hub 네트워크 분배기 역할을 하는 장치(Dummy Hub) 데이터를 연결된 모든 장치에 보냄 데이터 수신자가 자신이 목적지인지를 MAC Address로 판단 여러 단말장치들이 데이터를 발송하면 데이터 충돌이 발생(Collision Domain)한계 허브는 한 번에 데이터 1개씩만 단말장치에 전송할 수 있기 때문에 네트워크 회선이 지원하는 전송 대역폭을 충분히 보장하지 않음 Switch 데이터의 충돌 영역을 줄이고, 네트워크 전송 대역폭을 보장하기 위해 개발된 장비(Switch Hub) 데이터는 Switch에 있는 MAC Address Table을 참조하여 목적지까지 경로를 결정함 Switch는 자신을 지나는 데이터의 MAC 주소를 가지고 MAC 주소 테이블을 갱신함(MAC Learning) Switch..

네트워크 기초 - 단말장치

Netwrok Interface Card 소규모 네트워크에 연결해주는 장치 NIC는 고유 주소는 MAC Address를 가지고 있음 MAC Address 16진수 12자리(48bit)로 이루어져 있는 NIC의 고유 주소 앞 6자리(24bit) --> 제조사 식별코드 뒤 6자리(24bit) --> 장비코드(시리얼번호) FF:FF:FF:FF:FF:FF --> 브로드캐스트 주소로 지정되어 있음 Internet Protocol Address 네트워크에서 단말장치에 할당되는 주소IPv4 8bit마다 옥텟으로 구분되는 32bit 길이의 주소체계사설 IP, 공인 IP 사설 IP : 내부망에서만 사용하는 IP 공인 IP : 외부망(인터넷)에서 사용하는 IP Network Address Translation 사설 IP ..

Gradle 멀티 모듈 길라잡이

그래들 공식 문서에서 발췌. ├── gradle // Wrapper 파일을 위한 폴더 │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew // Gradle Wrapper 실행 파일 ├── gradlew.bat // Gradle Wrapper 실행 파일 ├── settings.gradle // 빌드 프로젝트 이름과 서브 프로젝트들이 정의되는 파일이다. ├── buildSrc // 빌드 스크립트가 정의된 디렉터리 │ ├── build.gradle // 빌드 로직의 Dependency가 정의되는 빌드 스크립트. 아래 커스텀 플러그인의 의존성을 관리할 수 있다. │ └── src │ └── main │ └── gro..

스프링의 AOP

애플리케이션은 핵심 기능과 부가 기능으로 로직을 구별할 수 있습니다. 핵심 기능 : 특정 객체가 제공하는 객체 고유의 기능 부가 기능 : 핵심 기능을 보조하는 기능. 로그, 트랜잭션 등 부가 기능은 주로 공통 로직입니다. 반복된 코드가 곳곳에서 나타납니다. 중복이 발생합니다. 변경이 일어날 때, 그만큼 수정해야 합니다. AOP 관점 지향 프로그래밍(Aspect-Oriented Programming) 반복되는 부가 기능을 모아 모듈화하는 개발방법입니다. 객체 지향 프로그래밍에서 발생하는 중복을 제한하는 보조 방법입니다. AspectJ Framework AOP를 구현한 프레임워크입니다. 오류 검사, 오류 처리, 동기화, 캐싱, 모니터링, 로깅 등을 모듈화할 수 있습니다. 스프링은 AspectJ의 문법을 차용..

재귀(Recursive)를 이용하여 부분집합과 순열 구하기

import java.util.HashSet; import java.util.Set; /** * Recursive */ public class Recursive { static Set subSet = new HashSet(); static int n = 3; static Set permutation = new HashSet(); static boolean[] visited; static int range = 5; static int size = 3; public static void main(String[] args) { makeSubSet(1); visited = new boolean[range + 1]; makePermutation(1); } static void makeSubSet(int k) { ..

이분 탐색(Binary Search)

소개 정렬된 배열에 특정 원소가 존재하는지를 O(log n)의 시간에 파악할 수 있는 알고리즘. 구현은 반반반 방법과 매 라운드마다 폭을 줄이며 건너뛰는 방법이 있다. 반반반 방법은 흔히 볼 수 있는 구현방법이다. 매 단계마다 배열의 중앙값을 살펴본다. 중앙값이 찾는 값이면 true를 반환한다. 중앙값과 찾는 값이 다르면, 중앙값과 대소비교를 통해서 탐색 배열을 절반으로 줄인다. 마지막 단계까지 찾지 못하면 해당 배열에 찾는 값이 없음을 의미한다. 구현 // 반반반 구현 public boolean binarySearch(int[] arr, int target) { int start = 0; int end = n - 1; while(start target) { end = middle - 1; } else ..

Container Port forwarding

컨테이너는 가상 IP 주소를 할당받습니다. 도커는 기본적으로 컨테이너에 172.17.0.X IP를 순차적으로 할당해줍니다. 컨테이너는 기본적으로 외부에서 접근할 수 없습니다. 외부에서 접근할 수 있도록 하려면 컨테이너의 포트를 호스트의 포트에 바인딩해야합니다. 이를 포트 포워딩이라고 합니다. docker run --name containerName -p 80:80 nginx:latest -p [Host port]:[Container port] -p 옵션은 포트포워딩을 설정하는 옵션입니다. 호스트의 포트에 컨테이너의 포트를 바인딩하면 해당 포트를 통해 외부에서 컨테이너와 통신을 할 수 있습니다. 여러 포트를 바인딩하고 싶다면 바인딩하려는 포트를 그만큼 -p옵션을 써서 추가해주면 됩니다. -p [Host p..

Infra/Docker 2022.03.11