
1. ssh-copy-id 유저@IP
- 기존에는 서버를 접속하고, 클라이언트의 공개 키를 접속하려는 서버의 authorized_keys에 복사해서 넣어주었다.
ssh-copy-id ubuntu@13.132.24.214를 이용하면 클라이언트의 공개키를 서버의 authorized_keys에 자동으로 추가할 수 있다.
2. 스프링 시큐리티 필터 체인 환경 변수 읽어 오기
- 필터에서 환경변수를 못 읽어 런타임에 해당 변수가 널이라는 오류가 발생했다.
@Value("${jwt.secretKey}")
private String jwtSecretKey;
- 필터가 아닌 컨트롤러나 서비스단에서는 위에 처럼 읽는게 문제가 없었지만, 필터에서 발생하는 문제였다.
public JwtUtil(@Value("${jwt.secretKey}")String secret) {
}
생성자 주입 방식으로 환경 변수를 주입하게 되면 정상적으로 동작한다. filter에서는 스프링 빈을 가져올 때 DelegatingFilterProxy를 통해 가져오는데 이 과정에서 필드를 초기화하지 않고 가져온다음 사용할 때 초기화하는 것 같았다. 그래서 생성자로 필드를 주입하면 빈을 가져올 때 주입이 되는 것으로 이해했다.
3. 자바 List Api
1) ConcurrentModification 예외
- 자바 리스트를 순회하면서 원소를 삭제했을 때
java.util.ConcurrentModificationException 예외가 발생한다. Iterator를 명시적으로 사용해야 순회하면서 구조를 변경해도 이런 예외가 발생하지 않는다. C++에서는 for (auto e : list)로 해도 오류가 나지 않았는데 아마 기본적으로 iterator 연산을 지원하기 때문으로 생각한다.
for (var e : list){
if (e < k){
lessThanK.add(e);
list.remove(e);
}
}
Iterator<Integer> it = list.iterator();
while (it.hasNext()){
int num = it.next();
if (num < k) {
lessThanK.add(num);
it.remove();
}
}
2) Iterator와 ListIterator 차이
- Iterator의 시작 부분과 끝 부분은 원소를 가리키지 않고, 시작 부분과 끝 부분은 다른 더미로 채워져 있다. 궁금해서 테스트해봤다.
ListIterator<Integer> left = list.listIterator();
ListIterator<Integer> right = list.listIterator(list.size());
System.out.println("left = " + left);
System.out.println("right = " + right);
System.out.println("right.previous() = " + right.previous());

- Iterator와 달리 ListIterator는 역방향 순회(previous)도 가능하고, 인덱스로 접근도 가능하다.
4. Mysql 문자 인코딩 설정하기
1) Mysql 문자 인코딩 설정 상태 보기
SHOW VARIABLES LIKE 'character_set%';
2) Mysql 문자 인코딩 설정 변경하기
SET character_set_client = 'utf8mb4';
- 위처럼 변경하면, mysql을 다시 접속한 순간 기존 설정으로 초기화된다.
3) Mysql 문자 인코딩 영구적으로 변경하기
my.cnf 파일
- Mysql 및 모든 버전에서 사용할 수 있는 기본 구성 파일이다.
- Mysql이 시작될 때 my.cnf에 존재하는 다양한 매개변수가 Mysql에 로드된다.
- mySQL은 일반적으로 다음 위치 중 하나에서 파일을 찾은 후 파일에서 설정을 로드
- /etc/my.cnf /etc/mysql/my.cnf /opt/homebrew/etc/my.cnf ~/.my.cnf
- my.cnf파일을 아래와 같이 변경한 후 mysql을 재시작하면 변경사항이 적용된다.
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
port = 5000
bind-address = 0.0.0.0 // 외부 접속 허용
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
- my.cnf 파일을 찾기 어렵다면
mysqladmin -help 을 입력한다. brew에 설치한 경로든 직접 설치했든 해당 경로가 나온다.
...
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
