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"
로 설정이 있다면 다른 요청메소드로 요청처럼 되도록 꼼수 방법을 사용함
- 실질적으로 post로 요청하지만 input 태그 속성값
<!-- 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