목록Back/Spring (26)
호비시의 끄적끄적
JPA는 무엇인가? JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다. 그렇다면 ORM이란? ORM(Object-Relational Mapping)은 객체와 관계형 DB를 매핑한다는 뜻 다시말해 JPA는 자바 ORM에 대한 API 표준 명세이고, 인터페이스의 모음이다. 따라서 구현체가 없고, 사용하기 위해서는 ORM프레임워크를 선택해야한다. 다양한 프레임워크가 존재하지만 가장 대중적인 것은 Hibernate이다. ORM을 만든 이유는 SQL 작성을 편하게 하기 위해서이다. ORM이 없이도 충분히 개발은 가능하다. 하지만 단순하고 반복적인 SQL 작성에 시간이 많이 들고, 실수하기 쉽기 때문에 ORM을 사용한다. 이 ORM 의 표준이 되는것이 JPA이다. JPA가 없었을 때..
우선 AWS ElastiCache를 만들어 줍시다. 생성을 누르면 나오는 기본 설정입니다. 노드 유형을 알맞게 설정해주세요. Redis는 in Memory Cache 이기에 메모리 크기가 큰것이 좋지만 저는 test 겸 작은걸 선택하겠습니다. https://aws.amazon.com/ko/elasticache/pricing/ [관리형 캐싱 서비스 요금 - Amazon ElastiCache 요금 - Amazon Web Services aws.amazon.com](https://aws.amazon.com/ko/elasticache/pricing/) 캐시 노드 유형에 따른 요금입니다. 잘 선택해주세요 고급 Redis 설정에서 서브넷을 새로 생성해주고 가용영역도 배치해줍니다. 나머지 옵션들은 아무것도 수정하지 ..
컴포넌트 스캔과 자동 의존관계 설정 @Component 어노테이션을 붙이면 스프링 빈에 자동 등록된다. @Controller 컨트롤러가 스프링 빈에 자동 등록된 이유는 컴포넌트 스캔 때문이다. @Component 를 포함하는 다음 어노테이션도 스프링 빈에 자동으로 등록된다. @Controller @Service @Repository @Bean에 등록된 인스턴스들은 @Autowired 어노테이션을 붙여서 꺼내 쓸 수 있다. @SpringBootApplication 이라는 어노테이션에 @ComponentScan 이라는 어노테이션이 있는 것을 확인 할 수 있다. @CompoentScan 어노테이션은 기본적으로 같은 패키지의 파일들을 읽어서 Bean에 등록한다. 참고: 스프링은 스프링 컨테이너에 스프링 빈을 등..
일반적으로 사용자가 자신이 필요한 객체를 생성해서 사용한다. 하지만 이것을 일상생활에 대입해 보면 이상한 점을 느낄 수 있다. 이를 일상 생활에 대입해보자. 종이를 자르려고 한다. 그러면 자르기 위한 도구, 가위를 만들어서 사용하지는 않는다. 이미 존재하는 가위를 가져다가 사용할 뿐이다. 이러한 개념을 IoC(Inversion of Control)이라 한다. 이러한 IoC를 적용하기 위해 DI(Dependency Injection)을 사용한다. 외부로부터 메모리에 올라가있는 인스턴스의 레퍼런스를 인터페이스 타입의 파라미터로 의존관계를 설정하는것을 말한다. 스프링에선 IoC라는 용어만 가지고는 개념이 너무 추상적이라 그 핵심을 짚는 용어가 필요했는데, 이때 몇몇 사람들의 제안으로 만든 용어가 바로 DI인 ..
단위 테스트 (Unit Test) 가장 좁은 범위의 테스트이자, 가장 기초적이며 중요한 테스트 DB를 실제로 작동시키지 않고 임의로 만들어서 사용함 장점 하나의 모듈이나 클래스에 대해 세밀한 부분까지 테스트 가능 각 유닛이나 컴포넌트들이 의도한대로 작동하는지 확인해보는 테스트 WhiteBox Test 단점 모듈 간의 상호 작용 검증 못함 코드가 변경되면 테스트가 실패함 컴포넌트가 지나치게 커지면 테스트하는데 어려움 통합테스트 (Integration Test) 실제 객체들로 바꾸었을 때, 시스템이 정상적으로 통합되어 작동되는지 확인하기 위한 테스트 실제 DB와 연결된 Repository를 사용 테스트의 순서를 정할 수 있음(= 시나리오 작성가능) 장점 두 개 이상의 모듈이 연결된 상태를 테스트 @Sprin..
트랜잭션이란 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 말한다. 트랜잭션의 특징 1. 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다. 2. 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다. 3. 하나의 트랜잭션은 Commit되거나 Rollback된다. 트랜잭션 수행 과정 1. 디스크(데이터베이스)에서 A의 은행계좌잔고 값을 메인 메모리로 읽어옵니다. 2. 읽어온 A의 잔고 값에서 10,000을 감소시킵니다. 3. 디스크(데이터베이스)에서 B의 은행계좌잔고 값을 메인 메모리로 읽어옵니다. 4. 읽어온 B의 잔고 값을 10,000 증가시킵니다. 5. A의 계좌 값을 디스크(데이터베이스)에 기록합니..
항해99 Spring 주특기 1주차 개인과제를 하면서 겪은 일이다. 실서버에 올리고 나서 글 작성을 하면 시간이 잘 기록되는 것을 볼 수 있었다. 하지만.... 현재 시각 오후 1시 42분 오후 1시 42분에 작성한 nohup 종료하기 글의 작성시간이 2022-03-22 T 04:42:33 으로 나오고 있었다. 무슨일인가 싶어 ARC로 직접 POST 해본결과 현재시각으로 제대로 나오는 것을 확인해 볼 수 있었다. 이로써 알 수 있는것 1. AWS의 시간이 뭔가 이상하다 2. 1이 아니라면 ubuntu의 시간이 뭔가 이상하다 3. Spring에서 시간설정이 필요하다 둘 중 하나이길 기도하며 구글링 하던 도중 https://ora-sysdba.tistory.com/entry/Cloud-Computing-Am..
항해99 Spring 주특기 1주차 개인과제를 하면서 겪은 문제이다. 초기에 table setting 을 이런식으로 해주고 @Getter @Entity @NoArgsConstructor public class Task extends Timestamped { @GeneratedValue(strategy = GenerationType.AUTO) @Id private Long id; @Column(nullable = false) private String title; @Column(nullable = false) private String author; @Column(nullable = false) private String content; } 데이터를 넣은 후 잘 작동하는 것을 확인했다. 하지만 추후에 co..