일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이진탐색
- eager
- 다대다
- JPQL
- 다대일
- CHECK OPTION
- 일대다
- SQL프로그래밍
- 힙
- exclusive lock
- 스프링 폼
- PS
- shared lock
- 유니크제약조건
- 스토어드 프로시저
- querydsl
- 비관적락
- 연관관계
- 지연로딩
- 즉시로딩
- 백트래킹
- FetchType
- dfs
- execute
- BOJ
- 동적sql
- 데코레이터
- 연결리스트
- 낙관적락
- fetch
- Today
- Total
목록Spring (90)
흰 스타렉스에서 내가 내리지
# 공통 관심 사항 - 상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성하면, 등록/수정/식제/조회 등등 상품 관리의 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인해야 한다. 이 때 발생하는 문제는, 로그인과 관련된 로직이 변경될 때이다. 작성한 모든 로직을 다 수정해야 할 수도 있다. → 실제로 내가 진행한 ㅌㅌ 프로젝트에서, 모든 API 경로에 대해서 가장 첫번째로 있는 코드는 헤더에 담긴 토큰으로 사용자를 불러오는 것이다. 이는 심각한 코드 중복이라고 생각한다. - 애플리케이션 여러 로직에서 공통으로 관심이 있는 것을 공통 관심사(cross-cutting concern)라고 한다. 예를 들어, 여러 로직에서 공통으로 인증에 대해서 관심을 가지고 있다. - 이러한 공통 관심사는 ..
# 쿠키의 2가지 종류 1. 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지 2. 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시 까지만 유지 # refreshToken은 httpOnly쿠키로 셋팅하고 accessToken은 json으로 응답을 리턴하는 코드 @PostMapping(value = "/api/v1/authenticate") public ResponseEntity createAuthenticationToken(@RequestBody JwtRequest authenticationRequest, HttpServletResponse response) throws Exception{ authenticate(authenticationRequest.getUsername(),authentica..
- 지표(metric), 추적(trace), 감사(auditing), 모니터링 스프링부트가 제공하는 액추에이터는 위 프로덕션 준비 기능을 매우 편리하게 사용할 수 있는 다양한 편의 기능을 제공함. 프로메테우스, 그라파나 같은 최근 유행하는 모니터링 시스템과 매우 쉽게 연동할 수 있는 기능 제공 implementation 'org.springframework.boot:spring-boot-starter-actuator' http://localhost:8080/actuator 경로를 통해 기능을 제공한다. /actuator/health 경로에 접속하면 health 결과를 제공한다. 액츄에이터가 제공하는 수많은 기능을 웹 환경에서 보이도록 노출하려면, * 액츄에이터 기능을 웹에 노출 management: en..
설정값이 아니라 각 환경마다 서로 다른 빈을 등록해야 한다면? @Configuration public class PayConfig { @Bean @Profile("default") public LocalPayClient localPayClient(){ log.info("LocalPayClient 빈 등록"); return new LocalPayClient(); } @Bean @Profile("prod") public ProdPayClient prodPayClient(){ log.info("ProdPayClient 빈 등록"); return new ProdPayClient(); } } @Profile 애노테이션을 사용하면 해당 프로필이 활성화된 경우에만 빈을 등록한다. @Component @Required..
어떤 변수가 1부터 99 까지 범위의 값만 가져야 한다면? 이메일을 외부 설정에 입력했는데, 이메일 형식에 맞지 않는다면? Java에서는 java bean validation 이라는 표준 검증기가 제공된다. build.gradle 에 다음 의존성을 추가한다. implementation 'org.springframework.boot:spring-boot-starter-validation' @ConfigurationProperties 에 관한 내용은 이전 글에서. @Getter @ConfigurationProperties("my.datasource") @Validated public class MyDataSourcePropertiesV3 { @NotEmpty private String url; @NotEmp..
외부 설정 묶음을 객체로 변환할 수 있다. 이를 타입 안전한 설정 속성 이라 한다. 객체를 사용하면 타입을 사용할 수 있다. 따라서 실수로 잘못된 타입이 들어오는 문제도 방지할 수 있고, 객체를 통해서 활용할 수 있는 부분들이 많아진다. # application.yml my: datasource: url: local.db.com username: dabin password: heyDB etc: max-connection: 1 timeout: 3400ms options: CACHE,ADMIN # MyDataSourcePropertiesV1.java @Data @ConfigurationProperties("my.datasource") public class MyDataSourcePropertiesV1 { p..
@Slf4j @Configuration public class MyDataSourceValueConfig { @Value("${my.datasource.url}") private String url; @Value("${my.datasource.username}") private String username; @Value("${my.datasource.password}") private String password; @Value("${my.datasource.etc.max-connection}") private int maxConnection; @Value("${my.datasource.etc.timeout}") private Duration timeout; @Value("${my.datasource.et..
개발용 설정 파일: application-dev.properties 운영용 설정 파일: application-prod.properties 빌드 시점에 개발, 운영 설정 파일을 모두 포함해서 빌드한다. spring.profiles.active 외부 설정에 값을 넣으면 해당 프로필을 사용한다고 판단한다. 예) - spring.profiles.active=dev - dev 프로필이 활성화 되었다. - application-dev.properties 를 설정 데이터로 사용한다. - spring.profiles.active=prod - prod 프로필이 활성화 되었다. -application-prod.properties 를 설정 데이터로 사용한다. 실행 IDE에서 커맨드 라인 옵션 인수 실행 → --spring...
이 Configuraiton을 상황에 따라서 등록을 할 건지 말 건지를 결정 @Configuration @Conditional(MemoryCondition.class) public class MemoryConfig { jar 파일 실행시 -Dmemory=on 추가해주면 Configuration 통과, 없으면 통과 x -Dxx=xx는 환경변수를 추가해주는 역할. 근데 아래랑 똑같다. → 환경정보가 memory=on 이라는 조건에 맞으면 동작하고, 그렇지 않으면 동작하지 않는다. ㄷ
프로젝트 폴더로 들어가서 아래와 같은 명령어로 빌드를 시작한다. ./gradlew clean build 이후 프로젝트 폴더에서 ./build/libs 폴더로 들어가면, boot-0.0.1-SNAPSHOT.jar 파일이 만들어진 것을 확인할 수 있다. 이 빌드된 jar 파일을 아래 명령어로 실행을 하면, 우리 스프링부트 프로젝트를 실행할 수 있다. java -jar boot-0.0.1-SNAPSHOT.jar ++백그라운드 실행nohup java -jar boot-0.0.1-SNAPSHOT.jar & ++아까 폴더에 boot-0.0.1-SNAPSHOT-plain.jar 파일도 있었는데, 이는 우리가 개발한 코드만 순수한 Jar로 빌드한 것이라 무시하면 된다. 그냥 boot-0.0.1-SNAPSH..