일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- AOP
- 자바
- REDIS
- 코드리뷰
- 세션
- 미션
- JPA
- CircuitBreaker
- 스프링부트
- MSA
- 트랜잭션
- Paging
- 의존성
- 프로그래머스
- 우아한세미나
- 우테코
- Spring Batch
- 우아한테크코스
- 서블릿
- 프리코스
- mock
- AWS
- Level2
- 스프링 부트
- Docker
- yml
- JUnit5
- 백준
- 레벨2
- HTTP
- Today
- Total
목록우아한테크코스 4기 (41)
늘
hibernate.ddl-auto 옵션은 Entity객체를 참고하여 애플리케이션 실행 시점에 하이버네이트에서 자동으로 DDL을 만들어주는 옵션이다. JPA 테스트 도중 fk 제약조건이 걸린 엔티티를 생성할 때, 아래 설정처럼 create를 하니 에러가 발생했다. ddl-auto 옵션 create: 기존테이블 삭제 후 다시 생성 + 닫을 때 삭제하지 않는다. create-drop: create와 같으나 종료시점에 테이블 DROP update: 하이버네이트는 주어진 엔티티 구조에 따라서 데이터베이스를 변경한다. validate: 엔티티와 테이블이 정상 매핑되었는지만 확인 none: 어떠한 변화도 주지 않는다.mysql에서 default이다. ddl-auto의 옵션의 시작은 create or update로 시..
@WebMvcTest를 붙이고 테스트를 돌리니 JPA metamodel must not be empty! 와 같은 에러가 발생했다. 이유를 찾아보니 테스트를 돌릴때는 기본적으로 XApplication이 돌면서 작동한다. 따라서 @EnableJpaAuditing을 Application위에 올리면 Jpa관련된 빈들이 올라오기를 요구한다. 이때, mockMvc를 사용한 테스트는 mvc와 관련한 빈들만 찾아서 올리므로 JPA관련 빈을 찾지 못해서 JPA metamodel must not be empty 에러가 발생한다. 해결방법 1. @Configuration 분리 JpaAuditingConfig.java @EnableJpaAuditing @Configuration public class JpaAuditingC..
제이슨의 JPA수업 도중 application.properties의 설정에서 아래와 같은 h2 설정이 있었다. spring.datasource.url=jdbc:h2:~/test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE h2설정할 때, 어쩔때는 h2:mem, h2:tcp였고 이번에는 그냥 h2:~였다. 또한 DB_CLOSE~라는 새로운 이름도 보여서 h2에 대해서 조금 공부해보려고 한다. Connection Modes Embedded mode (local connections using JDBC) Server mode (remote connections using JDBC or ODBC over TCP/IP) Mixed mode (local and remote connect..
제목에 대한 질문에 답을 하지 못했다.이 질문에 대해서 정리를 해보고자 한다. 그전에 트랜잭션이 무엇인지 정리하고 시작하려고 한다. 트랜잭션이란? 데이터베이스에 작용하는 여러 읽기와 쓰기를 수행하는 하나의 작업 단위 트랜잭션 범위 트랜잭션의 범위는 커넥션을 기준으로 한다. 커넥션이 다르다면 6에서 롤백이 일어나면, 3번과 5번에 해당한 쿼리만 롤백이 된다. 즉, 4번에서 쿼리들은 롤백되지 않고 반영이 된다. 다른 말로, 여러 메서드에서 하나의 트랜잭션을 갖고 싶다면 이 여러 메서드들을 하나의 커넥션을 사용하도록 하는 방법이 필요하다. -> 이러한 방법이 트랜잭션 전파를 사용한다. 트랜잭션 전파 보통 스프링에선 @Transactional을 통해 해당 어노테이션이 선언된 내부 메서드들도 한 커넥션에 묶인다...
2022.06.29 우아한테크코스에서 UX 워크샵을 진행했다. 평소 UX에 대한 관심은 있었지만 접해볼 경험이 없었는데 이러한 경험을 하게 되어서 좋았다. 강의형식이 아니라 직접 아이디어를 도출하고 구체화하고 평가하면서 어떻게 하면 user들의 입장에서 생각해 볼수있을지 경험해봤다. 위 사진은 아이디어를 도출하고 어떤 아이디어가 좋은지?평가 하는 방식이라고 한다. wow영역으로 갈수록 좋은 아이디어라고 한다. 참고로 한국인의 경우는 북미쪽 사람들과 경향이 비슷해서 제품의 사용 설명서(튜토리얼) 보다는 직접 사용하면서 경험해보는 성격이 강하다고 한다. 반면에 일본이나 중국은 튜토리얼을 진행하는 이용자가 많으므로 설명서등이 잘 명시되어져 있다고 한다. 1. 고객이 원하는 것에 초점을 맞추자 고객이 싫어하는 ..
1. static vs bean utils와 관련되면 static을 사용할 것이다. 어디서든 재사용 가능하고 도메인 로직에 포함이 되지 않는 기능, 상태를 갖지 않는 클래스 ex) 날짜를 스트링포멧으로 변경 즉, 상태를 갖지않고, 외부 자원에 의존하지 않고 단순히 변환하는 일만을 담당하면 bean으로 등록할 필요가 없다. 의존성관계가 맺어지고 의존성이 필요하다면 bean static 함수 모음 클래스의 모든 함수는 인자가 동일할 경우 항상 동일한 결과를 리턴해야 한다. 이 규칙을 지킬 수 없으면 POJO Bean으로 만들라. 이것이 이뤄지려면 함수 안에서는 외부 자원(Resource)에 대해 하나도 의존하면 안된다는 선결 조건을 충족해야 한다. 싱글톤과 정적 클래스 차이 싱글톤은 인터페이스를 만들수 있어..
1. RestDocs vs swagger 스웨거와는 다르게 프로덕션 코드에 어노테이션을 붙이지 않아서 좋다! 스웨거를 사용하면 뭔가 프로덕션 코드에서 테스트를 위한 코드가 짜여진 느낌?이 든다. 레퍼런스가 많다! - 여러 레퍼런스들을 참고했었는데 자료들이 많아서 쉽게 적용할 수 있다! 운영 코드를 퓨어하게 가져가고 싶다면 레스트 독스를 사용하고 이를 포기하더라도 테스트 코드를 짜고 관리하는 비용을 지불할 경우에는 스웨거를 사용하는 느낌이죠. 2. 잦은 api요청의 영향 API 요청 하나도 내부 서버에서 무거운 로직을 실행하거나 DB를 오래 조회하는 쿼리를 날린다면 성능에 무리가 될 수 있어요. 또한 사용자도 기다리는 시간이 늘어나서 좋지 않은 경험을 하겠죠. 물론 요청의 개수도 성능에 영향을 미쳐요. D..
스프링이 관리할 객체를 어떻게 지정할까? @ComponenetScan이 하위 클래스들을 쭉 훑으면서 @Component로 설정된 빈들을 자바 빈으로 관리하도록 설정한다. 어떤 객체를 스프링이 관리해야할지? 의존성이 있다면 스프링이 관리해주는게 좋다고 생각한다! 스프링이 의존성을 관리해주기 때문이다. 계속 의존성이 연결되는걸 스프링의 빈이 관리해주니 편하다. 예를 들면, spring-boot-starter-jdbc: 의존성을 추가하고 jdbcTemplate을 빈에서 불러오는데 빈으로 의존성이있는 20개 정도가 있다. 이처럼 무수히 많은 의존성들을 스프링이 관리해주기떄문에 좋다. 경험으로는 spark web에서 spring으로 전환하니깐 의존성관리를 해줘서 엄청 편했다! 빈으로 등록하면 자동으로 가져와서 사..
uniq 중복된 문자열을 제거한다. 이때 정렬된 문자열에서 중복되어야만 제거가 된다. 즉, sort | uniq는 거의 세트라고 생각해도 될 것 같다. history 지금까지 사용했던 명령어들을 보여준다. ex) history | grep 'docker' : 이전에 사용했던 docker가 포함된 명령어들 출력 출력된 히스토리 번호 앞에 !를 붙여주면 바로 명령어 사용이 가능하다. & 보통 build/libs에 jar파일이 생성되는데 해당 디렉토리에서 아래와 같이 명령어를 실행해주면 서버에서 jar파일을 돌릴 수 있다. 이때 뒤에 &는 백그라운드로 실행하겠다는 명령어이다. jobs 터미널에서 백그라운드 작업 확인이 가능하다. fg%{jobs번호} fg %1을 통해서 1번 백그라운드 작업을 포워그라운드로 다..
데코레이터 패턴 위와 같이 요금을 측정하는데, 나이와 거리에 따라 요금을 측정한다고 하자. 이때 나이와 거리의 조합에 따라서 요금이 결정된다고 생각했고 데코레이터 패턴을 적용해봤다. public interface Fare { double calculateExtraFare(); } 요금이 계산되는 메서드를 추가해준다. BaseFare public class BaseFare implements Fare{ private final int extraFare; public BaseFare(final int extraFare) { this.extraFare = extraFare; } @Override public double calculateExtraFare() { return extraFare + 1250; } ..