Class A 가 Class B 의 자식인지 확인하는 방법

Class<A> clazzA = ...; Class<B> clazzB = ...; clazzA.isAssignableFrom(clazzB); // true class B extends A { ... } 참고 자료 https://www.tutorialspoint.com/java/lang/class_isassignablefrom.htm

2024-09-15 · 1 min · 21 words

char[] 의 특정 구간을 String으로 만들기

String 생성자 중에 char 배열의 offset과 count를 지정할 수 있는 것이 있다. char[] a = {'a', 'b', 'c'}; String b = new String(a, 1, 2); // b == "bc" 참고 자료 https://docs.oracle.com/javase/8/docs/api/java/lang/String.html

2024-09-15 · 1 min · 32 words

Char Array를 String으로 변환하기

String.valueOf() 를 사용가능 하다. final char[] charArray = { 'b', 'a', 'e', 'l', 'd', 'u', 'n', 'g' }; String string = String.valueOf(charArray);

2024-09-15 · 1 min · 22 words

build 후에 실행 시 no main manifest attribute 에러 해결

대부분 SpringBoot 플러그인을 추가해주지 않아서 발생하는 문제다. SpringBoot 플러그인에는 Spring Boot 애플리케이션을 jar 파일로 패키징을 도와주기 위한 플러그인이므로 필요하다. 참고 자료 https://dingue.tistory.com/17 https://kotlinworld.com/323 https://stackoverflow.com/questions/54121894/executing-springboot-application-as-jar-gives-no-main-manifest-attribute

2024-09-15 · 1 min · 24 words

BroadcastChannel

같은 origin의 서로 다른 window, tab, frame, iframe 간에 통신을 할 때 사용하는 Web API다. WebRTC로 두 탭 사이에 연견을 맺기 위해서 BroadcastChannel을 사용했다. 간단한 사용법만 정리해본다. 채널 생성 인자로 원하는 채널의 이름을 생성할 수 있다. 이미 생성된 채널이라면 구독을 하게 된다. const signaling = new BroadcastChannel('webrtc'); 이벤트 처리 아래와 같이 어떤 이벤트가 발생했을 때의 처리를 구현할 수 있다. signaling.onmessage = e=> { if(e.data.type === 'hello') { console.log('hello'); } } 이벤트 발생 이벤트를 발생시키는 방법은 아래와 같다....

2024-09-15 · 1 min · 89 words

BigInteger

목표 BigInteger가 무엇인지 이해한다. BigInteger의 사용 방법을 이해한다. BigInteger의 내부 구조를 이해한다. BigInteger Java에서 primitive type 정수 보다 큰 범위를 숫자를 저장하기 위해서 사용할 수 있는 클래스 immutable arbitrary-precision interger를 표현한다. arbitrary-precision: 값을 표현하기 위해 필요한만큼 공간을 사용한다는 의미 따라서, long 타입보다 큰 범위의 값을 나타낼 때 사용할 수 있다. 사용법 int, long 타입의 경우에서 변환은 valueOf() BigInteger a = BigInteger.valueOf(54); BigInteger b = BigInteger.valueOf(37); 큰 정수 등을 표현할 때는 string으로 생성자 주입 b = new BigInteger(“123456789123456789”); 일부 값들은 상수로 정의되어 있음 a = BigInteger....

2024-09-15 · 1 min · 179 words

BigDecimal valueOf(0) 대신 BigDecimal ZERO

valueOf 메소드는 캐싱되어 있는 범위인지 확인한 후 캐싱된 값을 반환하지만 ZERO 는 바로 캐싱된 값을 반환하기 때문이다.

2024-09-15 · 1 min · 17 words

BDD

목표 BDD가 무엇인지 이해한다. BDD의 장점을 이해한다. BDD의 활용 예(Mockito)를 알아본다. BDD란 정의 TDD 중 하나로, TDD를 진행할 때 테스트와 관련된 용어들을 비즈니스 용어로 사용하도록 하는 기법 만들어진 배경 BDD 개념을 처음 고안한 Daniel Terhorst-North의 블로그: https://dannorth.net/introducing-bdd/ 기존에 TDD를 진행할 때, 테스트 코드의 모든 영역에 test라는 단어가 들어갔다. class: CustomerLookUpTest method: testFindsCustomerById(), TestFailsForDuplicateCustomers() 테스트 코드를 문서처럼 사용하기 위해 test라는 단어를 제거하고, 비즈니스 도메인의 용어를 사용하는 문장을 작성하도록 변경했다. class: CustomerLookUp method: findsCustomerById(), failsForDuplicateCustomers() 이 기법을 사용하다보니 아래와 같은 관습을 갖기 시작했다....

