TIL - 0516

Time BaseEntity 만들기 - 생성시간, 수정시간 기록 자동화

  • Entity 클래스: 데이터베이스 테이블과 연결되는 클래스
  • Entity 객체: 테이블의 레코드, 객체지향적으로 생각하기(인스턴스)
  • Entity 중 생성일 - 수정일이 필요한 Entity가 있을텐데, 클래스마다 정의하지않고 상속관계 활용하기
@Getter
@MappedSupperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class TimeEntity {
	
	@CreateDate
	private LocalDateTime createdDate;
	
	@LastModifiedDate
	private LocalDateTime modifiedDate;	
}


@NoArgsConstructor
@Getter
@Setter
@ToString
@Entity
public class Question extends TimeEntity {

}
  • @MappedSupperclass : 여러 엔티티의 공통된 상태값이라는 설정을 하는 어노테이션
  • @EntityListeners(AuditingEntityListener.class) : 해당 엔티티 객체가 생성 - 수정 시점을 트래킹하기위해 리스너를 달아놓음
    • Auditing : 사전적 의미로 “감시하다”, 스프링에서는 어노테이션으로 엔티티를 생성하거나 변경하는 시점을 추적할 수 있도록 기능을 지원함
  • abstract : 해당 엔티티로만 생성되지못하도록

Repository(DAO) 테스트 코드 작성하기

  • 기존 자바 코드 테스트와는 달리 SpringBoot 어플리케이션이 동작하는 것 위에서 테스트가 진행되어야하므로 어노테이션을 붙임
    • SpringRunner 클래스명은 SpringJUnit4ClassRunner의 alias, JUnit4 기반 테스트를 쉽게 설정하기위한 어노테이션에 사용됨
    • SpringRunner
    • SpringBoot Test docs

@RunWith(SpringRunner.class)
@SpringBootTest
public class QuestionRepositoryTest {
	
	@Autowired
    private QuestionRepository questionRepo;

    @After
    public void clean() {
        questionRepo.deleteAll();
    }

    @Test
    public void enroll_timestamp() {
        LocalDateTime now = LocalDateTime.now();
        questionRepo.save(
                Question.builder()
                        .writer("colin")
                        .title("첫 글")
                        .contents("안녕하세요")
                        .build()
        );
        Question question = questionRepo.findById(1L).get();
        assertTrue(now.isBefore(question.getCreatedDate()));
        assertTrue(now.isBefore(question.getModifiedDate()));
    }
}

HTTP 메소드 PUT, DELETE 사용하기

  • html이 get과 post 메소드만 지원하기때문에 put, delete를 사용하기위해서는 스프링에서 제공하는 방법을 사용하면 됨
    • 실질적으로 post로 요청하지만 input 태그 속성값 name="_method"로 설정이 있다면 다른 요청메소드로 요청처럼 되도록 꼼수 방법을 사용함
<!-- html tag -->
<form action="/users/" method="post">
	<input type="hidden" name="_method" value="put"/>
</form> 


<!-- controller -->
@PutMapping("/{id}")
public void update(@PathVariable("id") Long id, User updateInfo) {
	
}
  • spring은 따로 설정해줘야할 것이 있지만 spring-boot는 설정이 기본으로 되어있어서 따로 설정할 것은 없음
  • 일종의 약속된 플레이 : input name

리눅스랑 친해지기

쉘스크립트 만들기

  • 쉘 명령어 모음 : OS에 명령
  • 연습삼아 스크립트 짜보기
    • 첫 줄에는 반드시 해당 스크립트를 번역 - 실행 시킬 쉘프로그램 지정이 필요함 : 약속!
#!/bin/zsh
if [ -d bak ]; then
	mkdir bak
fi

cp ./*.log bak

권한 시스템

  • 리눅스는 다중사용자 시스템으로 하나의 컴퓨터에 여러 사용자가 사용할 수 있음
    • 다중사용자 시스템 단점 : A 사용자가 만든 파일에 대해서 접근, 수정, 실행, 삭제가 가능함
    • 이러한 단점을 없애기 위해 권한 시스템이 있음
  • 권한 시스템 : 3분류로 나눔 - 해당 사용자, 해당 사용자가 속한 그룹, 다른 사용자
    • 권한 종류 : 읽기(r), 수정(w), 실행(x)
  • 권한 변경하기 : chmod
    • 문자와 기호 조합 사용 : u(해당 사용자), g(해당 사용자가 속한 그룹), o(다른 사용자) (+, -, =) r(read), w(write), x(execute)
    • 8진법 사용 : 2^0/2^1/ 2^2(실행/쓰기/읽기)로 나눔 합쳐서 777(해당 사용자, 해당 사용자가 속한 그룹, 다른 사용자)
$ chmod u+x go-x $TARGET 
$ chmod 755 $TARGET