개발

    [Article] Ransomware

    ScanSource suffers a cyberattack | Digital Watch Observatory The attack affected the company's operations in North America and Brazil. dig.watch 미국의 큰 클라우드 기업인 ScanSource가 랜섬웨어 공격을 받았다고 한다. 현재 피해규모를 산정하고 있지만 랜섬웨어 공격을 한 사람을 밝히지 못했다고 한다. 랜섬웨어 공격이란 피해자의 데이터를 암호화하여 '암호화를 풀고싶다면 돈을 내라' 라고 하는것이다. 랜섬웨어는 주로 이메일이나 신뢰하지 않은 링크에서 파일 다운로드와 같은 경로로 공격한다. 랜섬웨어를 방지하려면 다음과 같은 방법이 있다고 한다. (1) 신뢰할 수 없는 링크 클릭 금지 (2) ..

    [Spring Boot] 어노테이션 정리

    @SpringBootApplication Spring Boot를 자동으로 실행시켜주며 @ComponentScan을 통해 Component를 Bean으로 등록시킨다. @EnableAutoConfiguration을 통해 미리 정의해둔 설정파일을 Bean으로 등록시킨다. @ComponentScan @Component, @Service, @Repository, @Controller, @Configuration 이 붙은 빈들을 찾아서 Context에 빈을 등록시켜준다. @Component 생성한 클래스를 Bean으로 등록시킬때 사용한다. @Bean 개발자가 컨트롤 불가능한 외부 라이브러리를 Bean으로 등록할때 사용한다. @Controller Controller로 사용되는 어노테이션이다. @Service 비즈니스..

    [Spring Boot] Setter vs Constructor vs Builder

    Spring boot로 코딩을 하다보면 객체의 값을 변경해줘야 할때가 있다. 방법은 크게 Setter, 생성자, Builder 3가지로 나뉜다. 1. Setter (자바빈즈 패턴) 자바 개발자들은 setter를 지양하라고 한다. 그럼 왜 setter를 지양하고 새로 객체를 생성해야 하는 생성자나 Builder를 사용해야 할까.. (1) 일관성 먼저 setter를 사용하면 언제든 값을 바꿀수 있다는 말이 된다. 다시말해 값을 바꿀수 없는 불변한 객체를 만들지 못한다는 말이 된다. (2) 가독성 만약 객체의 속성이 엄청 많아서 엄청나게 많은 setter가 있다고 가정한다. 그러면 객체만다 일일히 setName, setAge, ~~~ 을 계속 해주다보면 코드가 아주 더러워지고 나중엔 빠진 set 메소드를 찾고..

    [Spring Boot] Controller, Service, Repository

    Controller와 Service, Repository는 각각 역할이 있다. 흐름은 위와 같다. 컨트롤러는 client와 소통을 하며 데이터를 받거나 넘겨주고 서비스에서는 비즈니스 로직만을 작성한다. 여기서 Dao가 DB와 연결하며 CRUD를 수행하는데 이를 Repository라고 보면 된다. 1. Controller 가장 큰 역할은 Client와의 소통이다. Client로 부터 받은 데이터를 Service로 넘겨주어 Service가 비즈니스 로직을 수행하도록 한다. 그리고 Service로부터 데이터를 받아 Client로 넘겨준다. @RestController public class PostsApiController { private final PostsService postsService; @Post..

    [Article] 가짜 크립토 월렛

    Review and analysis of fake Trezor cryptowallet Fake hardware cryptowallet, and how bitcoins were stolen from it. www.kaspersky.com 해당 뉴스에서는 오픈소스로 운영되고 있는 Trezor Model T 지갑에 대한 얘기다. 요약하자면 사용자가 Trezor Model T 지갑을 구매함 알고보니 해커가 준비했던 Trezor Model T 지갑이었음. 해커가 준비한 지갑은 처음 구동시 펌웨어 업데이트를 통해 정보를 갈취. 개발자 측에서 이를 방지하여 펌웨어 버전을 띄엄띄엄 만들어버림. 즉, 사용자가 자신의 크립토 자산을 지키기 위해 하드월렛을 구매했지만 오히려 하드월렛이 해킹당하는 상황이다. 해당글에서도 전문..

    [Docker] `error storing credentials - err: exit status 1, out: `pass not initialized: exit status 1: Error: password store is empty. Try "pass init".``

    docker login을 하려고 했는데 에러가 발생했다. login을 하려면 pass라는 과정을 거쳐야 한다고 한다. docker hub와 같은 외부 저장소와 상호작용 하기 위해서는 사용자의 자격 증명을 저장해야 한다고 한다. Linux 환경에서는 도커가 pass 라는 바이너리를 찾는데 이게 없어서 나타나는 오류인 것 같다. docker login docker login: Login to a registry. docs.docker.com pass 를 추가해 주기 위해서는 아래 사이트에 설명이 나와있다. Learning Center and sign in docs.docker.com 공식문서에서는 Docker Desktop을 통해 로그인하는걸 추천한다. gpg --generate-key pass init