목록전체 글 (323)
삶 가운데 남긴 기록 AACII.TISTORY.COM
JDK 설치 오라클 사이트에서 JDK를 다운받아서 설치합니다. 여기서는 JDK11을 기준으로 합니다. 설치한 후에는 환경 변수에서 JAVA_HOME 을 등록하고 JDK가 설치된 경로를 지정해줍니다. 환경변수의 PATH에는 %JAVA_HOME%bin 으로 저장합니다. 설정이 완료된 뒤에는 명령프롬프트(cmd)에서 javac 명령어를 입력해서 컴파일러가 정상 실행되는지 확인합니다. 이클립스(STS, 전자정부프레임워크) 설정 Lombok 라이브러리의 안정성 때문에 이클립스를 JRE환경이 아닌 JDK환경에서 구동되도록 설정을 변경합니다. eclipse.ini(혹은 sts.ini) 파일의 상단에 아래와 같은 내용을 추가합니다. (윈도우 경로 기준) -vm JDK설치경로\bin\javaw.exe 이클립스 한글 인코..
관점 지향(Aspect Oriented Programming) 로깅 보안/인증 트랜잭션 리소스 풀링 에러 검사 / 처리 정책 멀티 스레드 안전 관리 데이터 영속처리 위 항목들은 소프트웨어 개발 시 발생하는 공통적인 문제들입니다. 핵심 관심(core concern)은 업무 로직을 말합니다. 횡단 관심(cross-cutting concern)은 위에서 언급한 로깅이나 보안등 공통 시스템 로직을 말합니다. 이처럼 업무 기능과 시스템 기능간에 결합성을 제거하도록 분리하여 작성하는 방법을 관점 지향이라고 합니다. 관점 지향 용어 advice : 관점이 언제, 무엇을 하는지를 정의 joinpoint : 관점이 실행될 수 있는 위치들 pointcut : joinpoint 중에서 advice 하는 위치(어디서) asp..
Spring bean을 XML로 관리 할 수 있지만, bean객체가 많아지면 XML 설정도 많아져 불편해집니다. 그래서 나온 방법이 auto wiring(bean 연결) 과 annotation wiring(bean 연결) 입니다. annotation wiring 어노테이션 와이어링을 사용하기 위해서는 context를 관리하는 XML 설정 파일에 context 네임스페이스를 추가해야 합니다. 이렇게 패키지 이름을 component-scan 으로 지정해주면 Spring이 자동으로 bean을 스캔해서 발견해줍니다. @Autowired Spring의 기본 의존성 주입을 위한 어노테이션입니다. 필드, 생성자, setter 메서드에 사용할 수 있습니다. 타입 와이어링을 시도 한 후 실패하면 이름 와이어링으로 후보 ..
의존성 주입(Dependency Injection) 의존성 주입은 디자인 패턴으로 제어의 역전(Inversion of Control)을 구현하기 위한 방법중의 하나입니다. 객체를 직접 생성하는 것이 아닌 외부에서 생성하여 주입 받는 방법을 말합니다. 클래스들은 서로 연결되어 있어서 의존성(dependency)이 강합니다. 그래서 인터페이스를 통해 클래스 사이의 직접적인 의존성을 제거해서 서로 느슨하게 결합하도록 유도하는 것입니다. 그래서 요구사항이 변경되어 클래스를 수정하게 될 때 의존하고 있던 클래스에 영향을 끼치지 않으면서 클래스를 수정할 수 있게 해주는 것입니다. IoC 컨테이너는 시스템의 모든 인스턴스 객체를 관리하고 인스턴스 객체들 사이의 의존성이 있으면 주입하는 일을 담당합니다. 일반적인 자바..
페이징 처리시 게시물 10개를 기준으로 10페이지씩 표기하는 방법을 기준으로 개발하는 것이 보통입니다. endPage endPage = (int)(Math.ceil(cri.getPage() / (double)displayPageNum) * displayPageNum); cri.getPage()는 현재 페이지 번호를 의미합니다. displayPageNum은 화면 하단에 페이징 버튼의 갯수를 의미합니다. 현재 페이지가 3일 때 : Math.ceil(3/10)*10 = 10 즉, endPage는 10입니다. 현재 페이지가 20일 때 : Math.ceil(20/10)*10 = 20 즉, endPage는 20입니다. 현재 페이지가 21일 때 : Math.ceil(21/10)*10 = 30 즉, endPage는 3..
Spring bean 스프링 프레임워크가 관리하는 클래스들의 인스턴스 객체들을 Spring bean 이라고 합니다. Spring bean 설정 방법 XML로 설정 할 때에는 아래 처럼 설정합니다. 어노테이션을 이용해서 설정할 때에는 아래처럼 클래스 위에 @Configuration 어노테이션을 설정하고, 메서드 위에는 @Bean 어노테이션을 설정해 줍니다. 패키지 경로는 net.aacii.app 으로 가정합니다. import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import net.aacii.app.service.SampleService; import ne..
MySQL 8 이상 MySQL 8은 기본 character set 과 collation 이 utf8mb4와 utf8mb4_0900_ai_ci 이므로 별도 utf8설정이 필요하지 않습니다. MySQL의 utf8은 3byte 문자 밖에 표시하지 못하므로 utf8mb4 즉, 4byte 인코딩을 사용할 것을 권장합니다. (MySQL 5.5.3 이상 필요) MySQL 5.7 MySQL 5.7 이하는 명시적으로 설정하지 않으면 latin1 이 기본 캐릭터 셋입니다. mysql 콘솔에 접속 후 mysql -u root -p status으로 server characterset 등을 확인할 수 있습니다. status; Charaterset 설정 CentOS 설정 파일: /etc/my.cnf Ubuntu 설정 파일: /e..
RAID(Redundant Array of Independent Disks) 여러개의 디스크를 하나의 디스크 처럼 사용하는 방식 Linear RAID 2개 이상의 디스크를 1개의 볼륨으로 사용합니다. 첫 번째 디스크부터 데이터를 저장한 후 꽉차면 두번째 디스크에 데이터를 저장하는 방식입니다. 그래서 각 디스크의 용량이 달라도 문제없이 사용할 수 있습니다. RAID 0 Linear RAID와는 다르게 데이터를 각 디스크에 분할하여 동시에 저장하는 방식입니다. 동시에 저장하기 때문에 저장 속도가 획기적으로 향상됩니다. 단점은, 여러개의 디스크 중에서 한개가 고장나면 모든 데이터를 잃어버린다는 점입니다. 그래서 속도는 빨라야하지만 잃어버려도 큰 문제가 없는 데이터를 저장할 때 적절한 방식입니다. RAID 1 ..
IDE 장치와 SCSI 장치 IDE는 메인보드 슬롯에 각각 2개씩 총 4개 장착할 수 있습니다 표기는 IDE 0:0, 0:1, 1:0, 1:1처럼 표기합니다. 실제 컴퓨터에 CentOS가 설치되어 있다면 실제 물리 하드디스크를 장착하겠지만, VMware는 기본적으로 IDE 1:0 에 CD/DVD 장치를 장착해 줍니다. SCSI는 총 16개의 장치를 연결할 수 있습니다. 여기서 우리는 VMware에 하드디스크를 SCSI로 추가해볼 것입니다. VMware에서는 총 60개 까지 하드디스크를 사용할 수 있습니다. 리눅스에서는 SCSI디스크 이름을 /dev/sda 라고 부릅니다. 추가로 디스크를 장착하면 /dev/sdb, /dev/sdc, /dev/sdd 등으로 부르고 논리적인 파티션으로 나눠진 것은 /dev/s..
pid 메모리에 로딩된 프로세스를 구분해주는 id 값입니다. kill 명령어와 pid 값으로 강제로 종료할 수 있습니다. 다만 부모 프로세스와 자식 프로세스로 종속되어 실행되는 프로세스들도 있으므로 주의해야 합니다. jobs jobs 명령어를 실행하면 현재 실행되는 백그라운드 프로세스의 번호를 출력해줍니다. ps 현재 프로세스 상태를 확인하는 명령어 입니다. kill 프로세스를 강제 종료하는 명령어 입니다. -9 옵션과 함께 사용하면 무한 루프를 도는 프로세스도 강제 종료 됩니다. pstree 부모 프로세스와 자식 프로세스의 관계를 트리 형태로 보여주는 명령어 입니다. 단축키 stty -a 하면 정의된 문자를 볼 수 있습니다. 인터럽트 : ctrl-c 강제종료 : ctrl-\ end of file : c..
네트워크 장치 이름 확인 centOS 7은 네트워크 장치(랜카드) 이름을 ens32 또는 ens33 으로 인식합니다. ifconfing ens33 nmtui 이 명령어는 Network Manager Text User Interface로 네트워크 작업 대부분을 할 수 있습니다. ip설정, 서브넷 마스크, 게이트웨이, dns 정보 들을 편집 할 수 있습니다. systemctl start/stop/restart/status network nmtui 명령을 통해 편집할 내용을 적용할 때 쓰는 명령어 입니다. ifup 장치이름 여기서 장치이름은 위에서 언급했던 ens32 또는 ens33을 말합니다. 해당 네트워크 장치를 작동시켜주는 명령어 입니다. ifdown 장치이름 ifup과 반대로 해당 네트워크 장치를 끄는..
java.lang.ClassNotFoundException: sun.misc.GC 이클립스에서 톰캣을 실행할 때 가끔 볼 수 있는 이 오류는 톰켓 버전과 JDK 버전이 맞지 않을 때 발생하는 오류입니다. 예를 들어 Tomcat 8을 사용중일 때 JDK가 11이 설치되었을 때 발생할 수 있습니다. sun.misc.GC는 java9부터 제외되었기 때문입니다. PC에 JDK8과 JDK11이 둘 다 설치되어 있다는 가정하에 이클립스에서 JDK 버전을 바꿔주는 방법으로 해결합니다. 이클립스 > Window > Preferences > Java > Installed JREs 위 화면에서 우측 Search... 버튼을 눌러 JDK8이 설치된 경로를 찾은 후에 설정을 체크하면 오류가 해결됩니다. 만약 프로젝트가 다양해..
1. 이클립스 > Window > Preferences 2. Java > Code Style > Code Templates 에서 Comments 항목을 펼치면 여러가지 항목이 나오는데 그 중에서 Types: 클래스 상단에 적용되는 주석 Methods: 메서드에 적용되는 주석 위 항목들을 클릭하고 Edit 버튼을 눌러 자주 사용하는 2개만 수정해 봅시다. Types 예제 /** * @author : ${user} * @date : ${date} * @description : */ Methods 예제 /** * @author : ${user} * @date : ${id:date('YYYY-MM-dd')} * @description : * ${tags} */ 위처럼 Edit 한 후 apply를 눌러 적용합니다..
cron(주기적으로 반복되는 일을 자동으로 실행) at(일회성 작업 예약) crontab 명령어 형식 분 시 일 월 요일 사용자 실행명령 매월 1일 아무요일 새벽 5시 root 사용자의 home 디렉토리를 backup 디렉토리에 복사(백업) 하는 예제 00 05 1 * * root cp -r /home /backup 매월 15일 새벽 3시 에 /home 과 그 하위 디렉터리를 /backup 디렉터리에 백업하는 예제 기본적으로 crond가 고동되어 있는지 확인해봅니다. systemctl status crond vim 에디터로 crontab을 편집 합니다. vi /etc/crontab 편집 모드 vim 에디터에서 맨 아래에 아래 처럼 등록하고 명령모드에서 wq! 로 저장하고 vim을 빠져나갑니다. 00 3 ..
Bcrypt 사용 예 maven이나 gradle로 관련 라이브러리를 추가 후 아래와 같이 사용합니다. String pw = "pw1234!"; //실제 데이터베이스에 저장될 패스워드의 해시값 String hashed = BCrypt.hashpw(pw, BCrypt.gensalt()); //입력된 패스워드와 해시되어 저장된 패스워드를 비교 boolean isValid = BCrypt.checkpw(pw, hashed); salt 해시된 패스워드를 저장한 테이블인 Rainbow Table 을 이용한 해킹 공격을 막기 위하여 랜덤 생성한 salt값을 더한 뒤 다시한 번 해시 값을 얻어서 Rainbow Table 을 이용한 공격을 막습니다. Bcrypt 해시 값의 예 $2a$10$vI8aWBnW3fID.ZQ4/..