2024-09-15 · 2 min · 344 words

batch update

목표 한꺼번에 다수의 row를 업데이트 해야될 때, 하나씩 update 쿼리를 보내면 부하가 많이 발생할 수 있다. mybatis에서 batch update 방법을 알아본다. 방법 SqlSessionFactory를 통해 SqlSession을 생성하고 flush와 commit을 한다. sqlSessionFactory.openSession(ExecutorType.BATCH).use { sqlSession -> val xxxMapper = sqlSession.getMapper(XXXMaper::class.java) xxxs.forEach { xxxMapper.update(it) } sqlSession.flushStatements() sqlSession.commit() } SqlSession 트랜잭션을 commit 또는 rollback하고, Mapper 인스턴스를 획득할 수 있다. auto-commit이 꺼져있다면, commit 메서드를 호출하기 전까지 데이터베이스에 커밋되지 않는다. commit 메서드를 호출하지 않고 SqlSession이 닫힌다면 롤백된다. sqlSessionFactory....

2024-09-15 · 1 min · 82 words

AWS 보안 그룹에 내 IP를 추가할 때, 유동 IP면 어떡하지

기본적으로 IP 임대주기는 10분이지만 디바이스를 끄지 않으면 임대하고 있는 IP 계속 유지한다. 따라서 공유기에 물려있으면 IP가 바뀌는 경우가 드물다. 참고 자료 https://studyforus.tistory.com/137

2024-09-15 · 1 min · 22 words

AUTO_INCREMENT 1로 초기화 하기

ALTER TABLE tablename AUTO_INCREMENT = 1 https://stackoverflow.com/questions/8923114/how-to-reset-auto-increment-in-mysql

2024-09-15 · 1 min · 7 words

AssertJ 정확히 두 리스트가 같은지 확인

assertThat(a).hasSize(b.size()).hasSameElementsAs(b); hasSameElementsAs 는 b가 가지고 있는 요소들을 a가 전부 가지고 있는지 확인한다. 하지만 a가 중복된 값을 가지고 있다면 b가 하나만 가지고 있어도 통과가 되기 때문에, hasSize()로 크기 체크도 해야된다. https://www.baeldung.com/java-assert-lists-equality-ignore-order

2024-09-15 · 1 min · 30 words

Array 값 초기화 하기

고정된 크기의 배열을 선언하고, 전부 같은 값으로 초기화 해야되는 상황이 있었다. loop문을 통해서 모든 요소를 초기화하는 방법도 있지만, Arrays 에 이를 이미 구현해둔 내용이 있다. Clazz[][] board; Arrays.fill(row, new Clazz()); 내부 코드를 보면, 우리가 평소에 사용하는 기법대로 구현되어 있다. 참고 자료 https://stackoverflow.com/questions/7118178/arrays-fill-with-multidimensional-array-in-java#comment69858755_7118178

2024-09-15 · 1 min · 42 words

Apache 시작하기

설치 설치 과정은 따로 사내 문서에 없어서 공식 문서를 보면서 진행했다. 소스 코드 다운로드 및 압축 해제 wget https://dlcdn.apache.org/httpd/httpd-2.4.54.tar.gz gzip -d httpd-2.4.54.tar.gz tar xvf httpd-2.4.54.tar 다운로드 파일 경로는 아래 링크에서 확인이 가능하다. https://httpd.apache.org/download.cgi 빌드 cd httpd-2.4.54.tar ./configure 만약 설치 경로를 변겅하고 싶다면, -prefix 옵션으로 변경이 가능하다. (기본값 ‘/usr/local/apache2’) https://httpd.apache.org/docs/trunk/programs/configure.html 트러블슈팅 빌드를 시도하면 APR not found, APR-util not found, pcre-config for libpcre not found 등의 문제가 발생한다. 아래 링크를 통해서 해결할 수 있었다....

2024-09-15 · 3 min · 526 words

Apache 동작 방식

