Spring

· Spring
💋 문제상황 private String saveFile(final MultipartFile file) { String fileName = UUID.randomUUID() + "_" + file.getOriginalFilename(); final Path path = Paths.get("src", "main", "pdf", fileName); try { Files.copy(file.getInputStream(), path); final Resource resource = resourceLoader.getResource("file:" + path); // TODO: なんで「ファイル」だって return resource.getURI().toString(); } catch (IOException e) { thro..
· Spring
💋 설정 방법 ✔️ 설정파일 (application.yml) mathpix: app-id: kejkk3lk123k32lk32 app-key: dsjk3j2hj312h4jjr9t748393@erii32o4u898 ✔️ 소스코드 (Service.java) import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class PdfTranslationService { private final String appId; private final String appKey; public PdfTranslationService( @Value("${mathpix...
· Spring
💋 인트로 안녕하세요. 우아한테크코스 5기 깃짱이라고 합니다. 이번 포스팅에서는, 예외 발생 시 트랜잭션은 commit될까, rollback될지에 대해 알아보도록 하겠습니다. 💋 트랜잭션과 관련된 로그를 볼 수 있도록 설정 별다른 설정이 없는 경우에, 아래와 같은 로그가 찍힙니다. 2023-11-06 23:48:04.980 INFO 10902 --- [Test worker] s.springtx.exception.RollbackTest: Starting RollbackTest using Java 17.0.7 on starlight.local with PID 10902 (started by gitchan in /Users/gitchan/Projects/gitchan-study/spring-db-2/sprin..
· Spring
💋 문제 상황 아래와 같이 서비스 객체가 있다. external() 메서드는 트랜잭셔널 어노테이션이 적용되어 있지 않고, internal() 메서드는 트랜잭셔널 어노테이션이 적용되어 있다. @Slf4j @Service static class CallService { public void external() { log.info("call external"); printInfo(); internal(); } @Transactional public void internal() { log.info("call internal"); printInfo(); } private void printInfo() { final boolean txActive = TransactionSynchronizationManager.is..
· Spring/JPA
프로젝트를 진행하던 도중, 우리 팀은 모든 데이터를 soft delete하기로 했다. 먼저 Soft Delete, Hard Delete의 차이점부터 간단히 짚고 넘어가보자! 💋 Soft Delete VS Hard Delete ✔ Soft Delete 논리적 삭제 데이터를 실제로 삭제하지 않고, 삭제 플래그를 설정하여 삭제된 것으로 표시하는 방법 데이터는 시스템에서 더 이상 사용되지 않지만, 필요한 경우 되돌릴 수 있다. 공간 절약과 데이터 관리의 편의성을 위해 유용하지만, 복구가 불가능하므로 신중하게 사용해야 한다. 데이터 보존을 위해 유용하며, 실수로 삭제된 데이터를 복구할 수 있는 장점이 있다. 삭제된 데이터를 유지하려면 추가적인 저장 공간이 필요하고, 데이터베이스 쿼리에 삭제 여부를 고려해야 할 수..
· Spring/JPA
💋 프록시의 등장 배경 아래와 같이 생긴 엔티티가 있다고 생각해보자. (자세히 다 읽을 필요는 없음) @Getter @NoArgsConstructor(access = PROTECTED) @Entity public class Coupon extends BaseDate { @Id @GeneratedValue(strategy = IDENTITY) private Long id; private LocalDate expiredDate; @Enumerated(EnumType.STRING) private CouponStatus status = CouponStatus.ACCUMULATING; private Boolean deleted = Boolean.FALSE; @ManyToOne(fetch = LAZY) @JoinC..
· Spring
💋 JDBC JDBC(Java Database Connectivity) JDBC는 데이터베이스에 접근하는 기능의 표준화로 개발자들이 데이터베이스를 종류별로 공부해야 하고, 데이터베이스 종류에 따라서 비즈니스 코드를 수정해야 하는 문제를 해결했다. 크게 기능을 구분하면, 데이터베이스에 커넥션 연결하기, SQL 매핑하기, 결과 응답 처리하기 세 가지로 나눌 수 있다. JDBC를 직접 사용해본 사람이라면 각 기능을 아래와 같이 연결해서 생각하면 편할 것 같다. 데이터베이스에 커넥션 연결: DriverManager.getConnection() SQL Mapping하기: PreparedStatement.setString(1, "아아악") 결과 응답 처리하기: ResultSet.next(), ResultSet.ge..
· Spring
💋 빈 스코프란? 빈 스코프는 빈이 존재할 수 있는 범위를 뜻한다. 스프링에서 기본으로 제공하는 빈은 싱글톤 빈이다! 싱글톤 빈은 스프링 컨테이너 생성 시에 생성되고, 애플리케이션 종료(스프링 컨테이너 종료)까지 스프링 컨테이너를 통해 관리된다. 별도의 설정을 통해서, 빈이 존재하는 범위를 변경할 수 있다. 💋 빈 스코프의 종류 스프링에서 제공하는 빈 스코프 종류는 아래와 같다. 1. 싱글톤 스코프 기본 스코프 스프링 컨테이너 생성 시 함께 생성되고, 애플리케이션 종료까지 유지되는 가장 넓은 범위의 스코프 가장 일반적으로 사용 (거의 대부분의 경우에 사용한다고 보면 된다!) 2. 프로토타입 스코프 빈의 생성과 의존관계 주입까지만 하고, 더는 스프링 컨테이너를 통해 관리하지 않는 경우에 프로토타입 스코프를..
· Spring
💋 빈 생명주기 콜백 스프링에서 빈을 최초에 생성하는 작업을 크게 본다면 '생성'이라고 할 수 있겠지만, 상세히 구분한다면 생성과 초기화 작업으로 나눌 수 있다. 생성자를 통해서 내부 값들을 설정하는 가벼운 작업의 경우에 생성자에서 처리하는 것이 좋겠지만, 초기화 작업이 무거워지는 경우도 존재한다. 예를 들면.. 데이터베이스 커넥션 풀 관련해서 애플리케이션 시작 시점에 모든 연결을 하고, 종료 시점에 모든 연결을 종료하는 작업이 있다. 이런 무거운 작업의 경우에는 객체 생성과 초기화에 대한 부분을 완전히 분리하는 것이 좋을 때도 있다. 객체의 초기화와 종료를 위한 별도의 작업이 필요한 경우에 콜백 메서드를 사용할 수 있다. 스프링은 의존 관계 주입이 완료되면, 초기화 콜백 메서드를 통해서 초기화 작업을 ..
깃짱
'Spring' 카테고리의 글 목록