배경 Apache를 띄우고, mod_jk를 이용해 애플리케이션 서버와 연동하는 과정에서 계속 문제가 발생했다. 아무래도 Apache 동작 방식에 이해가 필요하다고 느껴져 간단하게 정리해본다. Apache의 용도나 웹서버의 역할은 다루지 않는다. Virtual Host Apache는 하나의 서버에서 여러 개의 웹사이트를 호스팅할 수 있다. Name-based Virtual Host 하나의 IP주소로 여러 개의 host를 가진다. NameVirtualHost로 이를 명시할 수 있고, ServerName을 통해 이름을 구분한다. httpd.conf 예시 NameVirtualHost *:80 <VirtualHost 192.168.0.108:80> ServerAdmin webmaster@example1.com DocumentRoot /var/www/html/example1.com ServerName www.example1.com </VirtualHost> <VirtualHost 192....

2024-09-15 · 1 min · 203 words

Apache POI 간단 사용법

목표 Apache POI가 무엇인지 이해한다. Apache POI를 통해 엑셀 파일을 읽고 쓰는 방법을 이해한다. Apache POI 엑셀 파일을 읽고 쓸 수 있도록 Java API를 제공해주는 라이브러리 사용하기 위해선 아래와 같이 의존성을 추가해줘야된다. <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>${apache.poi.version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${apache.poi.version}</version> </dependency> excel 파일 읽기 inputStream을 통해 Workbook을 만든다. Workbook 에서 getSheetAt()을 통해 원하는 sheet을 선택할 수 있다. getRow()와 getCell() 을 통해 원하는 셀의 값을 읽을 수 있다. @Test fun `when file is read then content is correct`() { val inputStream = this::class....

2024-09-15 · 1 min · 178 words

Apache (13)Permission denied 문제

문제 상황 Apache에서 js나 css 파일 요청을 받으면 permission denied로 403 Forbidden 응답을 보내는 문제는 문제가 발생했다. 해결 방법 mac에서 사용할 경우 추가적인 설정이 필요하다. System Preferences => Security & Privacy => Full Disk Access httpd에 접근 권한 부여 참고 자료 https://stackoverflow.com/questions/58455332/apache-gives-access-denied-on-macos-catalina

2024-09-15 · 1 min · 42 words

Active Directory의 기본 개념

Active Directory 란 규모가 있는 회사의 네트워크 상황을 Windows Server에 구현하기 위한 기술 네트워크 상으로 나눠져 있는 여러 자원을 중앙 관리자가 통합하여 관리하여, 본사 및 지사의 직원들은 자신의 PC에 모든 정보를 보관할 필요가 없어짐 용어 정리 Directory Service: 분산된 네트워크 관련 자원 정보를 중앙 저장소에 통합시켜 놓은 환경. Active Directory: Directory Service를 Windows Server에서 구현한 것 AD DS(Active Directory Domain Service): 컴퓨터, 사용자, 기타 주변 장치에 대한 정보를 네트워크 상에 저장하고 이러한 정보들을 관리자가 통합하여 관리하도록 해줌....

2024-09-15 · 6 min · 1093 words

9663

편집 시간: 2022년 2월 16일 오후 7:38 코드 Algorithm/9663.py at main · Junroot/Algorithm 풀이 재귀함수를 이용해서 모든 경우의 수를 탐색하면 된다. 퀸을 둘 때 대각선 방향의 인덱스 범위를 계산하는데 어려움을 겪었다.

2024-09-15 · 1 min · 31 words

9466

편집 시간: 2022년 3월 23일 오후 10:19 코드 Algorithm/9466.py at main · Junroot/Algorithm 풀이 사이클이 존재하는지 확인하는 과정이 필요했다. 서로소 집합을 사용해서 사이클이 존재하는지 확인했다. 선호하는 학생을 나타내는 구조를 방향 그래프로 그렸을 때 자신이 방향을 따라 갔을 때 최종적으로 가리키게 되는 숫자를 parent라고 정의한다. 배열을 이용해서 parent를 관리하다가, parent가 자기 자신이라면 사이클이 발생한 것이라고 확인할 수 있다. 다른 풀이 위상 정렬을 이용해서도 사이클을 구할 수 있다. import sys from collections import deque input = sys....

2024-09-15 · 1 min · 141 words